// 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  S100C8_nt  {
  int s100c8f0[2];
  void  mf100c8(); // _ZN9S100C8_nt7mf100c8Ev
};
//SIG(-1 S100C8_nt) C1{ m Fi[2]}


void  S100C8_nt ::mf100c8(){}

//skip512 S100C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C7_nt  {
  int s100c7f0;
  __tsi64 s100c7f1;
  void *s100c7f2[4];
  int s100c7f3[2];
  void *s100c7f4;
  ::S100C8_nt s100c7f5;
  void *s100c7f6[2];
  virtual  ~S100C7_nt(); // _ZN9S100C7_ntD1Ev
  virtual void  v5(); // _ZN9S100C7_nt2v5Ev
  virtual void  v6(); // _ZN9S100C7_nt2v6Ev
  virtual void  v7(); // _ZN9S100C7_nt2v7Ev
  virtual void  v8(); // _ZN9S100C7_nt2v8Ev
  virtual void  v9(); // _ZN9S100C7_nt2v9Ev
  virtual void  v10(); // _ZN9S100C7_nt3v10Ev
  virtual void  v11(); // _ZN9S100C7_nt3v11Ev
  virtual void  v12(); // _ZN9S100C7_nt3v12Ev
  virtual void  v13(); // _ZN9S100C7_nt3v13Ev
  virtual void  v14(); // _ZN9S100C7_nt3v14Ev
  virtual void  v15(); // _ZN9S100C7_nt3v15Ev
  virtual void  v16(); // _ZN9S100C7_nt3v16Ev
  virtual void  v17(); // _ZN9S100C7_nt3v17Ev
  virtual void  v18(); // _ZN9S100C7_nt3v18Ev
  virtual void  v19(); // _ZN9S100C7_nt3v19Ev
  virtual void  v20(); // _ZN9S100C7_nt3v20Ev
  virtual void  v21(); // _ZN9S100C7_nt3v21Ev
  virtual void  v22(); // _ZN9S100C7_nt3v22Ev
  virtual void  v23(); // _ZN9S100C7_nt3v23Ev
  virtual void  v24(); // _ZN9S100C7_nt3v24Ev
  virtual void  v25(); // _ZN9S100C7_nt3v25Ev
  virtual void  v26(); // _ZN9S100C7_nt3v26Ev
  virtual void  v27(); // _ZN9S100C7_nt3v27Ev
  virtual void  v28(); // _ZN9S100C7_nt3v28Ev
  virtual void  v29(); // _ZN9S100C7_nt3v29Ev
  virtual void  v30(); // _ZN9S100C7_nt3v30Ev
  virtual void  v31(); // _ZN9S100C7_nt3v31Ev
  virtual void  v32(); // _ZN9S100C7_nt3v32Ev
  virtual void  v33(); // _ZN9S100C7_nt3v33Ev
  virtual void  v34(); // _ZN9S100C7_nt3v34Ev
  virtual void  v35(); // _ZN9S100C7_nt3v35Ev
  virtual void  v36(); // _ZN9S100C7_nt3v36Ev
  virtual void  v37(); // _ZN9S100C7_nt3v37Ev
  virtual void  v38(); // _ZN9S100C7_nt3v38Ev
  virtual void  v39(); // _ZN9S100C7_nt3v39Ev
  virtual void  v40(); // _ZN9S100C7_nt3v40Ev
  virtual void  v41(); // _ZN9S100C7_nt3v41Ev
  virtual void  v42(); // _ZN9S100C7_nt3v42Ev
  virtual void  v43(); // _ZN9S100C7_nt3v43Ev
  virtual void  v44(); // _ZN9S100C7_nt3v44Ev
  virtual void  v45(); // _ZN9S100C7_nt3v45Ev
  virtual void  v46(); // _ZN9S100C7_nt3v46Ev
  virtual void  v47(); // _ZN9S100C7_nt3v47Ev
  virtual void  v48(); // _ZN9S100C7_nt3v48Ev
  virtual void  v49(); // _ZN9S100C7_nt3v49Ev
  virtual void  v50(); // _ZN9S100C7_nt3v50Ev
  virtual void  v51(); // _ZN9S100C7_nt3v51Ev
  virtual void  v52(); // _ZN9S100C7_nt3v52Ev
  virtual void  v53(); // _ZN9S100C7_nt3v53Ev
  virtual void  v54(); // _ZN9S100C7_nt3v54Ev
  virtual void  v55(); // _ZN9S100C7_nt3v55Ev
  virtual void  v56(); // _ZN9S100C7_nt3v56Ev
  virtual void  v57(); // _ZN9S100C7_nt3v57Ev
  virtual void  v58(); // _ZN9S100C7_nt3v58Ev
  virtual void  v59(); // _ZN9S100C7_nt3v59Ev
  virtual void  v60(); // _ZN9S100C7_nt3v60Ev
  virtual void  v61(); // _ZN9S100C7_nt3v61Ev
  virtual void  v62(); // _ZN9S100C7_nt3v62Ev
  virtual void  v63(); // _ZN9S100C7_nt3v63Ev
  virtual void  v64(); // _ZN9S100C7_nt3v64Ev
  virtual void  v65(); // _ZN9S100C7_nt3v65Ev
  virtual void  v66(); // _ZN9S100C7_nt3v66Ev
  virtual void  v67(); // _ZN9S100C7_nt3v67Ev
  virtual void  v68(); // _ZN9S100C7_nt3v68Ev
  S100C7_nt(); // tgen
};
//SIG(-1 S100C7_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]}


 S100C7_nt ::~S100C7_nt(){ note_dtor("S100C7_nt", this);}
void  S100C7_nt ::v5(){vfunc_called(this, "_ZN9S100C7_nt2v5Ev");}
void  S100C7_nt ::v6(){vfunc_called(this, "_ZN9S100C7_nt2v6Ev");}
void  S100C7_nt ::v7(){vfunc_called(this, "_ZN9S100C7_nt2v7Ev");}
void  S100C7_nt ::v8(){vfunc_called(this, "_ZN9S100C7_nt2v8Ev");}
void  S100C7_nt ::v9(){vfunc_called(this, "_ZN9S100C7_nt2v9Ev");}
void  S100C7_nt ::v10(){vfunc_called(this, "_ZN9S100C7_nt3v10Ev");}
void  S100C7_nt ::v11(){vfunc_called(this, "_ZN9S100C7_nt3v11Ev");}
void  S100C7_nt ::v12(){vfunc_called(this, "_ZN9S100C7_nt3v12Ev");}
void  S100C7_nt ::v13(){vfunc_called(this, "_ZN9S100C7_nt3v13Ev");}
void  S100C7_nt ::v14(){vfunc_called(this, "_ZN9S100C7_nt3v14Ev");}
void  S100C7_nt ::v15(){vfunc_called(this, "_ZN9S100C7_nt3v15Ev");}
void  S100C7_nt ::v16(){vfunc_called(this, "_ZN9S100C7_nt3v16Ev");}
void  S100C7_nt ::v17(){vfunc_called(this, "_ZN9S100C7_nt3v17Ev");}
void  S100C7_nt ::v18(){vfunc_called(this, "_ZN9S100C7_nt3v18Ev");}
void  S100C7_nt ::v19(){vfunc_called(this, "_ZN9S100C7_nt3v19Ev");}
void  S100C7_nt ::v20(){vfunc_called(this, "_ZN9S100C7_nt3v20Ev");}
void  S100C7_nt ::v21(){vfunc_called(this, "_ZN9S100C7_nt3v21Ev");}
void  S100C7_nt ::v22(){vfunc_called(this, "_ZN9S100C7_nt3v22Ev");}
void  S100C7_nt ::v23(){vfunc_called(this, "_ZN9S100C7_nt3v23Ev");}
void  S100C7_nt ::v24(){vfunc_called(this, "_ZN9S100C7_nt3v24Ev");}
void  S100C7_nt ::v25(){vfunc_called(this, "_ZN9S100C7_nt3v25Ev");}
void  S100C7_nt ::v26(){vfunc_called(this, "_ZN9S100C7_nt3v26Ev");}
void  S100C7_nt ::v27(){vfunc_called(this, "_ZN9S100C7_nt3v27Ev");}
void  S100C7_nt ::v28(){vfunc_called(this, "_ZN9S100C7_nt3v28Ev");}
void  S100C7_nt ::v29(){vfunc_called(this, "_ZN9S100C7_nt3v29Ev");}
void  S100C7_nt ::v30(){vfunc_called(this, "_ZN9S100C7_nt3v30Ev");}
void  S100C7_nt ::v31(){vfunc_called(this, "_ZN9S100C7_nt3v31Ev");}
void  S100C7_nt ::v32(){vfunc_called(this, "_ZN9S100C7_nt3v32Ev");}
void  S100C7_nt ::v33(){vfunc_called(this, "_ZN9S100C7_nt3v33Ev");}
void  S100C7_nt ::v34(){vfunc_called(this, "_ZN9S100C7_nt3v34Ev");}
void  S100C7_nt ::v35(){vfunc_called(this, "_ZN9S100C7_nt3v35Ev");}
void  S100C7_nt ::v36(){vfunc_called(this, "_ZN9S100C7_nt3v36Ev");}
void  S100C7_nt ::v37(){vfunc_called(this, "_ZN9S100C7_nt3v37Ev");}
void  S100C7_nt ::v38(){vfunc_called(this, "_ZN9S100C7_nt3v38Ev");}
void  S100C7_nt ::v39(){vfunc_called(this, "_ZN9S100C7_nt3v39Ev");}
void  S100C7_nt ::v40(){vfunc_called(this, "_ZN9S100C7_nt3v40Ev");}
void  S100C7_nt ::v41(){vfunc_called(this, "_ZN9S100C7_nt3v41Ev");}
void  S100C7_nt ::v42(){vfunc_called(this, "_ZN9S100C7_nt3v42Ev");}
void  S100C7_nt ::v43(){vfunc_called(this, "_ZN9S100C7_nt3v43Ev");}
void  S100C7_nt ::v44(){vfunc_called(this, "_ZN9S100C7_nt3v44Ev");}
void  S100C7_nt ::v45(){vfunc_called(this, "_ZN9S100C7_nt3v45Ev");}
void  S100C7_nt ::v46(){vfunc_called(this, "_ZN9S100C7_nt3v46Ev");}
void  S100C7_nt ::v47(){vfunc_called(this, "_ZN9S100C7_nt3v47Ev");}
void  S100C7_nt ::v48(){vfunc_called(this, "_ZN9S100C7_nt3v48Ev");}
void  S100C7_nt ::v49(){vfunc_called(this, "_ZN9S100C7_nt3v49Ev");}
void  S100C7_nt ::v50(){vfunc_called(this, "_ZN9S100C7_nt3v50Ev");}
void  S100C7_nt ::v51(){vfunc_called(this, "_ZN9S100C7_nt3v51Ev");}
void  S100C7_nt ::v52(){vfunc_called(this, "_ZN9S100C7_nt3v52Ev");}
void  S100C7_nt ::v53(){vfunc_called(this, "_ZN9S100C7_nt3v53Ev");}
void  S100C7_nt ::v54(){vfunc_called(this, "_ZN9S100C7_nt3v54Ev");}
void  S100C7_nt ::v55(){vfunc_called(this, "_ZN9S100C7_nt3v55Ev");}
void  S100C7_nt ::v56(){vfunc_called(this, "_ZN9S100C7_nt3v56Ev");}
void  S100C7_nt ::v57(){vfunc_called(this, "_ZN9S100C7_nt3v57Ev");}
void  S100C7_nt ::v58(){vfunc_called(this, "_ZN9S100C7_nt3v58Ev");}
void  S100C7_nt ::v59(){vfunc_called(this, "_ZN9S100C7_nt3v59Ev");}
void  S100C7_nt ::v60(){vfunc_called(this, "_ZN9S100C7_nt3v60Ev");}
void  S100C7_nt ::v61(){vfunc_called(this, "_ZN9S100C7_nt3v61Ev");}
void  S100C7_nt ::v62(){vfunc_called(this, "_ZN9S100C7_nt3v62Ev");}
void  S100C7_nt ::v63(){vfunc_called(this, "_ZN9S100C7_nt3v63Ev");}
void  S100C7_nt ::v64(){vfunc_called(this, "_ZN9S100C7_nt3v64Ev");}
void  S100C7_nt ::v65(){vfunc_called(this, "_ZN9S100C7_nt3v65Ev");}
void  S100C7_nt ::v66(){vfunc_called(this, "_ZN9S100C7_nt3v66Ev");}
void  S100C7_nt ::v67(){vfunc_called(this, "_ZN9S100C7_nt3v67Ev");}
void  S100C7_nt ::v68(){vfunc_called(this, "_ZN9S100C7_nt3v68Ev");}
S100C7_nt ::S100C7_nt(){ note_ctor("S100C7_nt", this);} // tgen

//skip512 S100C7_nt

#else // __cplusplus

extern void _ZN9S100C7_ntC1Ev();
extern void _ZN9S100C7_ntD1Ev();
Name_Map name_map_S100C7_nt[] = {
  NSPAIR(_ZN9S100C7_ntC1Ev),
  NSPAIR(_ZN9S100C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S100C7_nt[];
extern void _ZN9S100C7_ntD1Ev();
extern void _ZN9S100C7_ntD0Ev();
extern void _ZN9S100C7_nt2v5Ev();
extern void _ZN9S100C7_nt2v6Ev();
extern void _ZN9S100C7_nt2v7Ev();
extern void _ZN9S100C7_nt2v8Ev();
extern void _ZN9S100C7_nt2v9Ev();
extern void _ZN9S100C7_nt3v10Ev();
extern void _ZN9S100C7_nt3v11Ev();
extern void _ZN9S100C7_nt3v12Ev();
extern void _ZN9S100C7_nt3v13Ev();
extern void _ZN9S100C7_nt3v14Ev();
extern void _ZN9S100C7_nt3v15Ev();
extern void _ZN9S100C7_nt3v16Ev();
extern void _ZN9S100C7_nt3v17Ev();
extern void _ZN9S100C7_nt3v18Ev();
extern void _ZN9S100C7_nt3v19Ev();
extern void _ZN9S100C7_nt3v20Ev();
extern void _ZN9S100C7_nt3v21Ev();
extern void _ZN9S100C7_nt3v22Ev();
extern void _ZN9S100C7_nt3v23Ev();
extern void _ZN9S100C7_nt3v24Ev();
extern void _ZN9S100C7_nt3v25Ev();
extern void _ZN9S100C7_nt3v26Ev();
extern void _ZN9S100C7_nt3v27Ev();
extern void _ZN9S100C7_nt3v28Ev();
extern void _ZN9S100C7_nt3v29Ev();
extern void _ZN9S100C7_nt3v30Ev();
extern void _ZN9S100C7_nt3v31Ev();
extern void _ZN9S100C7_nt3v32Ev();
extern void _ZN9S100C7_nt3v33Ev();
extern void _ZN9S100C7_nt3v34Ev();
extern void _ZN9S100C7_nt3v35Ev();
extern void _ZN9S100C7_nt3v36Ev();
extern void _ZN9S100C7_nt3v37Ev();
extern void _ZN9S100C7_nt3v38Ev();
extern void _ZN9S100C7_nt3v39Ev();
extern void _ZN9S100C7_nt3v40Ev();
extern void _ZN9S100C7_nt3v41Ev();
extern void _ZN9S100C7_nt3v42Ev();
extern void _ZN9S100C7_nt3v43Ev();
extern void _ZN9S100C7_nt3v44Ev();
extern void _ZN9S100C7_nt3v45Ev();
extern void _ZN9S100C7_nt3v46Ev();
extern void _ZN9S100C7_nt3v47Ev();
extern void _ZN9S100C7_nt3v48Ev();
extern void _ZN9S100C7_nt3v49Ev();
extern void _ZN9S100C7_nt3v50Ev();
extern void _ZN9S100C7_nt3v51Ev();
extern void _ZN9S100C7_nt3v52Ev();
extern void _ZN9S100C7_nt3v53Ev();
extern void _ZN9S100C7_nt3v54Ev();
extern void _ZN9S100C7_nt3v55Ev();
extern void _ZN9S100C7_nt3v56Ev();
extern void _ZN9S100C7_nt3v57Ev();
extern void _ZN9S100C7_nt3v58Ev();
extern void _ZN9S100C7_nt3v59Ev();
extern void _ZN9S100C7_nt3v60Ev();
extern void _ZN9S100C7_nt3v61Ev();
extern void _ZN9S100C7_nt3v62Ev();
extern void _ZN9S100C7_nt3v63Ev();
extern void _ZN9S100C7_nt3v64Ev();
extern void _ZN9S100C7_nt3v65Ev();
extern void _ZN9S100C7_nt3v66Ev();
extern void _ZN9S100C7_nt3v67Ev();
extern void _ZN9S100C7_nt3v68Ev();
static  VTBL_ENTRY vtc_S100C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S100C7_nt[0]),
  (VTBL_ENTRY)&_ZN9S100C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S100C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v68Ev,
};
extern VTBL_ENTRY _ZTI9S100C7_nt[];
VTBL_ENTRY *P__ZTI9S100C7_nt = _ZTI9S100C7_nt; 
extern  VTBL_ENTRY _ZTV9S100C7_nt[];
Class_Descriptor cd_S100C7_nt = {  "S100C7_nt", // class name
  0,0,//no base classes
  &(vtc_S100C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S100C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S100C7_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  S100C6_nt  : S100C7_nt {
  virtual  ~S100C6_nt(); // _ZN9S100C6_ntD1Ev
  virtual void  v69(); // _ZN9S100C6_nt3v69Ev
  virtual void  v70(); // _ZN9S100C6_nt3v70Ev
  S100C6_nt(); // tgen
};
//SIG(-1 S100C6_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}


 S100C6_nt ::~S100C6_nt(){ note_dtor("S100C6_nt", this);}
void  S100C6_nt ::v69(){vfunc_called(this, "_ZN9S100C6_nt3v69Ev");}
void  S100C6_nt ::v70(){vfunc_called(this, "_ZN9S100C6_nt3v70Ev");}
S100C6_nt ::S100C6_nt(){ note_ctor("S100C6_nt", this);} // tgen

//skip512 S100C6_nt

#else // __cplusplus

extern void _ZN9S100C6_ntC1Ev();
extern void _ZN9S100C6_ntD1Ev();
Name_Map name_map_S100C6_nt[] = {
  NSPAIR(_ZN9S100C6_ntC1Ev),
  NSPAIR(_ZN9S100C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S100C7_nt;
extern VTBL_ENTRY _ZTI9S100C7_nt[];
extern  VTBL_ENTRY _ZTV9S100C7_nt[];
static Base_Class bases_S100C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S100C6_nt[];
extern void _ZN9S100C6_ntD1Ev();
extern void _ZN9S100C6_ntD0Ev();
extern void _ZN9S100C7_nt2v5Ev();
extern void _ZN9S100C7_nt2v6Ev();
extern void _ZN9S100C7_nt2v7Ev();
extern void _ZN9S100C7_nt2v8Ev();
extern void _ZN9S100C7_nt2v9Ev();
extern void _ZN9S100C7_nt3v10Ev();
extern void _ZN9S100C7_nt3v11Ev();
extern void _ZN9S100C7_nt3v12Ev();
extern void _ZN9S100C7_nt3v13Ev();
extern void _ZN9S100C7_nt3v14Ev();
extern void _ZN9S100C7_nt3v15Ev();
extern void _ZN9S100C7_nt3v16Ev();
extern void _ZN9S100C7_nt3v17Ev();
extern void _ZN9S100C7_nt3v18Ev();
extern void _ZN9S100C7_nt3v19Ev();
extern void _ZN9S100C7_nt3v20Ev();
extern void _ZN9S100C7_nt3v21Ev();
extern void _ZN9S100C7_nt3v22Ev();
extern void _ZN9S100C7_nt3v23Ev();
extern void _ZN9S100C7_nt3v24Ev();
extern void _ZN9S100C7_nt3v25Ev();
extern void _ZN9S100C7_nt3v26Ev();
extern void _ZN9S100C7_nt3v27Ev();
extern void _ZN9S100C7_nt3v28Ev();
extern void _ZN9S100C7_nt3v29Ev();
extern void _ZN9S100C7_nt3v30Ev();
extern void _ZN9S100C7_nt3v31Ev();
extern void _ZN9S100C7_nt3v32Ev();
extern void _ZN9S100C7_nt3v33Ev();
extern void _ZN9S100C7_nt3v34Ev();
extern void _ZN9S100C7_nt3v35Ev();
extern void _ZN9S100C7_nt3v36Ev();
extern void _ZN9S100C7_nt3v37Ev();
extern void _ZN9S100C7_nt3v38Ev();
extern void _ZN9S100C7_nt3v39Ev();
extern void _ZN9S100C7_nt3v40Ev();
extern void _ZN9S100C7_nt3v41Ev();
extern void _ZN9S100C7_nt3v42Ev();
extern void _ZN9S100C7_nt3v43Ev();
extern void _ZN9S100C7_nt3v44Ev();
extern void _ZN9S100C7_nt3v45Ev();
extern void _ZN9S100C7_nt3v46Ev();
extern void _ZN9S100C7_nt3v47Ev();
extern void _ZN9S100C7_nt3v48Ev();
extern void _ZN9S100C7_nt3v49Ev();
extern void _ZN9S100C7_nt3v50Ev();
extern void _ZN9S100C7_nt3v51Ev();
extern void _ZN9S100C7_nt3v52Ev();
extern void _ZN9S100C7_nt3v53Ev();
extern void _ZN9S100C7_nt3v54Ev();
extern void _ZN9S100C7_nt3v55Ev();
extern void _ZN9S100C7_nt3v56Ev();
extern void _ZN9S100C7_nt3v57Ev();
extern void _ZN9S100C7_nt3v58Ev();
extern void _ZN9S100C7_nt3v59Ev();
extern void _ZN9S100C7_nt3v60Ev();
extern void _ZN9S100C7_nt3v61Ev();
extern void _ZN9S100C7_nt3v62Ev();
extern void _ZN9S100C7_nt3v63Ev();
extern void _ZN9S100C7_nt3v64Ev();
extern void _ZN9S100C7_nt3v65Ev();
extern void _ZN9S100C7_nt3v66Ev();
extern void _ZN9S100C7_nt3v67Ev();
extern void _ZN9S100C7_nt3v68Ev();
extern void _ZN9S100C6_nt3v69Ev();
extern void _ZN9S100C6_nt3v70Ev();
static  VTBL_ENTRY vtc_S100C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S100C6_nt[0]),
  (VTBL_ENTRY)&_ZN9S100C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S100C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v70Ev,
};
extern VTBL_ENTRY _ZTI9S100C6_nt[];
VTBL_ENTRY *P__ZTI9S100C6_nt = _ZTI9S100C6_nt; 
extern  VTBL_ENTRY _ZTV9S100C6_nt[];
Class_Descriptor cd_S100C6_nt = {  "S100C6_nt", // class name
  bases_S100C6_nt, 1,
  &(vtc_S100C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S100C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S100C6_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  S100C9_nt  {
  int s100c9f0[4];
  char s100c9f1[9];
  void  mf100c9(); // _ZN9S100C9_nt7mf100c9Ev
};
//SIG(-1 S100C9_nt) C1{ m Fi[4] Fc[9]}


void  S100C9_nt ::mf100c9(){}

//skip512 S100C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C12_nt  {
  void *s100c12f0;
  int s100c12f1[2];
  void  mf100c12(); // _ZN10S100C12_nt8mf100c12Ev
};
//SIG(-1 S100C12_nt) C1{ m Fp Fi[2]}


void  S100C12_nt ::mf100c12(){}

//skip512 S100C12_nt

#else // __cplusplus

Class_Descriptor cd_S100C12_nt = {  "S100C12_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  S100C11_nt  : S100C12_nt {
};
//SIG(-1 S100C11_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S100C11_nt

#else // __cplusplus

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



//skip512 S100C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S100C12_nt;
extern Class_Descriptor cd_S100C11_nt;
static Base_Class bases_S100C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S100C16  : S100C12_nt {
};
//SIG(-1 S100C16) C1{ BC2{ m Fp Fi[2]}}



static void Test_S100C16()
{
  extern Class_Descriptor cd_S100C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C16, buf);
    S100C16 &lv = *(new (buf) S100C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C16)");
    check_base_class_offset(lv, (S100C12_nt*), 0, "S100C16");
    test_class_info(&lv, &cd_S100C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C16(Test_S100C16, "S100C16", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S100C15()
{
  extern Class_Descriptor cd_S100C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C15, buf);
    S100C15 &lv = *(new (buf) S100C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C15)");
    check_base_class_offset(lv, (S100C12_nt*)(S100C16*), 0, "S100C15");
    check_base_class_offset(lv, (S100C16*), 0, "S100C15");
    test_class_info(&lv, &cd_S100C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C15(Test_S100C15, "S100C15", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S100C12_nt;
extern Class_Descriptor cd_S100C16;
static Base_Class bases_S100C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S100C15 = {  "S100C15", // class name
  bases_S100C15, 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  S100C20  : S100C12_nt {
};
//SIG(-1 S100C20) C1{ BC2{ m Fp Fi[2]}}



static void Test_S100C20()
{
  extern Class_Descriptor cd_S100C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C20, buf);
    S100C20 &lv = *(new (buf) S100C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C20)");
    check_base_class_offset(lv, (S100C12_nt*), 0, "S100C20");
    test_class_info(&lv, &cd_S100C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C20(Test_S100C20, "S100C20", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S100C19()
{
  extern Class_Descriptor cd_S100C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C19, buf);
    S100C19 &lv = *(new (buf) S100C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C19)");
    check_base_class_offset(lv, (S100C12_nt*)(S100C20*), 0, "S100C19");
    check_base_class_offset(lv, (S100C20*), 0, "S100C19");
    test_class_info(&lv, &cd_S100C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C19(Test_S100C19, "S100C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S100C12_nt;
extern Class_Descriptor cd_S100C20;
static Base_Class bases_S100C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S100C19 = {  "S100C19", // class name
  bases_S100C19, 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  S100C21_nt  {
  void *s100c21f0;
  ::S100C8_nt s100c21f1;
  void  mf100c21(); // _ZN10S100C21_nt8mf100c21Ev
};
//SIG(-1 S100C21_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S100C21_nt ::mf100c21(){}

//skip512 S100C21_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C5_nt  : S100C6_nt {
  ::S100C9_nt s100c5f0;
  int s100c5f1;
  unsigned int s100c5f2:1;
  unsigned int s100c5f3:1;
  unsigned int s100c5f4:1;
  unsigned int s100c5f5:1;
  ::S100C10_nt s100c5f6;
  ::S100C10_nt s100c5f7;
  void *s100c5f8;
  ::S100C15 s100c5f9;
  ::S100C15 s100c5f10;
  ::S100C15 s100c5f11;
  ::S100C19 s100c5f12;
  char s100c5f13;
  int s100c5f14;
  void *s100c5f15;
  ::S100C8_nt s100c5f16;
  ::S100C8_nt s100c5f17;
  ::S100C8_nt s100c5f18;
  ::S100C8_nt s100c5f19;
  ::S100C8_nt s100c5f20;
  ::S100C8_nt s100c5f21;
  ::S100C21_nt s100c5f22;
  ::S100C21_nt s100c5f23;
  ::S100C21_nt s100c5f24;
  ::S100C21_nt s100c5f25;
  ::S100C21_nt s100c5f26;
  ::S100C21_nt s100c5f27;
  ::S100C21_nt s100c5f28;
  ::S100C21_nt s100c5f29;
  ::S100C21_nt s100c5f30;
  ::S100C21_nt s100c5f31;
  virtual  ~S100C5_nt(); // _ZN9S100C5_ntD1Ev
  virtual void  v71(); // _ZN9S100C5_nt3v71Ev
  virtual void  v72(); // _ZN9S100C5_nt3v72Ev
  virtual void  v73(); // _ZN9S100C5_nt3v73Ev
  virtual void  v74(); // _ZN9S100C5_nt3v74Ev
  virtual void  v75(); // _ZN9S100C5_nt3v75Ev
  virtual void  v76(); // _ZN9S100C5_nt3v76Ev
  virtual void  v77(); // _ZN9S100C5_nt3v77Ev
  virtual void  v78(); // _ZN9S100C5_nt3v78Ev
  virtual void  v79(); // _ZN9S100C5_nt3v79Ev
  virtual void  v80(); // _ZN9S100C5_nt3v80Ev
  virtual void  v81(); // _ZN9S100C5_nt3v81Ev
  virtual void  v82(); // _ZN9S100C5_nt3v82Ev
  virtual void  v83(); // _ZN9S100C5_nt3v83Ev
  virtual void  v84(); // _ZN9S100C5_nt3v84Ev
  virtual void  v85(); // _ZN9S100C5_nt3v85Ev
  virtual void  v86(); // _ZN9S100C5_nt3v86Ev
  virtual void  v87(); // _ZN9S100C5_nt3v87Ev
  virtual void  v88(); // _ZN9S100C5_nt3v88Ev
  virtual void  v89(); // _ZN9S100C5_nt3v89Ev
  virtual void  v90(); // _ZN9S100C5_nt3v90Ev
  virtual void  v91(); // _ZN9S100C5_nt3v91Ev
  virtual void  v92(); // _ZN9S100C5_nt3v92Ev
  virtual void  v93(); // _ZN9S100C5_nt3v93Ev
  virtual void  v94(); // _ZN9S100C5_nt3v94Ev
  virtual void  v95(); // _ZN9S100C5_nt3v95Ev
  virtual void  v96(); // _ZN9S100C5_nt3v96Ev
  virtual void  v97(); // _ZN9S100C5_nt3v97Ev
  virtual void  v98(); // _ZN9S100C5_nt3v98Ev
  virtual void  v99(); // _ZN9S100C5_nt3v99Ev
  virtual void  v100(); // _ZN9S100C5_nt4v100Ev
  virtual void  v101(); // _ZN9S100C5_nt4v101Ev
  virtual void  v102(); // _ZN9S100C5_nt4v102Ev
  virtual void  v103(); // _ZN9S100C5_nt4v103Ev
  virtual void  v104(); // _ZN9S100C5_nt4v104Ev
  virtual void  v105(); // _ZN9S100C5_nt4v105Ev
  virtual void  v106(); // _ZN9S100C5_nt4v106Ev
  virtual void  v107(); // _ZN9S100C5_nt4v107Ev
  virtual void  v108(); // _ZN9S100C5_nt4v108Ev
  virtual void  v109(); // _ZN9S100C5_nt4v109Ev
  virtual void  v110(); // _ZN9S100C5_nt4v110Ev
  virtual void  v111(); // _ZN9S100C5_nt4v111Ev
  virtual void  v112(); // _ZN9S100C5_nt4v112Ev
  virtual void  v113(); // _ZN9S100C5_nt4v113Ev
  virtual void  v114(); // _ZN9S100C5_nt4v114Ev
  virtual void  v115(); // _ZN9S100C5_nt4v115Ev
  virtual void  v116(); // _ZN9S100C5_nt4v116Ev
  virtual void  v117(); // _ZN9S100C5_nt4v117Ev
  virtual void  v118(); // _ZN9S100C5_nt4v118Ev
  virtual void  v119(); // _ZN9S100C5_nt4v119Ev
  virtual void  v120(); // _ZN9S100C5_nt4v120Ev
  virtual void  v121(); // _ZN9S100C5_nt4v121Ev
  virtual void  v122(); // _ZN9S100C5_nt4v122Ev
  virtual void  v123(); // _ZN9S100C5_nt4v123Ev
  virtual void  v124(); // _ZN9S100C5_nt4v124Ev
  virtual void  v125(); // _ZN9S100C5_nt4v125Ev
  virtual void  v126(); // _ZN9S100C5_nt4v126Ev
  virtual void  v127(); // _ZN9S100C5_nt4v127Ev
  virtual void  v128(); // _ZN9S100C5_nt4v128Ev
  virtual void  v129(); // _ZN9S100C5_nt4v129Ev
  virtual void  v130(); // _ZN9S100C5_nt4v130Ev
  virtual void  v131(); // _ZN9S100C5_nt4v131Ev
  virtual void  v132(); // _ZN9S100C5_nt4v132Ev
  virtual void  v133(); // _ZN9S100C5_nt4v133Ev
  virtual void  v134(); // _ZN9S100C5_nt4v134Ev
  virtual void  v135(); // _ZN9S100C5_nt4v135Ev
  virtual void  v136(); // _ZN9S100C5_nt4v136Ev
  virtual void  v137(); // _ZN9S100C5_nt4v137Ev
  virtual void  v138(); // _ZN9S100C5_nt4v138Ev
  virtual void  v139(); // _ZN9S100C5_nt4v139Ev
  virtual void  v140(); // _ZN9S100C5_nt4v140Ev
  virtual void  v141(); // _ZN9S100C5_nt4v141Ev
  virtual void  v142(); // _ZN9S100C5_nt4v142Ev
  virtual void  v143(); // _ZN9S100C5_nt4v143Ev
  virtual void  v144(); // _ZN9S100C5_nt4v144Ev
  virtual void  v145(); // _ZN9S100C5_nt4v145Ev
  virtual void  v146(); // _ZN9S100C5_nt4v146Ev
  S100C5_nt(); // tgen
};
//SIG(-1 S100C5_nt) C1{ BC2{ BC3{ vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v141 v142} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 FC5{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 Fp FC9{ BC10{ BC8}} FC9 FC9 FC11{ BC12{ BC8}} Fc Fi Fp FC4 FC4 FC4 FC4 FC4 FC4 FC13{ m Fp FC4} FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13}


 S100C5_nt ::~S100C5_nt(){ note_dtor("S100C5_nt", this);}
void  S100C5_nt ::v71(){vfunc_called(this, "_ZN9S100C5_nt3v71Ev");}
void  S100C5_nt ::v72(){vfunc_called(this, "_ZN9S100C5_nt3v72Ev");}
void  S100C5_nt ::v73(){vfunc_called(this, "_ZN9S100C5_nt3v73Ev");}
void  S100C5_nt ::v74(){vfunc_called(this, "_ZN9S100C5_nt3v74Ev");}
void  S100C5_nt ::v75(){vfunc_called(this, "_ZN9S100C5_nt3v75Ev");}
void  S100C5_nt ::v76(){vfunc_called(this, "_ZN9S100C5_nt3v76Ev");}
void  S100C5_nt ::v77(){vfunc_called(this, "_ZN9S100C5_nt3v77Ev");}
void  S100C5_nt ::v78(){vfunc_called(this, "_ZN9S100C5_nt3v78Ev");}
void  S100C5_nt ::v79(){vfunc_called(this, "_ZN9S100C5_nt3v79Ev");}
void  S100C5_nt ::v80(){vfunc_called(this, "_ZN9S100C5_nt3v80Ev");}
void  S100C5_nt ::v81(){vfunc_called(this, "_ZN9S100C5_nt3v81Ev");}
void  S100C5_nt ::v82(){vfunc_called(this, "_ZN9S100C5_nt3v82Ev");}
void  S100C5_nt ::v83(){vfunc_called(this, "_ZN9S100C5_nt3v83Ev");}
void  S100C5_nt ::v84(){vfunc_called(this, "_ZN9S100C5_nt3v84Ev");}
void  S100C5_nt ::v85(){vfunc_called(this, "_ZN9S100C5_nt3v85Ev");}
void  S100C5_nt ::v86(){vfunc_called(this, "_ZN9S100C5_nt3v86Ev");}
void  S100C5_nt ::v87(){vfunc_called(this, "_ZN9S100C5_nt3v87Ev");}
void  S100C5_nt ::v88(){vfunc_called(this, "_ZN9S100C5_nt3v88Ev");}
void  S100C5_nt ::v89(){vfunc_called(this, "_ZN9S100C5_nt3v89Ev");}
void  S100C5_nt ::v90(){vfunc_called(this, "_ZN9S100C5_nt3v90Ev");}
void  S100C5_nt ::v91(){vfunc_called(this, "_ZN9S100C5_nt3v91Ev");}
void  S100C5_nt ::v92(){vfunc_called(this, "_ZN9S100C5_nt3v92Ev");}
void  S100C5_nt ::v93(){vfunc_called(this, "_ZN9S100C5_nt3v93Ev");}
void  S100C5_nt ::v94(){vfunc_called(this, "_ZN9S100C5_nt3v94Ev");}
void  S100C5_nt ::v95(){vfunc_called(this, "_ZN9S100C5_nt3v95Ev");}
void  S100C5_nt ::v96(){vfunc_called(this, "_ZN9S100C5_nt3v96Ev");}
void  S100C5_nt ::v97(){vfunc_called(this, "_ZN9S100C5_nt3v97Ev");}
void  S100C5_nt ::v98(){vfunc_called(this, "_ZN9S100C5_nt3v98Ev");}
void  S100C5_nt ::v99(){vfunc_called(this, "_ZN9S100C5_nt3v99Ev");}
void  S100C5_nt ::v100(){vfunc_called(this, "_ZN9S100C5_nt4v100Ev");}
void  S100C5_nt ::v101(){vfunc_called(this, "_ZN9S100C5_nt4v101Ev");}
void  S100C5_nt ::v102(){vfunc_called(this, "_ZN9S100C5_nt4v102Ev");}
void  S100C5_nt ::v103(){vfunc_called(this, "_ZN9S100C5_nt4v103Ev");}
void  S100C5_nt ::v104(){vfunc_called(this, "_ZN9S100C5_nt4v104Ev");}
void  S100C5_nt ::v105(){vfunc_called(this, "_ZN9S100C5_nt4v105Ev");}
void  S100C5_nt ::v106(){vfunc_called(this, "_ZN9S100C5_nt4v106Ev");}
void  S100C5_nt ::v107(){vfunc_called(this, "_ZN9S100C5_nt4v107Ev");}
void  S100C5_nt ::v108(){vfunc_called(this, "_ZN9S100C5_nt4v108Ev");}
void  S100C5_nt ::v109(){vfunc_called(this, "_ZN9S100C5_nt4v109Ev");}
void  S100C5_nt ::v110(){vfunc_called(this, "_ZN9S100C5_nt4v110Ev");}
void  S100C5_nt ::v111(){vfunc_called(this, "_ZN9S100C5_nt4v111Ev");}
void  S100C5_nt ::v112(){vfunc_called(this, "_ZN9S100C5_nt4v112Ev");}
void  S100C5_nt ::v113(){vfunc_called(this, "_ZN9S100C5_nt4v113Ev");}
void  S100C5_nt ::v114(){vfunc_called(this, "_ZN9S100C5_nt4v114Ev");}
void  S100C5_nt ::v115(){vfunc_called(this, "_ZN9S100C5_nt4v115Ev");}
void  S100C5_nt ::v116(){vfunc_called(this, "_ZN9S100C5_nt4v116Ev");}
void  S100C5_nt ::v117(){vfunc_called(this, "_ZN9S100C5_nt4v117Ev");}
void  S100C5_nt ::v118(){vfunc_called(this, "_ZN9S100C5_nt4v118Ev");}
void  S100C5_nt ::v119(){vfunc_called(this, "_ZN9S100C5_nt4v119Ev");}
void  S100C5_nt ::v120(){vfunc_called(this, "_ZN9S100C5_nt4v120Ev");}
void  S100C5_nt ::v121(){vfunc_called(this, "_ZN9S100C5_nt4v121Ev");}
void  S100C5_nt ::v122(){vfunc_called(this, "_ZN9S100C5_nt4v122Ev");}
void  S100C5_nt ::v123(){vfunc_called(this, "_ZN9S100C5_nt4v123Ev");}
void  S100C5_nt ::v124(){vfunc_called(this, "_ZN9S100C5_nt4v124Ev");}
void  S100C5_nt ::v125(){vfunc_called(this, "_ZN9S100C5_nt4v125Ev");}
void  S100C5_nt ::v126(){vfunc_called(this, "_ZN9S100C5_nt4v126Ev");}
void  S100C5_nt ::v127(){vfunc_called(this, "_ZN9S100C5_nt4v127Ev");}
void  S100C5_nt ::v128(){vfunc_called(this, "_ZN9S100C5_nt4v128Ev");}
void  S100C5_nt ::v129(){vfunc_called(this, "_ZN9S100C5_nt4v129Ev");}
void  S100C5_nt ::v130(){vfunc_called(this, "_ZN9S100C5_nt4v130Ev");}
void  S100C5_nt ::v131(){vfunc_called(this, "_ZN9S100C5_nt4v131Ev");}
void  S100C5_nt ::v132(){vfunc_called(this, "_ZN9S100C5_nt4v132Ev");}
void  S100C5_nt ::v133(){vfunc_called(this, "_ZN9S100C5_nt4v133Ev");}
void  S100C5_nt ::v134(){vfunc_called(this, "_ZN9S100C5_nt4v134Ev");}
void  S100C5_nt ::v135(){vfunc_called(this, "_ZN9S100C5_nt4v135Ev");}
void  S100C5_nt ::v136(){vfunc_called(this, "_ZN9S100C5_nt4v136Ev");}
void  S100C5_nt ::v137(){vfunc_called(this, "_ZN9S100C5_nt4v137Ev");}
void  S100C5_nt ::v138(){vfunc_called(this, "_ZN9S100C5_nt4v138Ev");}
void  S100C5_nt ::v139(){vfunc_called(this, "_ZN9S100C5_nt4v139Ev");}
void  S100C5_nt ::v140(){vfunc_called(this, "_ZN9S100C5_nt4v140Ev");}
void  S100C5_nt ::v141(){vfunc_called(this, "_ZN9S100C5_nt4v141Ev");}
void  S100C5_nt ::v142(){vfunc_called(this, "_ZN9S100C5_nt4v142Ev");}
void  S100C5_nt ::v143(){vfunc_called(this, "_ZN9S100C5_nt4v143Ev");}
void  S100C5_nt ::v144(){vfunc_called(this, "_ZN9S100C5_nt4v144Ev");}
void  S100C5_nt ::v145(){vfunc_called(this, "_ZN9S100C5_nt4v145Ev");}
void  S100C5_nt ::v146(){vfunc_called(this, "_ZN9S100C5_nt4v146Ev");}
S100C5_nt ::S100C5_nt(){ note_ctor("S100C5_nt", this);} // tgen

//skip512 S100C5_nt

#else // __cplusplus

extern void _ZN9S100C5_ntC1Ev();
extern void _ZN9S100C5_ntD1Ev();
Name_Map name_map_S100C5_nt[] = {
  NSPAIR(_ZN9S100C5_ntC1Ev),
  NSPAIR(_ZN9S100C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S100C7_nt;
extern VTBL_ENTRY _ZTI9S100C7_nt[];
extern  VTBL_ENTRY _ZTV9S100C7_nt[];
extern Class_Descriptor cd_S100C6_nt;
extern VTBL_ENTRY _ZTI9S100C6_nt[];
extern  VTBL_ENTRY _ZTV9S100C6_nt[];
static Base_Class bases_S100C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S100C5_nt[];
extern void _ZN9S100C5_ntD1Ev();
extern void _ZN9S100C5_ntD0Ev();
extern void _ZN9S100C7_nt2v5Ev();
extern void _ZN9S100C7_nt2v6Ev();
extern void _ZN9S100C7_nt2v7Ev();
extern void _ZN9S100C7_nt2v8Ev();
extern void _ZN9S100C7_nt2v9Ev();
extern void _ZN9S100C7_nt3v10Ev();
extern void _ZN9S100C7_nt3v11Ev();
extern void _ZN9S100C7_nt3v12Ev();
extern void _ZN9S100C7_nt3v13Ev();
extern void _ZN9S100C7_nt3v14Ev();
extern void _ZN9S100C7_nt3v15Ev();
extern void _ZN9S100C7_nt3v16Ev();
extern void _ZN9S100C7_nt3v17Ev();
extern void _ZN9S100C7_nt3v18Ev();
extern void _ZN9S100C7_nt3v19Ev();
extern void _ZN9S100C7_nt3v20Ev();
extern void _ZN9S100C7_nt3v21Ev();
extern void _ZN9S100C7_nt3v22Ev();
extern void _ZN9S100C7_nt3v23Ev();
extern void _ZN9S100C7_nt3v24Ev();
extern void _ZN9S100C7_nt3v25Ev();
extern void _ZN9S100C7_nt3v26Ev();
extern void _ZN9S100C7_nt3v27Ev();
extern void _ZN9S100C7_nt3v28Ev();
extern void _ZN9S100C7_nt3v29Ev();
extern void _ZN9S100C7_nt3v30Ev();
extern void _ZN9S100C7_nt3v31Ev();
extern void _ZN9S100C7_nt3v32Ev();
extern void _ZN9S100C7_nt3v33Ev();
extern void _ZN9S100C7_nt3v34Ev();
extern void _ZN9S100C7_nt3v35Ev();
extern void _ZN9S100C7_nt3v36Ev();
extern void _ZN9S100C7_nt3v37Ev();
extern void _ZN9S100C7_nt3v38Ev();
extern void _ZN9S100C7_nt3v39Ev();
extern void _ZN9S100C7_nt3v40Ev();
extern void _ZN9S100C7_nt3v41Ev();
extern void _ZN9S100C7_nt3v42Ev();
extern void _ZN9S100C7_nt3v43Ev();
extern void _ZN9S100C7_nt3v44Ev();
extern void _ZN9S100C7_nt3v45Ev();
extern void _ZN9S100C7_nt3v46Ev();
extern void _ZN9S100C7_nt3v47Ev();
extern void _ZN9S100C7_nt3v48Ev();
extern void _ZN9S100C7_nt3v49Ev();
extern void _ZN9S100C7_nt3v50Ev();
extern void _ZN9S100C7_nt3v51Ev();
extern void _ZN9S100C7_nt3v52Ev();
extern void _ZN9S100C7_nt3v53Ev();
extern void _ZN9S100C7_nt3v54Ev();
extern void _ZN9S100C7_nt3v55Ev();
extern void _ZN9S100C7_nt3v56Ev();
extern void _ZN9S100C7_nt3v57Ev();
extern void _ZN9S100C7_nt3v58Ev();
extern void _ZN9S100C7_nt3v59Ev();
extern void _ZN9S100C7_nt3v60Ev();
extern void _ZN9S100C7_nt3v61Ev();
extern void _ZN9S100C7_nt3v62Ev();
extern void _ZN9S100C7_nt3v63Ev();
extern void _ZN9S100C7_nt3v64Ev();
extern void _ZN9S100C7_nt3v65Ev();
extern void _ZN9S100C7_nt3v66Ev();
extern void _ZN9S100C7_nt3v67Ev();
extern void _ZN9S100C7_nt3v68Ev();
extern void _ZN9S100C6_nt3v69Ev();
extern void _ZN9S100C6_nt3v70Ev();
extern void _ZN9S100C5_nt3v71Ev();
extern void _ZN9S100C5_nt3v72Ev();
extern void _ZN9S100C5_nt3v73Ev();
extern void _ZN9S100C5_nt3v74Ev();
extern void _ZN9S100C5_nt3v75Ev();
extern void _ZN9S100C5_nt3v76Ev();
extern void _ZN9S100C5_nt3v77Ev();
extern void _ZN9S100C5_nt3v78Ev();
extern void _ZN9S100C5_nt3v79Ev();
extern void _ZN9S100C5_nt3v80Ev();
extern void _ZN9S100C5_nt3v81Ev();
extern void _ZN9S100C5_nt3v82Ev();
extern void _ZN9S100C5_nt3v83Ev();
extern void _ZN9S100C5_nt3v84Ev();
extern void _ZN9S100C5_nt3v85Ev();
extern void _ZN9S100C5_nt3v86Ev();
extern void _ZN9S100C5_nt3v87Ev();
extern void _ZN9S100C5_nt3v88Ev();
extern void _ZN9S100C5_nt3v89Ev();
extern void _ZN9S100C5_nt3v90Ev();
extern void _ZN9S100C5_nt3v91Ev();
extern void _ZN9S100C5_nt3v92Ev();
extern void _ZN9S100C5_nt3v93Ev();
extern void _ZN9S100C5_nt3v94Ev();
extern void _ZN9S100C5_nt3v95Ev();
extern void _ZN9S100C5_nt3v96Ev();
extern void _ZN9S100C5_nt3v97Ev();
extern void _ZN9S100C5_nt3v98Ev();
extern void _ZN9S100C5_nt3v99Ev();
extern void _ZN9S100C5_nt4v100Ev();
extern void _ZN9S100C5_nt4v101Ev();
extern void _ZN9S100C5_nt4v102Ev();
extern void _ZN9S100C5_nt4v103Ev();
extern void _ZN9S100C5_nt4v104Ev();
extern void _ZN9S100C5_nt4v105Ev();
extern void _ZN9S100C5_nt4v106Ev();
extern void _ZN9S100C5_nt4v107Ev();
extern void _ZN9S100C5_nt4v108Ev();
extern void _ZN9S100C5_nt4v109Ev();
extern void _ZN9S100C5_nt4v110Ev();
extern void _ZN9S100C5_nt4v111Ev();
extern void _ZN9S100C5_nt4v112Ev();
extern void _ZN9S100C5_nt4v113Ev();
extern void _ZN9S100C5_nt4v114Ev();
extern void _ZN9S100C5_nt4v115Ev();
extern void _ZN9S100C5_nt4v116Ev();
extern void _ZN9S100C5_nt4v117Ev();
extern void _ZN9S100C5_nt4v118Ev();
extern void _ZN9S100C5_nt4v119Ev();
extern void _ZN9S100C5_nt4v120Ev();
extern void _ZN9S100C5_nt4v121Ev();
extern void _ZN9S100C5_nt4v122Ev();
extern void _ZN9S100C5_nt4v123Ev();
extern void _ZN9S100C5_nt4v124Ev();
extern void _ZN9S100C5_nt4v125Ev();
extern void _ZN9S100C5_nt4v126Ev();
extern void _ZN9S100C5_nt4v127Ev();
extern void _ZN9S100C5_nt4v128Ev();
extern void _ZN9S100C5_nt4v129Ev();
extern void _ZN9S100C5_nt4v130Ev();
extern void _ZN9S100C5_nt4v131Ev();
extern void _ZN9S100C5_nt4v132Ev();
extern void _ZN9S100C5_nt4v133Ev();
extern void _ZN9S100C5_nt4v134Ev();
extern void _ZN9S100C5_nt4v135Ev();
extern void _ZN9S100C5_nt4v136Ev();
extern void _ZN9S100C5_nt4v137Ev();
extern void _ZN9S100C5_nt4v138Ev();
extern void _ZN9S100C5_nt4v139Ev();
extern void _ZN9S100C5_nt4v140Ev();
extern void _ZN9S100C5_nt4v141Ev();
extern void _ZN9S100C5_nt4v142Ev();
extern void _ZN9S100C5_nt4v143Ev();
extern void _ZN9S100C5_nt4v144Ev();
extern void _ZN9S100C5_nt4v145Ev();
extern void _ZN9S100C5_nt4v146Ev();
static  VTBL_ENTRY vtc_S100C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S100C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S100C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S100C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v146Ev,
};
extern VTBL_ENTRY _ZTI9S100C5_nt[];
VTBL_ENTRY *P__ZTI9S100C5_nt = _ZTI9S100C5_nt; 
extern  VTBL_ENTRY _ZTV9S100C5_nt[];
Class_Descriptor cd_S100C5_nt = {  "S100C5_nt", // class name
  bases_S100C5_nt, 2,
  &(vtc_S100C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,352), // object size
  NSPAIRA(_ZTI9S100C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S100C5_nt),146, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C23_nt  {
  int s100c23f0[4];
  void  mf100c23(); // _ZN10S100C23_nt8mf100c23Ev
};
//SIG(-1 S100C23_nt) C1{ m Fi[4]}


void  S100C23_nt ::mf100c23(){}

//skip512 S100C23_nt

#else // __cplusplus

Class_Descriptor cd_S100C23_nt = {  "S100C23_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  S100C22_nt  : S100C23_nt {
};
//SIG(-1 S100C22_nt) C1{ BC2{ m Fi[4]}}



//skip512 S100C22_nt

#else // __cplusplus

extern Class_Descriptor cd_S100C23_nt;
static Base_Class bases_S100C22_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C23_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S100C24_nt  {
  ::S100C8_nt s100c24f0;
  void *s100c24f1;
  ::S100C22_nt s100c24f2;
  void *s100c24f3;
  void  mf100c24(); // _ZN10S100C24_nt8mf100c24Ev
};
//SIG(-1 S100C24_nt) C1{ m FC2{ m Fi[2]} Fp FC3{ BC4{ m Fi[4]}} Fp}


void  S100C24_nt ::mf100c24(){}

//skip512 S100C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C26_nt  {
  void *s100c26f0[8];
  char s100c26f1[4];
  void  mf100c26(); // _ZN10S100C26_nt8mf100c26Ev
};
//SIG(-1 S100C26_nt) C1{ m Fp[8] Fc[4]}


void  S100C26_nt ::mf100c26(){}

//skip512 S100C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C28_nt  {
  int s100c28f0[4];
  char s100c28f1[4];
  void  mf100c28(); // _ZN10S100C28_nt8mf100c28Ev
};
//SIG(-1 S100C28_nt) C1{ m Fi[4] Fc[4]}


void  S100C28_nt ::mf100c28(){}

//skip512 S100C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C27_nt  {
  void *s100c27f0[5];
  ::S100C28_nt s100c27f1;
  unsigned int s100c27f2:1;
  unsigned int s100c27f3:1;
  int s100c27f4;
  char s100c27f5[8];
  void  mf100c27(); // _ZN10S100C27_nt8mf100c27Ev
};
//SIG(-1 S100C27_nt) C1{ m Fp[5] FC2{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]}


void  S100C27_nt ::mf100c27(){}

//skip512 S100C27_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C31_nt  {
  int s100c31f0[3];
  void  mf100c31(); // _ZN10S100C31_nt8mf100c31Ev
};
//SIG(-1 S100C31_nt) C1{ m Fi[3]}


void  S100C31_nt ::mf100c31(){}

//skip512 S100C31_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C32_nt  {
  void  mf100c32(); // _ZN10S100C32_nt8mf100c32Ev
};
//SIG(-1 S100C32_nt) C1{ m}


void  S100C32_nt ::mf100c32(){}

//skip512 S100C32_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C34_nt  {
  int s100c34f0[2];
  char s100c34f1[2];
  void  mf100c34(); // _ZN10S100C34_nt8mf100c34Ev
};
//SIG(-1 S100C34_nt) C1{ m Fi[2] Fc[2]}


void  S100C34_nt ::mf100c34(){}

//skip512 S100C34_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S100C33_nt  : S100C34_nt {
  int s100c33f0;
};
//SIG(-1 S100C33_nt) C1{ BC2{ m Fi[2] Fc[2]} Fi}



//skip512 S100C33_nt

#else // __cplusplus

extern Class_Descriptor cd_S100C34_nt;
static Base_Class bases_S100C33_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C34_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S100C30_nt  {
  ::S100C31_nt s100c30f0;
  ::S100C32_nt s100c30f1;
  ::S100C33_nt s100c30f2;
  char s100c30f3;
  void  mf100c30(); // _ZN10S100C30_nt8mf100c30Ev
};
//SIG(-1 S100C30_nt) C1{ m FC2{ m Fi[3]} FC3{ m} FC4{ BC5{ m Fi[2] Fc[2]} Fi} Fc}


void  S100C30_nt ::mf100c30(){}

//skip512 S100C30_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C38_nt  {
  void *s100c38f0[2];
  void  mf100c38(); // _ZN10S100C38_nt8mf100c38Ev
};
//SIG(-1 S100C38_nt) C1{ m Fp[2]}


void  S100C38_nt ::mf100c38(){}

//skip512 S100C38_nt

#else // __cplusplus

Class_Descriptor cd_S100C38_nt = {  "S100C38_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  S100C37_nt  : S100C38_nt {
};
//SIG(-1 S100C37_nt) C1{ BC2{ m Fp[2]}}



//skip512 S100C37_nt

#else // __cplusplus

extern Class_Descriptor cd_S100C38_nt;
static Base_Class bases_S100C37_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C38_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S100C41  : S100C12_nt {
};
//SIG(-1 S100C41) C1{ BC2{ m Fp Fi[2]}}



static void Test_S100C41()
{
  extern Class_Descriptor cd_S100C41;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C41, buf);
    S100C41 &lv = *(new (buf) S100C41());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C41)");
    check_base_class_offset(lv, (S100C12_nt*), 0, "S100C41");
    test_class_info(&lv, &cd_S100C41);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C41(Test_S100C41, "S100C41", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S100C40()
{
  extern Class_Descriptor cd_S100C40;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C40, buf);
    S100C40 &lv = *(new (buf) S100C40());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C40)");
    check_base_class_offset(lv, (S100C12_nt*)(S100C41*), 0, "S100C40");
    check_base_class_offset(lv, (S100C41*), 0, "S100C40");
    test_class_info(&lv, &cd_S100C40);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C40(Test_S100C40, "S100C40", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S100C12_nt;
extern Class_Descriptor cd_S100C41;
static Base_Class bases_S100C40[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C41,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S100C40 = {  "S100C40", // class name
  bases_S100C40, 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  S100C39_nt  : S100C40 {
};
//SIG(-1 S100C39_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S100C39_nt

#else // __cplusplus

extern Class_Descriptor cd_S100C12_nt;
extern Class_Descriptor cd_S100C41;
extern Class_Descriptor cd_S100C40;
static Base_Class bases_S100C39_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C41,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C40,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S100C36_nt  {
  ::S100C37_nt s100c36f0;
  char s100c36f1;
  ::S100C39_nt s100c36f2;
  int s100c36f3;
  ::S100C8_nt s100c36f4;
  ::S100C8_nt s100c36f5;
  void *s100c36f6;
  void  mf100c36(); // _ZN10S100C36_nt8mf100c36Ev
};
//SIG(-1 S100C36_nt) C1{ m FC2{ BC3{ m Fp[2]}} Fc FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} Fi FC8{ m Fi[2]} FC8 Fp}


void  S100C36_nt ::mf100c36(){}

//skip512 S100C36_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S100C45()
{
  extern Class_Descriptor cd_S100C45;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C45, buf);
    S100C45 &lv = *(new (buf) S100C45());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C45)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C45)");
    check_base_class_offset(lv, (S100C12_nt*), 0, "S100C45");
    test_class_info(&lv, &cd_S100C45);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C45(Test_S100C45, "S100C45", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S100C44()
{
  extern Class_Descriptor cd_S100C44;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S100C44, buf);
    S100C44 &lv = *(new (buf) S100C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S100C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C44)");
    check_base_class_offset(lv, (S100C12_nt*)(S100C45*), 0, "S100C44");
    check_base_class_offset(lv, (S100C45*), 0, "S100C44");
    test_class_info(&lv, &cd_S100C44);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C44(Test_S100C44, "S100C44", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S100C12_nt;
extern Class_Descriptor cd_S100C45;
static Base_Class bases_S100C44[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C45,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S100C44 = {  "S100C44", // class name
  bases_S100C44, 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  S100C4_nt  : S100C5_nt {
  ::S100C22_nt s100c4f0;
  ::S100C8_nt s100c4f1;
  void *s100c4f2[2];
  ::S100C24_nt s100c4f3;
  ::S100C26_nt s100c4f4;
  int s100c4f5;
  ::S100C27_nt s100c4f6;
  int s100c4f7[4];
  ::S100C8_nt s100c4f8[4];
  ::S100C30_nt s100c4f9;
  ::S100C31_nt s100c4f10;
  int s100c4f11;
  ::S100C36_nt s100c4f12;
  ::S100C36_nt s100c4f13;
  void *s100c4f14;
  ::S100C31_nt s100c4f15;
  ::S100C19 s100c4f16;
  ::S100C44 s100c4f17;
  unsigned int s100c4f18:1;
  unsigned int s100c4f19:1;
  unsigned int s100c4f20:1;
  ::S100C32_nt s100c4f21;
  ::S100C21_nt s100c4f22;
  ::S100C21_nt s100c4f23;
  ::S100C21_nt s100c4f24;
  ::S100C21_nt s100c4f25;
  ::S100C21_nt s100c4f26;
  ::S100C21_nt s100c4f27;
  ::S100C21_nt s100c4f28;
  ::S100C21_nt s100c4f29;
  ::S100C21_nt s100c4f30;
  ::S100C21_nt s100c4f31;
  ::S100C21_nt s100c4f32;
  ::S100C21_nt s100c4f33;
  ::S100C21_nt s100c4f34;
  virtual  ~S100C4_nt(); // _ZN9S100C4_ntD1Ev
  virtual void  v147(); // _ZN9S100C4_nt4v147Ev
  virtual void  v148(); // _ZN9S100C4_nt4v148Ev
  virtual void  v149(); // _ZN9S100C4_nt4v149Ev
  virtual void  v150(); // _ZN9S100C4_nt4v150Ev
  virtual void  v151(); // _ZN9S100C4_nt4v151Ev
  virtual void  v152(); // _ZN9S100C4_nt4v152Ev
  virtual void  v153(); // _ZN9S100C4_nt4v153Ev
  virtual void  v154(); // _ZN9S100C4_nt4v154Ev
  virtual void  v155(); // _ZN9S100C4_nt4v155Ev
  virtual void  v156(); // _ZN9S100C4_nt4v156Ev
  virtual void  v157(); // _ZN9S100C4_nt4v157Ev
  virtual void  v158(); // _ZN9S100C4_nt4v158Ev
  virtual void  v159(); // _ZN9S100C4_nt4v159Ev
  virtual void  v160(); // _ZN9S100C4_nt4v160Ev
  virtual void  v161(); // _ZN9S100C4_nt4v161Ev
  virtual void  v162(); // _ZN9S100C4_nt4v162Ev
  virtual void  v163(); // _ZN9S100C4_nt4v163Ev
  virtual void  v164(); // _ZN9S100C4_nt4v164Ev
  virtual void  v165(); // _ZN9S100C4_nt4v165Ev
  virtual void  v166(); // _ZN9S100C4_nt4v166Ev
  virtual void  v167(); // _ZN9S100C4_nt4v167Ev
  virtual void  v168(); // _ZN9S100C4_nt4v168Ev
  virtual void  v169(); // _ZN9S100C4_nt4v169Ev
  virtual void  v170(); // _ZN9S100C4_nt4v170Ev
  virtual void  v171(); // _ZN9S100C4_nt4v171Ev
  virtual void  v172(); // _ZN9S100C4_nt4v172Ev
  virtual void  v173(); // _ZN9S100C4_nt4v173Ev
  virtual void  v174(); // _ZN9S100C4_nt4v174Ev
  virtual void  v175(); // _ZN9S100C4_nt4v175Ev
  virtual void  v176(); // _ZN9S100C4_nt4v176Ev
  virtual void  v177(); // _ZN9S100C4_nt4v177Ev
  virtual void  v178(); // _ZN9S100C4_nt4v178Ev
  virtual void  v179(); // _ZN9S100C4_nt4v179Ev
  virtual void  v180(); // _ZN9S100C4_nt4v180Ev
  virtual void  v181(); // _ZN9S100C4_nt4v181Ev
  virtual void  v182(); // _ZN9S100C4_nt4v182Ev
  virtual void  v183(); // _ZN9S100C4_nt4v183Ev
  virtual void  v184(); // _ZN9S100C4_nt4v184Ev
  virtual void  v185(); // _ZN9S100C4_nt4v185Ev
  virtual void  v186(); // _ZN9S100C4_nt4v186Ev
  virtual void  v187(); // _ZN9S100C4_nt4v187Ev
  virtual void  v188(); // _ZN9S100C4_nt4v188Ev
  virtual void  v189(); // _ZN9S100C4_nt4v189Ev
  virtual void  v190(); // _ZN9S100C4_nt4v190Ev
  virtual void  v191(); // _ZN9S100C4_nt4v191Ev
  virtual void  v192(); // _ZN9S100C4_nt4v192Ev
  virtual void  v193(); // _ZN9S100C4_nt4v193Ev
  virtual void  v194(); // _ZN9S100C4_nt4v194Ev
  virtual void  v195(); // _ZN9S100C4_nt4v195Ev
  virtual void  v196(); // _ZN9S100C4_nt4v196Ev
  virtual void  v197(); // _ZN9S100C4_nt4v197Ev
  virtual void  v198(); // _ZN9S100C4_nt4v198Ev
  virtual void  v199(); // _ZN9S100C4_nt4v199Ev
  virtual void  v200(); // _ZN9S100C4_nt4v200Ev
  virtual void  v201(); // _ZN9S100C4_nt4v201Ev
  virtual void  v202(); // _ZN9S100C4_nt4v202Ev
  virtual void  v203(); // _ZN9S100C4_nt4v203Ev
  virtual void  v204(); // _ZN9S100C4_nt4v204Ev
  virtual void  v205(); // _ZN9S100C4_nt4v205Ev
  virtual void  v206(); // _ZN9S100C4_nt4v206Ev
  virtual void  v207(); // _ZN9S100C4_nt4v207Ev
  virtual void  v208(); // _ZN9S100C4_nt4v208Ev
  virtual void  v209(); // _ZN9S100C4_nt4v209Ev
  virtual void  v210(); // _ZN9S100C4_nt4v210Ev
  virtual void  v211(); // _ZN9S100C4_nt4v211Ev
  virtual void  v212(); // _ZN9S100C4_nt4v212Ev
  virtual void  v213(); // _ZN9S100C4_nt4v213Ev
  virtual void  v214(); // _ZN9S100C4_nt4v214Ev
  virtual void  v215(); // _ZN9S100C4_nt4v215Ev
  S100C4_nt(); // tgen
};
//SIG(-1 S100C4_nt) C1{ BC2{ BC3{ BC4{ vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v134 v135} vd v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 FC6{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC7 Fp FC10{ BC11{ BC9}} FC10 FC10 FC12{ BC13{ BC9}} Fc Fi Fp FC5 FC5 FC5 FC5 FC5 FC5 FC14{ m Fp FC5} FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 FC15{ BC16{ m Fi[4]}} FC5 Fp[2] FC17{ m FC5 Fp FC15 Fp} FC18{ m Fp[8] Fc[4]} Fi FC19{ m Fp[5] FC20{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC5[4] FC21{ m FC22{ m Fi[3]} FC23{ m} FC24{ BC25{ m Fi[2] Fc[2]} Fi} Fc} FC22 Fi FC26{ m FC27{ BC28{ m Fp[2]}} Fc FC29{ BC30{ BC31{ BC9}}} Fi FC5 FC5 Fp} FC26 Fp FC22 FC12 FC32{ BC33{ BC9}} Fi:1 Fi:1 Fi:1 FC23 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14}


 S100C4_nt ::~S100C4_nt(){ note_dtor("S100C4_nt", this);}
void  S100C4_nt ::v147(){vfunc_called(this, "_ZN9S100C4_nt4v147Ev");}
void  S100C4_nt ::v148(){vfunc_called(this, "_ZN9S100C4_nt4v148Ev");}
void  S100C4_nt ::v149(){vfunc_called(this, "_ZN9S100C4_nt4v149Ev");}
void  S100C4_nt ::v150(){vfunc_called(this, "_ZN9S100C4_nt4v150Ev");}
void  S100C4_nt ::v151(){vfunc_called(this, "_ZN9S100C4_nt4v151Ev");}
void  S100C4_nt ::v152(){vfunc_called(this, "_ZN9S100C4_nt4v152Ev");}
void  S100C4_nt ::v153(){vfunc_called(this, "_ZN9S100C4_nt4v153Ev");}
void  S100C4_nt ::v154(){vfunc_called(this, "_ZN9S100C4_nt4v154Ev");}
void  S100C4_nt ::v155(){vfunc_called(this, "_ZN9S100C4_nt4v155Ev");}
void  S100C4_nt ::v156(){vfunc_called(this, "_ZN9S100C4_nt4v156Ev");}
void  S100C4_nt ::v157(){vfunc_called(this, "_ZN9S100C4_nt4v157Ev");}
void  S100C4_nt ::v158(){vfunc_called(this, "_ZN9S100C4_nt4v158Ev");}
void  S100C4_nt ::v159(){vfunc_called(this, "_ZN9S100C4_nt4v159Ev");}
void  S100C4_nt ::v160(){vfunc_called(this, "_ZN9S100C4_nt4v160Ev");}
void  S100C4_nt ::v161(){vfunc_called(this, "_ZN9S100C4_nt4v161Ev");}
void  S100C4_nt ::v162(){vfunc_called(this, "_ZN9S100C4_nt4v162Ev");}
void  S100C4_nt ::v163(){vfunc_called(this, "_ZN9S100C4_nt4v163Ev");}
void  S100C4_nt ::v164(){vfunc_called(this, "_ZN9S100C4_nt4v164Ev");}
void  S100C4_nt ::v165(){vfunc_called(this, "_ZN9S100C4_nt4v165Ev");}
void  S100C4_nt ::v166(){vfunc_called(this, "_ZN9S100C4_nt4v166Ev");}
void  S100C4_nt ::v167(){vfunc_called(this, "_ZN9S100C4_nt4v167Ev");}
void  S100C4_nt ::v168(){vfunc_called(this, "_ZN9S100C4_nt4v168Ev");}
void  S100C4_nt ::v169(){vfunc_called(this, "_ZN9S100C4_nt4v169Ev");}
void  S100C4_nt ::v170(){vfunc_called(this, "_ZN9S100C4_nt4v170Ev");}
void  S100C4_nt ::v171(){vfunc_called(this, "_ZN9S100C4_nt4v171Ev");}
void  S100C4_nt ::v172(){vfunc_called(this, "_ZN9S100C4_nt4v172Ev");}
void  S100C4_nt ::v173(){vfunc_called(this, "_ZN9S100C4_nt4v173Ev");}
void  S100C4_nt ::v174(){vfunc_called(this, "_ZN9S100C4_nt4v174Ev");}
void  S100C4_nt ::v175(){vfunc_called(this, "_ZN9S100C4_nt4v175Ev");}
void  S100C4_nt ::v176(){vfunc_called(this, "_ZN9S100C4_nt4v176Ev");}
void  S100C4_nt ::v177(){vfunc_called(this, "_ZN9S100C4_nt4v177Ev");}
void  S100C4_nt ::v178(){vfunc_called(this, "_ZN9S100C4_nt4v178Ev");}
void  S100C4_nt ::v179(){vfunc_called(this, "_ZN9S100C4_nt4v179Ev");}
void  S100C4_nt ::v180(){vfunc_called(this, "_ZN9S100C4_nt4v180Ev");}
void  S100C4_nt ::v181(){vfunc_called(this, "_ZN9S100C4_nt4v181Ev");}
void  S100C4_nt ::v182(){vfunc_called(this, "_ZN9S100C4_nt4v182Ev");}
void  S100C4_nt ::v183(){vfunc_called(this, "_ZN9S100C4_nt4v183Ev");}
void  S100C4_nt ::v184(){vfunc_called(this, "_ZN9S100C4_nt4v184Ev");}
void  S100C4_nt ::v185(){vfunc_called(this, "_ZN9S100C4_nt4v185Ev");}
void  S100C4_nt ::v186(){vfunc_called(this, "_ZN9S100C4_nt4v186Ev");}
void  S100C4_nt ::v187(){vfunc_called(this, "_ZN9S100C4_nt4v187Ev");}
void  S100C4_nt ::v188(){vfunc_called(this, "_ZN9S100C4_nt4v188Ev");}
void  S100C4_nt ::v189(){vfunc_called(this, "_ZN9S100C4_nt4v189Ev");}
void  S100C4_nt ::v190(){vfunc_called(this, "_ZN9S100C4_nt4v190Ev");}
void  S100C4_nt ::v191(){vfunc_called(this, "_ZN9S100C4_nt4v191Ev");}
void  S100C4_nt ::v192(){vfunc_called(this, "_ZN9S100C4_nt4v192Ev");}
void  S100C4_nt ::v193(){vfunc_called(this, "_ZN9S100C4_nt4v193Ev");}
void  S100C4_nt ::v194(){vfunc_called(this, "_ZN9S100C4_nt4v194Ev");}
void  S100C4_nt ::v195(){vfunc_called(this, "_ZN9S100C4_nt4v195Ev");}
void  S100C4_nt ::v196(){vfunc_called(this, "_ZN9S100C4_nt4v196Ev");}
void  S100C4_nt ::v197(){vfunc_called(this, "_ZN9S100C4_nt4v197Ev");}
void  S100C4_nt ::v198(){vfunc_called(this, "_ZN9S100C4_nt4v198Ev");}
void  S100C4_nt ::v199(){vfunc_called(this, "_ZN9S100C4_nt4v199Ev");}
void  S100C4_nt ::v200(){vfunc_called(this, "_ZN9S100C4_nt4v200Ev");}
void  S100C4_nt ::v201(){vfunc_called(this, "_ZN9S100C4_nt4v201Ev");}
void  S100C4_nt ::v202(){vfunc_called(this, "_ZN9S100C4_nt4v202Ev");}
void  S100C4_nt ::v203(){vfunc_called(this, "_ZN9S100C4_nt4v203Ev");}
void  S100C4_nt ::v204(){vfunc_called(this, "_ZN9S100C4_nt4v204Ev");}
void  S100C4_nt ::v205(){vfunc_called(this, "_ZN9S100C4_nt4v205Ev");}
void  S100C4_nt ::v206(){vfunc_called(this, "_ZN9S100C4_nt4v206Ev");}
void  S100C4_nt ::v207(){vfunc_called(this, "_ZN9S100C4_nt4v207Ev");}
void  S100C4_nt ::v208(){vfunc_called(this, "_ZN9S100C4_nt4v208Ev");}
void  S100C4_nt ::v209(){vfunc_called(this, "_ZN9S100C4_nt4v209Ev");}
void  S100C4_nt ::v210(){vfunc_called(this, "_ZN9S100C4_nt4v210Ev");}
void  S100C4_nt ::v211(){vfunc_called(this, "_ZN9S100C4_nt4v211Ev");}
void  S100C4_nt ::v212(){vfunc_called(this, "_ZN9S100C4_nt4v212Ev");}
void  S100C4_nt ::v213(){vfunc_called(this, "_ZN9S100C4_nt4v213Ev");}
void  S100C4_nt ::v214(){vfunc_called(this, "_ZN9S100C4_nt4v214Ev");}
void  S100C4_nt ::v215(){vfunc_called(this, "_ZN9S100C4_nt4v215Ev");}
S100C4_nt ::S100C4_nt(){ note_ctor("S100C4_nt", this);} // tgen

//skip512 S100C4_nt

#else // __cplusplus

extern void _ZN9S100C4_ntC1Ev();
extern void _ZN9S100C4_ntD1Ev();
Name_Map name_map_S100C4_nt[] = {
  NSPAIR(_ZN9S100C4_ntC1Ev),
  NSPAIR(_ZN9S100C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S100C7_nt;
extern VTBL_ENTRY _ZTI9S100C7_nt[];
extern  VTBL_ENTRY _ZTV9S100C7_nt[];
extern Class_Descriptor cd_S100C6_nt;
extern VTBL_ENTRY _ZTI9S100C6_nt[];
extern  VTBL_ENTRY _ZTV9S100C6_nt[];
extern Class_Descriptor cd_S100C5_nt;
extern VTBL_ENTRY _ZTI9S100C5_nt[];
extern  VTBL_ENTRY _ZTV9S100C5_nt[];
static Base_Class bases_S100C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S100C4_nt[];
extern void _ZN9S100C4_ntD1Ev();
extern void _ZN9S100C4_ntD0Ev();
extern void _ZN9S100C7_nt2v5Ev();
extern void _ZN9S100C7_nt2v6Ev();
extern void _ZN9S100C7_nt2v7Ev();
extern void _ZN9S100C7_nt2v8Ev();
extern void _ZN9S100C7_nt2v9Ev();
extern void _ZN9S100C7_nt3v10Ev();
extern void _ZN9S100C7_nt3v11Ev();
extern void _ZN9S100C7_nt3v12Ev();
extern void _ZN9S100C7_nt3v13Ev();
extern void _ZN9S100C7_nt3v14Ev();
extern void _ZN9S100C7_nt3v15Ev();
extern void _ZN9S100C7_nt3v16Ev();
extern void _ZN9S100C7_nt3v17Ev();
extern void _ZN9S100C7_nt3v18Ev();
extern void _ZN9S100C7_nt3v19Ev();
extern void _ZN9S100C7_nt3v20Ev();
extern void _ZN9S100C7_nt3v21Ev();
extern void _ZN9S100C7_nt3v22Ev();
extern void _ZN9S100C7_nt3v23Ev();
extern void _ZN9S100C7_nt3v24Ev();
extern void _ZN9S100C7_nt3v25Ev();
extern void _ZN9S100C7_nt3v26Ev();
extern void _ZN9S100C7_nt3v27Ev();
extern void _ZN9S100C7_nt3v28Ev();
extern void _ZN9S100C7_nt3v29Ev();
extern void _ZN9S100C7_nt3v30Ev();
extern void _ZN9S100C7_nt3v31Ev();
extern void _ZN9S100C7_nt3v32Ev();
extern void _ZN9S100C7_nt3v33Ev();
extern void _ZN9S100C7_nt3v34Ev();
extern void _ZN9S100C7_nt3v35Ev();
extern void _ZN9S100C7_nt3v36Ev();
extern void _ZN9S100C7_nt3v37Ev();
extern void _ZN9S100C7_nt3v38Ev();
extern void _ZN9S100C7_nt3v39Ev();
extern void _ZN9S100C7_nt3v40Ev();
extern void _ZN9S100C7_nt3v41Ev();
extern void _ZN9S100C7_nt3v42Ev();
extern void _ZN9S100C7_nt3v43Ev();
extern void _ZN9S100C7_nt3v44Ev();
extern void _ZN9S100C7_nt3v45Ev();
extern void _ZN9S100C7_nt3v46Ev();
extern void _ZN9S100C7_nt3v47Ev();
extern void _ZN9S100C7_nt3v48Ev();
extern void _ZN9S100C7_nt3v49Ev();
extern void _ZN9S100C7_nt3v50Ev();
extern void _ZN9S100C7_nt3v51Ev();
extern void _ZN9S100C7_nt3v52Ev();
extern void _ZN9S100C7_nt3v53Ev();
extern void _ZN9S100C7_nt3v54Ev();
extern void _ZN9S100C7_nt3v55Ev();
extern void _ZN9S100C7_nt3v56Ev();
extern void _ZN9S100C7_nt3v57Ev();
extern void _ZN9S100C7_nt3v58Ev();
extern void _ZN9S100C7_nt3v59Ev();
extern void _ZN9S100C7_nt3v60Ev();
extern void _ZN9S100C7_nt3v61Ev();
extern void _ZN9S100C7_nt3v62Ev();
extern void _ZN9S100C7_nt3v63Ev();
extern void _ZN9S100C7_nt3v64Ev();
extern void _ZN9S100C7_nt3v65Ev();
extern void _ZN9S100C7_nt3v66Ev();
extern void _ZN9S100C7_nt3v67Ev();
extern void _ZN9S100C7_nt3v68Ev();
extern void _ZN9S100C6_nt3v69Ev();
extern void _ZN9S100C6_nt3v70Ev();
extern void _ZN9S100C5_nt3v71Ev();
extern void _ZN9S100C5_nt3v72Ev();
extern void _ZN9S100C5_nt3v73Ev();
extern void _ZN9S100C5_nt3v74Ev();
extern void _ZN9S100C5_nt3v75Ev();
extern void _ZN9S100C5_nt3v76Ev();
extern void _ZN9S100C5_nt3v77Ev();
extern void _ZN9S100C5_nt3v78Ev();
extern void _ZN9S100C5_nt3v79Ev();
extern void _ZN9S100C5_nt3v80Ev();
extern void _ZN9S100C5_nt3v81Ev();
extern void _ZN9S100C5_nt3v82Ev();
extern void _ZN9S100C5_nt3v83Ev();
extern void _ZN9S100C5_nt3v84Ev();
extern void _ZN9S100C5_nt3v85Ev();
extern void _ZN9S100C5_nt3v86Ev();
extern void _ZN9S100C5_nt3v87Ev();
extern void _ZN9S100C5_nt3v88Ev();
extern void _ZN9S100C5_nt3v89Ev();
extern void _ZN9S100C5_nt3v90Ev();
extern void _ZN9S100C5_nt3v91Ev();
extern void _ZN9S100C5_nt3v92Ev();
extern void _ZN9S100C5_nt3v93Ev();
extern void _ZN9S100C5_nt3v94Ev();
extern void _ZN9S100C5_nt3v95Ev();
extern void _ZN9S100C5_nt3v96Ev();
extern void _ZN9S100C5_nt3v97Ev();
extern void _ZN9S100C5_nt3v98Ev();
extern void _ZN9S100C5_nt3v99Ev();
extern void _ZN9S100C5_nt4v100Ev();
extern void _ZN9S100C5_nt4v101Ev();
extern void _ZN9S100C5_nt4v102Ev();
extern void _ZN9S100C5_nt4v103Ev();
extern void _ZN9S100C5_nt4v104Ev();
extern void _ZN9S100C5_nt4v105Ev();
extern void _ZN9S100C5_nt4v106Ev();
extern void _ZN9S100C5_nt4v107Ev();
extern void _ZN9S100C5_nt4v108Ev();
extern void _ZN9S100C5_nt4v109Ev();
extern void _ZN9S100C5_nt4v110Ev();
extern void _ZN9S100C5_nt4v111Ev();
extern void _ZN9S100C5_nt4v112Ev();
extern void _ZN9S100C5_nt4v113Ev();
extern void _ZN9S100C5_nt4v114Ev();
extern void _ZN9S100C5_nt4v115Ev();
extern void _ZN9S100C5_nt4v116Ev();
extern void _ZN9S100C5_nt4v117Ev();
extern void _ZN9S100C5_nt4v118Ev();
extern void _ZN9S100C5_nt4v119Ev();
extern void _ZN9S100C5_nt4v120Ev();
extern void _ZN9S100C5_nt4v121Ev();
extern void _ZN9S100C5_nt4v122Ev();
extern void _ZN9S100C5_nt4v123Ev();
extern void _ZN9S100C5_nt4v124Ev();
extern void _ZN9S100C5_nt4v125Ev();
extern void _ZN9S100C5_nt4v126Ev();
extern void _ZN9S100C5_nt4v127Ev();
extern void _ZN9S100C5_nt4v128Ev();
extern void _ZN9S100C5_nt4v129Ev();
extern void _ZN9S100C5_nt4v130Ev();
extern void _ZN9S100C5_nt4v131Ev();
extern void _ZN9S100C5_nt4v132Ev();
extern void _ZN9S100C5_nt4v133Ev();
extern void _ZN9S100C5_nt4v134Ev();
extern void _ZN9S100C5_nt4v135Ev();
extern void _ZN9S100C5_nt4v136Ev();
extern void _ZN9S100C5_nt4v137Ev();
extern void _ZN9S100C5_nt4v138Ev();
extern void _ZN9S100C5_nt4v139Ev();
extern void _ZN9S100C5_nt4v140Ev();
extern void _ZN9S100C5_nt4v141Ev();
extern void _ZN9S100C5_nt4v142Ev();
extern void _ZN9S100C5_nt4v143Ev();
extern void _ZN9S100C5_nt4v144Ev();
extern void _ZN9S100C5_nt4v145Ev();
extern void _ZN9S100C5_nt4v146Ev();
extern void _ZN9S100C4_nt4v147Ev();
extern void _ZN9S100C4_nt4v148Ev();
extern void _ZN9S100C4_nt4v149Ev();
extern void _ZN9S100C4_nt4v150Ev();
extern void _ZN9S100C4_nt4v151Ev();
extern void _ZN9S100C4_nt4v152Ev();
extern void _ZN9S100C4_nt4v153Ev();
extern void _ZN9S100C4_nt4v154Ev();
extern void _ZN9S100C4_nt4v155Ev();
extern void _ZN9S100C4_nt4v156Ev();
extern void _ZN9S100C4_nt4v157Ev();
extern void _ZN9S100C4_nt4v158Ev();
extern void _ZN9S100C4_nt4v159Ev();
extern void _ZN9S100C4_nt4v160Ev();
extern void _ZN9S100C4_nt4v161Ev();
extern void _ZN9S100C4_nt4v162Ev();
extern void _ZN9S100C4_nt4v163Ev();
extern void _ZN9S100C4_nt4v164Ev();
extern void _ZN9S100C4_nt4v165Ev();
extern void _ZN9S100C4_nt4v166Ev();
extern void _ZN9S100C4_nt4v167Ev();
extern void _ZN9S100C4_nt4v168Ev();
extern void _ZN9S100C4_nt4v169Ev();
extern void _ZN9S100C4_nt4v170Ev();
extern void _ZN9S100C4_nt4v171Ev();
extern void _ZN9S100C4_nt4v172Ev();
extern void _ZN9S100C4_nt4v173Ev();
extern void _ZN9S100C4_nt4v174Ev();
extern void _ZN9S100C4_nt4v175Ev();
extern void _ZN9S100C4_nt4v176Ev();
extern void _ZN9S100C4_nt4v177Ev();
extern void _ZN9S100C4_nt4v178Ev();
extern void _ZN9S100C4_nt4v179Ev();
extern void _ZN9S100C4_nt4v180Ev();
extern void _ZN9S100C4_nt4v181Ev();
extern void _ZN9S100C4_nt4v182Ev();
extern void _ZN9S100C4_nt4v183Ev();
extern void _ZN9S100C4_nt4v184Ev();
extern void _ZN9S100C4_nt4v185Ev();
extern void _ZN9S100C4_nt4v186Ev();
extern void _ZN9S100C4_nt4v187Ev();
extern void _ZN9S100C4_nt4v188Ev();
extern void _ZN9S100C4_nt4v189Ev();
extern void _ZN9S100C4_nt4v190Ev();
extern void _ZN9S100C4_nt4v191Ev();
extern void _ZN9S100C4_nt4v192Ev();
extern void _ZN9S100C4_nt4v193Ev();
extern void _ZN9S100C4_nt4v194Ev();
extern void _ZN9S100C4_nt4v195Ev();
extern void _ZN9S100C4_nt4v196Ev();
extern void _ZN9S100C4_nt4v197Ev();
extern void _ZN9S100C4_nt4v198Ev();
extern void _ZN9S100C4_nt4v199Ev();
extern void _ZN9S100C4_nt4v200Ev();
extern void _ZN9S100C4_nt4v201Ev();
extern void _ZN9S100C4_nt4v202Ev();
extern void _ZN9S100C4_nt4v203Ev();
extern void _ZN9S100C4_nt4v204Ev();
extern void _ZN9S100C4_nt4v205Ev();
extern void _ZN9S100C4_nt4v206Ev();
extern void _ZN9S100C4_nt4v207Ev();
extern void _ZN9S100C4_nt4v208Ev();
extern void _ZN9S100C4_nt4v209Ev();
extern void _ZN9S100C4_nt4v210Ev();
extern void _ZN9S100C4_nt4v211Ev();
extern void _ZN9S100C4_nt4v212Ev();
extern void _ZN9S100C4_nt4v213Ev();
extern void _ZN9S100C4_nt4v214Ev();
extern void _ZN9S100C4_nt4v215Ev();
static  VTBL_ENTRY vtc_S100C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S100C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S100C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S100C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v215Ev,
};
extern VTBL_ENTRY _ZTI9S100C4_nt[];
VTBL_ENTRY *P__ZTI9S100C4_nt = _ZTI9S100C4_nt; 
extern  VTBL_ENTRY _ZTV9S100C4_nt[];
Class_Descriptor cd_S100C4_nt = {  "S100C4_nt", // class name
  bases_S100C4_nt, 3,
  &(vtc_S100C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1224,908), // object size
  NSPAIRA(_ZTI9S100C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S100C4_nt),215, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S100C3_nt  : S100C4_nt {
  void *s100c3f0;
  ::S100C8_nt s100c3f1;
  virtual  ~S100C3_nt(); // _ZN9S100C3_ntD1Ev
  virtual void  v216(); // _ZN9S100C3_nt4v216Ev
  virtual void  v217(); // _ZN9S100C3_nt4v217Ev
  virtual void  v218(); // _ZN9S100C3_nt4v218Ev
  virtual void  v219(); // _ZN9S100C3_nt4v219Ev
  virtual void  v220(); // _ZN9S100C3_nt4v220Ev
  virtual void  v221(); // _ZN9S100C3_nt4v221Ev
  virtual void  v222(); // _ZN9S100C3_nt4v222Ev
  virtual void  v223(); // _ZN9S100C3_nt4v223Ev
  virtual void  v224(); // _ZN9S100C3_nt4v224Ev
  virtual void  v225(); // _ZN9S100C3_nt4v225Ev
  S100C3_nt(); // tgen
};
//SIG(-1 S100C3_nt) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ m Fi[2]} Fp[2]} vd v75 v76} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 FC7{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fp FC11{ BC12{ BC10}} FC11 FC11 FC13{ BC14{ BC10}} Fc Fi Fp FC6 FC6 FC6 FC6 FC6 FC6 FC15{ m Fp FC6} FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 FC16{ BC17{ m Fi[4]}} FC6 Fp[2] FC18{ m FC6 Fp FC16 Fp} FC19{ m Fp[8] Fc[4]} Fi FC20{ m Fp[5] FC21{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC6[4] FC22{ m FC23{ m Fi[3]} FC24{ m} FC25{ BC26{ m Fi[2] Fc[2]} Fi} Fc} FC23 Fi FC27{ m FC28{ BC29{ m Fp[2]}} Fc FC30{ BC31{ BC32{ BC10}}} Fi FC6 FC6 Fp} FC27 Fp FC23 FC13 FC33{ BC34{ BC10}} Fi:1 Fi:1 Fi:1 FC24 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp FC6}


 S100C3_nt ::~S100C3_nt(){ note_dtor("S100C3_nt", this);}
void  S100C3_nt ::v216(){vfunc_called(this, "_ZN9S100C3_nt4v216Ev");}
void  S100C3_nt ::v217(){vfunc_called(this, "_ZN9S100C3_nt4v217Ev");}
void  S100C3_nt ::v218(){vfunc_called(this, "_ZN9S100C3_nt4v218Ev");}
void  S100C3_nt ::v219(){vfunc_called(this, "_ZN9S100C3_nt4v219Ev");}
void  S100C3_nt ::v220(){vfunc_called(this, "_ZN9S100C3_nt4v220Ev");}
void  S100C3_nt ::v221(){vfunc_called(this, "_ZN9S100C3_nt4v221Ev");}
void  S100C3_nt ::v222(){vfunc_called(this, "_ZN9S100C3_nt4v222Ev");}
void  S100C3_nt ::v223(){vfunc_called(this, "_ZN9S100C3_nt4v223Ev");}
void  S100C3_nt ::v224(){vfunc_called(this, "_ZN9S100C3_nt4v224Ev");}
void  S100C3_nt ::v225(){vfunc_called(this, "_ZN9S100C3_nt4v225Ev");}
S100C3_nt ::S100C3_nt(){ note_ctor("S100C3_nt", this);} // tgen

//skip512 S100C3_nt

#else // __cplusplus

extern void _ZN9S100C3_ntC1Ev();
extern void _ZN9S100C3_ntD1Ev();
Name_Map name_map_S100C3_nt[] = {
  NSPAIR(_ZN9S100C3_ntC1Ev),
  NSPAIR(_ZN9S100C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S100C7_nt;
extern VTBL_ENTRY _ZTI9S100C7_nt[];
extern  VTBL_ENTRY _ZTV9S100C7_nt[];
extern Class_Descriptor cd_S100C6_nt;
extern VTBL_ENTRY _ZTI9S100C6_nt[];
extern  VTBL_ENTRY _ZTV9S100C6_nt[];
extern Class_Descriptor cd_S100C5_nt;
extern VTBL_ENTRY _ZTI9S100C5_nt[];
extern  VTBL_ENTRY _ZTV9S100C5_nt[];
extern Class_Descriptor cd_S100C4_nt;
extern VTBL_ENTRY _ZTI9S100C4_nt[];
extern  VTBL_ENTRY _ZTV9S100C4_nt[];
static Base_Class bases_S100C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S100C3_nt[];
extern void _ZN9S100C3_ntD1Ev();
extern void _ZN9S100C3_ntD0Ev();
extern void _ZN9S100C7_nt2v5Ev();
extern void _ZN9S100C7_nt2v6Ev();
extern void _ZN9S100C7_nt2v7Ev();
extern void _ZN9S100C7_nt2v8Ev();
extern void _ZN9S100C7_nt2v9Ev();
extern void _ZN9S100C7_nt3v10Ev();
extern void _ZN9S100C7_nt3v11Ev();
extern void _ZN9S100C7_nt3v12Ev();
extern void _ZN9S100C7_nt3v13Ev();
extern void _ZN9S100C7_nt3v14Ev();
extern void _ZN9S100C7_nt3v15Ev();
extern void _ZN9S100C7_nt3v16Ev();
extern void _ZN9S100C7_nt3v17Ev();
extern void _ZN9S100C7_nt3v18Ev();
extern void _ZN9S100C7_nt3v19Ev();
extern void _ZN9S100C7_nt3v20Ev();
extern void _ZN9S100C7_nt3v21Ev();
extern void _ZN9S100C7_nt3v22Ev();
extern void _ZN9S100C7_nt3v23Ev();
extern void _ZN9S100C7_nt3v24Ev();
extern void _ZN9S100C7_nt3v25Ev();
extern void _ZN9S100C7_nt3v26Ev();
extern void _ZN9S100C7_nt3v27Ev();
extern void _ZN9S100C7_nt3v28Ev();
extern void _ZN9S100C7_nt3v29Ev();
extern void _ZN9S100C7_nt3v30Ev();
extern void _ZN9S100C7_nt3v31Ev();
extern void _ZN9S100C7_nt3v32Ev();
extern void _ZN9S100C7_nt3v33Ev();
extern void _ZN9S100C7_nt3v34Ev();
extern void _ZN9S100C7_nt3v35Ev();
extern void _ZN9S100C7_nt3v36Ev();
extern void _ZN9S100C7_nt3v37Ev();
extern void _ZN9S100C7_nt3v38Ev();
extern void _ZN9S100C7_nt3v39Ev();
extern void _ZN9S100C7_nt3v40Ev();
extern void _ZN9S100C7_nt3v41Ev();
extern void _ZN9S100C7_nt3v42Ev();
extern void _ZN9S100C7_nt3v43Ev();
extern void _ZN9S100C7_nt3v44Ev();
extern void _ZN9S100C7_nt3v45Ev();
extern void _ZN9S100C7_nt3v46Ev();
extern void _ZN9S100C7_nt3v47Ev();
extern void _ZN9S100C7_nt3v48Ev();
extern void _ZN9S100C7_nt3v49Ev();
extern void _ZN9S100C7_nt3v50Ev();
extern void _ZN9S100C7_nt3v51Ev();
extern void _ZN9S100C7_nt3v52Ev();
extern void _ZN9S100C7_nt3v53Ev();
extern void _ZN9S100C7_nt3v54Ev();
extern void _ZN9S100C7_nt3v55Ev();
extern void _ZN9S100C7_nt3v56Ev();
extern void _ZN9S100C7_nt3v57Ev();
extern void _ZN9S100C7_nt3v58Ev();
extern void _ZN9S100C7_nt3v59Ev();
extern void _ZN9S100C7_nt3v60Ev();
extern void _ZN9S100C7_nt3v61Ev();
extern void _ZN9S100C7_nt3v62Ev();
extern void _ZN9S100C7_nt3v63Ev();
extern void _ZN9S100C7_nt3v64Ev();
extern void _ZN9S100C7_nt3v65Ev();
extern void _ZN9S100C7_nt3v66Ev();
extern void _ZN9S100C7_nt3v67Ev();
extern void _ZN9S100C7_nt3v68Ev();
extern void _ZN9S100C6_nt3v69Ev();
extern void _ZN9S100C6_nt3v70Ev();
extern void _ZN9S100C5_nt3v71Ev();
extern void _ZN9S100C5_nt3v72Ev();
extern void _ZN9S100C5_nt3v73Ev();
extern void _ZN9S100C5_nt3v74Ev();
extern void _ZN9S100C5_nt3v75Ev();
extern void _ZN9S100C5_nt3v76Ev();
extern void _ZN9S100C5_nt3v77Ev();
extern void _ZN9S100C5_nt3v78Ev();
extern void _ZN9S100C5_nt3v79Ev();
extern void _ZN9S100C5_nt3v80Ev();
extern void _ZN9S100C5_nt3v81Ev();
extern void _ZN9S100C5_nt3v82Ev();
extern void _ZN9S100C5_nt3v83Ev();
extern void _ZN9S100C5_nt3v84Ev();
extern void _ZN9S100C5_nt3v85Ev();
extern void _ZN9S100C5_nt3v86Ev();
extern void _ZN9S100C5_nt3v87Ev();
extern void _ZN9S100C5_nt3v88Ev();
extern void _ZN9S100C5_nt3v89Ev();
extern void _ZN9S100C5_nt3v90Ev();
extern void _ZN9S100C5_nt3v91Ev();
extern void _ZN9S100C5_nt3v92Ev();
extern void _ZN9S100C5_nt3v93Ev();
extern void _ZN9S100C5_nt3v94Ev();
extern void _ZN9S100C5_nt3v95Ev();
extern void _ZN9S100C5_nt3v96Ev();
extern void _ZN9S100C5_nt3v97Ev();
extern void _ZN9S100C5_nt3v98Ev();
extern void _ZN9S100C5_nt3v99Ev();
extern void _ZN9S100C5_nt4v100Ev();
extern void _ZN9S100C5_nt4v101Ev();
extern void _ZN9S100C5_nt4v102Ev();
extern void _ZN9S100C5_nt4v103Ev();
extern void _ZN9S100C5_nt4v104Ev();
extern void _ZN9S100C5_nt4v105Ev();
extern void _ZN9S100C5_nt4v106Ev();
extern void _ZN9S100C5_nt4v107Ev();
extern void _ZN9S100C5_nt4v108Ev();
extern void _ZN9S100C5_nt4v109Ev();
extern void _ZN9S100C5_nt4v110Ev();
extern void _ZN9S100C5_nt4v111Ev();
extern void _ZN9S100C5_nt4v112Ev();
extern void _ZN9S100C5_nt4v113Ev();
extern void _ZN9S100C5_nt4v114Ev();
extern void _ZN9S100C5_nt4v115Ev();
extern void _ZN9S100C5_nt4v116Ev();
extern void _ZN9S100C5_nt4v117Ev();
extern void _ZN9S100C5_nt4v118Ev();
extern void _ZN9S100C5_nt4v119Ev();
extern void _ZN9S100C5_nt4v120Ev();
extern void _ZN9S100C5_nt4v121Ev();
extern void _ZN9S100C5_nt4v122Ev();
extern void _ZN9S100C5_nt4v123Ev();
extern void _ZN9S100C5_nt4v124Ev();
extern void _ZN9S100C5_nt4v125Ev();
extern void _ZN9S100C5_nt4v126Ev();
extern void _ZN9S100C5_nt4v127Ev();
extern void _ZN9S100C5_nt4v128Ev();
extern void _ZN9S100C5_nt4v129Ev();
extern void _ZN9S100C5_nt4v130Ev();
extern void _ZN9S100C5_nt4v131Ev();
extern void _ZN9S100C5_nt4v132Ev();
extern void _ZN9S100C5_nt4v133Ev();
extern void _ZN9S100C5_nt4v134Ev();
extern void _ZN9S100C5_nt4v135Ev();
extern void _ZN9S100C5_nt4v136Ev();
extern void _ZN9S100C5_nt4v137Ev();
extern void _ZN9S100C5_nt4v138Ev();
extern void _ZN9S100C5_nt4v139Ev();
extern void _ZN9S100C5_nt4v140Ev();
extern void _ZN9S100C5_nt4v141Ev();
extern void _ZN9S100C5_nt4v142Ev();
extern void _ZN9S100C5_nt4v143Ev();
extern void _ZN9S100C5_nt4v144Ev();
extern void _ZN9S100C5_nt4v145Ev();
extern void _ZN9S100C5_nt4v146Ev();
extern void _ZN9S100C4_nt4v147Ev();
extern void _ZN9S100C4_nt4v148Ev();
extern void _ZN9S100C4_nt4v149Ev();
extern void _ZN9S100C4_nt4v150Ev();
extern void _ZN9S100C4_nt4v151Ev();
extern void _ZN9S100C4_nt4v152Ev();
extern void _ZN9S100C4_nt4v153Ev();
extern void _ZN9S100C4_nt4v154Ev();
extern void _ZN9S100C4_nt4v155Ev();
extern void _ZN9S100C4_nt4v156Ev();
extern void _ZN9S100C4_nt4v157Ev();
extern void _ZN9S100C4_nt4v158Ev();
extern void _ZN9S100C4_nt4v159Ev();
extern void _ZN9S100C4_nt4v160Ev();
extern void _ZN9S100C4_nt4v161Ev();
extern void _ZN9S100C4_nt4v162Ev();
extern void _ZN9S100C4_nt4v163Ev();
extern void _ZN9S100C4_nt4v164Ev();
extern void _ZN9S100C4_nt4v165Ev();
extern void _ZN9S100C4_nt4v166Ev();
extern void _ZN9S100C4_nt4v167Ev();
extern void _ZN9S100C4_nt4v168Ev();
extern void _ZN9S100C4_nt4v169Ev();
extern void _ZN9S100C4_nt4v170Ev();
extern void _ZN9S100C4_nt4v171Ev();
extern void _ZN9S100C4_nt4v172Ev();
extern void _ZN9S100C4_nt4v173Ev();
extern void _ZN9S100C4_nt4v174Ev();
extern void _ZN9S100C4_nt4v175Ev();
extern void _ZN9S100C4_nt4v176Ev();
extern void _ZN9S100C4_nt4v177Ev();
extern void _ZN9S100C4_nt4v178Ev();
extern void _ZN9S100C4_nt4v179Ev();
extern void _ZN9S100C4_nt4v180Ev();
extern void _ZN9S100C4_nt4v181Ev();
extern void _ZN9S100C4_nt4v182Ev();
extern void _ZN9S100C4_nt4v183Ev();
extern void _ZN9S100C4_nt4v184Ev();
extern void _ZN9S100C4_nt4v185Ev();
extern void _ZN9S100C4_nt4v186Ev();
extern void _ZN9S100C4_nt4v187Ev();
extern void _ZN9S100C4_nt4v188Ev();
extern void _ZN9S100C4_nt4v189Ev();
extern void _ZN9S100C4_nt4v190Ev();
extern void _ZN9S100C4_nt4v191Ev();
extern void _ZN9S100C4_nt4v192Ev();
extern void _ZN9S100C4_nt4v193Ev();
extern void _ZN9S100C4_nt4v194Ev();
extern void _ZN9S100C4_nt4v195Ev();
extern void _ZN9S100C4_nt4v196Ev();
extern void _ZN9S100C4_nt4v197Ev();
extern void _ZN9S100C4_nt4v198Ev();
extern void _ZN9S100C4_nt4v199Ev();
extern void _ZN9S100C4_nt4v200Ev();
extern void _ZN9S100C4_nt4v201Ev();
extern void _ZN9S100C4_nt4v202Ev();
extern void _ZN9S100C4_nt4v203Ev();
extern void _ZN9S100C4_nt4v204Ev();
extern void _ZN9S100C4_nt4v205Ev();
extern void _ZN9S100C4_nt4v206Ev();
extern void _ZN9S100C4_nt4v207Ev();
extern void _ZN9S100C4_nt4v208Ev();
extern void _ZN9S100C4_nt4v209Ev();
extern void _ZN9S100C4_nt4v210Ev();
extern void _ZN9S100C4_nt4v211Ev();
extern void _ZN9S100C4_nt4v212Ev();
extern void _ZN9S100C4_nt4v213Ev();
extern void _ZN9S100C4_nt4v214Ev();
extern void _ZN9S100C4_nt4v215Ev();
extern void _ZN9S100C3_nt4v216Ev();
extern void _ZN9S100C3_nt4v217Ev();
extern void _ZN9S100C3_nt4v218Ev();
extern void _ZN9S100C3_nt4v219Ev();
extern void _ZN9S100C3_nt4v220Ev();
extern void _ZN9S100C3_nt4v221Ev();
extern void _ZN9S100C3_nt4v222Ev();
extern void _ZN9S100C3_nt4v223Ev();
extern void _ZN9S100C3_nt4v224Ev();
extern void _ZN9S100C3_nt4v225Ev();
static  VTBL_ENTRY vtc_S100C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S100C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S100C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S100C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v225Ev,
};
extern VTBL_ENTRY _ZTI9S100C3_nt[];
VTBL_ENTRY *P__ZTI9S100C3_nt = _ZTI9S100C3_nt; 
extern  VTBL_ENTRY _ZTV9S100C3_nt[];
Class_Descriptor cd_S100C3_nt = {  "S100C3_nt", // class name
  bases_S100C3_nt, 4,
  &(vtc_S100C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1240,920), // object size
  NSPAIRA(_ZTI9S100C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S100C3_nt),225, //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  S100C2  : S100C3_nt {
  virtual  ~S100C2(); // _ZN6S100C2D1Ev
  virtual void  v226(); // _ZN6S100C24v226Ev
  virtual void  v227(); // _ZN6S100C24v227Ev
  S100C2(); // tgen
};
//SIG(-1 S100C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 FC7{ m Fi[2]} Fp[2]} vd v67 v68} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 FC8{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC9 Fp FC12{ BC13{ BC11}} FC12 FC12 FC14{ BC15{ BC11}} Fc Fi Fp FC7 FC7 FC7 FC7 FC7 FC7 FC16{ m Fp FC7} FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16} vd 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 v213 FC17{ BC18{ m Fi[4]}} FC7 Fp[2] FC19{ m FC7 Fp FC17 Fp} FC20{ m Fp[8] Fc[4]} Fi FC21{ m Fp[5] FC22{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC7[4] FC23{ m FC24{ m Fi[3]} FC25{ m} FC26{ BC27{ m Fi[2] Fc[2]} Fi} Fc} FC24 Fi FC28{ m FC29{ BC30{ m Fp[2]}} Fc FC31{ BC32{ BC33{ BC11}}} Fi FC7 FC7 Fp} FC28 Fp FC24 FC14 FC34{ BC35{ BC11}} Fi:1 Fi:1 Fi:1 FC25 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16} vd v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 Fp FC7} vd v1 v2}


 S100C2 ::~S100C2(){ note_dtor("S100C2", this);}
void  S100C2 ::v226(){vfunc_called(this, "_ZN6S100C24v226Ev");}
void  S100C2 ::v227(){vfunc_called(this, "_ZN6S100C24v227Ev");}
S100C2 ::S100C2(){ note_ctor("S100C2", this);} // tgen

static void Test_S100C2()
{
  extern Class_Descriptor cd_S100C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(156,231)];
    init_test(&cd_S100C2, buf);
    S100C2 *dp, &lv = *(dp=new (buf) S100C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1240,920), "sizeof(S100C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C2)");
    check_base_class_offset(lv, (S100C7_nt*)(S100C6_nt*)(S100C5_nt*)(S100C4_nt*)(S100C3_nt*), 0, "S100C2");
    check_base_class_offset(lv, (S100C6_nt*)(S100C5_nt*)(S100C4_nt*)(S100C3_nt*), 0, "S100C2");
    check_base_class_offset(lv, (S100C5_nt*)(S100C4_nt*)(S100C3_nt*), 0, "S100C2");
    check_base_class_offset(lv, (S100C4_nt*)(S100C3_nt*), 0, "S100C2");
    check_base_class_offset(lv, (S100C3_nt*), 0, "S100C2");
    test_class_info(&lv, &cd_S100C2);
    dp->~S100C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C2(Test_S100C2, "S100C2", ABISELECT(1240,920));

#else // __cplusplus

extern void _ZN6S100C2C1Ev();
extern void _ZN6S100C2D1Ev();
Name_Map name_map_S100C2[] = {
  NSPAIR(_ZN6S100C2C1Ev),
  NSPAIR(_ZN6S100C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S100C7_nt;
extern VTBL_ENTRY _ZTI9S100C7_nt[];
extern  VTBL_ENTRY _ZTV9S100C7_nt[];
extern Class_Descriptor cd_S100C6_nt;
extern VTBL_ENTRY _ZTI9S100C6_nt[];
extern  VTBL_ENTRY _ZTV9S100C6_nt[];
extern Class_Descriptor cd_S100C5_nt;
extern VTBL_ENTRY _ZTI9S100C5_nt[];
extern  VTBL_ENTRY _ZTV9S100C5_nt[];
extern Class_Descriptor cd_S100C4_nt;
extern VTBL_ENTRY _ZTI9S100C4_nt[];
extern  VTBL_ENTRY _ZTV9S100C4_nt[];
extern Class_Descriptor cd_S100C3_nt;
extern VTBL_ENTRY _ZTI9S100C3_nt[];
extern  VTBL_ENTRY _ZTV9S100C3_nt[];
static Base_Class bases_S100C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S100C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S100C2[];
extern void _ZN6S100C2D1Ev();
extern void _ZN6S100C2D0Ev();
extern void _ZN9S100C7_nt2v5Ev();
extern void _ZN9S100C7_nt2v6Ev();
extern void _ZN9S100C7_nt2v7Ev();
extern void _ZN9S100C7_nt2v8Ev();
extern void _ZN9S100C7_nt2v9Ev();
extern void _ZN9S100C7_nt3v10Ev();
extern void _ZN9S100C7_nt3v11Ev();
extern void _ZN9S100C7_nt3v12Ev();
extern void _ZN9S100C7_nt3v13Ev();
extern void _ZN9S100C7_nt3v14Ev();
extern void _ZN9S100C7_nt3v15Ev();
extern void _ZN9S100C7_nt3v16Ev();
extern void _ZN9S100C7_nt3v17Ev();
extern void _ZN9S100C7_nt3v18Ev();
extern void _ZN9S100C7_nt3v19Ev();
extern void _ZN9S100C7_nt3v20Ev();
extern void _ZN9S100C7_nt3v21Ev();
extern void _ZN9S100C7_nt3v22Ev();
extern void _ZN9S100C7_nt3v23Ev();
extern void _ZN9S100C7_nt3v24Ev();
extern void _ZN9S100C7_nt3v25Ev();
extern void _ZN9S100C7_nt3v26Ev();
extern void _ZN9S100C7_nt3v27Ev();
extern void _ZN9S100C7_nt3v28Ev();
extern void _ZN9S100C7_nt3v29Ev();
extern void _ZN9S100C7_nt3v30Ev();
extern void _ZN9S100C7_nt3v31Ev();
extern void _ZN9S100C7_nt3v32Ev();
extern void _ZN9S100C7_nt3v33Ev();
extern void _ZN9S100C7_nt3v34Ev();
extern void _ZN9S100C7_nt3v35Ev();
extern void _ZN9S100C7_nt3v36Ev();
extern void _ZN9S100C7_nt3v37Ev();
extern void _ZN9S100C7_nt3v38Ev();
extern void _ZN9S100C7_nt3v39Ev();
extern void _ZN9S100C7_nt3v40Ev();
extern void _ZN9S100C7_nt3v41Ev();
extern void _ZN9S100C7_nt3v42Ev();
extern void _ZN9S100C7_nt3v43Ev();
extern void _ZN9S100C7_nt3v44Ev();
extern void _ZN9S100C7_nt3v45Ev();
extern void _ZN9S100C7_nt3v46Ev();
extern void _ZN9S100C7_nt3v47Ev();
extern void _ZN9S100C7_nt3v48Ev();
extern void _ZN9S100C7_nt3v49Ev();
extern void _ZN9S100C7_nt3v50Ev();
extern void _ZN9S100C7_nt3v51Ev();
extern void _ZN9S100C7_nt3v52Ev();
extern void _ZN9S100C7_nt3v53Ev();
extern void _ZN9S100C7_nt3v54Ev();
extern void _ZN9S100C7_nt3v55Ev();
extern void _ZN9S100C7_nt3v56Ev();
extern void _ZN9S100C7_nt3v57Ev();
extern void _ZN9S100C7_nt3v58Ev();
extern void _ZN9S100C7_nt3v59Ev();
extern void _ZN9S100C7_nt3v60Ev();
extern void _ZN9S100C7_nt3v61Ev();
extern void _ZN9S100C7_nt3v62Ev();
extern void _ZN9S100C7_nt3v63Ev();
extern void _ZN9S100C7_nt3v64Ev();
extern void _ZN9S100C7_nt3v65Ev();
extern void _ZN9S100C7_nt3v66Ev();
extern void _ZN9S100C7_nt3v67Ev();
extern void _ZN9S100C7_nt3v68Ev();
extern void _ZN9S100C6_nt3v69Ev();
extern void _ZN9S100C6_nt3v70Ev();
extern void _ZN9S100C5_nt3v71Ev();
extern void _ZN9S100C5_nt3v72Ev();
extern void _ZN9S100C5_nt3v73Ev();
extern void _ZN9S100C5_nt3v74Ev();
extern void _ZN9S100C5_nt3v75Ev();
extern void _ZN9S100C5_nt3v76Ev();
extern void _ZN9S100C5_nt3v77Ev();
extern void _ZN9S100C5_nt3v78Ev();
extern void _ZN9S100C5_nt3v79Ev();
extern void _ZN9S100C5_nt3v80Ev();
extern void _ZN9S100C5_nt3v81Ev();
extern void _ZN9S100C5_nt3v82Ev();
extern void _ZN9S100C5_nt3v83Ev();
extern void _ZN9S100C5_nt3v84Ev();
extern void _ZN9S100C5_nt3v85Ev();
extern void _ZN9S100C5_nt3v86Ev();
extern void _ZN9S100C5_nt3v87Ev();
extern void _ZN9S100C5_nt3v88Ev();
extern void _ZN9S100C5_nt3v89Ev();
extern void _ZN9S100C5_nt3v90Ev();
extern void _ZN9S100C5_nt3v91Ev();
extern void _ZN9S100C5_nt3v92Ev();
extern void _ZN9S100C5_nt3v93Ev();
extern void _ZN9S100C5_nt3v94Ev();
extern void _ZN9S100C5_nt3v95Ev();
extern void _ZN9S100C5_nt3v96Ev();
extern void _ZN9S100C5_nt3v97Ev();
extern void _ZN9S100C5_nt3v98Ev();
extern void _ZN9S100C5_nt3v99Ev();
extern void _ZN9S100C5_nt4v100Ev();
extern void _ZN9S100C5_nt4v101Ev();
extern void _ZN9S100C5_nt4v102Ev();
extern void _ZN9S100C5_nt4v103Ev();
extern void _ZN9S100C5_nt4v104Ev();
extern void _ZN9S100C5_nt4v105Ev();
extern void _ZN9S100C5_nt4v106Ev();
extern void _ZN9S100C5_nt4v107Ev();
extern void _ZN9S100C5_nt4v108Ev();
extern void _ZN9S100C5_nt4v109Ev();
extern void _ZN9S100C5_nt4v110Ev();
extern void _ZN9S100C5_nt4v111Ev();
extern void _ZN9S100C5_nt4v112Ev();
extern void _ZN9S100C5_nt4v113Ev();
extern void _ZN9S100C5_nt4v114Ev();
extern void _ZN9S100C5_nt4v115Ev();
extern void _ZN9S100C5_nt4v116Ev();
extern void _ZN9S100C5_nt4v117Ev();
extern void _ZN9S100C5_nt4v118Ev();
extern void _ZN9S100C5_nt4v119Ev();
extern void _ZN9S100C5_nt4v120Ev();
extern void _ZN9S100C5_nt4v121Ev();
extern void _ZN9S100C5_nt4v122Ev();
extern void _ZN9S100C5_nt4v123Ev();
extern void _ZN9S100C5_nt4v124Ev();
extern void _ZN9S100C5_nt4v125Ev();
extern void _ZN9S100C5_nt4v126Ev();
extern void _ZN9S100C5_nt4v127Ev();
extern void _ZN9S100C5_nt4v128Ev();
extern void _ZN9S100C5_nt4v129Ev();
extern void _ZN9S100C5_nt4v130Ev();
extern void _ZN9S100C5_nt4v131Ev();
extern void _ZN9S100C5_nt4v132Ev();
extern void _ZN9S100C5_nt4v133Ev();
extern void _ZN9S100C5_nt4v134Ev();
extern void _ZN9S100C5_nt4v135Ev();
extern void _ZN9S100C5_nt4v136Ev();
extern void _ZN9S100C5_nt4v137Ev();
extern void _ZN9S100C5_nt4v138Ev();
extern void _ZN9S100C5_nt4v139Ev();
extern void _ZN9S100C5_nt4v140Ev();
extern void _ZN9S100C5_nt4v141Ev();
extern void _ZN9S100C5_nt4v142Ev();
extern void _ZN9S100C5_nt4v143Ev();
extern void _ZN9S100C5_nt4v144Ev();
extern void _ZN9S100C5_nt4v145Ev();
extern void _ZN9S100C5_nt4v146Ev();
extern void _ZN9S100C4_nt4v147Ev();
extern void _ZN9S100C4_nt4v148Ev();
extern void _ZN9S100C4_nt4v149Ev();
extern void _ZN9S100C4_nt4v150Ev();
extern void _ZN9S100C4_nt4v151Ev();
extern void _ZN9S100C4_nt4v152Ev();
extern void _ZN9S100C4_nt4v153Ev();
extern void _ZN9S100C4_nt4v154Ev();
extern void _ZN9S100C4_nt4v155Ev();
extern void _ZN9S100C4_nt4v156Ev();
extern void _ZN9S100C4_nt4v157Ev();
extern void _ZN9S100C4_nt4v158Ev();
extern void _ZN9S100C4_nt4v159Ev();
extern void _ZN9S100C4_nt4v160Ev();
extern void _ZN9S100C4_nt4v161Ev();
extern void _ZN9S100C4_nt4v162Ev();
extern void _ZN9S100C4_nt4v163Ev();
extern void _ZN9S100C4_nt4v164Ev();
extern void _ZN9S100C4_nt4v165Ev();
extern void _ZN9S100C4_nt4v166Ev();
extern void _ZN9S100C4_nt4v167Ev();
extern void _ZN9S100C4_nt4v168Ev();
extern void _ZN9S100C4_nt4v169Ev();
extern void _ZN9S100C4_nt4v170Ev();
extern void _ZN9S100C4_nt4v171Ev();
extern void _ZN9S100C4_nt4v172Ev();
extern void _ZN9S100C4_nt4v173Ev();
extern void _ZN9S100C4_nt4v174Ev();
extern void _ZN9S100C4_nt4v175Ev();
extern void _ZN9S100C4_nt4v176Ev();
extern void _ZN9S100C4_nt4v177Ev();
extern void _ZN9S100C4_nt4v178Ev();
extern void _ZN9S100C4_nt4v179Ev();
extern void _ZN9S100C4_nt4v180Ev();
extern void _ZN9S100C4_nt4v181Ev();
extern void _ZN9S100C4_nt4v182Ev();
extern void _ZN9S100C4_nt4v183Ev();
extern void _ZN9S100C4_nt4v184Ev();
extern void _ZN9S100C4_nt4v185Ev();
extern void _ZN9S100C4_nt4v186Ev();
extern void _ZN9S100C4_nt4v187Ev();
extern void _ZN9S100C4_nt4v188Ev();
extern void _ZN9S100C4_nt4v189Ev();
extern void _ZN9S100C4_nt4v190Ev();
extern void _ZN9S100C4_nt4v191Ev();
extern void _ZN9S100C4_nt4v192Ev();
extern void _ZN9S100C4_nt4v193Ev();
extern void _ZN9S100C4_nt4v194Ev();
extern void _ZN9S100C4_nt4v195Ev();
extern void _ZN9S100C4_nt4v196Ev();
extern void _ZN9S100C4_nt4v197Ev();
extern void _ZN9S100C4_nt4v198Ev();
extern void _ZN9S100C4_nt4v199Ev();
extern void _ZN9S100C4_nt4v200Ev();
extern void _ZN9S100C4_nt4v201Ev();
extern void _ZN9S100C4_nt4v202Ev();
extern void _ZN9S100C4_nt4v203Ev();
extern void _ZN9S100C4_nt4v204Ev();
extern void _ZN9S100C4_nt4v205Ev();
extern void _ZN9S100C4_nt4v206Ev();
extern void _ZN9S100C4_nt4v207Ev();
extern void _ZN9S100C4_nt4v208Ev();
extern void _ZN9S100C4_nt4v209Ev();
extern void _ZN9S100C4_nt4v210Ev();
extern void _ZN9S100C4_nt4v211Ev();
extern void _ZN9S100C4_nt4v212Ev();
extern void _ZN9S100C4_nt4v213Ev();
extern void _ZN9S100C4_nt4v214Ev();
extern void _ZN9S100C4_nt4v215Ev();
extern void _ZN9S100C3_nt4v216Ev();
extern void _ZN9S100C3_nt4v217Ev();
extern void _ZN9S100C3_nt4v218Ev();
extern void _ZN9S100C3_nt4v219Ev();
extern void _ZN9S100C3_nt4v220Ev();
extern void _ZN9S100C3_nt4v221Ev();
extern void _ZN9S100C3_nt4v222Ev();
extern void _ZN9S100C3_nt4v223Ev();
extern void _ZN9S100C3_nt4v224Ev();
extern void _ZN9S100C3_nt4v225Ev();
extern void _ZN6S100C24v226Ev();
extern void _ZN6S100C24v227Ev();
static  VTBL_ENTRY vtc_S100C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S100C2[0]),
  (VTBL_ENTRY)&_ZN6S100C2D1Ev,
  (VTBL_ENTRY)&_ZN6S100C2D0Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v225Ev,
  (VTBL_ENTRY)&_ZN6S100C24v226Ev,
  (VTBL_ENTRY)&_ZN6S100C24v227Ev,
};
extern VTBL_ENTRY _ZTI6S100C2[];
extern  VTBL_ENTRY _ZTV6S100C2[];
Class_Descriptor cd_S100C2 = {  "S100C2", // class name
  bases_S100C2, 5,
  &(vtc_S100C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1240,920), // object size
  NSPAIRA(_ZTI6S100C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S100C2),227, //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  S100C1  : S100C2 {
  ::S100C21_nt s100c1f0;
  virtual  ~S100C1(); // _ZN6S100C1D1Ev
  virtual void  v1(); // _ZN6S100C12v1Ev
  virtual void  v2(); // _ZN6S100C12v2Ev
  virtual void  v3(); // _ZN6S100C12v3Ev
  virtual void  v4(); // _ZN6S100C12v4Ev
  S100C1(); // tgen
};
//SIG(1 S100C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ 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 FC8{ m Fi[2]} Fp[2]} vd v69 v70} vd 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 FC9{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC12{ m Fp Fi[2]}}} FC10 Fp FC13{ BC14{ BC12}} FC13 FC13 FC15{ BC16{ BC12}} Fc Fi Fp FC8 FC8 FC8 FC8 FC8 FC8 FC17{ m Fp FC8} FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17} vd v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 FC18{ BC19{ m Fi[4]}} FC8 Fp[2] FC20{ m FC8 Fp FC18 Fp} FC21{ m Fp[8] Fc[4]} Fi FC22{ m Fp[5] FC23{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC8[4] FC24{ m FC25{ m Fi[3]} FC26{ m} FC27{ BC28{ m Fi[2] Fc[2]} Fi} Fc} FC25 Fi FC29{ m FC30{ BC31{ m Fp[2]}} Fc FC32{ BC33{ BC34{ BC12}}} Fi FC8 FC8 Fp} FC29 Fp FC25 FC15 FC35{ BC36{ BC12}} Fi:1 Fi:1 Fi:1 FC26 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17} vd v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 Fp FC8} vd v226 v227} vd v1 v2 v3 v4 FC17}


 S100C1 ::~S100C1(){ note_dtor("S100C1", this);}
void  S100C1 ::v1(){vfunc_called(this, "_ZN6S100C12v1Ev");}
void  S100C1 ::v2(){vfunc_called(this, "_ZN6S100C12v2Ev");}
void  S100C1 ::v3(){vfunc_called(this, "_ZN6S100C12v3Ev");}
void  S100C1 ::v4(){vfunc_called(this, "_ZN6S100C12v4Ev");}
S100C1 ::S100C1(){ note_ctor("S100C1", this);} // tgen

static void Test_S100C1()
{
  extern Class_Descriptor cd_S100C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(158,234)];
    init_test(&cd_S100C1, buf);
    S100C1 *dp, &lv = *(dp=new (buf) S100C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1256,932), "sizeof(S100C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S100C1)");
    check_base_class_offset(lv, (S100C7_nt*)(S100C6_nt*)(S100C5_nt*)(S100C4_nt*)(S100C3_nt*)(S100C2*), 0, "S100C1");
    check_base_class_offset(lv, (S100C6_nt*)(S100C5_nt*)(S100C4_nt*)(S100C3_nt*)(S100C2*), 0, "S100C1");
    check_base_class_offset(lv, (S100C5_nt*)(S100C4_nt*)(S100C3_nt*)(S100C2*), 0, "S100C1");
    check_base_class_offset(lv, (S100C4_nt*)(S100C3_nt*)(S100C2*), 0, "S100C1");
    check_base_class_offset(lv, (S100C3_nt*)(S100C2*), 0, "S100C1");
    check_base_class_offset(lv, (S100C2*), 0, "S100C1");
    check_field_offset(lv, s100c1f0, ABISELECT(1240,920), "S100C1.s100c1f0");
    test_class_info(&lv, &cd_S100C1);
    dp->~S100C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS100C1(Test_S100C1, "S100C1", ABISELECT(1256,932));

#else // __cplusplus

extern void _ZN6S100C1C1Ev();
extern void _ZN6S100C1D1Ev();
Name_Map name_map_S100C1[] = {
  NSPAIR(_ZN6S100C1C1Ev),
  NSPAIR(_ZN6S100C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S100C7_nt;
extern VTBL_ENTRY _ZTI9S100C7_nt[];
extern  VTBL_ENTRY _ZTV9S100C7_nt[];
extern Class_Descriptor cd_S100C6_nt;
extern VTBL_ENTRY _ZTI9S100C6_nt[];
extern  VTBL_ENTRY _ZTV9S100C6_nt[];
extern Class_Descriptor cd_S100C5_nt;
extern VTBL_ENTRY _ZTI9S100C5_nt[];
extern  VTBL_ENTRY _ZTV9S100C5_nt[];
extern Class_Descriptor cd_S100C4_nt;
extern VTBL_ENTRY _ZTI9S100C4_nt[];
extern  VTBL_ENTRY _ZTV9S100C4_nt[];
extern Class_Descriptor cd_S100C3_nt;
extern VTBL_ENTRY _ZTI9S100C3_nt[];
extern  VTBL_ENTRY _ZTV9S100C3_nt[];
extern Class_Descriptor cd_S100C2;
extern VTBL_ENTRY _ZTI6S100C2[];
extern  VTBL_ENTRY _ZTV6S100C2[];
static Base_Class bases_S100C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S100C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S100C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S100C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S100C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S100C1[];
extern void _ZN6S100C1D1Ev();
extern void _ZN6S100C1D0Ev();
extern void _ZN9S100C7_nt2v5Ev();
extern void _ZN9S100C7_nt2v6Ev();
extern void _ZN9S100C7_nt2v7Ev();
extern void _ZN9S100C7_nt2v8Ev();
extern void _ZN9S100C7_nt2v9Ev();
extern void _ZN9S100C7_nt3v10Ev();
extern void _ZN9S100C7_nt3v11Ev();
extern void _ZN9S100C7_nt3v12Ev();
extern void _ZN9S100C7_nt3v13Ev();
extern void _ZN9S100C7_nt3v14Ev();
extern void _ZN9S100C7_nt3v15Ev();
extern void _ZN9S100C7_nt3v16Ev();
extern void _ZN9S100C7_nt3v17Ev();
extern void _ZN9S100C7_nt3v18Ev();
extern void _ZN9S100C7_nt3v19Ev();
extern void _ZN9S100C7_nt3v20Ev();
extern void _ZN9S100C7_nt3v21Ev();
extern void _ZN9S100C7_nt3v22Ev();
extern void _ZN9S100C7_nt3v23Ev();
extern void _ZN9S100C7_nt3v24Ev();
extern void _ZN9S100C7_nt3v25Ev();
extern void _ZN9S100C7_nt3v26Ev();
extern void _ZN9S100C7_nt3v27Ev();
extern void _ZN9S100C7_nt3v28Ev();
extern void _ZN9S100C7_nt3v29Ev();
extern void _ZN9S100C7_nt3v30Ev();
extern void _ZN9S100C7_nt3v31Ev();
extern void _ZN9S100C7_nt3v32Ev();
extern void _ZN9S100C7_nt3v33Ev();
extern void _ZN9S100C7_nt3v34Ev();
extern void _ZN9S100C7_nt3v35Ev();
extern void _ZN9S100C7_nt3v36Ev();
extern void _ZN9S100C7_nt3v37Ev();
extern void _ZN9S100C7_nt3v38Ev();
extern void _ZN9S100C7_nt3v39Ev();
extern void _ZN9S100C7_nt3v40Ev();
extern void _ZN9S100C7_nt3v41Ev();
extern void _ZN9S100C7_nt3v42Ev();
extern void _ZN9S100C7_nt3v43Ev();
extern void _ZN9S100C7_nt3v44Ev();
extern void _ZN9S100C7_nt3v45Ev();
extern void _ZN9S100C7_nt3v46Ev();
extern void _ZN9S100C7_nt3v47Ev();
extern void _ZN9S100C7_nt3v48Ev();
extern void _ZN9S100C7_nt3v49Ev();
extern void _ZN9S100C7_nt3v50Ev();
extern void _ZN9S100C7_nt3v51Ev();
extern void _ZN9S100C7_nt3v52Ev();
extern void _ZN9S100C7_nt3v53Ev();
extern void _ZN9S100C7_nt3v54Ev();
extern void _ZN9S100C7_nt3v55Ev();
extern void _ZN9S100C7_nt3v56Ev();
extern void _ZN9S100C7_nt3v57Ev();
extern void _ZN9S100C7_nt3v58Ev();
extern void _ZN9S100C7_nt3v59Ev();
extern void _ZN9S100C7_nt3v60Ev();
extern void _ZN9S100C7_nt3v61Ev();
extern void _ZN9S100C7_nt3v62Ev();
extern void _ZN9S100C7_nt3v63Ev();
extern void _ZN9S100C7_nt3v64Ev();
extern void _ZN9S100C7_nt3v65Ev();
extern void _ZN9S100C7_nt3v66Ev();
extern void _ZN9S100C7_nt3v67Ev();
extern void _ZN9S100C7_nt3v68Ev();
extern void _ZN9S100C6_nt3v69Ev();
extern void _ZN9S100C6_nt3v70Ev();
extern void _ZN9S100C5_nt3v71Ev();
extern void _ZN9S100C5_nt3v72Ev();
extern void _ZN9S100C5_nt3v73Ev();
extern void _ZN9S100C5_nt3v74Ev();
extern void _ZN9S100C5_nt3v75Ev();
extern void _ZN9S100C5_nt3v76Ev();
extern void _ZN9S100C5_nt3v77Ev();
extern void _ZN9S100C5_nt3v78Ev();
extern void _ZN9S100C5_nt3v79Ev();
extern void _ZN9S100C5_nt3v80Ev();
extern void _ZN9S100C5_nt3v81Ev();
extern void _ZN9S100C5_nt3v82Ev();
extern void _ZN9S100C5_nt3v83Ev();
extern void _ZN9S100C5_nt3v84Ev();
extern void _ZN9S100C5_nt3v85Ev();
extern void _ZN9S100C5_nt3v86Ev();
extern void _ZN9S100C5_nt3v87Ev();
extern void _ZN9S100C5_nt3v88Ev();
extern void _ZN9S100C5_nt3v89Ev();
extern void _ZN9S100C5_nt3v90Ev();
extern void _ZN9S100C5_nt3v91Ev();
extern void _ZN9S100C5_nt3v92Ev();
extern void _ZN9S100C5_nt3v93Ev();
extern void _ZN9S100C5_nt3v94Ev();
extern void _ZN9S100C5_nt3v95Ev();
extern void _ZN9S100C5_nt3v96Ev();
extern void _ZN9S100C5_nt3v97Ev();
extern void _ZN9S100C5_nt3v98Ev();
extern void _ZN9S100C5_nt3v99Ev();
extern void _ZN9S100C5_nt4v100Ev();
extern void _ZN9S100C5_nt4v101Ev();
extern void _ZN9S100C5_nt4v102Ev();
extern void _ZN9S100C5_nt4v103Ev();
extern void _ZN9S100C5_nt4v104Ev();
extern void _ZN9S100C5_nt4v105Ev();
extern void _ZN9S100C5_nt4v106Ev();
extern void _ZN9S100C5_nt4v107Ev();
extern void _ZN9S100C5_nt4v108Ev();
extern void _ZN9S100C5_nt4v109Ev();
extern void _ZN9S100C5_nt4v110Ev();
extern void _ZN9S100C5_nt4v111Ev();
extern void _ZN9S100C5_nt4v112Ev();
extern void _ZN9S100C5_nt4v113Ev();
extern void _ZN9S100C5_nt4v114Ev();
extern void _ZN9S100C5_nt4v115Ev();
extern void _ZN9S100C5_nt4v116Ev();
extern void _ZN9S100C5_nt4v117Ev();
extern void _ZN9S100C5_nt4v118Ev();
extern void _ZN9S100C5_nt4v119Ev();
extern void _ZN9S100C5_nt4v120Ev();
extern void _ZN9S100C5_nt4v121Ev();
extern void _ZN9S100C5_nt4v122Ev();
extern void _ZN9S100C5_nt4v123Ev();
extern void _ZN9S100C5_nt4v124Ev();
extern void _ZN9S100C5_nt4v125Ev();
extern void _ZN9S100C5_nt4v126Ev();
extern void _ZN9S100C5_nt4v127Ev();
extern void _ZN9S100C5_nt4v128Ev();
extern void _ZN9S100C5_nt4v129Ev();
extern void _ZN9S100C5_nt4v130Ev();
extern void _ZN9S100C5_nt4v131Ev();
extern void _ZN9S100C5_nt4v132Ev();
extern void _ZN9S100C5_nt4v133Ev();
extern void _ZN9S100C5_nt4v134Ev();
extern void _ZN9S100C5_nt4v135Ev();
extern void _ZN9S100C5_nt4v136Ev();
extern void _ZN9S100C5_nt4v137Ev();
extern void _ZN9S100C5_nt4v138Ev();
extern void _ZN9S100C5_nt4v139Ev();
extern void _ZN9S100C5_nt4v140Ev();
extern void _ZN9S100C5_nt4v141Ev();
extern void _ZN9S100C5_nt4v142Ev();
extern void _ZN9S100C5_nt4v143Ev();
extern void _ZN9S100C5_nt4v144Ev();
extern void _ZN9S100C5_nt4v145Ev();
extern void _ZN9S100C5_nt4v146Ev();
extern void _ZN9S100C4_nt4v147Ev();
extern void _ZN9S100C4_nt4v148Ev();
extern void _ZN9S100C4_nt4v149Ev();
extern void _ZN9S100C4_nt4v150Ev();
extern void _ZN9S100C4_nt4v151Ev();
extern void _ZN9S100C4_nt4v152Ev();
extern void _ZN9S100C4_nt4v153Ev();
extern void _ZN9S100C4_nt4v154Ev();
extern void _ZN9S100C4_nt4v155Ev();
extern void _ZN9S100C4_nt4v156Ev();
extern void _ZN9S100C4_nt4v157Ev();
extern void _ZN9S100C4_nt4v158Ev();
extern void _ZN9S100C4_nt4v159Ev();
extern void _ZN9S100C4_nt4v160Ev();
extern void _ZN9S100C4_nt4v161Ev();
extern void _ZN9S100C4_nt4v162Ev();
extern void _ZN9S100C4_nt4v163Ev();
extern void _ZN9S100C4_nt4v164Ev();
extern void _ZN9S100C4_nt4v165Ev();
extern void _ZN9S100C4_nt4v166Ev();
extern void _ZN9S100C4_nt4v167Ev();
extern void _ZN9S100C4_nt4v168Ev();
extern void _ZN9S100C4_nt4v169Ev();
extern void _ZN9S100C4_nt4v170Ev();
extern void _ZN9S100C4_nt4v171Ev();
extern void _ZN9S100C4_nt4v172Ev();
extern void _ZN9S100C4_nt4v173Ev();
extern void _ZN9S100C4_nt4v174Ev();
extern void _ZN9S100C4_nt4v175Ev();
extern void _ZN9S100C4_nt4v176Ev();
extern void _ZN9S100C4_nt4v177Ev();
extern void _ZN9S100C4_nt4v178Ev();
extern void _ZN9S100C4_nt4v179Ev();
extern void _ZN9S100C4_nt4v180Ev();
extern void _ZN9S100C4_nt4v181Ev();
extern void _ZN9S100C4_nt4v182Ev();
extern void _ZN9S100C4_nt4v183Ev();
extern void _ZN9S100C4_nt4v184Ev();
extern void _ZN9S100C4_nt4v185Ev();
extern void _ZN9S100C4_nt4v186Ev();
extern void _ZN9S100C4_nt4v187Ev();
extern void _ZN9S100C4_nt4v188Ev();
extern void _ZN9S100C4_nt4v189Ev();
extern void _ZN9S100C4_nt4v190Ev();
extern void _ZN9S100C4_nt4v191Ev();
extern void _ZN9S100C4_nt4v192Ev();
extern void _ZN9S100C4_nt4v193Ev();
extern void _ZN9S100C4_nt4v194Ev();
extern void _ZN9S100C4_nt4v195Ev();
extern void _ZN9S100C4_nt4v196Ev();
extern void _ZN9S100C4_nt4v197Ev();
extern void _ZN9S100C4_nt4v198Ev();
extern void _ZN9S100C4_nt4v199Ev();
extern void _ZN9S100C4_nt4v200Ev();
extern void _ZN9S100C4_nt4v201Ev();
extern void _ZN9S100C4_nt4v202Ev();
extern void _ZN9S100C4_nt4v203Ev();
extern void _ZN9S100C4_nt4v204Ev();
extern void _ZN9S100C4_nt4v205Ev();
extern void _ZN9S100C4_nt4v206Ev();
extern void _ZN9S100C4_nt4v207Ev();
extern void _ZN9S100C4_nt4v208Ev();
extern void _ZN9S100C4_nt4v209Ev();
extern void _ZN9S100C4_nt4v210Ev();
extern void _ZN9S100C4_nt4v211Ev();
extern void _ZN9S100C4_nt4v212Ev();
extern void _ZN9S100C4_nt4v213Ev();
extern void _ZN9S100C4_nt4v214Ev();
extern void _ZN9S100C4_nt4v215Ev();
extern void _ZN9S100C3_nt4v216Ev();
extern void _ZN9S100C3_nt4v217Ev();
extern void _ZN9S100C3_nt4v218Ev();
extern void _ZN9S100C3_nt4v219Ev();
extern void _ZN9S100C3_nt4v220Ev();
extern void _ZN9S100C3_nt4v221Ev();
extern void _ZN9S100C3_nt4v222Ev();
extern void _ZN9S100C3_nt4v223Ev();
extern void _ZN9S100C3_nt4v224Ev();
extern void _ZN9S100C3_nt4v225Ev();
extern void _ZN6S100C24v226Ev();
extern void _ZN6S100C24v227Ev();
extern void _ZN6S100C12v1Ev();
extern void _ZN6S100C12v2Ev();
extern void _ZN6S100C12v3Ev();
extern void _ZN6S100C12v4Ev();
static  VTBL_ENTRY vtc_S100C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S100C1[0]),
  (VTBL_ENTRY)&_ZN6S100C1D1Ev,
  (VTBL_ENTRY)&_ZN6S100C1D0Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S100C7_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S100C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S100C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S100C4_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S100C3_nt4v225Ev,
  (VTBL_ENTRY)&_ZN6S100C24v226Ev,
  (VTBL_ENTRY)&_ZN6S100C24v227Ev,
  (VTBL_ENTRY)&_ZN6S100C12v1Ev,
  (VTBL_ENTRY)&_ZN6S100C12v2Ev,
  (VTBL_ENTRY)&_ZN6S100C12v3Ev,
  (VTBL_ENTRY)&_ZN6S100C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S100C1[];
extern  VTBL_ENTRY _ZTV6S100C1[];
Class_Descriptor cd_S100C1 = {  "S100C1", // class name
  bases_S100C1, 6,
  &(vtc_S100C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1256,932), // object size
  NSPAIRA(_ZTI6S100C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S100C1),231, //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  S2382C8_nt  {
  void  mf2382c8(); // _ZN10S2382C8_nt8mf2382c8Ev
};
//SIG(-1 S2382C8_nt) C1{ m}


void  S2382C8_nt ::mf2382c8(){}

//skip512 S2382C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C6_nt  {
  void *s2382c6f0;
  int s2382c6f1;
  ::S100C32_nt s2382c6f2;
  ::S2382C8_nt s2382c6f3;
  void  mf2382c6(); // _ZN10S2382C6_nt8mf2382c6Ev
};
//SIG(-1 S2382C6_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2382C6_nt ::mf2382c6(){}

//skip512 S2382C6_nt

#else // __cplusplus

Class_Descriptor cd_S2382C6_nt = {  "S2382C6_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  S2382C5_nt  : S2382C6_nt {
};
//SIG(-1 S2382C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S2382C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2382C6_nt;
static Base_Class bases_S2382C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S2382C4_nt  {
  void *s2382c4f0;
  int s2382c4f1;
  ::S2382C5_nt s2382c4f2;
  ::S2382C5_nt s2382c4f3;
  int s2382c4f4;
  virtual  ~S2382C4_nt(); // _ZN10S2382C4_ntD1Ev
  virtual void  v5(); // _ZN10S2382C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2382C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2382C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2382C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2382C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2382C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2382C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2382C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2382C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2382C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2382C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2382C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2382C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2382C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2382C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2382C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2382C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2382C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2382C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2382C4_nt3v24Ev
  virtual void  v25(); // _ZN10S2382C4_nt3v25Ev
  virtual void  v26(); // _ZN10S2382C4_nt3v26Ev
  virtual void  v27(); // _ZN10S2382C4_nt3v27Ev
  S2382C4_nt(); // tgen
};
//SIG(-1 S2382C4_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}


 S2382C4_nt ::~S2382C4_nt(){ note_dtor("S2382C4_nt", this);}
void  S2382C4_nt ::v5(){vfunc_called(this, "_ZN10S2382C4_nt2v5Ev");}
void  S2382C4_nt ::v6(){vfunc_called(this, "_ZN10S2382C4_nt2v6Ev");}
void  S2382C4_nt ::v7(){vfunc_called(this, "_ZN10S2382C4_nt2v7Ev");}
void  S2382C4_nt ::v8(){vfunc_called(this, "_ZN10S2382C4_nt2v8Ev");}
void  S2382C4_nt ::v9(){vfunc_called(this, "_ZN10S2382C4_nt2v9Ev");}
void  S2382C4_nt ::v10(){vfunc_called(this, "_ZN10S2382C4_nt3v10Ev");}
void  S2382C4_nt ::v11(){vfunc_called(this, "_ZN10S2382C4_nt3v11Ev");}
void  S2382C4_nt ::v12(){vfunc_called(this, "_ZN10S2382C4_nt3v12Ev");}
void  S2382C4_nt ::v13(){vfunc_called(this, "_ZN10S2382C4_nt3v13Ev");}
void  S2382C4_nt ::v14(){vfunc_called(this, "_ZN10S2382C4_nt3v14Ev");}
void  S2382C4_nt ::v15(){vfunc_called(this, "_ZN10S2382C4_nt3v15Ev");}
void  S2382C4_nt ::v16(){vfunc_called(this, "_ZN10S2382C4_nt3v16Ev");}
void  S2382C4_nt ::v17(){vfunc_called(this, "_ZN10S2382C4_nt3v17Ev");}
void  S2382C4_nt ::v18(){vfunc_called(this, "_ZN10S2382C4_nt3v18Ev");}
void  S2382C4_nt ::v19(){vfunc_called(this, "_ZN10S2382C4_nt3v19Ev");}
void  S2382C4_nt ::v20(){vfunc_called(this, "_ZN10S2382C4_nt3v20Ev");}
void  S2382C4_nt ::v21(){vfunc_called(this, "_ZN10S2382C4_nt3v21Ev");}
void  S2382C4_nt ::v22(){vfunc_called(this, "_ZN10S2382C4_nt3v22Ev");}
void  S2382C4_nt ::v23(){vfunc_called(this, "_ZN10S2382C4_nt3v23Ev");}
void  S2382C4_nt ::v24(){vfunc_called(this, "_ZN10S2382C4_nt3v24Ev");}
void  S2382C4_nt ::v25(){vfunc_called(this, "_ZN10S2382C4_nt3v25Ev");}
void  S2382C4_nt ::v26(){vfunc_called(this, "_ZN10S2382C4_nt3v26Ev");}
void  S2382C4_nt ::v27(){vfunc_called(this, "_ZN10S2382C4_nt3v27Ev");}
S2382C4_nt ::S2382C4_nt(){ note_ctor("S2382C4_nt", this);} // tgen

//skip512 S2382C4_nt

#else // __cplusplus

extern void _ZN10S2382C4_ntC1Ev();
extern void _ZN10S2382C4_ntD1Ev();
Name_Map name_map_S2382C4_nt[] = {
  NSPAIR(_ZN10S2382C4_ntC1Ev),
  NSPAIR(_ZN10S2382C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2382C4_nt[];
extern void _ZN10S2382C4_ntD1Ev();
extern void _ZN10S2382C4_ntD0Ev();
extern void _ZN10S2382C4_nt2v5Ev();
extern void _ZN10S2382C4_nt2v6Ev();
extern void _ZN10S2382C4_nt2v7Ev();
extern void _ZN10S2382C4_nt2v8Ev();
extern void _ZN10S2382C4_nt2v9Ev();
extern void _ZN10S2382C4_nt3v10Ev();
extern void _ZN10S2382C4_nt3v11Ev();
extern void _ZN10S2382C4_nt3v12Ev();
extern void _ZN10S2382C4_nt3v13Ev();
extern void _ZN10S2382C4_nt3v14Ev();
extern void _ZN10S2382C4_nt3v15Ev();
extern void _ZN10S2382C4_nt3v16Ev();
extern void _ZN10S2382C4_nt3v17Ev();
extern void _ZN10S2382C4_nt3v18Ev();
extern void _ZN10S2382C4_nt3v19Ev();
extern void _ZN10S2382C4_nt3v20Ev();
extern void _ZN10S2382C4_nt3v21Ev();
extern void _ZN10S2382C4_nt3v22Ev();
extern void _ZN10S2382C4_nt3v23Ev();
extern void _ZN10S2382C4_nt3v24Ev();
extern void _ZN10S2382C4_nt3v25Ev();
extern void _ZN10S2382C4_nt3v26Ev();
extern void _ZN10S2382C4_nt3v27Ev();
static  VTBL_ENTRY vtc_S2382C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2382C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2382C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI10S2382C4_nt[];
VTBL_ENTRY *P__ZTI10S2382C4_nt = _ZTI10S2382C4_nt; 
extern  VTBL_ENTRY _ZTV10S2382C4_nt[];
Class_Descriptor cd_S2382C4_nt = {  "S2382C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2382C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2382C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2382C4_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  S2382C14_nt  {
  __tsi64 s2382c14f0[2];
  void  mf2382c14(); // _ZN11S2382C14_nt9mf2382c14Ev
};
//SIG(-1 S2382C14_nt) C1{ m FL[2]}


void  S2382C14_nt ::mf2382c14(){}

//skip512 S2382C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C13_nt  {
  ::S2382C14_nt s2382c13f0;
  void  mf2382c13(); // _ZN11S2382C13_nt9mf2382c13Ev
};
//SIG(-1 S2382C13_nt) C1{ m FC2{ m FL[2]}}


void  S2382C13_nt ::mf2382c13(){}

//skip512 S2382C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C17_nt  {
  ::S2382C13_nt s2382c17f0;
  void  mf2382c17(); // _ZN11S2382C17_nt9mf2382c17Ev
};
//SIG(-1 S2382C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2382C17_nt ::mf2382c17(){}

//skip512 S2382C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C18_nt  {
  ::S2382C13_nt s2382c18f0;
  ::S2382C13_nt s2382c18f1;
  ::S2382C13_nt s2382c18f2;
  ::S2382C13_nt s2382c18f3;
  void  mf2382c18(); // _ZN11S2382C18_nt9mf2382c18Ev
};
//SIG(-1 S2382C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2382C18_nt ::mf2382c18(){}

//skip512 S2382C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C20_nt  {
  void *s2382c20f0;
  int s2382c20f1;
  ::S2382C8_nt s2382c20f2;
  void  mf2382c20(); // _ZN11S2382C20_nt9mf2382c20Ev
};
//SIG(-1 S2382C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2382C20_nt ::mf2382c20(){}

//skip512 S2382C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C19_nt  {
  ::S2382C20_nt s2382c19f0;
  int s2382c19f1;
  void  mf2382c19(); // _ZN11S2382C19_nt9mf2382c19Ev
};
//SIG(-1 S2382C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2382C19_nt ::mf2382c19(){}

//skip512 S2382C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C23  {
  void  mf2382c23(); // _ZN8S2382C239mf2382c23Ev
};
//SIG(-1 S2382C23) C1{ m}


void  S2382C23 ::mf2382c23(){}

static void Test_S2382C23()
{
  {
    init_simple_test("S2382C23");
    S2382C23 lv;
    check2(sizeof(lv), 1, "sizeof(S2382C23)");
    check2(__alignof__(lv), 1, "__alignof__(S2382C23)");
  }
}
static Arrange_To_Call_Me vS2382C23(Test_S2382C23, "S2382C23", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C22  {
  void *s2382c22f0;
  int s2382c22f1;
  ::S2382C23 s2382c22f2;
  ::S2382C23 s2382c22f3;
  void  mf2382c22(); // _ZN8S2382C229mf2382c22Ev
};
//SIG(-1 S2382C22) C1{ m Fp Fi FC2{ m} FC2}


void  S2382C22 ::mf2382c22(){}

static void Test_S2382C22()
{
  {
    init_simple_test("S2382C22");
    S2382C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2382C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2382C22)");
    check_field_offset(lv, s2382c22f0, 0, "S2382C22.s2382c22f0");
    check_field_offset(lv, s2382c22f1, ABISELECT(8,4), "S2382C22.s2382c22f1");
    check_field_offset(lv, s2382c22f2, ABISELECT(12,8), "S2382C22.s2382c22f2");
    check_field_offset(lv, s2382c22f3, ABISELECT(13,9), "S2382C22.s2382c22f3");
  }
}
static Arrange_To_Call_Me vS2382C22(Test_S2382C22, "S2382C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C27  {
  void  mf2382c27(); // _ZN8S2382C279mf2382c27Ev
};
//SIG(-1 S2382C27) C1{ m}


void  S2382C27 ::mf2382c27(){}

static void Test_S2382C27()
{
  {
    init_simple_test("S2382C27");
    S2382C27 lv;
    check2(sizeof(lv), 1, "sizeof(S2382C27)");
    check2(__alignof__(lv), 1, "__alignof__(S2382C27)");
  }
}
static Arrange_To_Call_Me vS2382C27(Test_S2382C27, "S2382C27", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2382C27[];
VTBL_ENTRY *P__ZTI8S2382C27 = _ZTI8S2382C27; 
Class_Descriptor cd_S2382C27 = {  "S2382C27", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2382C27),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  S2382C26  {
  void *s2382c26f0;
  int s2382c26f1;
  ::S2382C27 s2382c26f2;
  ::S2382C27 s2382c26f3;
  void  mf2382c26(); // _ZN8S2382C269mf2382c26Ev
};
//SIG(-1 S2382C26) C1{ m Fp Fi FC2{ m} FC2}


void  S2382C26 ::mf2382c26(){}

static void Test_S2382C26()
{
  {
    init_simple_test("S2382C26");
    S2382C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2382C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2382C26)");
    check_field_offset(lv, s2382c26f0, 0, "S2382C26.s2382c26f0");
    check_field_offset(lv, s2382c26f1, ABISELECT(8,4), "S2382C26.s2382c26f1");
    check_field_offset(lv, s2382c26f2, ABISELECT(12,8), "S2382C26.s2382c26f2");
    check_field_offset(lv, s2382c26f3, ABISELECT(13,9), "S2382C26.s2382c26f3");
  }
}
static Arrange_To_Call_Me vS2382C26(Test_S2382C26, "S2382C26", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S2382C25()
{
  extern Class_Descriptor cd_S2382C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2382C25, buf);
    S2382C25 &lv = *(new (buf) S2382C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2382C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2382C25)");
    check_base_class_offset(lv, (S2382C26*), 0, "S2382C25");
    test_class_info(&lv, &cd_S2382C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2382C25(Test_S2382C25, "S2382C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2382C26;
static Base_Class bases_S2382C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2382C25 = {  "S2382C25", // class name
  bases_S2382C25, 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  S2382C30  {
  void  mf2382c30(); // _ZN8S2382C309mf2382c30Ev
};
//SIG(-1 S2382C30) C1{ m}


void  S2382C30 ::mf2382c30(){}

static void Test_S2382C30()
{
  {
    init_simple_test("S2382C30");
    S2382C30 lv;
    check2(sizeof(lv), 1, "sizeof(S2382C30)");
    check2(__alignof__(lv), 1, "__alignof__(S2382C30)");
  }
}
static Arrange_To_Call_Me vS2382C30(Test_S2382C30, "S2382C30", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2382C30[];
VTBL_ENTRY *P__ZTI8S2382C30 = _ZTI8S2382C30; 
Class_Descriptor cd_S2382C30 = {  "S2382C30", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2382C30),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  S2382C29_nt  {
  void *s2382c29f0;
  int s2382c29f1[2];
  ::S2382C30 s2382c29f2;
  void  mf2382c29(); // _ZN11S2382C29_nt9mf2382c29Ev
};
//SIG(-1 S2382C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2382C29_nt ::mf2382c29(){}

//skip512 S2382C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C37  {
  void *s2382c37f0;
  int s2382c37f1[2];
  ::S2382C30 s2382c37f2;
  void  mf2382c37(); // _ZN8S2382C379mf2382c37Ev
};
//SIG(-1 S2382C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2382C37 ::mf2382c37(){}

static void Test_S2382C37()
{
  {
    init_simple_test("S2382C37");
    S2382C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2382C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2382C37)");
    check_field_offset(lv, s2382c37f0, 0, "S2382C37.s2382c37f0");
    check_field_offset(lv, s2382c37f1, ABISELECT(8,4), "S2382C37.s2382c37f1");
    check_field_offset(lv, s2382c37f2, ABISELECT(16,12), "S2382C37.s2382c37f2");
  }
}
static Arrange_To_Call_Me vS2382C37(Test_S2382C37, "S2382C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2382C3_nt  : S2382C4_nt {
  ::S2382C13_nt s2382c3f0;
  ::S2382C13_nt s2382c3f1;
  ::S2382C13_nt s2382c3f2;
  ::S2382C13_nt s2382c3f3;
  ::S2382C17_nt s2382c3f4;
  ::S2382C18_nt s2382c3f5;
  ::S2382C18_nt s2382c3f6;
  ::S2382C13_nt s2382c3f7;
  ::S2382C13_nt s2382c3f8;
  ::S2382C13_nt s2382c3f9;
  void *s2382c3f10;
  ::S2382C17_nt s2382c3f11;
  ::S2382C19_nt s2382c3f12;
  int s2382c3f13;
  void *s2382c3f14[7];
  ::S2382C22 s2382c3f15;
  int s2382c3f16:8;
  int s2382c3f17:8;
  int s2382c3f18:16;
  int s2382c3f19:16;
  int s2382c3f20:8;
  int s2382c3f21:8;
  int s2382c3f22:8;
  int s2382c3f23:32;
  int s2382c3f24:8;
  int s2382c3f25:4;
  int s2382c3f26:4;
  int s2382c3f27:4;
  int s2382c3f28:4;
  int s2382c3f29:4;
  int s2382c3f30:4;
  int s2382c3f31:4;
  int s2382c3f32:4;
  int s2382c3f33:4;
  int s2382c3f34:4;
  unsigned char s2382c3f35:1;
  unsigned char s2382c3f36:1;
  unsigned char s2382c3f37:1;
  unsigned char s2382c3f38:1;
  unsigned char s2382c3f39:1;
  unsigned char s2382c3f40:1;
  unsigned char s2382c3f41:1;
  unsigned char s2382c3f42:1;
  unsigned char s2382c3f43:1;
  unsigned char s2382c3f44:1;
  unsigned char s2382c3f45:1;
  unsigned char s2382c3f46:1;
  unsigned char s2382c3f47:1;
  unsigned char s2382c3f48:1;
  unsigned char s2382c3f49:1;
  unsigned char s2382c3f50:1;
  unsigned char s2382c3f51:1;
  unsigned char s2382c3f52:1;
  unsigned char s2382c3f53:1;
  unsigned char s2382c3f54:1;
  unsigned char s2382c3f55:1;
  unsigned char s2382c3f56:1;
  unsigned char s2382c3f57:1;
  unsigned char s2382c3f58:1;
  unsigned char s2382c3f59:1;
  unsigned char s2382c3f60:1;
  unsigned char s2382c3f61:1;
  unsigned char s2382c3f62:1;
  unsigned char s2382c3f63:1;
  unsigned char s2382c3f64:1;
  unsigned char s2382c3f65:1;
  unsigned char s2382c3f66:1;
  unsigned char s2382c3f67:1;
  unsigned char s2382c3f68:1;
  unsigned char s2382c3f69:1;
  unsigned char s2382c3f70:1;
  unsigned char s2382c3f71:1;
  unsigned char s2382c3f72:1;
  unsigned char s2382c3f73:1;
  unsigned char s2382c3f74:1;
  unsigned char s2382c3f75:1;
  int s2382c3f76[7];
  void *s2382c3f77[6];
  int s2382c3f78:8;
  int s2382c3f79:8;
  int s2382c3f80:8;
  int s2382c3f81:8;
  int s2382c3f82:8;
  int s2382c3f83:8;
  ::S2382C25 s2382c3f84;
  void *s2382c3f85[4];
  int s2382c3f86:8;
  int s2382c3f87:8;
  int s2382c3f88:8;
  int s2382c3f89:8;
  int s2382c3f90:8;
  int s2382c3f91:16;
  int s2382c3f92:16;
  int s2382c3f93:16;
  int s2382c3f94:4;
  int s2382c3f95:4;
  int s2382c3f96:4;
  int s2382c3f97:4;
  int s2382c3f98:4;
  int s2382c3f99:4;
  int s2382c3f100:4;
  int s2382c3f101:4;
  int s2382c3f102:4;
  int s2382c3f103:4;
  int s2382c3f104:4;
  int s2382c3f105:4;
  int s2382c3f106:8;
  int s2382c3f107:8;
  int s2382c3f108:8;
  void *s2382c3f109[7];
  ::S2382C29_nt s2382c3f110;
  void *s2382c3f111[2];
  int s2382c3f112:16;
  int s2382c3f113:16;
  ::S2382C25 s2382c3f114;
  ::S2382C29_nt s2382c3f115;
  ::S2382C37 s2382c3f116;
  void *s2382c3f117[2];
  int s2382c3f118:24;
  int s2382c3f119:8;
  void *s2382c3f120;
  virtual  ~S2382C3_nt(); // _ZN10S2382C3_ntD1Ev
  virtual void  v28(); // _ZN10S2382C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2382C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2382C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2382C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2382C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2382C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2382C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2382C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2382C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2382C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2382C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2382C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2382C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2382C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2382C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2382C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2382C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2382C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2382C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2382C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2382C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2382C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2382C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2382C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2382C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2382C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2382C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2382C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2382C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2382C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2382C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2382C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2382C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2382C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2382C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2382C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2382C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2382C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2382C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2382C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2382C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2382C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2382C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2382C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2382C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2382C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2382C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2382C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2382C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2382C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2382C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2382C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2382C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2382C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2382C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2382C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2382C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2382C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2382C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2382C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2382C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2382C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2382C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2382C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2382C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2382C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2382C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2382C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2382C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2382C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2382C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2382C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2382C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2382C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2382C3_nt4v102Ev
  virtual void  v103(); // _ZN10S2382C3_nt4v103Ev
  virtual void  v104(); // _ZN10S2382C3_nt4v104Ev
  virtual void  v105(); // _ZN10S2382C3_nt4v105Ev
  S2382C3_nt(); // tgen
};
//SIG(-1 S2382C3_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}


 S2382C3_nt ::~S2382C3_nt(){ note_dtor("S2382C3_nt", this);}
void  S2382C3_nt ::v28(){vfunc_called(this, "_ZN10S2382C3_nt3v28Ev");}
void  S2382C3_nt ::v29(){vfunc_called(this, "_ZN10S2382C3_nt3v29Ev");}
void  S2382C3_nt ::v30(){vfunc_called(this, "_ZN10S2382C3_nt3v30Ev");}
void  S2382C3_nt ::v31(){vfunc_called(this, "_ZN10S2382C3_nt3v31Ev");}
void  S2382C3_nt ::v32(){vfunc_called(this, "_ZN10S2382C3_nt3v32Ev");}
void  S2382C3_nt ::v33(){vfunc_called(this, "_ZN10S2382C3_nt3v33Ev");}
void  S2382C3_nt ::v34(){vfunc_called(this, "_ZN10S2382C3_nt3v34Ev");}
void  S2382C3_nt ::v35(){vfunc_called(this, "_ZN10S2382C3_nt3v35Ev");}
void  S2382C3_nt ::v36(){vfunc_called(this, "_ZN10S2382C3_nt3v36Ev");}
void  S2382C3_nt ::v37(){vfunc_called(this, "_ZN10S2382C3_nt3v37Ev");}
void  S2382C3_nt ::v38(){vfunc_called(this, "_ZN10S2382C3_nt3v38Ev");}
void  S2382C3_nt ::v39(){vfunc_called(this, "_ZN10S2382C3_nt3v39Ev");}
void  S2382C3_nt ::v40(){vfunc_called(this, "_ZN10S2382C3_nt3v40Ev");}
void  S2382C3_nt ::v41(){vfunc_called(this, "_ZN10S2382C3_nt3v41Ev");}
void  S2382C3_nt ::v42(){vfunc_called(this, "_ZN10S2382C3_nt3v42Ev");}
void  S2382C3_nt ::v43(){vfunc_called(this, "_ZN10S2382C3_nt3v43Ev");}
void  S2382C3_nt ::v44(){vfunc_called(this, "_ZN10S2382C3_nt3v44Ev");}
void  S2382C3_nt ::v45(){vfunc_called(this, "_ZN10S2382C3_nt3v45Ev");}
void  S2382C3_nt ::v46(){vfunc_called(this, "_ZN10S2382C3_nt3v46Ev");}
void  S2382C3_nt ::v47(){vfunc_called(this, "_ZN10S2382C3_nt3v47Ev");}
void  S2382C3_nt ::v48(){vfunc_called(this, "_ZN10S2382C3_nt3v48Ev");}
void  S2382C3_nt ::v49(){vfunc_called(this, "_ZN10S2382C3_nt3v49Ev");}
void  S2382C3_nt ::v50(){vfunc_called(this, "_ZN10S2382C3_nt3v50Ev");}
void  S2382C3_nt ::v51(){vfunc_called(this, "_ZN10S2382C3_nt3v51Ev");}
void  S2382C3_nt ::v52(){vfunc_called(this, "_ZN10S2382C3_nt3v52Ev");}
void  S2382C3_nt ::v53(){vfunc_called(this, "_ZN10S2382C3_nt3v53Ev");}
void  S2382C3_nt ::v54(){vfunc_called(this, "_ZN10S2382C3_nt3v54Ev");}
void  S2382C3_nt ::v55(){vfunc_called(this, "_ZN10S2382C3_nt3v55Ev");}
void  S2382C3_nt ::v56(){vfunc_called(this, "_ZN10S2382C3_nt3v56Ev");}
void  S2382C3_nt ::v57(){vfunc_called(this, "_ZN10S2382C3_nt3v57Ev");}
void  S2382C3_nt ::v58(){vfunc_called(this, "_ZN10S2382C3_nt3v58Ev");}
void  S2382C3_nt ::v59(){vfunc_called(this, "_ZN10S2382C3_nt3v59Ev");}
void  S2382C3_nt ::v60(){vfunc_called(this, "_ZN10S2382C3_nt3v60Ev");}
void  S2382C3_nt ::v61(){vfunc_called(this, "_ZN10S2382C3_nt3v61Ev");}
void  S2382C3_nt ::v62(){vfunc_called(this, "_ZN10S2382C3_nt3v62Ev");}
void  S2382C3_nt ::v63(){vfunc_called(this, "_ZN10S2382C3_nt3v63Ev");}
void  S2382C3_nt ::v64(){vfunc_called(this, "_ZN10S2382C3_nt3v64Ev");}
void  S2382C3_nt ::v65(){vfunc_called(this, "_ZN10S2382C3_nt3v65Ev");}
void  S2382C3_nt ::v66(){vfunc_called(this, "_ZN10S2382C3_nt3v66Ev");}
void  S2382C3_nt ::v67(){vfunc_called(this, "_ZN10S2382C3_nt3v67Ev");}
void  S2382C3_nt ::v68(){vfunc_called(this, "_ZN10S2382C3_nt3v68Ev");}
void  S2382C3_nt ::v69(){vfunc_called(this, "_ZN10S2382C3_nt3v69Ev");}
void  S2382C3_nt ::v70(){vfunc_called(this, "_ZN10S2382C3_nt3v70Ev");}
void  S2382C3_nt ::v71(){vfunc_called(this, "_ZN10S2382C3_nt3v71Ev");}
void  S2382C3_nt ::v72(){vfunc_called(this, "_ZN10S2382C3_nt3v72Ev");}
void  S2382C3_nt ::v73(){vfunc_called(this, "_ZN10S2382C3_nt3v73Ev");}
void  S2382C3_nt ::v74(){vfunc_called(this, "_ZN10S2382C3_nt3v74Ev");}
void  S2382C3_nt ::v75(){vfunc_called(this, "_ZN10S2382C3_nt3v75Ev");}
void  S2382C3_nt ::v76(){vfunc_called(this, "_ZN10S2382C3_nt3v76Ev");}
void  S2382C3_nt ::v77(){vfunc_called(this, "_ZN10S2382C3_nt3v77Ev");}
void  S2382C3_nt ::v78(){vfunc_called(this, "_ZN10S2382C3_nt3v78Ev");}
void  S2382C3_nt ::v79(){vfunc_called(this, "_ZN10S2382C3_nt3v79Ev");}
void  S2382C3_nt ::v80(){vfunc_called(this, "_ZN10S2382C3_nt3v80Ev");}
void  S2382C3_nt ::v81(){vfunc_called(this, "_ZN10S2382C3_nt3v81Ev");}
void  S2382C3_nt ::v82(){vfunc_called(this, "_ZN10S2382C3_nt3v82Ev");}
void  S2382C3_nt ::v83(){vfunc_called(this, "_ZN10S2382C3_nt3v83Ev");}
void  S2382C3_nt ::v84(){vfunc_called(this, "_ZN10S2382C3_nt3v84Ev");}
void  S2382C3_nt ::v85(){vfunc_called(this, "_ZN10S2382C3_nt3v85Ev");}
void  S2382C3_nt ::v86(){vfunc_called(this, "_ZN10S2382C3_nt3v86Ev");}
void  S2382C3_nt ::v87(){vfunc_called(this, "_ZN10S2382C3_nt3v87Ev");}
void  S2382C3_nt ::v88(){vfunc_called(this, "_ZN10S2382C3_nt3v88Ev");}
void  S2382C3_nt ::v89(){vfunc_called(this, "_ZN10S2382C3_nt3v89Ev");}
void  S2382C3_nt ::v90(){vfunc_called(this, "_ZN10S2382C3_nt3v90Ev");}
void  S2382C3_nt ::v91(){vfunc_called(this, "_ZN10S2382C3_nt3v91Ev");}
void  S2382C3_nt ::v92(){vfunc_called(this, "_ZN10S2382C3_nt3v92Ev");}
void  S2382C3_nt ::v93(){vfunc_called(this, "_ZN10S2382C3_nt3v93Ev");}
void  S2382C3_nt ::v94(){vfunc_called(this, "_ZN10S2382C3_nt3v94Ev");}
void  S2382C3_nt ::v95(){vfunc_called(this, "_ZN10S2382C3_nt3v95Ev");}
void  S2382C3_nt ::v96(){vfunc_called(this, "_ZN10S2382C3_nt3v96Ev");}
void  S2382C3_nt ::v97(){vfunc_called(this, "_ZN10S2382C3_nt3v97Ev");}
void  S2382C3_nt ::v98(){vfunc_called(this, "_ZN10S2382C3_nt3v98Ev");}
void  S2382C3_nt ::v99(){vfunc_called(this, "_ZN10S2382C3_nt3v99Ev");}
void  S2382C3_nt ::v100(){vfunc_called(this, "_ZN10S2382C3_nt4v100Ev");}
void  S2382C3_nt ::v101(){vfunc_called(this, "_ZN10S2382C3_nt4v101Ev");}
void  S2382C3_nt ::v102(){vfunc_called(this, "_ZN10S2382C3_nt4v102Ev");}
void  S2382C3_nt ::v103(){vfunc_called(this, "_ZN10S2382C3_nt4v103Ev");}
void  S2382C3_nt ::v104(){vfunc_called(this, "_ZN10S2382C3_nt4v104Ev");}
void  S2382C3_nt ::v105(){vfunc_called(this, "_ZN10S2382C3_nt4v105Ev");}
S2382C3_nt ::S2382C3_nt(){ note_ctor("S2382C3_nt", this);} // tgen

//skip512 S2382C3_nt

#else // __cplusplus

extern void _ZN10S2382C3_ntC1Ev();
extern void _ZN10S2382C3_ntD1Ev();
Name_Map name_map_S2382C3_nt[] = {
  NSPAIR(_ZN10S2382C3_ntC1Ev),
  NSPAIR(_ZN10S2382C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C4_nt;
extern VTBL_ENTRY _ZTI10S2382C4_nt[];
extern  VTBL_ENTRY _ZTV10S2382C4_nt[];
static Base_Class bases_S2382C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2382C3_nt[];
extern void _ZN10S2382C3_ntD1Ev();
extern void _ZN10S2382C3_ntD0Ev();
extern void _ZN10S2382C4_nt2v5Ev();
extern void _ZN10S2382C4_nt2v6Ev();
extern void _ZN10S2382C4_nt2v7Ev();
extern void _ZN10S2382C4_nt2v8Ev();
extern void _ZN10S2382C4_nt2v9Ev();
extern void _ZN10S2382C4_nt3v10Ev();
extern void _ZN10S2382C4_nt3v11Ev();
extern void _ZN10S2382C4_nt3v12Ev();
extern void _ZN10S2382C4_nt3v13Ev();
extern void _ZN10S2382C4_nt3v14Ev();
extern void _ZN10S2382C4_nt3v15Ev();
extern void _ZN10S2382C4_nt3v16Ev();
extern void _ZN10S2382C4_nt3v17Ev();
extern void _ZN10S2382C4_nt3v18Ev();
extern void _ZN10S2382C4_nt3v19Ev();
extern void _ZN10S2382C4_nt3v20Ev();
extern void _ZN10S2382C4_nt3v21Ev();
extern void _ZN10S2382C4_nt3v22Ev();
extern void _ZN10S2382C4_nt3v23Ev();
extern void _ZN10S2382C4_nt3v24Ev();
extern void _ZN10S2382C4_nt3v25Ev();
extern void _ZN10S2382C4_nt3v26Ev();
extern void _ZN10S2382C4_nt3v27Ev();
extern void _ZN10S2382C3_nt3v28Ev();
extern void _ZN10S2382C3_nt3v29Ev();
extern void _ZN10S2382C3_nt3v30Ev();
extern void _ZN10S2382C3_nt3v31Ev();
extern void _ZN10S2382C3_nt3v32Ev();
extern void _ZN10S2382C3_nt3v33Ev();
extern void _ZN10S2382C3_nt3v34Ev();
extern void _ZN10S2382C3_nt3v35Ev();
extern void _ZN10S2382C3_nt3v36Ev();
extern void _ZN10S2382C3_nt3v37Ev();
extern void _ZN10S2382C3_nt3v38Ev();
extern void _ZN10S2382C3_nt3v39Ev();
extern void _ZN10S2382C3_nt3v40Ev();
extern void _ZN10S2382C3_nt3v41Ev();
extern void _ZN10S2382C3_nt3v42Ev();
extern void _ZN10S2382C3_nt3v43Ev();
extern void _ZN10S2382C3_nt3v44Ev();
extern void _ZN10S2382C3_nt3v45Ev();
extern void _ZN10S2382C3_nt3v46Ev();
extern void _ZN10S2382C3_nt3v47Ev();
extern void _ZN10S2382C3_nt3v48Ev();
extern void _ZN10S2382C3_nt3v49Ev();
extern void _ZN10S2382C3_nt3v50Ev();
extern void _ZN10S2382C3_nt3v51Ev();
extern void _ZN10S2382C3_nt3v52Ev();
extern void _ZN10S2382C3_nt3v53Ev();
extern void _ZN10S2382C3_nt3v54Ev();
extern void _ZN10S2382C3_nt3v55Ev();
extern void _ZN10S2382C3_nt3v56Ev();
extern void _ZN10S2382C3_nt3v57Ev();
extern void _ZN10S2382C3_nt3v58Ev();
extern void _ZN10S2382C3_nt3v59Ev();
extern void _ZN10S2382C3_nt3v60Ev();
extern void _ZN10S2382C3_nt3v61Ev();
extern void _ZN10S2382C3_nt3v62Ev();
extern void _ZN10S2382C3_nt3v63Ev();
extern void _ZN10S2382C3_nt3v64Ev();
extern void _ZN10S2382C3_nt3v65Ev();
extern void _ZN10S2382C3_nt3v66Ev();
extern void _ZN10S2382C3_nt3v67Ev();
extern void _ZN10S2382C3_nt3v68Ev();
extern void _ZN10S2382C3_nt3v69Ev();
extern void _ZN10S2382C3_nt3v70Ev();
extern void _ZN10S2382C3_nt3v71Ev();
extern void _ZN10S2382C3_nt3v72Ev();
extern void _ZN10S2382C3_nt3v73Ev();
extern void _ZN10S2382C3_nt3v74Ev();
extern void _ZN10S2382C3_nt3v75Ev();
extern void _ZN10S2382C3_nt3v76Ev();
extern void _ZN10S2382C3_nt3v77Ev();
extern void _ZN10S2382C3_nt3v78Ev();
extern void _ZN10S2382C3_nt3v79Ev();
extern void _ZN10S2382C3_nt3v80Ev();
extern void _ZN10S2382C3_nt3v81Ev();
extern void _ZN10S2382C3_nt3v82Ev();
extern void _ZN10S2382C3_nt3v83Ev();
extern void _ZN10S2382C3_nt3v84Ev();
extern void _ZN10S2382C3_nt3v85Ev();
extern void _ZN10S2382C3_nt3v86Ev();
extern void _ZN10S2382C3_nt3v87Ev();
extern void _ZN10S2382C3_nt3v88Ev();
extern void _ZN10S2382C3_nt3v89Ev();
extern void _ZN10S2382C3_nt3v90Ev();
extern void _ZN10S2382C3_nt3v91Ev();
extern void _ZN10S2382C3_nt3v92Ev();
extern void _ZN10S2382C3_nt3v93Ev();
extern void _ZN10S2382C3_nt3v94Ev();
extern void _ZN10S2382C3_nt3v95Ev();
extern void _ZN10S2382C3_nt3v96Ev();
extern void _ZN10S2382C3_nt3v97Ev();
extern void _ZN10S2382C3_nt3v98Ev();
extern void _ZN10S2382C3_nt3v99Ev();
extern void _ZN10S2382C3_nt4v100Ev();
extern void _ZN10S2382C3_nt4v101Ev();
extern void _ZN10S2382C3_nt4v102Ev();
extern void _ZN10S2382C3_nt4v103Ev();
extern void _ZN10S2382C3_nt4v104Ev();
extern void _ZN10S2382C3_nt4v105Ev();
static  VTBL_ENTRY vtc_S2382C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2382C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2382C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v105Ev,
};
extern VTBL_ENTRY _ZTI10S2382C3_nt[];
VTBL_ENTRY *P__ZTI10S2382C3_nt = _ZTI10S2382C3_nt; 
extern  VTBL_ENTRY _ZTV10S2382C3_nt[];
Class_Descriptor cd_S2382C3_nt = {  "S2382C3_nt", // class name
  bases_S2382C3_nt, 1,
  &(vtc_S2382C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2382C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2382C3_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  S2382C2_nt  : S2382C3_nt {
  void *s2382c2f0;
  virtual  ~S2382C2_nt(); // _ZN10S2382C2_ntD1Ev
  virtual void  v106(); // _ZN10S2382C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2382C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2382C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2382C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2382C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2382C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2382C2_nt4v112Ev
  virtual void  v113(); // _ZN10S2382C2_nt4v113Ev
  virtual void  v114(); // _ZN10S2382C2_nt4v114Ev
  virtual void  v115(); // _ZN10S2382C2_nt4v115Ev
  S2382C2_nt(); // tgen
};
//SIG(-1 S2382C2_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}


 S2382C2_nt ::~S2382C2_nt(){ note_dtor("S2382C2_nt", this);}
void  S2382C2_nt ::v106(){vfunc_called(this, "_ZN10S2382C2_nt4v106Ev");}
void  S2382C2_nt ::v107(){vfunc_called(this, "_ZN10S2382C2_nt4v107Ev");}
void  S2382C2_nt ::v108(){vfunc_called(this, "_ZN10S2382C2_nt4v108Ev");}
void  S2382C2_nt ::v109(){vfunc_called(this, "_ZN10S2382C2_nt4v109Ev");}
void  S2382C2_nt ::v110(){vfunc_called(this, "_ZN10S2382C2_nt4v110Ev");}
void  S2382C2_nt ::v111(){vfunc_called(this, "_ZN10S2382C2_nt4v111Ev");}
void  S2382C2_nt ::v112(){vfunc_called(this, "_ZN10S2382C2_nt4v112Ev");}
void  S2382C2_nt ::v113(){vfunc_called(this, "_ZN10S2382C2_nt4v113Ev");}
void  S2382C2_nt ::v114(){vfunc_called(this, "_ZN10S2382C2_nt4v114Ev");}
void  S2382C2_nt ::v115(){vfunc_called(this, "_ZN10S2382C2_nt4v115Ev");}
S2382C2_nt ::S2382C2_nt(){ note_ctor("S2382C2_nt", this);} // tgen

//skip512 S2382C2_nt

#else // __cplusplus

extern void _ZN10S2382C2_ntC1Ev();
extern void _ZN10S2382C2_ntD1Ev();
Name_Map name_map_S2382C2_nt[] = {
  NSPAIR(_ZN10S2382C2_ntC1Ev),
  NSPAIR(_ZN10S2382C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C4_nt;
extern VTBL_ENTRY _ZTI10S2382C4_nt[];
extern  VTBL_ENTRY _ZTV10S2382C4_nt[];
extern Class_Descriptor cd_S2382C3_nt;
extern VTBL_ENTRY _ZTI10S2382C3_nt[];
extern  VTBL_ENTRY _ZTV10S2382C3_nt[];
static Base_Class bases_S2382C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2382C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S2382C2_nt[];
extern void _ZN10S2382C2_ntD1Ev();
extern void _ZN10S2382C2_ntD0Ev();
extern void _ZN10S2382C4_nt2v5Ev();
extern void _ZN10S2382C4_nt2v6Ev();
extern void _ZN10S2382C4_nt2v7Ev();
extern void _ZN10S2382C4_nt2v8Ev();
extern void _ZN10S2382C4_nt2v9Ev();
extern void _ZN10S2382C4_nt3v10Ev();
extern void _ZN10S2382C4_nt3v11Ev();
extern void _ZN10S2382C4_nt3v12Ev();
extern void _ZN10S2382C4_nt3v13Ev();
extern void _ZN10S2382C4_nt3v14Ev();
extern void _ZN10S2382C4_nt3v15Ev();
extern void _ZN10S2382C4_nt3v16Ev();
extern void _ZN10S2382C4_nt3v17Ev();
extern void _ZN10S2382C4_nt3v18Ev();
extern void _ZN10S2382C4_nt3v19Ev();
extern void _ZN10S2382C4_nt3v20Ev();
extern void _ZN10S2382C4_nt3v21Ev();
extern void _ZN10S2382C4_nt3v22Ev();
extern void _ZN10S2382C4_nt3v23Ev();
extern void _ZN10S2382C4_nt3v24Ev();
extern void _ZN10S2382C4_nt3v25Ev();
extern void _ZN10S2382C4_nt3v26Ev();
extern void _ZN10S2382C4_nt3v27Ev();
extern void _ZN10S2382C3_nt3v28Ev();
extern void _ZN10S2382C3_nt3v29Ev();
extern void _ZN10S2382C3_nt3v30Ev();
extern void _ZN10S2382C3_nt3v31Ev();
extern void _ZN10S2382C3_nt3v32Ev();
extern void _ZN10S2382C3_nt3v33Ev();
extern void _ZN10S2382C3_nt3v34Ev();
extern void _ZN10S2382C3_nt3v35Ev();
extern void _ZN10S2382C3_nt3v36Ev();
extern void _ZN10S2382C3_nt3v37Ev();
extern void _ZN10S2382C3_nt3v38Ev();
extern void _ZN10S2382C3_nt3v39Ev();
extern void _ZN10S2382C3_nt3v40Ev();
extern void _ZN10S2382C3_nt3v41Ev();
extern void _ZN10S2382C3_nt3v42Ev();
extern void _ZN10S2382C3_nt3v43Ev();
extern void _ZN10S2382C3_nt3v44Ev();
extern void _ZN10S2382C3_nt3v45Ev();
extern void _ZN10S2382C3_nt3v46Ev();
extern void _ZN10S2382C3_nt3v47Ev();
extern void _ZN10S2382C3_nt3v48Ev();
extern void _ZN10S2382C3_nt3v49Ev();
extern void _ZN10S2382C3_nt3v50Ev();
extern void _ZN10S2382C3_nt3v51Ev();
extern void _ZN10S2382C3_nt3v52Ev();
extern void _ZN10S2382C3_nt3v53Ev();
extern void _ZN10S2382C3_nt3v54Ev();
extern void _ZN10S2382C3_nt3v55Ev();
extern void _ZN10S2382C3_nt3v56Ev();
extern void _ZN10S2382C3_nt3v57Ev();
extern void _ZN10S2382C3_nt3v58Ev();
extern void _ZN10S2382C3_nt3v59Ev();
extern void _ZN10S2382C3_nt3v60Ev();
extern void _ZN10S2382C3_nt3v61Ev();
extern void _ZN10S2382C3_nt3v62Ev();
extern void _ZN10S2382C3_nt3v63Ev();
extern void _ZN10S2382C3_nt3v64Ev();
extern void _ZN10S2382C3_nt3v65Ev();
extern void _ZN10S2382C3_nt3v66Ev();
extern void _ZN10S2382C3_nt3v67Ev();
extern void _ZN10S2382C3_nt3v68Ev();
extern void _ZN10S2382C3_nt3v69Ev();
extern void _ZN10S2382C3_nt3v70Ev();
extern void _ZN10S2382C3_nt3v71Ev();
extern void _ZN10S2382C3_nt3v72Ev();
extern void _ZN10S2382C3_nt3v73Ev();
extern void _ZN10S2382C3_nt3v74Ev();
extern void _ZN10S2382C3_nt3v75Ev();
extern void _ZN10S2382C3_nt3v76Ev();
extern void _ZN10S2382C3_nt3v77Ev();
extern void _ZN10S2382C3_nt3v78Ev();
extern void _ZN10S2382C3_nt3v79Ev();
extern void _ZN10S2382C3_nt3v80Ev();
extern void _ZN10S2382C3_nt3v81Ev();
extern void _ZN10S2382C3_nt3v82Ev();
extern void _ZN10S2382C3_nt3v83Ev();
extern void _ZN10S2382C3_nt3v84Ev();
extern void _ZN10S2382C3_nt3v85Ev();
extern void _ZN10S2382C3_nt3v86Ev();
extern void _ZN10S2382C3_nt3v87Ev();
extern void _ZN10S2382C3_nt3v88Ev();
extern void _ZN10S2382C3_nt3v89Ev();
extern void _ZN10S2382C3_nt3v90Ev();
extern void _ZN10S2382C3_nt3v91Ev();
extern void _ZN10S2382C3_nt3v92Ev();
extern void _ZN10S2382C3_nt3v93Ev();
extern void _ZN10S2382C3_nt3v94Ev();
extern void _ZN10S2382C3_nt3v95Ev();
extern void _ZN10S2382C3_nt3v96Ev();
extern void _ZN10S2382C3_nt3v97Ev();
extern void _ZN10S2382C3_nt3v98Ev();
extern void _ZN10S2382C3_nt3v99Ev();
extern void _ZN10S2382C3_nt4v100Ev();
extern void _ZN10S2382C3_nt4v101Ev();
extern void _ZN10S2382C3_nt4v102Ev();
extern void _ZN10S2382C3_nt4v103Ev();
extern void _ZN10S2382C3_nt4v104Ev();
extern void _ZN10S2382C3_nt4v105Ev();
extern void _ZN10S2382C2_nt4v106Ev();
extern void _ZN10S2382C2_nt4v107Ev();
extern void _ZN10S2382C2_nt4v108Ev();
extern void _ZN10S2382C2_nt4v109Ev();
extern void _ZN10S2382C2_nt4v110Ev();
extern void _ZN10S2382C2_nt4v111Ev();
extern void _ZN10S2382C2_nt4v112Ev();
extern void _ZN10S2382C2_nt4v113Ev();
extern void _ZN10S2382C2_nt4v114Ev();
extern void _ZN10S2382C2_nt4v115Ev();
static  VTBL_ENTRY vtc_S2382C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2382C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2382C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v115Ev,
};
extern VTBL_ENTRY _ZTI10S2382C2_nt[];
VTBL_ENTRY *P__ZTI10S2382C2_nt = _ZTI10S2382C2_nt; 
extern  VTBL_ENTRY _ZTV10S2382C2_nt[];
Class_Descriptor cd_S2382C2_nt = {  "S2382C2_nt", // class name
  bases_S2382C2_nt, 2,
  &(vtc_S2382C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2382C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2382C2_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  S2382C1  : S2382C2_nt {
  virtual  ~S2382C1(); // _ZN7S2382C1D1Ev
  virtual void  v1(); // _ZN7S2382C12v1Ev
  virtual void  v2(); // _ZN7S2382C12v2Ev
  virtual void  v3(); // _ZN7S2382C12v3Ev
  virtual void  v4(); // _ZN7S2382C12v4Ev
  S2382C1(); // tgen
};
//SIG(1 S2382C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC5 Fi} vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 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 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 Fp} vd v1 v2 v3 v4}


 S2382C1 ::~S2382C1(){ note_dtor("S2382C1", this);}
void  S2382C1 ::v1(){vfunc_called(this, "_ZN7S2382C12v1Ev");}
void  S2382C1 ::v2(){vfunc_called(this, "_ZN7S2382C12v2Ev");}
void  S2382C1 ::v3(){vfunc_called(this, "_ZN7S2382C12v3Ev");}
void  S2382C1 ::v4(){vfunc_called(this, "_ZN7S2382C12v4Ev");}
S2382C1 ::S2382C1(){ note_ctor("S2382C1", this);} // tgen

static void Test_S2382C1()
{
  extern Class_Descriptor cd_S2382C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(106,160)];
    init_test(&cd_S2382C1, buf);
    S2382C1 *dp, &lv = *(dp=new (buf) S2382C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(840,636), "sizeof(S2382C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2382C1)");
    check_base_class_offset(lv, (S2382C4_nt*)(S2382C3_nt*)(S2382C2_nt*), 0, "S2382C1");
    check_base_class_offset(lv, (S2382C3_nt*)(S2382C2_nt*), 0, "S2382C1");
    check_base_class_offset(lv, (S2382C2_nt*), 0, "S2382C1");
    test_class_info(&lv, &cd_S2382C1);
    dp->~S2382C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2382C1(Test_S2382C1, "S2382C1", ABISELECT(840,636));

#else // __cplusplus

extern void _ZN7S2382C1C1Ev();
extern void _ZN7S2382C1D1Ev();
Name_Map name_map_S2382C1[] = {
  NSPAIR(_ZN7S2382C1C1Ev),
  NSPAIR(_ZN7S2382C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C4_nt;
extern VTBL_ENTRY _ZTI10S2382C4_nt[];
extern  VTBL_ENTRY _ZTV10S2382C4_nt[];
extern Class_Descriptor cd_S2382C3_nt;
extern VTBL_ENTRY _ZTI10S2382C3_nt[];
extern  VTBL_ENTRY _ZTV10S2382C3_nt[];
extern Class_Descriptor cd_S2382C2_nt;
extern VTBL_ENTRY _ZTI10S2382C2_nt[];
extern  VTBL_ENTRY _ZTV10S2382C2_nt[];
static Base_Class bases_S2382C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2382C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2382C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2382C1[];
extern void _ZN7S2382C1D1Ev();
extern void _ZN7S2382C1D0Ev();
extern void _ZN10S2382C4_nt2v5Ev();
extern void _ZN10S2382C4_nt2v6Ev();
extern void _ZN10S2382C4_nt2v7Ev();
extern void _ZN10S2382C4_nt2v8Ev();
extern void _ZN10S2382C4_nt2v9Ev();
extern void _ZN10S2382C4_nt3v10Ev();
extern void _ZN10S2382C4_nt3v11Ev();
extern void _ZN10S2382C4_nt3v12Ev();
extern void _ZN10S2382C4_nt3v13Ev();
extern void _ZN10S2382C4_nt3v14Ev();
extern void _ZN10S2382C4_nt3v15Ev();
extern void _ZN10S2382C4_nt3v16Ev();
extern void _ZN10S2382C4_nt3v17Ev();
extern void _ZN10S2382C4_nt3v18Ev();
extern void _ZN10S2382C4_nt3v19Ev();
extern void _ZN10S2382C4_nt3v20Ev();
extern void _ZN10S2382C4_nt3v21Ev();
extern void _ZN10S2382C4_nt3v22Ev();
extern void _ZN10S2382C4_nt3v23Ev();
extern void _ZN10S2382C4_nt3v24Ev();
extern void _ZN10S2382C4_nt3v25Ev();
extern void _ZN10S2382C4_nt3v26Ev();
extern void _ZN10S2382C4_nt3v27Ev();
extern void _ZN10S2382C3_nt3v28Ev();
extern void _ZN10S2382C3_nt3v29Ev();
extern void _ZN10S2382C3_nt3v30Ev();
extern void _ZN10S2382C3_nt3v31Ev();
extern void _ZN10S2382C3_nt3v32Ev();
extern void _ZN10S2382C3_nt3v33Ev();
extern void _ZN10S2382C3_nt3v34Ev();
extern void _ZN10S2382C3_nt3v35Ev();
extern void _ZN10S2382C3_nt3v36Ev();
extern void _ZN10S2382C3_nt3v37Ev();
extern void _ZN10S2382C3_nt3v38Ev();
extern void _ZN10S2382C3_nt3v39Ev();
extern void _ZN10S2382C3_nt3v40Ev();
extern void _ZN10S2382C3_nt3v41Ev();
extern void _ZN10S2382C3_nt3v42Ev();
extern void _ZN10S2382C3_nt3v43Ev();
extern void _ZN10S2382C3_nt3v44Ev();
extern void _ZN10S2382C3_nt3v45Ev();
extern void _ZN10S2382C3_nt3v46Ev();
extern void _ZN10S2382C3_nt3v47Ev();
extern void _ZN10S2382C3_nt3v48Ev();
extern void _ZN10S2382C3_nt3v49Ev();
extern void _ZN10S2382C3_nt3v50Ev();
extern void _ZN10S2382C3_nt3v51Ev();
extern void _ZN10S2382C3_nt3v52Ev();
extern void _ZN10S2382C3_nt3v53Ev();
extern void _ZN10S2382C3_nt3v54Ev();
extern void _ZN10S2382C3_nt3v55Ev();
extern void _ZN10S2382C3_nt3v56Ev();
extern void _ZN10S2382C3_nt3v57Ev();
extern void _ZN10S2382C3_nt3v58Ev();
extern void _ZN10S2382C3_nt3v59Ev();
extern void _ZN10S2382C3_nt3v60Ev();
extern void _ZN10S2382C3_nt3v61Ev();
extern void _ZN10S2382C3_nt3v62Ev();
extern void _ZN10S2382C3_nt3v63Ev();
extern void _ZN10S2382C3_nt3v64Ev();
extern void _ZN10S2382C3_nt3v65Ev();
extern void _ZN10S2382C3_nt3v66Ev();
extern void _ZN10S2382C3_nt3v67Ev();
extern void _ZN10S2382C3_nt3v68Ev();
extern void _ZN10S2382C3_nt3v69Ev();
extern void _ZN10S2382C3_nt3v70Ev();
extern void _ZN10S2382C3_nt3v71Ev();
extern void _ZN10S2382C3_nt3v72Ev();
extern void _ZN10S2382C3_nt3v73Ev();
extern void _ZN10S2382C3_nt3v74Ev();
extern void _ZN10S2382C3_nt3v75Ev();
extern void _ZN10S2382C3_nt3v76Ev();
extern void _ZN10S2382C3_nt3v77Ev();
extern void _ZN10S2382C3_nt3v78Ev();
extern void _ZN10S2382C3_nt3v79Ev();
extern void _ZN10S2382C3_nt3v80Ev();
extern void _ZN10S2382C3_nt3v81Ev();
extern void _ZN10S2382C3_nt3v82Ev();
extern void _ZN10S2382C3_nt3v83Ev();
extern void _ZN10S2382C3_nt3v84Ev();
extern void _ZN10S2382C3_nt3v85Ev();
extern void _ZN10S2382C3_nt3v86Ev();
extern void _ZN10S2382C3_nt3v87Ev();
extern void _ZN10S2382C3_nt3v88Ev();
extern void _ZN10S2382C3_nt3v89Ev();
extern void _ZN10S2382C3_nt3v90Ev();
extern void _ZN10S2382C3_nt3v91Ev();
extern void _ZN10S2382C3_nt3v92Ev();
extern void _ZN10S2382C3_nt3v93Ev();
extern void _ZN10S2382C3_nt3v94Ev();
extern void _ZN10S2382C3_nt3v95Ev();
extern void _ZN10S2382C3_nt3v96Ev();
extern void _ZN10S2382C3_nt3v97Ev();
extern void _ZN10S2382C3_nt3v98Ev();
extern void _ZN10S2382C3_nt3v99Ev();
extern void _ZN10S2382C3_nt4v100Ev();
extern void _ZN10S2382C3_nt4v101Ev();
extern void _ZN10S2382C3_nt4v102Ev();
extern void _ZN10S2382C3_nt4v103Ev();
extern void _ZN10S2382C3_nt4v104Ev();
extern void _ZN10S2382C3_nt4v105Ev();
extern void _ZN10S2382C2_nt4v106Ev();
extern void _ZN10S2382C2_nt4v107Ev();
extern void _ZN10S2382C2_nt4v108Ev();
extern void _ZN10S2382C2_nt4v109Ev();
extern void _ZN10S2382C2_nt4v110Ev();
extern void _ZN10S2382C2_nt4v111Ev();
extern void _ZN10S2382C2_nt4v112Ev();
extern void _ZN10S2382C2_nt4v113Ev();
extern void _ZN10S2382C2_nt4v114Ev();
extern void _ZN10S2382C2_nt4v115Ev();
extern void _ZN7S2382C12v1Ev();
extern void _ZN7S2382C12v2Ev();
extern void _ZN7S2382C12v3Ev();
extern void _ZN7S2382C12v4Ev();
static  VTBL_ENTRY vtc_S2382C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2382C1[0]),
  (VTBL_ENTRY)&_ZN7S2382C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2382C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2382C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2382C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S2382C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN7S2382C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2382C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2382C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2382C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2382C1[];
extern  VTBL_ENTRY _ZTV7S2382C1[];
Class_Descriptor cd_S2382C1 = {  "S2382C1", // class name
  bases_S2382C1, 3,
  &(vtc_S2382C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI7S2382C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2382C1),119, //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  S7511C5  {
  long s7511c5f0;
  short s7511c5f1;
  char s7511c5f2[5];
  void *s7511c5f3[3];
  char s7511c5f4;
  long double s7511c5f5;
  void *s7511c5f6;
  __tsi64 s7511c5f7[2];
  long s7511c5f8;
  void *s7511c5f9[3];
  void  mf7511c5(); // _ZN7S7511C58mf7511c5Ev
};
//SIG(-1 S7511C5) C1{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]}


void  S7511C5 ::mf7511c5(){}

static void Test_S7511C5()
{
  {
    init_simple_test("S7511C5");
    S7511C5 lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S7511C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C5)");
    check_field_offset(lv, s7511c5f0, 0, "S7511C5.s7511c5f0");
    check_field_offset(lv, s7511c5f1, ABISELECT(8,4), "S7511C5.s7511c5f1");
    check_field_offset(lv, s7511c5f2, ABISELECT(10,6), "S7511C5.s7511c5f2");
    check_field_offset(lv, s7511c5f3, ABISELECT(16,12), "S7511C5.s7511c5f3");
    check_field_offset(lv, s7511c5f4, ABISELECT(40,24), "S7511C5.s7511c5f4");
    check_field_offset(lv, s7511c5f5, ABISELECT(48,28), "S7511C5.s7511c5f5");
    check_field_offset(lv, s7511c5f6, ABISELECT(64,40), "S7511C5.s7511c5f6");
    check_field_offset(lv, s7511c5f7, ABISELECT(72,44), "S7511C5.s7511c5f7");
    check_field_offset(lv, s7511c5f8, ABISELECT(88,60), "S7511C5.s7511c5f8");
    check_field_offset(lv, s7511c5f9, ABISELECT(96,64), "S7511C5.s7511c5f9");
  }
}
static Arrange_To_Call_Me vS7511C5(Test_S7511C5, "S7511C5", ABISELECT(128,76));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S7511C5[];
VTBL_ENTRY *P__ZTI7S7511C5 = _ZTI7S7511C5; 
Class_Descriptor cd_S7511C5 = {  "S7511C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S7511C5),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  S7511C4  : virtual S7511C5 {
  ::S7511C5 s7511c4f0;
  ::S7511C5 s7511c4f1;
  void *s7511c4f2;
  int s7511c4f3;
  void *s7511c4f4[7];
  int s7511c4f5[2];
  ::S7511C5 s7511c4f6;
  ::S7511C5 s7511c4f7[6];
  __tsi64 s7511c4f8[2];
  void *s7511c4f9;
  int s7511c4f10;
  void *s7511c4f11;
  ~S7511C4(); // tgen
  S7511C4(); // tgen
};
//SIG(-1 S7511C4) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}


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

static void Test_S7511C4()
{
  extern Class_Descriptor cd_S7511C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,210)];
    init_test(&cd_S7511C4, buf);
    S7511C4 *dp, &lv = *(dp=new (buf) S7511C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,836), "sizeof(S7511C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C4)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1296,760), "S7511C4");
    check_field_offset(lv, s7511c4f0, ABISELECT(16,4), "S7511C4.s7511c4f0");
    check_field_offset(lv, s7511c4f1, ABISELECT(144,80), "S7511C4.s7511c4f1");
    check_field_offset(lv, s7511c4f2, ABISELECT(272,156), "S7511C4.s7511c4f2");
    check_field_offset(lv, s7511c4f3, ABISELECT(280,160), "S7511C4.s7511c4f3");
    check_field_offset(lv, s7511c4f4, ABISELECT(288,164), "S7511C4.s7511c4f4");
    check_field_offset(lv, s7511c4f5, ABISELECT(344,192), "S7511C4.s7511c4f5");
    check_field_offset(lv, s7511c4f6, ABISELECT(352,200), "S7511C4.s7511c4f6");
    check_field_offset(lv, s7511c4f7, ABISELECT(480,276), "S7511C4.s7511c4f7");
    check_field_offset(lv, s7511c4f8, ABISELECT(1248,732), "S7511C4.s7511c4f8");
    check_field_offset(lv, s7511c4f9, ABISELECT(1264,748), "S7511C4.s7511c4f9");
    check_field_offset(lv, s7511c4f10, ABISELECT(1272,752), "S7511C4.s7511c4f10");
    check_field_offset(lv, s7511c4f11, ABISELECT(1280,756), "S7511C4.s7511c4f11");
    test_class_info(&lv, &cd_S7511C4);
    dp->~S7511C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C4(Test_S7511C4, "S7511C4", ABISELECT(1424,836));

#else // __cplusplus

extern void _ZN7S7511C4C1Ev();
extern void _ZN7S7511C4D1Ev();
Name_Map name_map_S7511C4[] = {
  NSPAIR(_ZN7S7511C4C1Ev),
  NSPAIR(_ZN7S7511C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
static Base_Class bases_S7511C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1296,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7511C4[];
static  VTBL_ENTRY vtc_S7511C4[] = {
  ABISELECT(1296,760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern VTBL_ENTRY _ZTV7S7511C4[];
static  VTT_ENTRY vtt_S7511C4[] = {
  {&(_ZTV7S7511C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
Class_Descriptor cd_S7511C4 = {  "S7511C4", // class name
  bases_S7511C4, 1,
  &(vtc_S7511C4[0]), // expected_vtbl_contents
  &(vtt_S7511C4[0]), // expected_vtt_contents
  ABISELECT(1424,836), // object size
  NSPAIRA(_ZTI7S7511C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7511C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7511C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C3  {
  int s7511c3f0[2];
  char s7511c3f1:3;
  int s7511c3f2[5];
  int s7511c3f3:4;
  int s7511c3f4;
  ::S7511C4 s7511c3f5;
  virtual void  v1(); // _ZN7S7511C32v1Ev
  virtual void  v2(); // _ZN7S7511C32v2Ev
  ~S7511C3(); // tgen
  S7511C3(); // tgen
};
//SIG(-1 S7511C3) C1{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp}}


void  S7511C3 ::v1(){vfunc_called(this, "_ZN7S7511C32v1Ev");}
void  S7511C3 ::v2(){vfunc_called(this, "_ZN7S7511C32v2Ev");}
S7511C3 ::~S7511C3(){ note_dtor("S7511C3", this);} // tgen
S7511C3 ::S7511C3(){ note_ctor("S7511C3", this);} // tgen

static void Test_S7511C3()
{
  extern Class_Descriptor cd_S7511C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,221)];
    init_test(&cd_S7511C3, buf);
    S7511C3 *dp, &lv = *(dp=new (buf) S7511C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,880), "sizeof(S7511C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C3)");
    check_field_offset(lv, s7511c3f0, ABISELECT(8,4), "S7511C3.s7511c3f0");
    set_bf_and_test(lv, s7511c3f1, ABISELECT(16,12), 0, 3, 1, "S7511C3");
    set_bf_and_test(lv, s7511c3f1, ABISELECT(16,12), 0, 3, hide_sll(1LL<<2), "S7511C3");
    check_field_offset(lv, s7511c3f2, ABISELECT(20,16), "S7511C3.s7511c3f2");
    set_bf_and_test(lv, s7511c3f3, ABISELECT(40,36), 0, 4, 1, "S7511C3");
    set_bf_and_test(lv, s7511c3f3, ABISELECT(40,36), 0, 4, hide_sll(1LL<<3), "S7511C3");
    check_field_offset(lv, s7511c3f4, ABISELECT(44,40), "S7511C3.s7511c3f4");
    check_field_offset(lv, s7511c3f5, ABISELECT(48,44), "S7511C3.s7511c3f5");
    test_class_info(&lv, &cd_S7511C3);
    dp->~S7511C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C3(Test_S7511C3, "S7511C3", ABISELECT(1472,880));

#else // __cplusplus

extern void _ZN7S7511C3C1Ev();
extern void _ZN7S7511C3D1Ev();
Name_Map name_map_S7511C3[] = {
  NSPAIR(_ZN7S7511C3C1Ev),
  NSPAIR(_ZN7S7511C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7511C3[];
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY vtc_S7511C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C3[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
Class_Descriptor cd_S7511C3 = {  "S7511C3", // class name
  0,0,//no base classes
  &(vtc_S7511C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,880), // object size
  NSPAIRA(_ZTI7S7511C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7511C3),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  S7511C8  {
  short  :0;
  int s7511c8f1;
  __tsi64 s7511c8f2;
  void *s7511c8f3;
  void  mf7511c8(); // _ZN7S7511C88mf7511c8Ev
};
//SIG(1 S7511C8) U1{ m Fs:0 Fi FL Fp}

#endif // __cplusplus
#ifdef __cplusplus

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



//skip512 S7511C9_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S7511C7  : virtual S7511C5 , S7511C4 {
  int s7511c7f0;
  void *s7511c7f1[3];
  int s7511c7f2;
  ::S7511C8 s7511c7f3;
  ::S7511C9_nt s7511c7f4;
  ::S7511C9_nt s7511c7f5;
  ::S7511C4 s7511c7f6;
  ::S7511C8 s7511c7f7;
  void *s7511c7f8[3];
  virtual  ~S7511C7(); // _ZN7S7511C7D2Ev
  S7511C7(); // tgen
};
//SIG(-1 S7511C7) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC3{ VBC2 FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU4{ m Fs:0 Fi FL Fp} FC5{} FC5 FC3 FU4 Fp[3]}


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

static void Test_S7511C7()
{
  extern Class_Descriptor cd_S7511C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(184,432)];
    init_test(&cd_S7511C7, buf);
    S7511C7 *dp, &lv = *(dp=new (buf) S7511C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2928,1724), "sizeof(S7511C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C7)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(2800,1648), "S7511C7");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(2800,1648), "S7511C7");
    check_base_class_offset(lv, (S7511C4*), 0, "S7511C7");
    check_field_offset(lv, s7511c7f0, ABISELECT(1288,760), "S7511C7.s7511c7f0");
    check_field_offset(lv, s7511c7f1, ABISELECT(1296,764), "S7511C7.s7511c7f1");
    check_field_offset(lv, s7511c7f2, ABISELECT(1320,776), "S7511C7.s7511c7f2");
    check_field_offset(lv, s7511c7f3, ABISELECT(1328,780), "S7511C7.s7511c7f3");
    check_field_offset(lv, s7511c7f4, ABISELECT(1336,788), "S7511C7.s7511c7f4");
    check_field_offset(lv, s7511c7f5, ABISELECT(1337,789), "S7511C7.s7511c7f5");
    check_field_offset(lv, s7511c7f6, ABISELECT(1344,792), "S7511C7.s7511c7f6");
    check_field_offset(lv, s7511c7f7, ABISELECT(2768,1628), "S7511C7.s7511c7f7");
    check_field_offset(lv, s7511c7f8, ABISELECT(2776,1636), "S7511C7.s7511c7f8");
    test_class_info(&lv, &cd_S7511C7);
    dp->~S7511C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C7(Test_S7511C7, "S7511C7", ABISELECT(2928,1724));

#else // __cplusplus

extern void _ZN7S7511C7C1Ev();
extern void _ZN7S7511C7D2Ev();
Name_Map name_map_S7511C7[] = {
  NSPAIR(_ZN7S7511C7C1Ev),
  NSPAIR(_ZN7S7511C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
static Base_Class bases_S7511C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(2800,1648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7511C7[];
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY vtc_S7511C7[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S7511C7[];
static  VTBL_ENTRY _tg__ZTV7S7511C4__7S7511C7[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C7[] = {
  {&(_ZTV7S7511C7[3]),  3,5},
  {&(_tg__ZTV7S7511C4__7S7511C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
Class_Descriptor cd_S7511C7 = {  "S7511C7", // class name
  bases_S7511C7, 2,
  &(vtc_S7511C7[0]), // expected_vtbl_contents
  &(vtt_S7511C7[0]), // expected_vtt_contents
  ABISELECT(2928,1724), // object size
  NSPAIRA(_ZTI7S7511C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7511C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7511C7),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  S7511C10  {
  int s7511c10f0;
  short s7511c10f1;
  __tsi64 s7511c10f2;
  void *s7511c10f3;
  void  mf7511c10(); // _ZN8S7511C109mf7511c10Ev
};
//SIG(-1 S7511C10) C1{ m Fi Fs FL Fp}


void  S7511C10 ::mf7511c10(){}

static void Test_S7511C10()
{
  {
    init_simple_test("S7511C10");
    S7511C10 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S7511C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7511C10)");
    check_field_offset(lv, s7511c10f0, 0, "S7511C10.s7511c10f0");
    check_field_offset(lv, s7511c10f1, 4, "S7511C10.s7511c10f1");
    check_field_offset(lv, s7511c10f2, 8, "S7511C10.s7511c10f2");
    check_field_offset(lv, s7511c10f3, 16, "S7511C10.s7511c10f3");
  }
}
static Arrange_To_Call_Me vS7511C10(Test_S7511C10, "S7511C10", ABISELECT(24,20));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7511C10[];
VTBL_ENTRY *P__ZTI8S7511C10 = _ZTI8S7511C10; 
Class_Descriptor cd_S7511C10 = {  "S7511C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S7511C10),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  S7511C11  : virtual S7511C5 , virtual S7511C3 , virtual S7511C4 {
  __tsi64 s7511c11f0;
  int s7511c11f1;
  __tsi64 s7511c11f2[5];
  int s7511c11f3[9];
  int s7511c11f4;
  int s7511c11f5;
  ::S7511C4 s7511c11f6;
  void *s7511c11f7;
  char s7511c11f8;
  void *s7511c11f9;
  ::S7511C10 s7511c11f10;
  void *s7511c11f11[8];
  virtual void  v3(); // _ZN8S7511C112v3Ev
  virtual void  v4(); // _ZN8S7511C112v4Ev
  ~S7511C11(); // tgen
  S7511C11(); // tgen
};
//SIG(-1 S7511C11) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} VBC3{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4{ VBC2 FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}} VBC4 v1 v2 FL Fi FL[5] Fi[11] FC4 Fp Fc Fp FC5{ m Fi Fs FL Fp} Fp[8]}


void  S7511C11 ::v3(){vfunc_called(this, "_ZN8S7511C112v3Ev");}
void  S7511C11 ::v4(){vfunc_called(this, "_ZN8S7511C112v4Ev");}
S7511C11 ::~S7511C11(){ note_dtor("S7511C11", this);} // tgen
S7511C11 ::S7511C11(){ note_ctor("S7511C11", this);} // tgen

static void Test_S7511C11()
{
  extern Class_Descriptor cd_S7511C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,680)];
    init_test(&cd_S7511C11, buf);
    S7511C11 *dp, &lv = *(dp=new (buf) S7511C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,2716), "sizeof(S7511C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C11)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1648,1000), "S7511C11");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(1648,1000), "S7511C11");
    check_base_class_offset(lv, (S7511C3*), ABISELECT(1776,1076), "S7511C11");
    check_base_class_offset(lv, (S7511C4*), ABISELECT(3248,1956), "S7511C11");
    check_field_offset(lv, s7511c11f0, ABISELECT(8,4), "S7511C11.s7511c11f0");
    check_field_offset(lv, s7511c11f1, ABISELECT(16,12), "S7511C11.s7511c11f1");
    check_field_offset(lv, s7511c11f2, ABISELECT(24,16), "S7511C11.s7511c11f2");
    check_field_offset(lv, s7511c11f3, ABISELECT(64,56), "S7511C11.s7511c11f3");
    check_field_offset(lv, s7511c11f4, ABISELECT(100,92), "S7511C11.s7511c11f4");
    check_field_offset(lv, s7511c11f5, ABISELECT(104,96), "S7511C11.s7511c11f5");
    check_field_offset(lv, s7511c11f6, ABISELECT(112,100), "S7511C11.s7511c11f6");
    check_field_offset(lv, s7511c11f7, ABISELECT(1536,936), "S7511C11.s7511c11f7");
    check_field_offset(lv, s7511c11f8, ABISELECT(1544,940), "S7511C11.s7511c11f8");
    check_field_offset(lv, s7511c11f9, ABISELECT(1552,944), "S7511C11.s7511c11f9");
    check_field_offset(lv, s7511c11f10, ABISELECT(1560,948), "S7511C11.s7511c11f10");
    check_field_offset(lv, s7511c11f11, ABISELECT(1584,968), "S7511C11.s7511c11f11");
    test_class_info(&lv, &cd_S7511C11);
    dp->~S7511C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C11(Test_S7511C11, "S7511C11", ABISELECT(4544,2716));

#else // __cplusplus

extern void _ZN8S7511C11C1Ev();
extern void _ZN8S7511C11D1Ev();
Name_Map name_map_S7511C11[] = {
  NSPAIR(_ZN8S7511C11C1Ev),
  NSPAIR(_ZN8S7511C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
static Base_Class bases_S7511C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1648,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C3,    ABISELECT(1776,1076), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C4,    ABISELECT(3248,1956), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S7511C11[];
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY vtc_S7511C11[] = {
  ABISELECT(3248,1956),
  ABISELECT(1776,1076),
  ABISELECT(1648,1000),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  0,
  ABISELECT(-1776,-1076),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  ABISELECT(-1600,-956),
  ABISELECT(-3248,-1956),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern VTBL_ENTRY _ZTV8S7511C11[];
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C11[] = {
  {&(_ZTV8S7511C11[5]),  5,16},
  {&(_ZTV8S7511C11[11]),  11,16},
  {&(_ZTV8S7511C11[16]),  16,16},
  {&(_tg__ZTV7S7511C4__8S7511C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
Class_Descriptor cd_S7511C11 = {  "S7511C11", // class name
  bases_S7511C11, 3,
  &(vtc_S7511C11[0]), // expected_vtbl_contents
  &(vtt_S7511C11[0]), // expected_vtt_contents
  ABISELECT(4544,2716), // object size
  NSPAIRA(_ZTI8S7511C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7511C11),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C11),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  S7511C13  {
  int s7511c13f0;
  int s7511c13f1;
  __tsi64 s7511c13f2;
  void *s7511c13f3[6];
  void  mf7511c13(); // _ZN8S7511C139mf7511c13Ev
};
//SIG(-1 S7511C13) C1{ m Fi[2] FL Fp[6]}


void  S7511C13 ::mf7511c13(){}

static void Test_S7511C13()
{
  {
    init_simple_test("S7511C13");
    S7511C13 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S7511C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7511C13)");
    check_field_offset(lv, s7511c13f0, 0, "S7511C13.s7511c13f0");
    check_field_offset(lv, s7511c13f1, 4, "S7511C13.s7511c13f1");
    check_field_offset(lv, s7511c13f2, 8, "S7511C13.s7511c13f2");
    check_field_offset(lv, s7511c13f3, 16, "S7511C13.s7511c13f3");
  }
}
static Arrange_To_Call_Me vS7511C13(Test_S7511C13, "S7511C13", ABISELECT(64,40));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7511C13[];
VTBL_ENTRY *P__ZTI8S7511C13 = _ZTI8S7511C13; 
Class_Descriptor cd_S7511C13 = {  "S7511C13", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S7511C13),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  S7511C12  : S7511C10 , virtual S7511C13 , S7511C4 {
  short s7511c12f0;
  int s7511c12f1;
  long double s7511c12f2;
  char s7511c12f3;
  int s7511c12f4;
  long s7511c12f5;
  void *s7511c12f6;
  ::S7511C3 s7511c12f7;
  int s7511c12f8;
  void *s7511c12f9;
  virtual void  v5(); // _ZN8S7511C122v5Ev
  ~S7511C12(); // tgen
  S7511C12(); // tgen
};
//SIG(-1 S7511C12) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fi[2] FL Fp[6]} BC4{ VBC5{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC5 FC5 Fp Fi Fp[7] Fi[2] FC5 FC5[6] FL[2] Fp Fi Fp} v1 Fs Fi FD Fc Fi Fl Fp FC6{ v2 v3 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} Fi Fp}


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

static void Test_S7511C12()
{
  extern Class_Descriptor cd_S7511C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,456)];
    init_test(&cd_S7511C12, buf);
    S7511C12 *dp, &lv = *(dp=new (buf) S7511C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1820), "sizeof(S7511C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C12)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S7511C12");
    check_base_class_offset(lv, (S7511C13*), ABISELECT(2864,1704), "S7511C12");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(2928,1744), "S7511C12");
    check_base_class_offset(lv, (S7511C4*), 0, "S7511C12");
    check_field_offset(lv, s7511c12f0, ABISELECT(1312,780), "S7511C12.s7511c12f0");
    check_field_offset(lv, s7511c12f1, ABISELECT(1316,784), "S7511C12.s7511c12f1");
    check_field_offset(lv, s7511c12f2, ABISELECT(1328,788), "S7511C12.s7511c12f2");
    check_field_offset(lv, s7511c12f3, ABISELECT(1344,800), "S7511C12.s7511c12f3");
    check_field_offset(lv, s7511c12f4, ABISELECT(1348,804), "S7511C12.s7511c12f4");
    check_field_offset(lv, s7511c12f5, ABISELECT(1352,808), "S7511C12.s7511c12f5");
    check_field_offset(lv, s7511c12f6, ABISELECT(1360,812), "S7511C12.s7511c12f6");
    check_field_offset(lv, s7511c12f7, ABISELECT(1376,816), "S7511C12.s7511c12f7");
    check_field_offset(lv, s7511c12f8, ABISELECT(2848,1696), "S7511C12.s7511c12f8");
    check_field_offset(lv, s7511c12f9, ABISELECT(2856,1700), "S7511C12.s7511c12f9");
    test_class_info(&lv, &cd_S7511C12);
    dp->~S7511C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C12(Test_S7511C12, "S7511C12", ABISELECT(3056,1820));

#else // __cplusplus

extern void _ZN8S7511C12C1Ev();
extern void _ZN8S7511C12D1Ev();
Name_Map name_map_S7511C12[] = {
  NSPAIR(_ZN8S7511C12C1Ev),
  NSPAIR(_ZN8S7511C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
static Base_Class bases_S7511C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7511C13,    ABISELECT(2864,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C5,    ABISELECT(2928,1744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7511C12[];
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY vtc_S7511C12[] = {
  ABISELECT(2864,1704),
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern VTBL_ENTRY _ZTV8S7511C12[];
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C12[] = {
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C12[] = {
  {&(_ZTV8S7511C12[4]),  4,5},
  {&(_tg__ZTV7S7511C4__8S7511C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
Class_Descriptor cd_S7511C12 = {  "S7511C12", // class name
  bases_S7511C12, 4,
  &(vtc_S7511C12[0]), // expected_vtbl_contents
  &(vtt_S7511C12[0]), // expected_vtt_contents
  ABISELECT(3056,1820), // object size
  NSPAIRA(_ZTI8S7511C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7511C12),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C12),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  S7511C14  : S7511C10 , virtual S7511C5 , S7511C4 , virtual S7511C3 , S7511C13 {
  short s7511c14f0;
  ::S7511C13 s7511c14f1;
  int s7511c14f2;
  int s7511c14f3;
  ~S7511C14(); // tgen
  S7511C14(); // tgen
};
//SIG(-1 S7511C14) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} VBC5{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} BC6{ m Fi[2] FL Fp[6]} Fs FC6 Fi[2]}


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

static void Test_S7511C14()
{
  extern Class_Descriptor cd_S7511C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,458)];
    init_test(&cd_S7511C14, buf);
    S7511C14 *dp, &lv = *(dp=new (buf) S7511C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1828), "sizeof(S7511C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C14)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S7511C14");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1456,872), "S7511C14");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(1456,872), "S7511C14");
    check_base_class_offset(lv, (S7511C4*), 0, "S7511C14");
    check_base_class_offset(lv, (S7511C3*), ABISELECT(1584,948), "S7511C14");
    check_base_class_offset(lv, (S7511C13*), ABISELECT(1312,780), "S7511C14");
    check_field_offset(lv, s7511c14f0, ABISELECT(1376,820), "S7511C14.s7511c14f0");
    check_field_offset(lv, s7511c14f1, ABISELECT(1384,824), "S7511C14.s7511c14f1");
    check_field_offset(lv, s7511c14f2, ABISELECT(1448,864), "S7511C14.s7511c14f2");
    check_field_offset(lv, s7511c14f3, ABISELECT(1452,868), "S7511C14.s7511c14f3");
    test_class_info(&lv, &cd_S7511C14);
    dp->~S7511C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C14(Test_S7511C14, "S7511C14", ABISELECT(3056,1828));

#else // __cplusplus

extern void _ZN8S7511C14C1Ev();
extern void _ZN8S7511C14D1Ev();
Name_Map name_map_S7511C14[] = {
  NSPAIR(_ZN8S7511C14C1Ev),
  NSPAIR(_ZN8S7511C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
static Base_Class bases_S7511C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7511C5,    ABISELECT(1456,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C3,    ABISELECT(1584,948), //bcp->offset
    4, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C13,    ABISELECT(1312,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7511C14[];
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY vtc_S7511C14[] = {
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S7511C14[];
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C14[] = {
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C14[] = {
  {&(_ZTV8S7511C14[4]),  4,10},
  {&(_tg__ZTV7S7511C4__8S7511C14[3]),  3,3},
  {&(_ZTV8S7511C14[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7511C14[];
extern  VTBL_ENTRY _ZTV8S7511C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C14[];
Class_Descriptor cd_S7511C14 = {  "S7511C14", // class name
  bases_S7511C14, 5,
  &(vtc_S7511C14[0]), // expected_vtbl_contents
  &(vtt_S7511C14[0]), // expected_vtt_contents
  ABISELECT(3056,1828), // object size
  NSPAIRA(_ZTI8S7511C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7511C14),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C14),3, //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  S7511C6  : virtual S7511C7 , S7511C10 , virtual S7511C4 , virtual S7511C11 , virtual S7511C12 {
  int s7511c6f0;
  int s7511c6f1;
  void *s7511c6f2[7];
  int s7511c6f3;
  ::S7511C14 s7511c6f4;
  virtual  ~S7511C6(); // _ZN7S7511C6D2Ev
  S7511C6(); // tgen
};
//SIG(-1 S7511C6) C1{ VBC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU5{ m Fs:0 Fi FL Fp} FC6{} FC6 FC4 FU5 Fp[3]} BC7{ m Fi Fs FL Fp} VBC4 VBC8{ VBC3 VBC9{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} VBC4 v3 v4 FL Fi FL[5] Fi[9] Fi Fi FC4 Fp Fc Fp FC7 Fp[8]} VBC10{ BC7 VBC11{ m Fi Fi FL Fp[6]} BC4 v5 Fs Fi FD Fc Fi Fl Fp FC9 Fi Fp} vd Fi Fi Fp[7] Fi FC12{ BC7 VBC3 BC4 VBC9 BC11 Fs FC11 Fi Fi}}


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

static void Test_S7511C6()
{
  extern Class_Descriptor cd_S7511C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(841,2001)];
    init_test(&cd_S7511C6, buf);
    S7511C6 *dp, &lv = *(dp=new (buf) S7511C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13440,8000), "sizeof(S7511C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C6)");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(5968,3540), "S7511C6");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(5968,3540), "S7511C6");
    /*is_ambiguous_... S7511C6::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(5968,3540), "S7511C6");
    check_base_class_offset(lv, (S7511C5*)(S7511C11*), ABISELECT(5968,3540), "S7511C6");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C12*), ABISELECT(5968,3540), "S7511C6");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(3168,1892), "S7511C6");
    check_base_class_offset(lv, (S7511C7*), ABISELECT(3168,1892), "S7511C6");
    /*is_ambiguous_... S7511C6::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*), ABISELECT(8,4), "S7511C6");
    /*is_ambiguous_... S7511C6::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*), ABISELECT(6096,3616), "S7511C6");
    check_base_class_offset(lv, (S7511C4*)(S7511C11*), ABISELECT(6096,3616), "S7511C6");
    check_base_class_offset(lv, (S7511C3*)(S7511C11*), ABISELECT(9040,5376), "S7511C6");
    check_base_class_offset(lv, (S7511C11*), ABISELECT(7392,4376), "S7511C6");
    check_base_class_offset(lv, (S7511C10*)(S7511C12*), ABISELECT(11800,7016), "S7511C6");
    check_base_class_offset(lv, (S7511C13*)(S7511C12*), ABISELECT(13376,7960), "S7511C6");
    check_base_class_offset(lv, (S7511C4*)(S7511C12*), ABISELECT(10512,6256), "S7511C6");
    check_base_class_offset(lv, (S7511C12*), ABISELECT(10512,6256), "S7511C6");
    check_field_offset(lv, s7511c6f0, ABISELECT(32,24), "S7511C6.s7511c6f0");
    check_field_offset(lv, s7511c6f1, ABISELECT(36,28), "S7511C6.s7511c6f1");
    check_field_offset(lv, s7511c6f2, ABISELECT(40,32), "S7511C6.s7511c6f2");
    check_field_offset(lv, s7511c6f3, ABISELECT(96,60), "S7511C6.s7511c6f3");
    check_field_offset(lv, s7511c6f4, ABISELECT(112,64), "S7511C6.s7511c6f4");
    test_class_info(&lv, &cd_S7511C6);
    dp->~S7511C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C6(Test_S7511C6, "S7511C6", ABISELECT(13440,8000));

#else // __cplusplus

extern void _ZN7S7511C6C1Ev();
extern void _ZN7S7511C6D2Ev();
Name_Map name_map_S7511C6[] = {
  NSPAIR(_ZN7S7511C6C1Ev),
  NSPAIR(_ZN7S7511C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C11;
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C12;
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
static Base_Class bases_S7511C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(5968,3540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(3168,1892), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(3168,1892), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    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_S7511C4,    ABISELECT(6096,3616), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C3,    ABISELECT(9040,5376), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7511C11,    ABISELECT(7392,4376), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    ABISELECT(11800,7016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(13376,7960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    ABISELECT(10512,6256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C12,    ABISELECT(10512,6256), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7511C6[];
extern void _ZN7S7511C6D1Ev();
extern void _ZN7S7511C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev)() __attribute__((weak));
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY vtc_S7511C6[] = {
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C6D0Ev,
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  0,
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-10512,-6256),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern VTBL_ENTRY _ZTV7S7511C6[];
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C6[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__7S7511C6[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C6[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C6[] = {
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C11__7S7511C6[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11__7S7511C6[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C6[] = {
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C12__A2__7S7511C6[] = {
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C6[] = {
  {&(_ZTV7S7511C6[9]),  9,41},
  {&(_ZTV7S7511C6[15]),  15,41},
  {&(_ZTV7S7511C6[20]),  20,41},
  {&(_ZTV7S7511C6[27]),  27,41},
  {&(_ZTV7S7511C6[33]),  33,41},
  {&(_ZTV7S7511C6[40]),  40,41},
  {&(_tg__ZTV7S7511C7__7S7511C6[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__7S7511C6[3]),  3,3},
  {&(_tg__ZTV7S7511C4__A1__7S7511C6[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C6[5]),  5,7},
  {&(_tg__ZTV7S7511C3__8S7511C11__7S7511C6[4]),  4,6},
  {&(_tg__ZTV7S7511C4__8S7511C11__7S7511C6[3]),  3,3},
  {&(_tg__ZTV8S7511C12__7S7511C6[4]),  4,5},
  {&(_tg__ZTV7S7511C48S7511C12__A2__7S7511C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7511C6[];
extern  VTBL_ENTRY _ZTV7S7511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C6[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C6 = {  "S7511C6", // class name
  bases_S7511C6, 11,
  &(vtc_S7511C6[0]), // expected_vtbl_contents
  &(vtt_S7511C6[0]), // expected_vtt_contents
  ABISELECT(13440,8000), // object size
  NSPAIRA(_ZTI7S7511C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7511C6),41, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7511C6),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S7511C19  {
  void *s7511c19f0;
  __tsi64 s7511c19f1;
  char s7511c19f2;
  int s7511c19f3;
  int s7511c19f4;
  long double s7511c19f5;
  void  mf7511c19(); // _ZN8S7511C199mf7511c19Ev
};
//SIG(1 S7511C19) U1{ m Fp FL Fc Fi Fi FD}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7511C18  : S7511C7 {
  ::S7511C3 s7511c18f0;
  void *s7511c18f1;
  char s7511c18f2:5;
  int s7511c18f3;
  int s7511c18f4;
  void *s7511c18f5;
  int s7511c18f6;
  ::S7511C12 s7511c18f7;
  ::S7511C19 s7511c18f8[9];
  int s7511c18f9:21;
  virtual  ~S7511C18(); // _ZN8S7511C18D2Ev
  virtual void  v8(); // _ZN8S7511C182v8Ev
  virtual void  v9(); // _ZN8S7511C182v9Ev
  S7511C18(); // tgen
};
//SIG(-1 S7511C18) C1{ BC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU5{ m Fs:0 Fi FL Fp} FC6{} FC6 FC4 FU5 Fp[3]} vd v1 v2 FC7{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} Fp Fc:5 Fi Fi Fp Fi FC8{ BC9{ m Fi Fs FL Fp} VBC10{ m Fi Fi FL Fp[6]} BC4 v5 Fs Fi FD Fc Fi Fl Fp FC7 Fi Fp} FU11{ m Fp FL Fc Fi Fi FD}[9] Fi:21}


 S7511C18 ::~S7511C18(){ note_dtor("S7511C18", this);}
void  S7511C18 ::v8(){vfunc_called(this, "_ZN8S7511C182v8Ev");}
void  S7511C18 ::v9(){vfunc_called(this, "_ZN8S7511C182v9Ev");}
S7511C18 ::S7511C18(){ note_ctor("S7511C18", this);} // tgen

static void Test_S7511C18()
{
  extern Class_Descriptor cd_S7511C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(480,1141)];
    init_test(&cd_S7511C18, buf);
    S7511C18 *dp, &lv = *(dp=new (buf) S7511C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7664,4560), "sizeof(S7511C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C18)");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(7536,4484), "S7511C18");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(7536,4484), "S7511C18");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*), 0, "S7511C18");
    check_base_class_offset(lv, (S7511C7*), 0, "S7511C18");
    check_field_offset(lv, s7511c18f0, ABISELECT(2800,1648), "S7511C18.s7511c18f0");
    check_field_offset(lv, s7511c18f1, ABISELECT(4272,2528), "S7511C18.s7511c18f1");
    set_bf_and_test(lv, s7511c18f2, ABISELECT(4280,2532), 0, 5, 1, "S7511C18");
    set_bf_and_test(lv, s7511c18f2, ABISELECT(4280,2532), 0, 5, hide_sll(1LL<<4), "S7511C18");
    check_field_offset(lv, s7511c18f3, ABISELECT(4284,2536), "S7511C18.s7511c18f3");
    check_field_offset(lv, s7511c18f4, ABISELECT(4288,2540), "S7511C18.s7511c18f4");
    check_field_offset(lv, s7511c18f5, ABISELECT(4296,2544), "S7511C18.s7511c18f5");
    check_field_offset(lv, s7511c18f6, ABISELECT(4304,2548), "S7511C18.s7511c18f6");
    check_field_offset(lv, s7511c18f7, ABISELECT(4320,2552), "S7511C18.s7511c18f7");
    check_field_offset(lv, s7511c18f8, ABISELECT(7376,4372), "S7511C18.s7511c18f8");
    set_bf_and_test(lv, s7511c18f9, ABISELECT(7520,4480), 0, 21, 1, "S7511C18");
    set_bf_and_test(lv, s7511c18f9, ABISELECT(7520,4480), 0, 21, hide_sll(1LL<<20), "S7511C18");
    test_class_info(&lv, &cd_S7511C18);
    dp->~S7511C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C18(Test_S7511C18, "S7511C18", ABISELECT(7664,4560));

#else // __cplusplus

extern void _ZN8S7511C18C1Ev();
extern void _ZN8S7511C18D2Ev();
Name_Map name_map_S7511C18[] = {
  NSPAIR(_ZN8S7511C18C1Ev),
  NSPAIR(_ZN8S7511C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
static Base_Class bases_S7511C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(7536,4484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7511C4,    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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7511C7,    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 _ZTI8S7511C18[];
extern void _ZN8S7511C18D1Ev();
extern void _ZN8S7511C18D0Ev();
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY vtc_S7511C18[] = {
  ABISELECT(7536,4484),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C18[0]),
  (VTBL_ENTRY)&_ZN8S7511C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C18D0Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern VTBL_ENTRY _ZTV8S7511C18[];
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C18[] = {
  ABISELECT(7536,4484),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__8S7511C18[] = {
  ABISELECT(7536,4484),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C18[] = {
  {&(_ZTV8S7511C18[3]),  3,7},
  {&(_tg__ZTV7S7511C7__8S7511C18[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__8S7511C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C18[];
extern  VTBL_ENTRY _ZTV8S7511C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C18[];
Class_Descriptor cd_S7511C18 = {  "S7511C18", // class name
  bases_S7511C18, 3,
  &(vtc_S7511C18[0]), // expected_vtbl_contents
  &(vtt_S7511C18[0]), // expected_vtt_contents
  ABISELECT(7664,4560), // object size
  NSPAIRA(_ZTI8S7511C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7511C18),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C18),3, //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  S7511C17  : virtual S7511C14 , virtual S7511C18 , S7511C7 , S7511C5 {
  void *s7511c17f0;
  void *s7511c17f1;
  __tsi64 s7511c17f2;
  short s7511c17f3;
  int s7511c17f4;
  virtual  ~S7511C17(); // _ZN8S7511C17D2Ev
  S7511C17(); // tgen
};
//SIG(-1 S7511C17) C1{ VBC2{ BC3{ m Fi Fs FL Fp} VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC5{ VBC4 FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp} VBC6{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} BC7{ m Fi[2] FL Fp[6]} Fs FC7 Fi[2]} VBC8{ BC9{ VBC4 BC5 vd Fi Fp[3] Fi FU10{ m Fs:0 Fi FL Fp} FC11{} FC11 FC5 FU10 Fp[3]} vd v3 v4 FC6 Fp Fc:5 Fi Fi Fp Fi FC12{ BC3 VBC7 BC5 v5 Fs Fi FD Fc Fi Fl Fp FC6 Fi Fp} FU13{ m Fp FL Fc Fi Fi FD}[9] Fi:21} BC9 BC4 vd Fp Fp FL Fs Fi}


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

static void Test_S7511C17()
{
  extern Class_Descriptor cd_S7511C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(848,2016)];
    init_test(&cd_S7511C17, buf);
    S7511C17 *dp, &lv = *(dp=new (buf) S7511C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13552,8060), "sizeof(S7511C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C17)");
    check_base_class_offset(lv, (S7511C10*)(S7511C14*), ABISELECT(4248,2508), "S7511C17");
    check_base_class_offset(lv, (S7511C5*)(S7511C14*), ABISELECT(4416,2620), "S7511C17");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C14*), ABISELECT(4416,2620), "S7511C17");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C18*), ABISELECT(4416,2620), "S7511C17");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(4416,2620), "S7511C17");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(4416,2620), "S7511C17");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(4416,2620), "S7511C17");
    check_base_class_offset(lv, (S7511C4*)(S7511C14*), ABISELECT(2960,1748), "S7511C17");
    check_base_class_offset(lv, (S7511C3*)(S7511C14*), ABISELECT(4544,2696), "S7511C17");
    check_base_class_offset(lv, (S7511C13*)(S7511C14*), ABISELECT(4272,2528), "S7511C17");
    check_base_class_offset(lv, (S7511C14*), ABISELECT(2960,1748), "S7511C17");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(6016,3576), "S7511C17");
    check_base_class_offset(lv, (S7511C7*)(S7511C18*), ABISELECT(6016,3576), "S7511C17");
    check_base_class_offset(lv, (S7511C18*), ABISELECT(6016,3576), "S7511C17");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*), 0, "S7511C17");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C7*), 0, "S7511C17");
    /*is_ambiguous_... S7511C17::S7511C5 */ AMB_check_base_class_offset(lv, (S7511C5*), ABISELECT(2800,1648), "S7511C17");
    check_field_offset(lv, s7511c17f0, ABISELECT(2928,1724), "S7511C17.s7511c17f0");
    check_field_offset(lv, s7511c17f1, ABISELECT(2936,1728), "S7511C17.s7511c17f1");
    check_field_offset(lv, s7511c17f2, ABISELECT(2944,1732), "S7511C17.s7511c17f2");
    check_field_offset(lv, s7511c17f3, ABISELECT(2952,1740), "S7511C17.s7511c17f3");
    check_field_offset(lv, s7511c17f4, ABISELECT(2956,1744), "S7511C17.s7511c17f4");
    test_class_info(&lv, &cd_S7511C17);
    dp->~S7511C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C17(Test_S7511C17, "S7511C17", ABISELECT(13552,8060));

#else // __cplusplus

extern void _ZN8S7511C17C1Ev();
extern void _ZN8S7511C17D2Ev();
Name_Map name_map_S7511C17[] = {
  NSPAIR(_ZN8S7511C17C1Ev),
  NSPAIR(_ZN8S7511C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C14;
extern VTBL_ENTRY _ZTI8S7511C14[];
extern  VTBL_ENTRY _ZTV8S7511C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C14[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C18;
extern VTBL_ENTRY _ZTI8S7511C18[];
extern  VTBL_ENTRY _ZTV8S7511C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C18[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
static Base_Class bases_S7511C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(4248,2508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7511C5,    ABISELECT(4416,2620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    ABISELECT(2960,1748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7511C3,    ABISELECT(4544,2696), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7511C13,    ABISELECT(4272,2528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7511C14,    ABISELECT(2960,1748), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C4,    ABISELECT(6016,3576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(6016,3576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7511C18,    ABISELECT(6016,3576), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C5,    ABISELECT(2800,1648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7511C17[];
extern void _ZN8S7511C17D1Ev();
extern void _ZN8S7511C17D0Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev)();
extern void ABISELECT(_ZThn6016_N8S7511C17D1Ev,_ZThn3576_N8S7511C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev)();
extern void ABISELECT(_ZThn6016_N8S7511C17D0Ev,_ZThn3576_N8S7511C17D0Ev)() __attribute__((weak));
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY vtc_S7511C17[] = {
  ABISELECT(6016,3576),
  ABISELECT(4544,2696),
  ABISELECT(2960,1748),
  ABISELECT(4416,2620),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN8S7511C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C17D0Ev,
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  ABISELECT(-2960,-1748),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  0,
  0,
  ABISELECT(-4544,-2696),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  0,
  0,
  ABISELECT(-6016,-3576),
  ABISELECT(-1600,-956),
  ABISELECT(-6016,-3576),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern VTBL_ENTRY _ZTV8S7511C17[];
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__A1__8S7511C17[] = {
  ABISELECT(4416,2620),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__A2__8S7511C17[] = {
  ABISELECT(4416,2620),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7511C14__8S7511C17[] = {
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C14__8S7511C17[] = {
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C14__8S7511C17[] = {
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C18D1Ev();
extern void _ZN8S7511C18D0Ev();
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C17[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C18[0]),
  (VTBL_ENTRY)&_ZN8S7511C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C18D0Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C18__8S7511C17[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C18__A1__8S7511C17[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C17[] = {
  {&(_ZTV8S7511C17[6]),  6,28},
  {&(_tg__ZTV7S7511C7__A1__8S7511C17[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__A2__8S7511C17[3]),  3,3},
  {&(_ZTV8S7511C17[12]),  12,28},
  {&(_ZTV8S7511C17[16]),  16,28},
  {&(_ZTV8S7511C17[24]),  24,28},
  {&(_tg__ZTV8S7511C14__8S7511C17[4]),  4,4},
  {&(_tg__ZTV7S7511C48S7511C14__8S7511C17[3]),  3,3},
  {&(_tg__ZTV7S7511C3__8S7511C14__8S7511C17[4]),  4,6},
  {&(_tg__ZTV8S7511C18__8S7511C17[3]),  3,7},
  {&(_tg__ZTV7S7511C78S7511C18__8S7511C17[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C18__A1__8S7511C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C17[];
extern  VTBL_ENTRY _ZTV8S7511C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C17[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6016_N8S7511C17D0Ev,_ZThn3576_N8S7511C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6016_N8S7511C17D1Ev,_ZThn3576_N8S7511C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C17 = {  "S7511C17", // class name
  bases_S7511C17, 12,
  &(vtc_S7511C17[0]), // expected_vtbl_contents
  &(vtt_S7511C17[0]), // expected_vtt_contents
  ABISELECT(13552,8060), // object size
  NSPAIRA(_ZTI8S7511C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7511C17),28, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C17),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C16  : virtual S7511C4 , virtual S7511C11 , virtual S7511C17 , S7511C13 {
  void *s7511c16f0;
  void *s7511c16f1;
  virtual  ~S7511C16(); // _ZN8S7511C16D2Ev
  S7511C16(); // tgen
};
//SIG(-1 S7511C16) C1{ VBC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} VBC4{ VBC3 VBC5{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC2} VBC2 v3 v4 FL Fi FL[5] Fi[11] FC2 Fp Fc Fp FC6{ m Fi Fs FL Fp} Fp[8]} VBC7{ VBC8{ BC6 VBC3 BC2 VBC5 BC9{ m Fi[2] FL Fp[6]} Fs FC9 Fi[2]} VBC10{ BC11{ VBC3 BC2 vd Fi Fp[3] Fi FU12{ m Fs:0 Fi FL Fp} FC13{} FC13 FC2 FU12 Fp[3]} vd v5 v6 FC5 Fp Fc:5 Fi Fi Fp Fi FC14{ BC6 VBC9 BC2 v7 Fs Fi FD Fc Fi Fl Fp FC5 Fi Fp} FU15{ m Fp FL Fc Fi Fi FD}[9] Fi:21} BC11 BC3 vd Fp Fp FL Fs Fi} BC9 vd Fp Fp}


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

static void Test_S7511C16()
{
  extern Class_Descriptor cd_S7511C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1038,2469)];
    init_test(&cd_S7511C16, buf);
    S7511C16 *dp, &lv = *(dp=new (buf) S7511C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16592,9872), "sizeof(S7511C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C16)");
    /*is_ambiguous_... S7511C16::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(1392,812), "S7511C16");
    check_base_class_offset(lv, (S7511C5*)(S7511C11*), ABISELECT(1392,812), "S7511C16");
    check_base_class_offset(lv, (S7511C5*)(S7511C14*), ABISELECT(1392,812), "S7511C16");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C14*), ABISELECT(1392,812), "S7511C16");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C18*), ABISELECT(1392,812), "S7511C16");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(1392,812), "S7511C16");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C17*), ABISELECT(1392,812), "S7511C16");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C17*), ABISELECT(1392,812), "S7511C16");
    /*is_ambiguous_... S7511C16::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*), ABISELECT(96,52), "S7511C16");
    check_base_class_offset(lv, (S7511C4*)(S7511C11*), ABISELECT(96,52), "S7511C16");
    check_base_class_offset(lv, (S7511C3*)(S7511C11*), ABISELECT(3168,1888), "S7511C16");
    check_base_class_offset(lv, (S7511C3*)(S7511C14*), ABISELECT(3168,1888), "S7511C16");
    check_base_class_offset(lv, (S7511C11*), ABISELECT(1520,888), "S7511C16");
    check_base_class_offset(lv, (S7511C10*)(S7511C14*), ABISELECT(8888,5276), "S7511C16");
    check_base_class_offset(lv, (S7511C4*)(S7511C14*), ABISELECT(7600,4516), "S7511C16");
    check_base_class_offset(lv, (S7511C13*)(S7511C14*), ABISELECT(8912,5296), "S7511C16");
    check_base_class_offset(lv, (S7511C14*)(S7511C17*), ABISELECT(7600,4516), "S7511C16");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(9056,5388), "S7511C16");
    check_base_class_offset(lv, (S7511C7*)(S7511C18*), ABISELECT(9056,5388), "S7511C16");
    check_base_class_offset(lv, (S7511C18*)(S7511C17*), ABISELECT(9056,5388), "S7511C16");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C17*), ABISELECT(4640,2768), "S7511C16");
    /*is_ambiguous_... S7511C17::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C7*)(S7511C17*), ABISELECT(4640,2768), "S7511C16");
    /*is_ambiguous_... S7511C17::S7511C5 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C17*), ABISELECT(7440,4416), "S7511C16");
    check_base_class_offset(lv, (S7511C17*), ABISELECT(4640,2768), "S7511C16");
    /*is_ambiguous_... S7511C16::S7511C13 */ AMB_check_base_class_offset(lv, (S7511C13*), ABISELECT(8,4), "S7511C16");
    check_field_offset(lv, s7511c16f0, ABISELECT(72,44), "S7511C16.s7511c16f0");
    check_field_offset(lv, s7511c16f1, ABISELECT(80,48), "S7511C16.s7511c16f1");
    test_class_info(&lv, &cd_S7511C16);
    dp->~S7511C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C16(Test_S7511C16, "S7511C16", ABISELECT(16592,9872));

#else // __cplusplus

extern void _ZN8S7511C16C1Ev();
extern void _ZN8S7511C16D2Ev();
Name_Map name_map_S7511C16[] = {
  NSPAIR(_ZN8S7511C16C1Ev),
  NSPAIR(_ZN8S7511C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C11;
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C14;
extern VTBL_ENTRY _ZTI8S7511C14[];
extern  VTBL_ENTRY _ZTV8S7511C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C14[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C18;
extern VTBL_ENTRY _ZTI8S7511C18[];
extern  VTBL_ENTRY _ZTV8S7511C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C18[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C17;
extern VTBL_ENTRY _ZTI8S7511C17[];
extern  VTBL_ENTRY _ZTV8S7511C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C17[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
static Base_Class bases_S7511C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1392,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(96,52), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C3,    ABISELECT(3168,1888), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7511C11,    ABISELECT(1520,888), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    ABISELECT(8888,5276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(7600,4516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(8912,5296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C14,    ABISELECT(7600,4516), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(9056,5388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(9056,5388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C18,    ABISELECT(9056,5388), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(4640,2768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(4640,2768), //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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7511C5,    ABISELECT(7440,4416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7511C17,    ABISELECT(4640,2768), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7511C16[];
extern void _ZN8S7511C16D1Ev();
extern void _ZN8S7511C16D0Ev();
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S7511C16D1Ev,_ZTv0_n28_N8S7511C16D1Ev)();
extern void ABISELECT(_ZThn4640_N8S7511C16D1Ev,_ZThn2768_N8S7511C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7511C16D0Ev,_ZTv0_n28_N8S7511C16D0Ev)();
extern void ABISELECT(_ZThn4640_N8S7511C16D0Ev,_ZThn2768_N8S7511C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C16D1Ev,_ZTv0_n16_N8S7511C16D1Ev)();
extern void ABISELECT(_ZThn9056_N8S7511C16D1Ev,_ZThn5388_N8S7511C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C16D0Ev,_ZTv0_n16_N8S7511C16D0Ev)();
extern void ABISELECT(_ZThn9056_N8S7511C16D0Ev,_ZThn5388_N8S7511C16D0Ev)() __attribute__((weak));
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY vtc_S7511C16[] = {
  ABISELECT(9056,5388),
  ABISELECT(7600,4516),
  ABISELECT(4640,2768),
  ABISELECT(3168,1888),
  ABISELECT(1520,888),
  ABISELECT(1392,812),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&_ZN8S7511C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C16D0Ev,
  ABISELECT(1296,760),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  0,
  0,
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  ABISELECT(-1520,-888),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  0,
  ABISELECT(-3168,-1888),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  ABISELECT(-4640,-2768),
  ABISELECT(4416,2620),
  ABISELECT(-1472,-880),
  ABISELECT(2960,1748),
  ABISELECT(-3248,-1956),
  ABISELECT(-4640,-2768),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7511C16D1Ev,_ZTv0_n28_N8S7511C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7511C16D0Ev,_ZTv0_n28_N8S7511C16D0Ev),
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  ABISELECT(-7600,-4516),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  0,
  0,
  ABISELECT(-9056,-5388),
  ABISELECT(-7664,-4576),
  ABISELECT(-9056,-5388),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C16D1Ev,_ZTv0_n16_N8S7511C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C16D0Ev,_ZTv0_n16_N8S7511C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern VTBL_ENTRY _ZTV8S7511C16[];
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C16[] = {
  ABISELECT(1296,760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__8S7511C16[] = {
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C11__8S7511C16[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11__8S7511C16[] = {
  ABISELECT(1296,760),
  ABISELECT(1424,836),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern void _ZN8S7511C17D1Ev();
extern void _ZN8S7511C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C17__8S7511C16[] = {
  ABISELECT(4416,2620),
  ABISELECT(-1472,-880),
  ABISELECT(2960,1748),
  ABISELECT(-3248,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN8S7511C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C17D0Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C17__A1__8S7511C16[] = {
  ABISELECT(-3248,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C17__A3__8S7511C16[] = {
  ABISELECT(-3248,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7511C14__8S7511C17__8S7511C16[] = {
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  ABISELECT(-2960,-1748),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C17__8S7511C16[] = {
  0,
  0,
  ABISELECT(1472,880),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev)();
extern void ABISELECT(_ZThn4416_N8S7511C17D1Ev,_ZThn2620_N8S7511C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev)();
extern void ABISELECT(_ZThn4416_N8S7511C17D0Ev,_ZThn2620_N8S7511C17D0Ev)() __attribute__((weak));
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C17__8S7511C16[] = {
  0,
  0,
  ABISELECT(-4416,-2620),
  ABISELECT(-7664,-4576),
  ABISELECT(-4416,-2620),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7511C14__8S7511C16[] = {
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C14__A1__8S7511C16[] = {
  ABISELECT(-6208,-3704),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C14__8S7511C16[] = {
  0,
  0,
  ABISELECT(4432,2628),
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C18D1Ev();
extern void _ZN8S7511C18D0Ev();
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C16[] = {
  ABISELECT(-7664,-4576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C18[0]),
  (VTBL_ENTRY)&_ZN8S7511C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C18D0Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C18__8S7511C16[] = {
  ABISELECT(-7664,-4576),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C18__A2__8S7511C16[] = {
  ABISELECT(-7664,-4576),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C16[] = {
  {&(_ZTV8S7511C16[9]),  9,52},
  {&(_ZTV8S7511C16[14]),  14,52},
  {&(_ZTV8S7511C16[21]),  21,52},
  {&(_ZTV8S7511C16[27]),  27,52},
  {&(_ZTV8S7511C16[36]),  36,52},
  {&(_ZTV8S7511C16[42]),  42,52},
  {&(_ZTV8S7511C16[48]),  48,52},
  {&(_tg__ZTV7S7511C4__8S7511C16[3]),  3,3},
  {&(_tg__ZTV8S7511C11__8S7511C16[5]),  5,7},
  {&(_tg__ZTV7S7511C3__8S7511C11__8S7511C16[4]),  4,6},
  {&(_tg__ZTV7S7511C4__8S7511C11__8S7511C16[3]),  3,3},
  {&(_tg__ZTV8S7511C17__8S7511C16[6]),  6,8},
  {&(_tg__ZTV7S7511C78S7511C17__A1__8S7511C16[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C17__A3__8S7511C16[3]),  3,3},
  {&(_tg__ZTV8S7511C14__8S7511C17__8S7511C16[4]),  4,4},
  {&(_tg__ZTV7S7511C3__8S7511C17__8S7511C16[4]),  4,6},
  {&(_tg__ZTV8S7511C18__8S7511C17__8S7511C16[6]),  6,10},
  {&(_tg__ZTV8S7511C14__8S7511C16[4]),  4,4},
  {&(_tg__ZTV7S7511C48S7511C14__A1__8S7511C16[3]),  3,3},
  {&(_tg__ZTV7S7511C3__8S7511C14__8S7511C16[4]),  4,6},
  {&(_tg__ZTV8S7511C18__8S7511C16[3]),  3,7},
  {&(_tg__ZTV7S7511C78S7511C18__8S7511C16[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C18__A2__8S7511C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C16[];
extern  VTBL_ENTRY _ZTV8S7511C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C16[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S7511C17D0Ev,_ZThn2620_N8S7511C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S7511C17D1Ev,_ZThn2620_N8S7511C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C16D0Ev,_ZTv0_n16_N8S7511C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9056_N8S7511C16D0Ev,_ZThn5388_N8S7511C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C16D1Ev,_ZTv0_n16_N8S7511C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9056_N8S7511C16D1Ev,_ZThn5388_N8S7511C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7511C16D0Ev,_ZTv0_n28_N8S7511C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4640_N8S7511C16D0Ev,_ZThn2768_N8S7511C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7511C16D1Ev,_ZTv0_n28_N8S7511C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4640_N8S7511C16D1Ev,_ZThn2768_N8S7511C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C16 = {  "S7511C16", // class name
  bases_S7511C16, 16,
  &(vtc_S7511C16[0]), // expected_vtbl_contents
  &(vtt_S7511C16[0]), // expected_vtt_contents
  ABISELECT(16592,9872), // object size
  NSPAIRA(_ZTI8S7511C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7511C16),52, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C16),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C21  {
  int s7511c21f0;
  ::S7511C12 s7511c21f1;
  ::S7511C5 s7511c21f2;
  void *s7511c21f3[10];
  void *s7511c21f4;
  virtual void  v10(); // _ZN8S7511C213v10Ev
  virtual void  v11(); // _ZN8S7511C213v11Ev
  ~S7511C21(); // tgen
  S7511C21(); // tgen
};
//SIG(-1 S7511C21) C1{ v1 v2 Fi FC2{ BC3{ m Fi Fs FL Fp} VBC4{ m Fi[2] FL Fp[6]} BC5{ VBC6{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC6 FC6 Fp Fi Fp[7] Fi[2] FC6 FC6[6] FL[2] Fp Fi Fp} v3 Fs Fi FD Fc Fi Fl Fp FC7{ v4 v5 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} Fi Fp} FC6 Fp[11]}


void  S7511C21 ::v10(){vfunc_called(this, "_ZN8S7511C213v10Ev");}
void  S7511C21 ::v11(){vfunc_called(this, "_ZN8S7511C213v11Ev");}
S7511C21 ::~S7511C21(){ note_dtor("S7511C21", this);} // tgen
S7511C21 ::S7511C21(){ note_ctor("S7511C21", this);} // tgen

static void Test_S7511C21()
{
  extern Class_Descriptor cd_S7511C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,488)];
    init_test(&cd_S7511C21, buf);
    S7511C21 *dp, &lv = *(dp=new (buf) S7511C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1948), "sizeof(S7511C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C21)");
    check_field_offset(lv, s7511c21f0, ABISELECT(8,4), "S7511C21.s7511c21f0");
    check_field_offset(lv, s7511c21f1, ABISELECT(16,8), "S7511C21.s7511c21f1");
    check_field_offset(lv, s7511c21f2, ABISELECT(3072,1828), "S7511C21.s7511c21f2");
    check_field_offset(lv, s7511c21f3, ABISELECT(3200,1904), "S7511C21.s7511c21f3");
    check_field_offset(lv, s7511c21f4, ABISELECT(3280,1944), "S7511C21.s7511c21f4");
    test_class_info(&lv, &cd_S7511C21);
    dp->~S7511C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C21(Test_S7511C21, "S7511C21", ABISELECT(3296,1948));

#else // __cplusplus

extern void _ZN8S7511C21C1Ev();
extern void _ZN8S7511C21D1Ev();
Name_Map name_map_S7511C21[] = {
  NSPAIR(_ZN8S7511C21C1Ev),
  NSPAIR(_ZN8S7511C21D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7511C21[];
extern void _ZN8S7511C213v10Ev();
extern void _ZN8S7511C213v11Ev();
static  VTBL_ENTRY vtc_S7511C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C21[0]),
  (VTBL_ENTRY)&_ZN8S7511C213v10Ev,
  (VTBL_ENTRY)&_ZN8S7511C213v11Ev,
};
extern VTBL_ENTRY _ZTI8S7511C21[];
extern  VTBL_ENTRY _ZTV8S7511C21[];
Class_Descriptor cd_S7511C21 = {  "S7511C21", // class name
  0,0,//no base classes
  &(vtc_S7511C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3296,1948), // object size
  NSPAIRA(_ZTI8S7511C21),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7511C21),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  S7511C20  : virtual S7511C6 , S7511C21 , S7511C7 {
  int s7511c20f0;
  void *s7511c20f1;
  long double s7511c20f2[5];
  ~S7511C20(); // tgen
  S7511C20(); // tgen
};
//SIG(-1 S7511C20) C1{ VBC2{ VBC3{ VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC5{ VBC4 FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU6{ m Fs:0 Fi FL Fp} FC7{} FC7 FC5 FU6 Fp[3]} BC8{ m Fi Fs FL Fp} VBC5 VBC9{ VBC4 VBC10{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} VBC5 v3 v4 FL Fi FL[5] Fi[9] Fi Fi FC5 Fp Fc Fp FC8 Fp[8]} VBC11{ BC8 VBC12{ m Fi Fi FL Fp[6]} BC5 v5 Fs Fi FD Fc Fi Fl Fp FC10 Fi Fp} vd Fi Fi Fp[7] Fi FC13{ BC8 VBC4 BC5 VBC10 BC12 Fs FC12 Fi Fi}} BC14{ v6 v7 Fi FC11 FC4 Fp[10] Fp} BC3 Fi Fp FD[5]}


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

static void Test_S7511C20()
{
  extern Class_Descriptor cd_S7511C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1228,2917)];
    init_test(&cd_S7511C20, buf);
    S7511C20 *dp, &lv = *(dp=new (buf) S7511C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19632,11664), "sizeof(S7511C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C20)");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(12160,7204), "S7511C20");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(12160,7204), "S7511C20");
    /*is_ambiguous_... S7511C20::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(12160,7204), "S7511C20");
    check_base_class_offset(lv, (S7511C5*)(S7511C11*), ABISELECT(12160,7204), "S7511C20");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C12*), ABISELECT(12160,7204), "S7511C20");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(12160,7204), "S7511C20");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(12160,7204), "S7511C20");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(9360,5556), "S7511C20");
    check_base_class_offset(lv, (S7511C7*)(S7511C6*), ABISELECT(9360,5556), "S7511C20");
    /*is_ambiguous_... S7511C6::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S7511C6*), ABISELECT(6200,3668), "S7511C20");
    /*is_ambiguous_... S7511C6::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C6*), ABISELECT(12288,7280), "S7511C20");
    check_base_class_offset(lv, (S7511C4*)(S7511C11*), ABISELECT(12288,7280), "S7511C20");
    check_base_class_offset(lv, (S7511C3*)(S7511C11*), ABISELECT(15232,9040), "S7511C20");
    check_base_class_offset(lv, (S7511C11*)(S7511C6*), ABISELECT(13584,8040), "S7511C20");
    check_base_class_offset(lv, (S7511C10*)(S7511C12*), ABISELECT(17992,10680), "S7511C20");
    check_base_class_offset(lv, (S7511C13*)(S7511C12*), ABISELECT(19568,11624), "S7511C20");
    check_base_class_offset(lv, (S7511C4*)(S7511C12*), ABISELECT(16704,9920), "S7511C20");
    check_base_class_offset(lv, (S7511C12*)(S7511C6*), ABISELECT(16704,9920), "S7511C20");
    check_base_class_offset(lv, (S7511C6*), ABISELECT(6192,3664), "S7511C20");
    check_base_class_offset(lv, (S7511C21*), 0, "S7511C20");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(3296,1948), "S7511C20");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C7*), ABISELECT(3296,1948), "S7511C20");
    check_field_offset(lv, s7511c20f0, ABISELECT(6096,3596), "S7511C20.s7511c20f0");
    check_field_offset(lv, s7511c20f1, ABISELECT(6104,3600), "S7511C20.s7511c20f1");
    check_field_offset(lv, s7511c20f2, ABISELECT(6112,3604), "S7511C20.s7511c20f2");
    test_class_info(&lv, &cd_S7511C20);
    dp->~S7511C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C20(Test_S7511C20, "S7511C20", ABISELECT(19632,11664));

#else // __cplusplus

extern void _ZN8S7511C20C1Ev();
extern void _ZN8S7511C20D1Ev();
Name_Map name_map_S7511C20[] = {
  NSPAIR(_ZN8S7511C20C1Ev),
  NSPAIR(_ZN8S7511C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C11;
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C12;
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
extern Class_Descriptor cd_S7511C6;
extern VTBL_ENTRY _ZTI7S7511C6[];
extern  VTBL_ENTRY _ZTV7S7511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C6[];
extern Class_Descriptor cd_S7511C21;
extern VTBL_ENTRY _ZTI8S7511C21[];
extern  VTBL_ENTRY _ZTV8S7511C21[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
static Base_Class bases_S7511C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(12160,7204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(9360,5556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(9360,5556), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(6200,3668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(12288,7280), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7511C3,    ABISELECT(15232,9040), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7511C11,    ABISELECT(13584,8040), //bcp->offset
    40, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(17992,10680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(19568,11624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    ABISELECT(16704,9920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C12,    ABISELECT(16704,9920), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C6,    ABISELECT(6192,3664), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C4,    ABISELECT(3296,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(3296,1948), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //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 _ZTI8S7511C20[];
extern void _ZN8S7511C213v10Ev();
extern void _ZN8S7511C213v11Ev();
extern void _ZN8S7511C20D1Ev();
extern void _ZN8S7511C20D0Ev();
extern void ABISELECT(_ZThn3296_N8S7511C20D1Ev,_ZThn1948_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn3296_N8S7511C20D0Ev,_ZThn1948_N8S7511C20D0Ev)();
extern void ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn6192_N8S7511C20D1Ev,_ZThn3664_N8S7511C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev)();
extern void ABISELECT(_ZThn6192_N8S7511C20D0Ev,_ZThn3664_N8S7511C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn9360_N8S7511C20D1Ev,_ZThn5556_N8S7511C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev)();
extern void ABISELECT(_ZThn9360_N8S7511C20D0Ev,_ZThn5556_N8S7511C20D0Ev)() __attribute__((weak));
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY vtc_S7511C20[] = {
  ABISELECT(19568,11624),
  ABISELECT(16704,9920),
  ABISELECT(15232,9040),
  ABISELECT(13584,8040),
  ABISELECT(12288,7280),
  ABISELECT(12160,7204),
  ABISELECT(9360,5556),
  ABISELECT(6192,3664),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C213v10Ev,
  (VTBL_ENTRY)&_ZN8S7511C213v11Ev,
  (VTBL_ENTRY)&_ZN8S7511C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C20D0Ev,
  ABISELECT(8864,5256),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C20D1Ev,_ZThn1948_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C20D0Ev,_ZThn1948_N8S7511C20D0Ev),
  ABISELECT(-6192,-3664),
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-6192,-3664),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev),
  ABISELECT(-9360,-5556),
  ABISELECT(2800,1648),
  ABISELECT(-9360,-5556),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-12288,-7280),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-13584,-8040),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  0,
  ABISELECT(-15232,-9040),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-16704,-9920),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern VTBL_ENTRY _ZTV8S7511C20[];
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__A__8S7511C20[] = {
  ABISELECT(8864,5256),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__A3__8S7511C20[] = {
  ABISELECT(8864,5256),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN7S7511C6D1Ev();
extern void _ZN7S7511C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C6__8S7511C20[] = {
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C6__8S7511C20[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C6__8S7511C20[] = {
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C6__8S7511C20[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__7S7511C6__8S7511C20[] = {
  0,
  0,
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C6__8S7511C20[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-10512,-6256),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C20[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__8S7511C20[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__8S7511C20[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__8S7511C20[] = {
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C11__8S7511C20[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11__8S7511C20[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__8S7511C20[] = {
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C12__A2__8S7511C20[] = {
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C20[] = {
  {&(_ZTV8S7511C20[10]),  10,61},
  {&(_tg__ZTV7S7511C7__A__8S7511C20[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__A3__8S7511C20[3]),  3,3},
  {&(_ZTV8S7511C20[29]),  29,61},
  {&(_ZTV8S7511C20[35]),  35,61},
  {&(_ZTV8S7511C20[40]),  40,61},
  {&(_ZTV8S7511C20[47]),  47,61},
  {&(_ZTV8S7511C20[53]),  53,61},
  {&(_ZTV8S7511C20[60]),  60,61},
  {&(_ZTV8S7511C20[17]),  17,61},
  {&(_tg__ZTV7S7511C6__8S7511C20[9]),  9,11},
  {&(_tg__ZTV7S7511C7__7S7511C6__8S7511C20[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__7S7511C6__8S7511C20[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C6__8S7511C20[7]),  7,9},
  {&(_tg__ZTV7S7511C3__7S7511C6__8S7511C20[4]),  4,6},
  {&(_tg__ZTV8S7511C12__7S7511C6__8S7511C20[5]),  5,6},
  {&(_tg__ZTV7S7511C7__8S7511C20[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__8S7511C20[3]),  3,3},
  {&(_tg__ZTV7S7511C4__A1__8S7511C20[3]),  3,3},
  {&(_tg__ZTV8S7511C11__8S7511C20[5]),  5,7},
  {&(_tg__ZTV7S7511C3__8S7511C11__8S7511C20[4]),  4,6},
  {&(_tg__ZTV7S7511C4__8S7511C11__8S7511C20[3]),  3,3},
  {&(_tg__ZTV8S7511C12__8S7511C20[4]),  4,5},
  {&(_tg__ZTV7S7511C48S7511C12__A2__8S7511C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C20[];
extern  VTBL_ENTRY _ZTV8S7511C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C20[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9360_N8S7511C20D0Ev,_ZThn5556_N8S7511C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9360_N8S7511C20D1Ev,_ZThn5556_N8S7511C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S7511C20D0Ev,_ZThn3664_N8S7511C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S7511C20D1Ev,_ZThn3664_N8S7511C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C20 = {  "S7511C20", // class name
  bases_S7511C20, 15,
  &(vtc_S7511C20[0]), // expected_vtbl_contents
  &(vtt_S7511C20[0]), // expected_vtt_contents
  ABISELECT(19632,11664), // object size
  NSPAIRA(_ZTI8S7511C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7511C20),61, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C20),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C23  {
  void *s7511c23f0;
  int s7511c23f1:7;
  void *s7511c23f2;
  int s7511c23f3;
  void *s7511c23f4;
  void *s7511c23f5;
  void *s7511c23f6[6];
  short s7511c23f7;
  int s7511c23f8;
  int s7511c23f9;
  void *s7511c23f10;
  virtual void  v12(); // _ZN8S7511C233v12Ev
  ~S7511C23(); // tgen
  S7511C23(); // tgen
};
//SIG(-1 S7511C23) C1{ v1 Fp Fi:7 Fp Fi Fp[8] Fs Fi[2] Fp}


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

static void Test_S7511C23()
{
  extern Class_Descriptor cd_S7511C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S7511C23, buf);
    S7511C23 *dp, &lv = *(dp=new (buf) S7511C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S7511C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7511C23)");
    check_field_offset(lv, s7511c23f0, ABISELECT(8,4), "S7511C23.s7511c23f0");
    set_bf_and_test(lv, s7511c23f1, ABISELECT(16,8), 0, 7, 1, "S7511C23");
    set_bf_and_test(lv, s7511c23f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S7511C23");
    check_field_offset(lv, s7511c23f2, ABISELECT(24,12), "S7511C23.s7511c23f2");
    check_field_offset(lv, s7511c23f3, ABISELECT(32,16), "S7511C23.s7511c23f3");
    check_field_offset(lv, s7511c23f4, ABISELECT(40,20), "S7511C23.s7511c23f4");
    check_field_offset(lv, s7511c23f5, ABISELECT(48,24), "S7511C23.s7511c23f5");
    check_field_offset(lv, s7511c23f6, ABISELECT(56,28), "S7511C23.s7511c23f6");
    check_field_offset(lv, s7511c23f7, ABISELECT(104,52), "S7511C23.s7511c23f7");
    check_field_offset(lv, s7511c23f8, ABISELECT(108,56), "S7511C23.s7511c23f8");
    check_field_offset(lv, s7511c23f9, ABISELECT(112,60), "S7511C23.s7511c23f9");
    check_field_offset(lv, s7511c23f10, ABISELECT(120,64), "S7511C23.s7511c23f10");
    test_class_info(&lv, &cd_S7511C23);
    dp->~S7511C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C23(Test_S7511C23, "S7511C23", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S7511C23C1Ev();
extern void _ZN8S7511C23D1Ev();
Name_Map name_map_S7511C23[] = {
  NSPAIR(_ZN8S7511C23C1Ev),
  NSPAIR(_ZN8S7511C23D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7511C23[];
extern void _ZN8S7511C233v12Ev();
static  VTBL_ENTRY vtc_S7511C23[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C23[0]),
  (VTBL_ENTRY)&_ZN8S7511C233v12Ev,
};
extern VTBL_ENTRY _ZTI8S7511C23[];
extern  VTBL_ENTRY _ZTV8S7511C23[];
Class_Descriptor cd_S7511C23 = {  "S7511C23", // class name
  0,0,//no base classes
  &(vtc_S7511C23[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S7511C23),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7511C23),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  S7511C22  : virtual S7511C13 , S7511C12 , virtual S7511C7 , virtual S7511C23 , S7511C18 {
  ::S7511C14 s7511c22f0;
  __tsi64 s7511c22f1;
  char s7511c22f2:8;
  __tsi64 s7511c22f3[3];
  ::S7511C18 s7511c22f4;
  __tsi64 s7511c22f5;
  int s7511c22f6[7];
  void *s7511c22f7;
  int s7511c22f8;
  virtual  ~S7511C22(); // _ZN8S7511C22D2Ev
  S7511C22(); // tgen
};
//SIG(-1 S7511C22) C1{ VBC2{ m Fi[2] FL Fp[6]} BC3{ BC4{ m Fi Fs FL Fp} VBC2 BC5{ VBC6{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC6 FC6 Fp Fi Fp[7] Fi[2] FC6 FC6[6] FL[2] Fp Fi Fp} v1 Fs Fi FD Fc Fi Fl Fp FC7{ v5 v6 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} Fi Fp} VBC8{ VBC6 BC5 vd Fi Fp[3] Fi FU9{ m Fs:0 Fi FL Fp} FC10{} FC10 FC5 FU9 Fp[3]} VBC11{ v2 Fp Fi:7 Fp Fi Fp Fp Fp[6] Fs Fi Fi Fp} BC12{ BC8 vd v3 v4 FC7 Fp Fc:5 Fi Fi Fp Fi FC3 FU13{ m Fp FL Fc Fi Fi FD}[9] Fi:21} vd FC14{ BC4 VBC6 BC5 VBC7 BC2 Fs FC2 Fi Fi} FL Fc:8 FL[3] FC12 FL Fi[7] Fp Fi}


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

static void Test_S7511C22()
{
  extern Class_Descriptor cd_S7511C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1523,3623)];
    init_test(&cd_S7511C22, buf);
    S7511C22 *dp, &lv = *(dp=new (buf) S7511C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24352,14488), "sizeof(S7511C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C22)");
    check_base_class_offset(lv, (S7511C13*), ABISELECT(21224,12656), "S7511C22");
    check_base_class_offset(lv, (S7511C13*)(S7511C12*), ABISELECT(21224,12656), "S7511C22");
    check_base_class_offset(lv, (S7511C10*)(S7511C12*), ABISELECT(1288,760), "S7511C22");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C12*), ABISELECT(21296,12696), "S7511C22");
    /*is_ambiguous_... S7511C22::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(21296,12696), "S7511C22");
    /*is_ambiguous_... S7511C22::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(21296,12696), "S7511C22");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C18*), ABISELECT(21296,12696), "S7511C22");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(21296,12696), "S7511C22");
    check_base_class_offset(lv, (S7511C4*)(S7511C12*), 0, "S7511C22");
    check_base_class_offset(lv, (S7511C12*), 0, "S7511C22");
    /*is_ambiguous_... S7511C22::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(21424,12772), "S7511C22");
    /*is_ambiguous_... S7511C22::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C7*), ABISELECT(21424,12772), "S7511C22");
    check_base_class_offset(lv, (S7511C23*), ABISELECT(24224,14420), "S7511C22");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(2864,1704), "S7511C22");
    check_base_class_offset(lv, (S7511C7*)(S7511C18*), ABISELECT(2864,1704), "S7511C22");
    check_base_class_offset(lv, (S7511C18*), ABISELECT(2864,1704), "S7511C22");
    check_field_offset(lv, s7511c22f0, ABISELECT(10400,6188), "S7511C22.s7511c22f0");
    check_field_offset(lv, s7511c22f1, ABISELECT(13456,8016), "S7511C22.s7511c22f1");
    set_bf_and_test(lv, s7511c22f2, ABISELECT(13464,8024), 0, 8, 1, "S7511C22");
    set_bf_and_test(lv, s7511c22f2, ABISELECT(13464,8024), 0, 8, hide_sll(1LL<<7), "S7511C22");
    check_field_offset(lv, s7511c22f3, ABISELECT(13472,8028), "S7511C22.s7511c22f3");
    check_field_offset(lv, s7511c22f4, ABISELECT(13504,8052), "S7511C22.s7511c22f4");
    check_field_offset(lv, s7511c22f5, ABISELECT(21168,12612), "S7511C22.s7511c22f5");
    check_field_offset(lv, s7511c22f6, ABISELECT(21176,12620), "S7511C22.s7511c22f6");
    check_field_offset(lv, s7511c22f7, ABISELECT(21208,12648), "S7511C22.s7511c22f7");
    check_field_offset(lv, s7511c22f8, ABISELECT(21216,12652), "S7511C22.s7511c22f8");
    test_class_info(&lv, &cd_S7511C22);
    dp->~S7511C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C22(Test_S7511C22, "S7511C22", ABISELECT(24352,14488));

#else // __cplusplus

extern void _ZN8S7511C22C1Ev();
extern void _ZN8S7511C22D2Ev();
Name_Map name_map_S7511C22[] = {
  NSPAIR(_ZN8S7511C22C1Ev),
  NSPAIR(_ZN8S7511C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C12;
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C23;
extern VTBL_ENTRY _ZTI8S7511C23[];
extern  VTBL_ENTRY _ZTV8S7511C23[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C18;
extern VTBL_ENTRY _ZTI8S7511C18[];
extern  VTBL_ENTRY _ZTV8S7511C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C18[];
static Base_Class bases_S7511C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C13,    ABISELECT(21224,12656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7511C5,    ABISELECT(21296,12696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7511C12,    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_S7511C4,    ABISELECT(21424,12772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(21424,12772), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C23,    ABISELECT(24224,14420), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C4,    ABISELECT(2864,1704), //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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(2864,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C18,    ABISELECT(2864,1704), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7511C22[];
extern void _ZN8S7511C122v5Ev();
extern void _ZN8S7511C22D1Ev();
extern void _ZN8S7511C22D0Ev();
extern void ABISELECT(_ZThn2864_N8S7511C22D1Ev,_ZThn1704_N8S7511C22D1Ev)();
extern void ABISELECT(_ZThn2864_N8S7511C22D0Ev,_ZThn1704_N8S7511C22D0Ev)();
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S7511C22D1Ev,_ZTv0_n16_N8S7511C22D1Ev)();
extern void ABISELECT(_ZThn21424_N8S7511C22D1Ev,_ZThn12772_N8S7511C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C22D0Ev,_ZTv0_n16_N8S7511C22D0Ev)();
extern void ABISELECT(_ZThn21424_N8S7511C22D0Ev,_ZThn12772_N8S7511C22D0Ev)() __attribute__((weak));
extern void _ZN8S7511C233v12Ev();
static  VTBL_ENTRY vtc_S7511C22[] = {
  ABISELECT(24224,14420),
  ABISELECT(21424,12772),
  ABISELECT(21224,12656),
  ABISELECT(21296,12696),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C22[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
  (VTBL_ENTRY)&_ZN8S7511C22D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C22D0Ev,
  ABISELECT(18432,10992),
  ABISELECT(-2864,-1704),
  (VTBL_ENTRY)&(_ZTI8S7511C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2864_N8S7511C22D1Ev,_ZThn1704_N8S7511C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2864_N8S7511C22D0Ev,_ZThn1704_N8S7511C22D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
  ABISELECT(-21424,-12772),
  ABISELECT(-128,-76),
  ABISELECT(-21424,-12772),
  (VTBL_ENTRY)&(_ZTI8S7511C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C22D1Ev,_ZTv0_n16_N8S7511C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C22D0Ev,_ZTv0_n16_N8S7511C22D0Ev),
  0,
  ABISELECT(-24224,-14420),
  (VTBL_ENTRY)&(_ZTI8S7511C22[0]),
  (VTBL_ENTRY)&_ZN8S7511C233v12Ev,
};
extern VTBL_ENTRY _ZTV8S7511C22[];
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__8S7511C22[] = {
  ABISELECT(21224,12656),
  ABISELECT(21296,12696),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C12__8S7511C22[] = {
  ABISELECT(21296,12696),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C18D1Ev();
extern void _ZN8S7511C18D0Ev();
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C22[] = {
  ABISELECT(18432,10992),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C18[0]),
  (VTBL_ENTRY)&_ZN8S7511C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C18D0Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C18__A1__8S7511C22[] = {
  ABISELECT(18432,10992),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C18__A2__8S7511C22[] = {
  ABISELECT(18432,10992),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C22[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__A1__8S7511C22[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C22[] = {
  {&(_ZTV8S7511C22[6]),  6,26},
  {&(_tg__ZTV8S7511C12__8S7511C22[4]),  4,5},
  {&(_tg__ZTV7S7511C48S7511C12__8S7511C22[3]),  3,3},
  {&(_tg__ZTV8S7511C18__8S7511C22[3]),  3,7},
  {&(_tg__ZTV7S7511C78S7511C18__A1__8S7511C22[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C18__A2__8S7511C22[3]),  3,3},
  {&(_ZTV8S7511C22[20]),  20,26},
  {&(_ZTV8S7511C22[25]),  25,26},
  {&(_ZTV8S7511C22[12]),  12,26},
  {&(_tg__ZTV7S7511C7__8S7511C22[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__A1__8S7511C22[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C22[];
extern  VTBL_ENTRY _ZTV8S7511C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C22[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C22D0Ev,_ZTv0_n16_N8S7511C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21424_N8S7511C22D0Ev,_ZThn12772_N8S7511C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C22D1Ev,_ZTv0_n16_N8S7511C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21424_N8S7511C22D1Ev,_ZThn12772_N8S7511C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C22 = {  "S7511C22", // class name
  bases_S7511C22, 11,
  &(vtc_S7511C22[0]), // expected_vtbl_contents
  &(vtt_S7511C22[0]), // expected_vtt_contents
  ABISELECT(24352,14488), // object size
  NSPAIRA(_ZTI8S7511C22),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7511C22),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C22),11, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C15  : virtual S7511C16 , S7511C5 , S7511C20 , S7511C6 , S7511C17 {
  int s7511c15f0;
  void *s7511c15f1;
  ::S7511C6 s7511c15f2;
  void *s7511c15f3;
  int s7511c15f4;
  ::S7511C22 s7511c15f5;
  ::S7511C16 s7511c15f6;
  ::S7511C5 s7511c15f7;
  int s7511c15f8;
  virtual  ~S7511C15(); // _ZN8S7511C15D2Ev
  S7511C15(); // tgen
};
//SIG(-1 S7511C15) C1{ VBC2{ VBC3{ VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp} VBC5{ VBC4 VBC6{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC3} VBC3 v3 v4 FL Fi FL[5] Fi[11] FC3 Fp Fc Fp FC7{ m Fi Fs FL Fp} Fp[8]} VBC8{ VBC9{ BC7 VBC4 BC3 VBC6 BC10{ m Fi[2] FL Fp[6]} Fs FC10 Fi[2]} VBC11{ BC12{ VBC4 BC3 vd Fi Fp[3] Fi FU13{ m Fs:0 Fi FL Fp} FC14{} FC14 FC3 FU13 Fp[3]} vd v5 v6 FC6 Fp Fc:5 Fi Fi Fp Fi FC15{ BC7 VBC10 BC3 v7 Fs Fi FD Fc Fi Fl Fp FC6 Fi Fp} FU16{ m Fp FL Fc Fi Fi FD}[9] Fi:21} BC12 BC4 vd Fp Fp FL Fs Fi} BC10 vd Fp Fp} BC4 BC17{ VBC18{ VBC12 BC7 VBC3 VBC5 VBC15 vd Fi Fi Fp[7] Fi FC9} BC19{ v8 v9 Fi FC15 FC4 Fp[10] Fp} BC12 Fi Fp FD[5]} BC18 BC8 vd Fi Fp FC18 Fp Fi FC20{ VBC10 BC15 VBC12 VBC21{ v10 Fp Fi:7 Fp Fi Fp Fp Fp[6] Fs Fi Fi Fp} BC11 vd FC9 FL Fc:8 FL[3] FC11 FL Fi[7] Fp Fi} FC2 FC4 Fi}


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

static void Test_S7511C15()
{
  extern Class_Descriptor cd_S7511C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5781,13749)];
    init_test(&cd_S7511C15, buf);
    S7511C15 *dp, &lv = *(dp=new (buf) S7511C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(92480,54992), "sizeof(S7511C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C15)");
    /*is_ambiguous_... S7511C15::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(68384,40648), "S7511C15");
    check_base_class_offset(lv, (S7511C5*)(S7511C11*), ABISELECT(68384,40648), "S7511C15");
    check_base_class_offset(lv, (S7511C5*)(S7511C14*), ABISELECT(68384,40648), "S7511C15");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C14*), ABISELECT(68384,40648), "S7511C15");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C18*), ABISELECT(68384,40648), "S7511C15");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C17*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C17*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(68384,40648), "S7511C15");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C12*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C20*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C20*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C17*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C17*), ABISELECT(68384,40648), "S7511C15");
    /*is_ambiguous_... S7511C16::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C16*), ABISELECT(67088,39888), "S7511C15");
    check_base_class_offset(lv, (S7511C4*)(S7511C11*), ABISELECT(67088,39888), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C6*), ABISELECT(67088,39888), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C6*), ABISELECT(67088,39888), "S7511C15");
    check_base_class_offset(lv, (S7511C3*)(S7511C11*), ABISELECT(70160,41724), "S7511C15");
    check_base_class_offset(lv, (S7511C3*)(S7511C14*), ABISELECT(70160,41724), "S7511C15");
    check_base_class_offset(lv, (S7511C11*)(S7511C16*), ABISELECT(68512,40724), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C11*)(S7511C6*), ABISELECT(68512,40724), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C11*)(S7511C6*), ABISELECT(68512,40724), "S7511C15");
    check_base_class_offset(lv, (S7511C10*)(S7511C14*), ABISELECT(75880,45112), "S7511C15");
    check_base_class_offset(lv, (S7511C4*)(S7511C14*), ABISELECT(74592,44352), "S7511C15");
    check_base_class_offset(lv, (S7511C13*)(S7511C14*), ABISELECT(75904,45132), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C14*)(S7511C17*), ABISELECT(74592,44352), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C14*)(S7511C17*), ABISELECT(74592,44352), "S7511C15");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C18*), ABISELECT(76048,45224), "S7511C15");
    check_base_class_offset(lv, (S7511C7*)(S7511C18*), ABISELECT(76048,45224), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C18*)(S7511C17*), ABISELECT(76048,45224), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C18*)(S7511C17*), ABISELECT(76048,45224), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C17*), ABISELECT(71632,42604), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C7*)(S7511C17*), ABISELECT(71632,42604), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C17*), ABISELECT(74432,44252), "S7511C15");
    check_base_class_offset(lv, (S7511C17*)(S7511C16*), ABISELECT(71632,42604), "S7511C15");
    /*is_ambiguous_... S7511C16::S7511C13 */ AMB_check_base_class_offset(lv, (S7511C13*)(S7511C16*), ABISELECT(67008,39840), "S7511C15");
    check_base_class_offset(lv, (S7511C16*), ABISELECT(67000,39836), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C5 */ AMB_check_base_class_offset(lv, (S7511C5*), ABISELECT(6192,3664), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(86752,51600), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C7*)(S7511C6*), ABISELECT(86752,51600), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C7*)(S7511C6*), ABISELECT(86752,51600), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C10*)(S7511C6*), ABISELECT(83592,49712), "S7511C15");
    check_base_class_offset(lv, (S7511C10*)(S7511C12*), ABISELECT(90840,54008), "S7511C15");
    check_base_class_offset(lv, (S7511C13*)(S7511C12*), ABISELECT(92416,54952), "S7511C15");
    check_base_class_offset(lv, (S7511C4*)(S7511C12*), ABISELECT(89552,53248), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C12*)(S7511C6*), ABISELECT(89552,53248), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C12*)(S7511C6*), ABISELECT(89552,53248), "S7511C15");
    check_base_class_offset(lv, (S7511C6*)(S7511C20*), ABISELECT(83584,49708), "S7511C15");
    check_base_class_offset(lv, (S7511C21*)(S7511C20*), 0, "S7511C15");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C20*), ABISELECT(3296,1948), "S7511C15");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C7*)(S7511C20*), ABISELECT(3296,1948), "S7511C15");
    check_base_class_offset(lv, (S7511C20*), 0, "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C10*)(S7511C6*), ABISELECT(6328,3744), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C6 */ AMB_check_base_class_offset(lv, (S7511C6*), ABISELECT(6320,3740), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C17*), ABISELECT(9488,5632), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C7*)(S7511C17*), ABISELECT(9488,5632), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C17*), ABISELECT(12288,7280), "S7511C15");
    /*is_ambiguous_... S7511C15::S7511C17 */ AMB_check_base_class_offset(lv, (S7511C17*), ABISELECT(9488,5632), "S7511C15");
    check_field_offset(lv, s7511c15f0, ABISELECT(12448,7380), "S7511C15.s7511c15f0");
    check_field_offset(lv, s7511c15f1, ABISELECT(12456,7384), "S7511C15.s7511c15f1");
    check_field_offset(lv, s7511c15f2, ABISELECT(12464,7388), "S7511C15.s7511c15f2");
    check_field_offset(lv, s7511c15f3, ABISELECT(25904,15388), "S7511C15.s7511c15f3");
    check_field_offset(lv, s7511c15f4, ABISELECT(25912,15392), "S7511C15.s7511c15f4");
    check_field_offset(lv, s7511c15f5, ABISELECT(25920,15396), "S7511C15.s7511c15f5");
    check_field_offset(lv, s7511c15f6, ABISELECT(50272,29884), "S7511C15.s7511c15f6");
    check_field_offset(lv, s7511c15f7, ABISELECT(66864,39756), "S7511C15.s7511c15f7");
    check_field_offset(lv, s7511c15f8, ABISELECT(66992,39832), "S7511C15.s7511c15f8");
    test_class_info(&lv, &cd_S7511C15);
    dp->~S7511C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C15(Test_S7511C15, "S7511C15", ABISELECT(92480,54992));

#else // __cplusplus

extern void _ZN8S7511C15C1Ev();
extern void _ZN8S7511C15D2Ev();
Name_Map name_map_S7511C15[] = {
  NSPAIR(_ZN8S7511C15C1Ev),
  NSPAIR(_ZN8S7511C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C11;
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C14;
extern VTBL_ENTRY _ZTI8S7511C14[];
extern  VTBL_ENTRY _ZTV8S7511C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C14[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C18;
extern VTBL_ENTRY _ZTI8S7511C18[];
extern  VTBL_ENTRY _ZTV8S7511C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C18[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C17;
extern VTBL_ENTRY _ZTI8S7511C17[];
extern  VTBL_ENTRY _ZTV8S7511C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C17[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C16;
extern VTBL_ENTRY _ZTI8S7511C16[];
extern  VTBL_ENTRY _ZTV8S7511C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C16[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C12;
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
extern Class_Descriptor cd_S7511C6;
extern VTBL_ENTRY _ZTI7S7511C6[];
extern  VTBL_ENTRY _ZTV7S7511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C6[];
extern Class_Descriptor cd_S7511C21;
extern VTBL_ENTRY _ZTI8S7511C21[];
extern  VTBL_ENTRY _ZTV8S7511C21[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C20;
extern VTBL_ENTRY _ZTI8S7511C20[];
extern  VTBL_ENTRY _ZTV8S7511C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C20[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C6;
extern VTBL_ENTRY _ZTI7S7511C6[];
extern  VTBL_ENTRY _ZTV7S7511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C6[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C17;
extern VTBL_ENTRY _ZTI8S7511C17[];
extern  VTBL_ENTRY _ZTV8S7511C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C17[];
static Base_Class bases_S7511C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(68384,40648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(67088,39888), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7511C3,    ABISELECT(70160,41724), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7511C11,    ABISELECT(68512,40724), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(75880,45112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(74592,44352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(75904,45132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C14,    ABISELECT(74592,44352), //bcp->offset
    81, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(76048,45224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(76048,45224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C18,    ABISELECT(76048,45224), //bcp->offset
    85, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(71632,42604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(71632,42604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7511C5,    ABISELECT(74432,44252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7511C17,    ABISELECT(71632,42604), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7511C13,    ABISELECT(67008,39840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7511C16,    ABISELECT(67000,39836), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C5,    ABISELECT(6192,3664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C4,    ABISELECT(86752,51600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(86752,51600), //bcp->offset
    107, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(83592,49712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7511C10,    ABISELECT(90840,54008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(92416,54952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(89552,53248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7511C12,    ABISELECT(89552,53248), //bcp->offset
    113, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7511C6,    ABISELECT(83584,49708), //bcp->offset
    95, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7511C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    29, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(3296,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(3296,1948), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7511C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C10,    ABISELECT(6328,3744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7511C6,    ABISELECT(6320,3740), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C4,    ABISELECT(9488,5632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(9488,5632), //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
    24, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7511C5,    ABISELECT(12288,7280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7511C17,    ABISELECT(9488,5632), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7511C15[];
extern void _ZN8S7511C213v10Ev();
extern void _ZN8S7511C213v11Ev();
extern void _ZN8S7511C15D1Ev();
extern void _ZN8S7511C15D0Ev();
extern void ABISELECT(_ZThn3296_N8S7511C15D1Ev,_ZThn1948_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn3296_N8S7511C15D0Ev,_ZThn1948_N8S7511C15D0Ev)();
extern void ABISELECT(_ZThn6320_N8S7511C15D1Ev,_ZThn3740_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn6320_N8S7511C15D0Ev,_ZThn3740_N8S7511C15D0Ev)();
extern void ABISELECT(_ZThn9488_N8S7511C15D1Ev,_ZThn5632_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn9488_N8S7511C15D0Ev,_ZThn5632_N8S7511C15D0Ev)();
extern void ABISELECT(_ZTv0_n80_N8S7511C15D1Ev,_ZTv0_n40_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn67000_N8S7511C15D1Ev,_ZThn39836_N8S7511C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7511C15D0Ev,_ZTv0_n40_N8S7511C15D0Ev)();
extern void ABISELECT(_ZThn67000_N8S7511C15D0Ev,_ZThn39836_N8S7511C15D0Ev)() __attribute__((weak));
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S7511C15D1Ev,_ZTv0_n28_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn71632_N8S7511C15D1Ev,_ZThn42604_N8S7511C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7511C15D0Ev,_ZTv0_n28_N8S7511C15D0Ev)();
extern void ABISELECT(_ZThn71632_N8S7511C15D0Ev,_ZThn42604_N8S7511C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C15D1Ev,_ZTv0_n16_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn76048_N8S7511C15D1Ev,_ZThn45224_N8S7511C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C15D0Ev,_ZTv0_n16_N8S7511C15D0Ev)();
extern void ABISELECT(_ZThn76048_N8S7511C15D0Ev,_ZThn45224_N8S7511C15D0Ev)() __attribute__((weak));
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
extern void ABISELECT(_ZTv0_n80_N8S7511C15D1Ev,_ZTv0_n40_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn83584_N8S7511C15D1Ev,_ZThn49708_N8S7511C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7511C15D0Ev,_ZTv0_n40_N8S7511C15D0Ev)();
extern void ABISELECT(_ZThn83584_N8S7511C15D0Ev,_ZThn49708_N8S7511C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C15D1Ev,_ZTv0_n16_N8S7511C15D1Ev)();
extern void ABISELECT(_ZThn86752_N8S7511C15D1Ev,_ZThn51600_N8S7511C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C15D0Ev,_ZTv0_n16_N8S7511C15D0Ev)();
extern void ABISELECT(_ZThn86752_N8S7511C15D0Ev,_ZThn51600_N8S7511C15D0Ev)() __attribute__((weak));
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY vtc_S7511C15[] = {
  ABISELECT(76048,45224),
  ABISELECT(74592,44352),
  ABISELECT(71632,42604),
  ABISELECT(67000,39836),
  ABISELECT(92416,54952),
  ABISELECT(89552,53248),
  ABISELECT(70160,41724),
  ABISELECT(68512,40724),
  ABISELECT(67088,39888),
  ABISELECT(68384,40648),
  ABISELECT(86752,51600),
  ABISELECT(83584,49708),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&_ZN8S7511C213v10Ev,
  (VTBL_ENTRY)&_ZN8S7511C213v11Ev,
  (VTBL_ENTRY)&_ZN8S7511C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C15D0Ev,
  ABISELECT(65088,38700),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C15D1Ev,_ZThn1948_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C15D0Ev,_ZThn1948_N8S7511C15D0Ev),
  ABISELECT(86096,51212),
  ABISELECT(83232,49508),
  ABISELECT(63840,37984),
  ABISELECT(62192,36984),
  ABISELECT(60768,36148),
  ABISELECT(62064,36908),
  ABISELECT(80432,47860),
  ABISELECT(-6320,-3740),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6320_N8S7511C15D1Ev,_ZThn3740_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6320_N8S7511C15D0Ev,_ZThn3740_N8S7511C15D0Ev),
  ABISELECT(66560,39592),
  ABISELECT(60672,36092),
  ABISELECT(65104,38720),
  ABISELECT(58896,35016),
  ABISELECT(-9488,-5632),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9488_N8S7511C15D1Ev,_ZThn5632_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9488_N8S7511C15D0Ev,_ZThn5632_N8S7511C15D0Ev),
  ABISELECT(-67000,-39836),
  ABISELECT(9048,5388),
  ABISELECT(7592,4516),
  ABISELECT(4632,2768),
  ABISELECT(3160,1888),
  ABISELECT(1512,888),
  ABISELECT(1384,812),
  ABISELECT(88,52),
  ABISELECT(-67000,-39836),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C15D1Ev,_ZTv0_n40_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C15D0Ev,_ZTv0_n40_N8S7511C15D0Ev),
  ABISELECT(1296,760),
  ABISELECT(-67088,-39888),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  0,
  0,
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  ABISELECT(-68512,-40724),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  0,
  ABISELECT(-70160,-41724),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  ABISELECT(-71632,-42604),
  ABISELECT(4416,2620),
  ABISELECT(-1472,-880),
  ABISELECT(2960,1748),
  ABISELECT(-3248,-1956),
  ABISELECT(-71632,-42604),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7511C15D1Ev,_ZTv0_n28_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7511C15D0Ev,_ZTv0_n28_N8S7511C15D0Ev),
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  ABISELECT(-74592,-44352),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  0,
  0,
  ABISELECT(-76048,-45224),
  ABISELECT(-7664,-4576),
  ABISELECT(-76048,-45224),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C15D1Ev,_ZTv0_n16_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C15D0Ev,_ZTv0_n16_N8S7511C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
  ABISELECT(-83584,-49708),
  ABISELECT(8832,5244),
  ABISELECT(5968,3540),
  ABISELECT(-13424,-7984),
  ABISELECT(-15072,-8984),
  ABISELECT(-16496,-9820),
  ABISELECT(-15200,-9060),
  ABISELECT(3168,1892),
  ABISELECT(-83584,-49708),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C15D1Ev,_ZTv0_n40_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C15D0Ev,_ZTv0_n40_N8S7511C15D0Ev),
  ABISELECT(-86752,-51600),
  ABISELECT(-18368,-10952),
  ABISELECT(-86752,-51600),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C15D1Ev,_ZTv0_n16_N8S7511C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C15D0Ev,_ZTv0_n16_N8S7511C15D0Ev),
  0,
  ABISELECT(2864,1704),
  ABISELECT(-21168,-12600),
  ABISELECT(-89552,-53248),
  (VTBL_ENTRY)&(_ZTI8S7511C15[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern VTBL_ENTRY _ZTV8S7511C15[];
extern void _ZN8S7511C213v10Ev();
extern void _ZN8S7511C213v11Ev();
extern void _ZN8S7511C20D1Ev();
extern void _ZN8S7511C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C20__8S7511C15[] = {
  ABISELECT(92416,54952),
  ABISELECT(89552,53248),
  ABISELECT(70160,41724),
  ABISELECT(68512,40724),
  ABISELECT(67088,39888),
  ABISELECT(68384,40648),
  ABISELECT(86752,51600),
  ABISELECT(83584,49708),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C213v10Ev,
  (VTBL_ENTRY)&_ZN8S7511C213v11Ev,
  (VTBL_ENTRY)&_ZN8S7511C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C20D0Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C20__A3__8S7511C15[] = {
  ABISELECT(65088,38700),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C20__A6__8S7511C15[] = {
  ABISELECT(65088,38700),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn83584_N8S7511C20D1Ev,_ZThn49708_N8S7511C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev)();
extern void ABISELECT(_ZThn83584_N8S7511C20D0Ev,_ZThn49708_N8S7511C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C6__8S7511C20__8S7511C15[] = {
  ABISELECT(-83584,-49708),
  ABISELECT(8832,5244),
  ABISELECT(5968,3540),
  ABISELECT(-13424,-7984),
  ABISELECT(-15072,-8984),
  ABISELECT(-16496,-9820),
  ABISELECT(-15200,-9060),
  ABISELECT(3168,1892),
  ABISELECT(-83584,-49708),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn86752_N8S7511C20D1Ev,_ZThn51600_N8S7511C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev)();
extern void ABISELECT(_ZThn86752_N8S7511C20D0Ev,_ZThn51600_N8S7511C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C20__8S7511C15[] = {
  ABISELECT(-86752,-51600),
  ABISELECT(-18368,-10952),
  ABISELECT(-86752,-51600),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__8S7511C20__8S7511C15[] = {
  ABISELECT(1296,760),
  ABISELECT(-67088,-39888),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__8S7511C20__8S7511C15[] = {
  0,
  0,
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  ABISELECT(-68512,-40724),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C20__8S7511C15[] = {
  0,
  0,
  ABISELECT(-70160,-41724),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__8S7511C20__8S7511C15[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-21168,-12600),
  ABISELECT(-89552,-53248),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void ABISELECT(_ZThn3296_N8S7511C20D1Ev,_ZThn1948_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn3296_N8S7511C20D0Ev,_ZThn1948_N8S7511C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7511C7__A__8S7511C20__8S7511C15[] = {
  ABISELECT(65088,38700),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C20D1Ev,_ZThn1948_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C20D0Ev,_ZThn1948_N8S7511C20D0Ev),
};
extern void _ZN7S7511C6D1Ev();
extern void _ZN7S7511C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C6__A__8S7511C15[] = {
  ABISELECT(86096,51212),
  ABISELECT(83232,49508),
  ABISELECT(63840,37984),
  ABISELECT(62192,36984),
  ABISELECT(60768,36148),
  ABISELECT(62064,36908),
  ABISELECT(80432,47860),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev)();
extern void ABISELECT(_ZThn80432_N7S7511C6D1Ev,_ZThn47860_N7S7511C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev)();
extern void ABISELECT(_ZThn80432_N7S7511C6D0Ev,_ZThn47860_N7S7511C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C6__A__8S7511C15[] = {
  ABISELECT(-80432,-47860),
  ABISELECT(-18368,-10952),
  ABISELECT(-80432,-47860),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C6__A__8S7511C15[] = {
  ABISELECT(1296,760),
  ABISELECT(-60768,-36148),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C6__A__8S7511C15[] = {
  0,
  0,
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  ABISELECT(-62192,-36984),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__7S7511C6__A__8S7511C15[] = {
  0,
  0,
  ABISELECT(-63840,-37984),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C6__A__8S7511C15[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-21168,-12600),
  ABISELECT(-83232,-49508),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void _ZN8S7511C17D1Ev();
extern void _ZN8S7511C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C17__A__8S7511C15[] = {
  ABISELECT(66560,39592),
  ABISELECT(60672,36092),
  ABISELECT(65104,38720),
  ABISELECT(58896,35016),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN8S7511C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C17D0Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C17__A4__8S7511C15[] = {
  ABISELECT(58896,35016),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C17__A7__8S7511C15[] = {
  ABISELECT(58896,35016),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7511C14__8S7511C17__A__8S7511C15[] = {
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  ABISELECT(-65104,-38720),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C17__A__8S7511C15[] = {
  0,
  0,
  ABISELECT(-60672,-36092),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev)();
extern void ABISELECT(_ZThn66560_N8S7511C17D1Ev,_ZThn39592_N8S7511C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev)();
extern void ABISELECT(_ZThn66560_N8S7511C17D0Ev,_ZThn39592_N8S7511C17D0Ev)() __attribute__((weak));
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C17__A__8S7511C15[] = {
  0,
  0,
  ABISELECT(-66560,-39592),
  ABISELECT(-7664,-4576),
  ABISELECT(-66560,-39592),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern void _ZN8S7511C16D1Ev();
extern void _ZN8S7511C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C16__8S7511C15[] = {
  ABISELECT(9048,5388),
  ABISELECT(7592,4516),
  ABISELECT(4632,2768),
  ABISELECT(3160,1888),
  ABISELECT(1512,888),
  ABISELECT(1384,812),
  ABISELECT(88,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&_ZN8S7511C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C16__8S7511C15[] = {
  ABISELECT(1296,760),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__8S7511C16__8S7511C15[] = {
  0,
  0,
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  ABISELECT(-1512,-888),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C16__8S7511C15[] = {
  0,
  0,
  ABISELECT(-3160,-1888),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7511C16D1Ev,_ZTv0_n28_N8S7511C16D1Ev)();
extern void ABISELECT(_ZThn4632_N8S7511C16D1Ev,_ZThn2768_N8S7511C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7511C16D0Ev,_ZTv0_n28_N8S7511C16D0Ev)();
extern void ABISELECT(_ZThn4632_N8S7511C16D0Ev,_ZThn2768_N8S7511C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7511C17__8S7511C16__8S7511C15[] = {
  ABISELECT(-4632,-2768),
  ABISELECT(4416,2620),
  ABISELECT(-1472,-880),
  ABISELECT(2960,1748),
  ABISELECT(-3248,-1956),
  ABISELECT(-4632,-2768),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7511C16D1Ev,_ZTv0_n28_N8S7511C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7511C16D0Ev,_ZTv0_n28_N8S7511C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7511C14__8S7511C16__8S7511C15[] = {
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  ABISELECT(-7592,-4516),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S7511C16D1Ev,_ZTv0_n16_N8S7511C16D1Ev)();
extern void ABISELECT(_ZThn9048_N8S7511C16D1Ev,_ZThn5388_N8S7511C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C16D0Ev,_ZTv0_n16_N8S7511C16D0Ev)();
extern void ABISELECT(_ZThn9048_N8S7511C16D0Ev,_ZThn5388_N8S7511C16D0Ev)() __attribute__((weak));
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C16__8S7511C15[] = {
  0,
  0,
  ABISELECT(-9048,-5388),
  ABISELECT(-7664,-4576),
  ABISELECT(-9048,-5388),
  (VTBL_ENTRY)&(_ZTI8S7511C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C16D1Ev,_ZTv0_n16_N8S7511C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C16D0Ev,_ZTv0_n16_N8S7511C16D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C15[] = {
  ABISELECT(1296,760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__8S7511C15[] = {
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C11__8S7511C15[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11__8S7511C15[] = {
  ABISELECT(1296,760),
  ABISELECT(1424,836),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern void _ZN8S7511C17D1Ev();
extern void _ZN8S7511C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C17__8S7511C15[] = {
  ABISELECT(4416,2620),
  ABISELECT(-1472,-880),
  ABISELECT(2960,1748),
  ABISELECT(-3248,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN8S7511C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C17D0Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C17__A1__8S7511C15[] = {
  ABISELECT(-3248,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C17__A3__8S7511C15[] = {
  ABISELECT(-3248,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7511C14__8S7511C17__8S7511C15[] = {
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  ABISELECT(-2960,-1748),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C17__8S7511C15[] = {
  0,
  0,
  ABISELECT(1472,880),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev)();
extern void ABISELECT(_ZThn4416_N8S7511C17D1Ev,_ZThn2620_N8S7511C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev)();
extern void ABISELECT(_ZThn4416_N8S7511C17D0Ev,_ZThn2620_N8S7511C17D0Ev)() __attribute__((weak));
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C17__8S7511C15[] = {
  0,
  0,
  ABISELECT(-4416,-2620),
  ABISELECT(-7664,-4576),
  ABISELECT(-4416,-2620),
  (VTBL_ENTRY)&(_ZTI8S7511C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7511C14__8S7511C15[] = {
  ABISELECT(-4432,-2628),
  ABISELECT(-6208,-3704),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C14__A1__8S7511C15[] = {
  ABISELECT(-6208,-3704),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C14__8S7511C15[] = {
  0,
  0,
  ABISELECT(4432,2628),
  (VTBL_ENTRY)&(_ZTI8S7511C14[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C18D1Ev();
extern void _ZN8S7511C18D0Ev();
extern void _ZN8S7511C182v8Ev();
extern void _ZN8S7511C182v9Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C18__8S7511C15[] = {
  ABISELECT(-7664,-4576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C18[0]),
  (VTBL_ENTRY)&_ZN8S7511C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C18D0Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v8Ev,
  (VTBL_ENTRY)&_ZN8S7511C182v9Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C18__8S7511C15[] = {
  ABISELECT(-7664,-4576),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C18__A2__8S7511C15[] = {
  ABISELECT(-7664,-4576),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN7S7511C6D1Ev();
extern void _ZN7S7511C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C6__8S7511C15[] = {
  ABISELECT(8832,5244),
  ABISELECT(5968,3540),
  ABISELECT(-13424,-7984),
  ABISELECT(-15072,-8984),
  ABISELECT(-16496,-9820),
  ABISELECT(-15200,-9060),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C6__8S7511C15[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(-18368,-10952),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C6__8S7511C15[] = {
  ABISELECT(1296,760),
  ABISELECT(16496,9820),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C6__8S7511C15[] = {
  0,
  0,
  ABISELECT(-1424,-836),
  ABISELECT(1648,1000),
  ABISELECT(-128,-76),
  ABISELECT(15072,8984),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__7S7511C6__8S7511C15[] = {
  0,
  0,
  ABISELECT(13424,7984),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C6__8S7511C15[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-21168,-12600),
  ABISELECT(-5968,-3540),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__A2__8S7511C15[] = {
  ABISELECT(-18368,-10952),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__A4__8S7511C15[] = {
  ABISELECT(-18368,-10952),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__8S7511C15[] = {
  ABISELECT(2864,1704),
  ABISELECT(-21168,-12600),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C12__A5__8S7511C15[] = {
  ABISELECT(-21168,-12600),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C15[] = {
  {&(_ZTV8S7511C15[14]),  14,119},
  {&(_tg__ZTV8S7511C20__8S7511C15[10]),  10,14},
  {&(_tg__ZTV7S7511C78S7511C20__A3__8S7511C15[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C20__A6__8S7511C15[3]),  3,3},
  {&(_tg__ZTV7S7511C6__8S7511C20__8S7511C15[10]),  10,12},
  {&(_tg__ZTV7S7511C7__8S7511C20__8S7511C15[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__8S7511C20__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C11__8S7511C20__8S7511C15[7]),  7,9},
  {&(_tg__ZTV7S7511C3__8S7511C20__8S7511C15[4]),  4,6},
  {&(_tg__ZTV8S7511C12__8S7511C20__8S7511C15[5]),  5,6},
  {&(_tg__ZTV7S7511C7__A__8S7511C20__8S7511C15[3]),  3,5},
  {&(_tg__ZTV7S7511C6__A__8S7511C15[9]),  9,11},
  {&(_tg__ZTV7S7511C7__7S7511C6__A__8S7511C15[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__7S7511C6__A__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C6__A__8S7511C15[7]),  7,9},
  {&(_tg__ZTV7S7511C3__7S7511C6__A__8S7511C15[4]),  4,6},
  {&(_tg__ZTV8S7511C12__7S7511C6__A__8S7511C15[5]),  5,6},
  {&(_tg__ZTV8S7511C17__A__8S7511C15[6]),  6,8},
  {&(_tg__ZTV7S7511C78S7511C17__A4__8S7511C15[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C17__A7__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C14__8S7511C17__A__8S7511C15[4]),  4,4},
  {&(_tg__ZTV7S7511C3__8S7511C17__A__8S7511C15[4]),  4,6},
  {&(_tg__ZTV8S7511C18__8S7511C17__A__8S7511C15[6]),  6,10},
  {&(_ZTV8S7511C15[52]),  52,119},
  {&(_ZTV8S7511C15[57]),  57,119},
  {&(_ZTV8S7511C15[64]),  64,119},
  {&(_ZTV8S7511C15[70]),  70,119},
  {&(_ZTV8S7511C15[79]),  79,119},
  {&(_ZTV8S7511C15[85]),  85,119},
  {&(_ZTV8S7511C15[91]),  91,119},
  {&(_ZTV8S7511C15[105]),  105,119},
  {&(_ZTV8S7511C15[111]),  111,119},
  {&(_ZTV8S7511C15[118]),  118,119},
  {&(_ZTV8S7511C15[21]),  21,119},
  {&(_ZTV8S7511C15[32]),  32,119},
  {&(_ZTV8S7511C15[40]),  40,119},
  {&(_tg__ZTV8S7511C16__8S7511C15[9]),  9,11},
  {&(_tg__ZTV7S7511C4__8S7511C16__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C11__8S7511C16__8S7511C15[7]),  7,9},
  {&(_tg__ZTV7S7511C3__8S7511C16__8S7511C15[4]),  4,6},
  {&(_tg__ZTV8S7511C17__8S7511C16__8S7511C15[7]),  7,9},
  {&(_tg__ZTV8S7511C14__8S7511C16__8S7511C15[4]),  4,4},
  {&(_tg__ZTV8S7511C18__8S7511C16__8S7511C15[6]),  6,10},
  {&(_tg__ZTV7S7511C4__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C11__8S7511C15[5]),  5,7},
  {&(_tg__ZTV7S7511C3__8S7511C11__8S7511C15[4]),  4,6},
  {&(_tg__ZTV7S7511C4__8S7511C11__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C17__8S7511C15[6]),  6,8},
  {&(_tg__ZTV7S7511C78S7511C17__A1__8S7511C15[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C17__A3__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C14__8S7511C17__8S7511C15[4]),  4,4},
  {&(_tg__ZTV7S7511C3__8S7511C17__8S7511C15[4]),  4,6},
  {&(_tg__ZTV8S7511C18__8S7511C17__8S7511C15[6]),  6,10},
  {&(_tg__ZTV8S7511C14__8S7511C15[4]),  4,4},
  {&(_tg__ZTV7S7511C48S7511C14__A1__8S7511C15[3]),  3,3},
  {&(_tg__ZTV7S7511C3__8S7511C14__8S7511C15[4]),  4,6},
  {&(_tg__ZTV8S7511C18__8S7511C15[3]),  3,7},
  {&(_tg__ZTV7S7511C78S7511C18__8S7511C15[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C18__A2__8S7511C15[3]),  3,3},
  {&(_tg__ZTV7S7511C6__8S7511C15[9]),  9,11},
  {&(_tg__ZTV7S7511C7__7S7511C6__8S7511C15[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__7S7511C6__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C6__8S7511C15[7]),  7,9},
  {&(_tg__ZTV7S7511C3__7S7511C6__8S7511C15[4]),  4,6},
  {&(_tg__ZTV8S7511C12__7S7511C6__8S7511C15[5]),  5,6},
  {&(_tg__ZTV7S7511C7__A2__8S7511C15[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__A4__8S7511C15[3]),  3,3},
  {&(_tg__ZTV8S7511C12__8S7511C15[4]),  4,5},
  {&(_tg__ZTV7S7511C48S7511C12__A5__8S7511C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C15[];
extern  VTBL_ENTRY _ZTV8S7511C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C15[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C16D0Ev,_ZTv0_n16_N8S7511C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9048_N8S7511C16D0Ev,_ZThn5388_N8S7511C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C16D1Ev,_ZTv0_n16_N8S7511C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9048_N8S7511C16D1Ev,_ZThn5388_N8S7511C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7511C16D0Ev,_ZTv0_n28_N8S7511C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4632_N8S7511C16D0Ev,_ZThn2768_N8S7511C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7511C16D1Ev,_ZTv0_n28_N8S7511C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4632_N8S7511C16D1Ev,_ZThn2768_N8S7511C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C17D0Ev,_ZTv0_n16_N8S7511C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S7511C17D0Ev,_ZThn2620_N8S7511C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn66560_N8S7511C17D0Ev,_ZThn39592_N8S7511C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C17D1Ev,_ZTv0_n16_N8S7511C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4416_N8S7511C17D1Ev,_ZThn2620_N8S7511C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn66560_N8S7511C17D1Ev,_ZThn39592_N8S7511C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80432_N7S7511C6D0Ev,_ZThn47860_N7S7511C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80432_N7S7511C6D1Ev,_ZThn47860_N7S7511C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn86752_N8S7511C20D0Ev,_ZThn51600_N8S7511C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn86752_N8S7511C20D1Ev,_ZThn51600_N8S7511C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83584_N8S7511C20D0Ev,_ZThn49708_N8S7511C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83584_N8S7511C20D1Ev,_ZThn49708_N8S7511C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C15D0Ev,_ZTv0_n16_N8S7511C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn86752_N8S7511C15D0Ev,_ZThn51600_N8S7511C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn76048_N8S7511C15D0Ev,_ZThn45224_N8S7511C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C15D1Ev,_ZTv0_n16_N8S7511C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn86752_N8S7511C15D1Ev,_ZThn51600_N8S7511C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn76048_N8S7511C15D1Ev,_ZThn45224_N8S7511C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7511C15D0Ev,_ZTv0_n28_N8S7511C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71632_N8S7511C15D0Ev,_ZThn42604_N8S7511C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7511C15D1Ev,_ZTv0_n28_N8S7511C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn71632_N8S7511C15D1Ev,_ZThn42604_N8S7511C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C15D0Ev,_ZTv0_n40_N8S7511C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83584_N8S7511C15D0Ev,_ZThn49708_N8S7511C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn67000_N8S7511C15D0Ev,_ZThn39836_N8S7511C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C15D1Ev,_ZTv0_n40_N8S7511C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83584_N8S7511C15D1Ev,_ZThn49708_N8S7511C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn67000_N8S7511C15D1Ev,_ZThn39836_N8S7511C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C15 = {  "S7511C15", // class name
  bases_S7511C15, 36,
  &(vtc_S7511C15[0]), // expected_vtbl_contents
  &(vtt_S7511C15[0]), // expected_vtt_contents
  ABISELECT(92480,54992), // object size
  NSPAIRA(_ZTI8S7511C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7511C15),119, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C15),69, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C2  : virtual S7511C3 , virtual S7511C6 , S7511C10 {
  int s7511c2f0;
  long double s7511c2f1;
  void *s7511c2f2;
  int s7511c2f3;
  ::S7511C15 s7511c2f4;
  char s7511c2f5;
  void *s7511c2f6;
  virtual  ~S7511C2(); // _ZN7S7511C2D2Ev
  virtual void  v6(); // _ZN7S7511C22v6Ev
  virtual void  v7(); // _ZN7S7511C22v7Ev
  S7511C2(); // tgen
};
//SIG(-1 S7511C2) C1{ VBC2{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC3{ VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp}} VBC5{ VBC6{ VBC4 BC3 vd Fi Fp[3] Fi FU7{ m Fs:0 Fi FL Fp} FC8{} FC8 FC3 FU7 Fp[3]} BC9{ m Fi Fs FL Fp} VBC3 VBC10{ VBC4 VBC2 VBC3 v5 v6 FL Fi FL[5] Fi[9] Fi Fi FC3 Fp Fc Fp FC9 Fp[8]} VBC11{ BC9 VBC12{ m Fi Fi FL Fp[6]} BC3 v7 Fs Fi FD Fc Fi Fl Fp FC2 Fi Fp} vd Fi Fi Fp[7] Fi FC13{ BC9 VBC4 BC3 VBC2 BC12 Fs FC12 Fi Fi}} BC9 vd v1 v2 Fi FD Fp Fi FC14{ VBC15{ VBC3 VBC10 VBC16{ VBC13 VBC17{ BC6 vd v8 v9 FC2 Fp Fc:5 Fi Fi Fp Fi FC11 FU18{ m Fp FL Fc Fi Fi FD}[9] Fi:21} BC6 BC4 vd Fp Fp FL Fs Fi} BC12 vd Fp Fp} BC4 BC19{ VBC5 BC20{ v10 v11 Fi FC11 FC4 Fp[10] Fp} BC6 Fi Fp FD[5]} BC5 BC16 vd Fi Fp FC5 Fp Fi FC21{ VBC12 BC11 VBC6 VBC22{ v12 Fp Fi:7 Fp Fi Fp Fp Fp[6] Fs Fi Fi Fp} BC17 vd FC13 FL Fc:8 FL[3] FC17 FL Fi[7] Fp Fi} FC15 FC4 Fi} Fc Fp}


 S7511C2 ::~S7511C2(){ note_dtor("S7511C2", this);}
void  S7511C2 ::v6(){vfunc_called(this, "_ZN7S7511C22v6Ev");}
void  S7511C2 ::v7(){vfunc_called(this, "_ZN7S7511C22v7Ev");}
S7511C2 ::S7511C2(){ note_ctor("S7511C2", this);} // tgen

static void Test_S7511C2()
{
  extern Class_Descriptor cd_S7511C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6627,15763)];
    init_test(&cd_S7511C2, buf);
    S7511C2 *dp, &lv = *(dp=new (buf) S7511C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(106016,63048), "sizeof(S7511C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C2)");
    check_base_class_offset(lv, (S7511C3*), ABISELECT(92576,55048), "S7511C2");
    check_base_class_offset(lv, (S7511C3*)(S7511C11*), ABISELECT(92576,55048), "S7511C2");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(100016,59468), "S7511C2");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(100016,59468), "S7511C2");
    /*is_ambiguous_... S7511C2::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(100016,59468), "S7511C2");
    check_base_class_offset(lv, (S7511C5*)(S7511C11*), ABISELECT(100016,59468), "S7511C2");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C12*), ABISELECT(100016,59468), "S7511C2");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(97216,57820), "S7511C2");
    check_base_class_offset(lv, (S7511C7*)(S7511C6*), ABISELECT(97216,57820), "S7511C2");
    /*is_ambiguous_... S7511C6::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S7511C6*), ABISELECT(94056,55932), "S7511C2");
    /*is_ambiguous_... S7511C6::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C6*), ABISELECT(100144,59544), "S7511C2");
    check_base_class_offset(lv, (S7511C4*)(S7511C11*), ABISELECT(100144,59544), "S7511C2");
    check_base_class_offset(lv, (S7511C11*)(S7511C6*), ABISELECT(101440,60304), "S7511C2");
    check_base_class_offset(lv, (S7511C10*)(S7511C12*), ABISELECT(104376,62064), "S7511C2");
    check_base_class_offset(lv, (S7511C13*)(S7511C12*), ABISELECT(105952,63008), "S7511C2");
    check_base_class_offset(lv, (S7511C4*)(S7511C12*), ABISELECT(103088,61304), "S7511C2");
    check_base_class_offset(lv, (S7511C12*)(S7511C6*), ABISELECT(103088,61304), "S7511C2");
    check_base_class_offset(lv, (S7511C6*), ABISELECT(94048,55928), "S7511C2");
    /*is_ambiguous_... S7511C2::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*), ABISELECT(8,4), "S7511C2");
    check_field_offset(lv, s7511c2f0, ABISELECT(32,24), "S7511C2.s7511c2f0");
    check_field_offset(lv, s7511c2f1, ABISELECT(48,28), "S7511C2.s7511c2f1");
    check_field_offset(lv, s7511c2f2, ABISELECT(64,40), "S7511C2.s7511c2f2");
    check_field_offset(lv, s7511c2f3, ABISELECT(72,44), "S7511C2.s7511c2f3");
    check_field_offset(lv, s7511c2f4, ABISELECT(80,48), "S7511C2.s7511c2f4");
    check_field_offset(lv, s7511c2f5, ABISELECT(92560,55040), "S7511C2.s7511c2f5");
    check_field_offset(lv, s7511c2f6, ABISELECT(92568,55044), "S7511C2.s7511c2f6");
    test_class_info(&lv, &cd_S7511C2);
    dp->~S7511C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C2(Test_S7511C2, "S7511C2", ABISELECT(106016,63048));

#else // __cplusplus

extern void _ZN7S7511C2C1Ev();
extern void _ZN7S7511C2D2Ev();
Name_Map name_map_S7511C2[] = {
  NSPAIR(_ZN7S7511C2C1Ev),
  NSPAIR(_ZN7S7511C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C11;
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C12;
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
extern Class_Descriptor cd_S7511C6;
extern VTBL_ENTRY _ZTI7S7511C6[];
extern  VTBL_ENTRY _ZTV7S7511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C6[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
static Base_Class bases_S7511C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C3,    ABISELECT(92576,55048), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C5,    ABISELECT(100016,59468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    ABISELECT(97216,57820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(97216,57820), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(94056,55932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(100144,59544), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7511C11,    ABISELECT(101440,60304), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(104376,62064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(105952,63008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    ABISELECT(103088,61304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C12,    ABISELECT(103088,61304), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C6,    ABISELECT(94048,55928), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7511C2[];
extern void _ZN7S7511C2D1Ev();
extern void _ZN7S7511C2D0Ev();
extern void _ZN7S7511C22v6Ev();
extern void _ZN7S7511C22v7Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S7511C2D1Ev,_ZTv0_n40_N7S7511C2D1Ev)();
extern void ABISELECT(_ZThn94048_N7S7511C2D1Ev,_ZThn55928_N7S7511C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7511C2D0Ev,_ZTv0_n40_N7S7511C2D0Ev)();
extern void ABISELECT(_ZThn94048_N7S7511C2D0Ev,_ZThn55928_N7S7511C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C2D1Ev,_ZTv0_n16_N7S7511C2D1Ev)();
extern void ABISELECT(_ZThn97216_N7S7511C2D1Ev,_ZThn57820_N7S7511C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C2D0Ev,_ZTv0_n16_N7S7511C2D0Ev)();
extern void ABISELECT(_ZThn97216_N7S7511C2D0Ev,_ZThn57820_N7S7511C2D0Ev)() __attribute__((weak));
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY vtc_S7511C2[] = {
  ABISELECT(105952,63008),
  ABISELECT(103088,61304),
  ABISELECT(101440,60304),
  ABISELECT(100144,59544),
  ABISELECT(100016,59468),
  ABISELECT(97216,57820),
  ABISELECT(94048,55928),
  ABISELECT(92576,55048),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN7S7511C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7511C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7511C22v7Ev,
  0,
  0,
  ABISELECT(-92576,-55048),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  ABISELECT(-94048,-55928),
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1472,-880),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-94048,-55928),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7511C2D1Ev,_ZTv0_n40_N7S7511C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7511C2D0Ev,_ZTv0_n40_N7S7511C2D0Ev),
  ABISELECT(-97216,-57820),
  ABISELECT(2800,1648),
  ABISELECT(-97216,-57820),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C2D1Ev,_ZTv0_n16_N7S7511C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C2D0Ev,_ZTv0_n16_N7S7511C2D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-100144,-59544),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8864,-5256),
  ABISELECT(-1424,-836),
  ABISELECT(-101440,-60304),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-103088,-61304),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern VTBL_ENTRY _ZTV7S7511C2[];
extern void _ZN7S7511C6D1Ev();
extern void _ZN7S7511C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C6__7S7511C2[] = {
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1472,-880),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C6__7S7511C2[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C6__7S7511C2[] = {
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C6__7S7511C2[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8864,-5256),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__7S7511C6__7S7511C2[] = {
  0,
  0,
  ABISELECT(1472,880),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C6__7S7511C2[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C2[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__7S7511C2[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C2[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C2[] = {
  ABISELECT(-1296,-760),
  ABISELECT(-8864,-5256),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C11__7S7511C2[] = {
  0,
  0,
  ABISELECT(8864,5256),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11__7S7511C2[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C2[] = {
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C12__A2__7S7511C2[] = {
  ABISELECT(-3072,-1836),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C2[] = {
  {&(_ZTV7S7511C2[10]),  10,56},
  {&(_ZTV7S7511C2[18]),  18,56},
  {&(_ZTV7S7511C2[30]),  30,56},
  {&(_ZTV7S7511C2[36]),  36,56},
  {&(_ZTV7S7511C2[41]),  41,56},
  {&(_ZTV7S7511C2[48]),  48,56},
  {&(_ZTV7S7511C2[55]),  55,56},
  {&(_tg__ZTV7S7511C6__7S7511C2[9]),  9,11},
  {&(_tg__ZTV7S7511C7__7S7511C6__7S7511C2[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__7S7511C6__7S7511C2[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C6__7S7511C2[7]),  7,9},
  {&(_tg__ZTV7S7511C3__7S7511C6__7S7511C2[4]),  4,6},
  {&(_tg__ZTV8S7511C12__7S7511C6__7S7511C2[5]),  5,6},
  {&(_tg__ZTV7S7511C7__7S7511C2[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__7S7511C2[3]),  3,3},
  {&(_tg__ZTV7S7511C4__A1__7S7511C2[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C2[5]),  5,7},
  {&(_tg__ZTV7S7511C3__8S7511C11__7S7511C2[4]),  4,6},
  {&(_tg__ZTV7S7511C4__8S7511C11__7S7511C2[3]),  3,3},
  {&(_tg__ZTV8S7511C12__7S7511C2[4]),  4,5},
  {&(_tg__ZTV7S7511C48S7511C12__A2__7S7511C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7511C2[];
extern  VTBL_ENTRY _ZTV7S7511C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C2[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C2D0Ev,_ZTv0_n16_N7S7511C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn97216_N7S7511C2D0Ev,_ZThn57820_N7S7511C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C2D1Ev,_ZTv0_n16_N7S7511C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn97216_N7S7511C2D1Ev,_ZThn57820_N7S7511C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7511C2D0Ev,_ZTv0_n40_N7S7511C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn94048_N7S7511C2D0Ev,_ZThn55928_N7S7511C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7511C2D1Ev,_ZTv0_n40_N7S7511C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn94048_N7S7511C2D1Ev,_ZThn55928_N7S7511C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C2 = {  "S7511C2", // class name
  bases_S7511C2, 13,
  &(vtc_S7511C2[0]), // expected_vtbl_contents
  &(vtt_S7511C2[0]), // expected_vtt_contents
  ABISELECT(106016,63048), // object size
  NSPAIRA(_ZTI7S7511C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7511C2),56, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7511C2),21, //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  S7511C25_nt  {
  int s7511c25f0;
  void  mf7511c25(); // _ZN11S7511C25_nt9mf7511c25Ev
};
//SIG(-1 S7511C25_nt) C1{ m Fi}


void  S7511C25_nt ::mf7511c25(){}

//skip512 S7511C25_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S7511C25_nt[];
VTBL_ENTRY *P__ZTI11S7511C25_nt = _ZTI11S7511C25_nt; 
Class_Descriptor cd_S7511C25_nt = {  "S7511C25_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI11S7511C25_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  S7511C26  : S7511C4 , virtual S7511C7 {
  char  :0;
  void *s7511c26f1;
  void *s7511c26f2;
  __tsi64 s7511c26f3;
  int s7511c26f4[8];
  ::S7511C5 s7511c26f5;
  int s7511c26f6;
  long double s7511c26f7;
  ~S7511C26(); // tgen
  S7511C26(); // tgen
};
//SIG(-1 S7511C26) C1{ BC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} VBC4{ VBC3 BC2 vd Fi Fp[3] Fi FU5{ m Fs:0 Fi FL Fp} FC6{} FC6 FC2 FU5 Fp[3]} Fc:0 Fp Fp FL Fi[8] FC3 Fi FD}


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

static void Test_S7511C26()
{
  extern Class_Descriptor cd_S7511C26;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(278,657)];
    init_test(&cd_S7511C26, buf);
    S7511C26 *dp, &lv = *(dp=new (buf) S7511C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4432,2624), "sizeof(S7511C26)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C26)");
    /*is_ambiguous_... S7511C26::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(1504,900), "S7511C26");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(1504,900), "S7511C26");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(1504,900), "S7511C26");
    /*is_ambiguous_... S7511C26::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*), 0, "S7511C26");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(1632,976), "S7511C26");
    check_base_class_offset(lv, (S7511C7*), ABISELECT(1632,976), "S7511C26");
    check_field_offset(lv, s7511c26f1, ABISELECT(1288,760), "S7511C26.s7511c26f1");
    check_field_offset(lv, s7511c26f2, ABISELECT(1296,764), "S7511C26.s7511c26f2");
    check_field_offset(lv, s7511c26f3, ABISELECT(1304,768), "S7511C26.s7511c26f3");
    check_field_offset(lv, s7511c26f4, ABISELECT(1312,776), "S7511C26.s7511c26f4");
    check_field_offset(lv, s7511c26f5, ABISELECT(1344,808), "S7511C26.s7511c26f5");
    check_field_offset(lv, s7511c26f6, ABISELECT(1472,884), "S7511C26.s7511c26f6");
    check_field_offset(lv, s7511c26f7, ABISELECT(1488,888), "S7511C26.s7511c26f7");
    test_class_info(&lv, &cd_S7511C26);
    dp->~S7511C26();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C26(Test_S7511C26, "S7511C26", ABISELECT(4432,2624));

#else // __cplusplus

extern void _ZN8S7511C26C1Ev();
extern void _ZN8S7511C26D1Ev();
Name_Map name_map_S7511C26[] = {
  NSPAIR(_ZN8S7511C26C1Ev),
  NSPAIR(_ZN8S7511C26D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
static Base_Class bases_S7511C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1504,900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7511C4,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C4,    ABISELECT(1632,976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(1632,976), //bcp->offset
    6, //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 _ZTI8S7511C26[];
extern void _ZN8S7511C26D1Ev();
extern void _ZN8S7511C26D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S7511C26D1Ev,_ZTv0_n16_N8S7511C26D1Ev)();
extern void ABISELECT(_ZThn1632_N8S7511C26D1Ev,_ZThn976_N8S7511C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C26D0Ev,_ZTv0_n16_N8S7511C26D0Ev)();
extern void ABISELECT(_ZThn1632_N8S7511C26D0Ev,_ZThn976_N8S7511C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7511C26[] = {
  ABISELECT(1632,976),
  ABISELECT(1504,900),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C26[0]),
  (VTBL_ENTRY)&_ZN8S7511C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C26D0Ev,
  ABISELECT(-1632,-976),
  ABISELECT(-128,-76),
  ABISELECT(-1632,-976),
  (VTBL_ENTRY)&(_ZTI8S7511C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C26D1Ev,_ZTv0_n16_N8S7511C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C26D0Ev,_ZTv0_n16_N8S7511C26D0Ev),
};
extern VTBL_ENTRY _ZTV8S7511C26[];
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C26[] = {
  ABISELECT(1504,900),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C26[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__A1__8S7511C26[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C26[] = {
  {&(_ZTV8S7511C26[4]),  4,12},
  {&(_tg__ZTV7S7511C4__8S7511C26[3]),  3,3},
  {&(_ZTV8S7511C26[10]),  10,12},
  {&(_tg__ZTV7S7511C7__8S7511C26[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__A1__8S7511C26[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7511C26[];
extern  VTBL_ENTRY _ZTV8S7511C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C26[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C26D0Ev,_ZTv0_n16_N8S7511C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N8S7511C26D0Ev,_ZThn976_N8S7511C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C26D1Ev,_ZTv0_n16_N8S7511C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N8S7511C26D1Ev,_ZThn976_N8S7511C26D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C26 = {  "S7511C26", // class name
  bases_S7511C26, 4,
  &(vtc_S7511C26[0]), // expected_vtbl_contents
  &(vtt_S7511C26[0]), // expected_vtt_contents
  ABISELECT(4432,2624), // object size
  NSPAIRA(_ZTI8S7511C26),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7511C26),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C26),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C24  : virtual S7511C3 , virtual S7511C25_nt , S7511C5 , S7511C20 , virtual S7511C26 {
  ::S7511C9_nt s7511c24f0;
  ::S7511C9_nt s7511c24f1;
  ~S7511C24(); // tgen
  S7511C24(); // tgen
};
//SIG(-1 S7511C24) C1{ VBC2{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC3{ VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp}} VBC5{ m Fi} BC4 BC6{ VBC7{ VBC8{ VBC4 BC3 vd Fi Fp[3] Fi FU9{ m Fs:0 Fi FL Fp} FC10{} FC10 FC3 FU9 Fp[3]} BC11{ m Fi Fs FL Fp} VBC3 VBC12{ VBC4 VBC2 VBC3 v3 v4 FL Fi FL[5] Fi[9] Fi Fi FC3 Fp Fc Fp FC11 Fp[8]} VBC13{ BC11 VBC14{ m Fi Fi FL Fp[6]} BC3 v5 Fs Fi FD Fc Fi Fl Fp FC2 Fi Fp} vd Fi Fi Fp[7] Fi FC15{ BC11 VBC4 BC3 VBC2 BC14 Fs FC14 Fi Fi}} BC16{ v6 v7 Fi FC13 FC4 Fp[10] Fp} BC8 Fi Fp FD[5]} VBC17{ BC3 VBC8 Fc:0 Fp Fp FL Fi[8] FC4 Fi FD} FC10 FC10}


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

static void Test_S7511C24()
{
  extern Class_Descriptor cd_S7511C24;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1332,3163)];
    init_test(&cd_S7511C24, buf);
    S7511C24 *dp, &lv = *(dp=new (buf) S7511C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21296,12648), "sizeof(S7511C24)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C24)");
    check_base_class_offset(lv, (S7511C3*), ABISELECT(6336,3744), "S7511C24");
    check_base_class_offset(lv, (S7511C3*)(S7511C11*), ABISELECT(6336,3744), "S7511C24");
    check_base_class_offset(lv, (S7511C25_nt*), ABISELECT(7808,4624), "S7511C24");
    /*is_ambiguous_... S7511C24::S7511C5 */ AMB_check_base_class_offset(lv, (S7511C5*), ABISELECT(6192,3664), "S7511C24");
    /*is_ambiguous_... S7511C24::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(13792,8168), "S7511C24");
    /*is_ambiguous_... S7511C24::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(13792,8168), "S7511C24");
    /*is_ambiguous_... S7511C24::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(13792,8168), "S7511C24");
    check_base_class_offset(lv, (S7511C5*)(S7511C11*), ABISELECT(13792,8168), "S7511C24");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C12*), ABISELECT(13792,8168), "S7511C24");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C7*)(S7511C20*), ABISELECT(13792,8168), "S7511C24");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*)(S7511C20*), ABISELECT(13792,8168), "S7511C24");
    /*is_ambiguous_... S7511C26::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C26*), ABISELECT(13792,8168), "S7511C24");
    /*is_ambiguous_... S7511C24::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(10992,6520), "S7511C24");
    check_base_class_offset(lv, (S7511C7*)(S7511C6*), ABISELECT(10992,6520), "S7511C24");
    check_base_class_offset(lv, (S7511C7*)(S7511C26*), ABISELECT(10992,6520), "S7511C24");
    /*is_ambiguous_... S7511C6::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S7511C6*), ABISELECT(7832,4632), "S7511C24");
    /*is_ambiguous_... S7511C6::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C6*), ABISELECT(13920,8244), "S7511C24");
    check_base_class_offset(lv, (S7511C4*)(S7511C11*), ABISELECT(13920,8244), "S7511C24");
    check_base_class_offset(lv, (S7511C11*)(S7511C6*), ABISELECT(15216,9004), "S7511C24");
    check_base_class_offset(lv, (S7511C10*)(S7511C12*), ABISELECT(18152,10764), "S7511C24");
    check_base_class_offset(lv, (S7511C13*)(S7511C12*), ABISELECT(19728,11708), "S7511C24");
    check_base_class_offset(lv, (S7511C4*)(S7511C12*), ABISELECT(16864,10004), "S7511C24");
    check_base_class_offset(lv, (S7511C12*)(S7511C6*), ABISELECT(16864,10004), "S7511C24");
    check_base_class_offset(lv, (S7511C6*)(S7511C20*), ABISELECT(7824,4628), "S7511C24");
    check_base_class_offset(lv, (S7511C21*)(S7511C20*), 0, "S7511C24");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C7*)(S7511C20*), ABISELECT(3296,1948), "S7511C24");
    /*is_ambiguous_... S7511C20::S7511C7 */ AMB_check_base_class_offset(lv, (S7511C7*)(S7511C20*), ABISELECT(3296,1948), "S7511C24");
    check_base_class_offset(lv, (S7511C20*), 0, "S7511C24");
    /*is_ambiguous_... S7511C26::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C26*), ABISELECT(19792,11748), "S7511C24");
    check_base_class_offset(lv, (S7511C26*), ABISELECT(19792,11748), "S7511C24");
    check_field_offset(lv, s7511c24f0, ABISELECT(6320,3740), "S7511C24.s7511c24f0");
    check_field_offset(lv, s7511c24f1, ABISELECT(6321,3741), "S7511C24.s7511c24f1");
    test_class_info(&lv, &cd_S7511C24);
    dp->~S7511C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C24(Test_S7511C24, "S7511C24", ABISELECT(21296,12648));

#else // __cplusplus

extern void _ZN8S7511C24C1Ev();
extern void _ZN8S7511C24D1Ev();
Name_Map name_map_S7511C24[] = {
  NSPAIR(_ZN8S7511C24C1Ev),
  NSPAIR(_ZN8S7511C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C25_nt;
extern VTBL_ENTRY _ZTI11S7511C25_nt[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C11;
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C12;
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
extern Class_Descriptor cd_S7511C6;
extern VTBL_ENTRY _ZTI7S7511C6[];
extern  VTBL_ENTRY _ZTV7S7511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C6[];
extern Class_Descriptor cd_S7511C21;
extern VTBL_ENTRY _ZTI8S7511C21[];
extern  VTBL_ENTRY _ZTV8S7511C21[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C20;
extern VTBL_ENTRY _ZTI8S7511C20[];
extern  VTBL_ENTRY _ZTV8S7511C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C20[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C26;
extern VTBL_ENTRY _ZTI8S7511C26[];
extern  VTBL_ENTRY _ZTV8S7511C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C26[];
static Base_Class bases_S7511C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C3,    ABISELECT(6336,3744), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C25_nt,    ABISELECT(7808,4624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C5,    ABISELECT(6192,3664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C5,    ABISELECT(13792,8168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(10992,6520), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(10992,6520), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(7832,4632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(13920,8244), //bcp->offset
    45, //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
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7511C11,    ABISELECT(15216,9004), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(18152,10764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(19728,11708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7511C4,    ABISELECT(16864,10004), //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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7511C12,    ABISELECT(16864,10004), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7511C6,    ABISELECT(7824,4628), //bcp->offset
    27, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7511C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(3296,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(3296,1948), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7511C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C4,    ABISELECT(19792,11748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7511C26,    ABISELECT(19792,11748), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7511C24[];
extern void _ZN8S7511C213v10Ev();
extern void _ZN8S7511C213v11Ev();
extern void _ZN8S7511C24D1Ev();
extern void _ZN8S7511C24D0Ev();
extern void ABISELECT(_ZThn3296_N8S7511C24D1Ev,_ZThn1948_N8S7511C24D1Ev)();
extern void ABISELECT(_ZThn3296_N8S7511C24D0Ev,_ZThn1948_N8S7511C24D0Ev)();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N8S7511C24D1Ev,_ZTv0_n40_N8S7511C24D1Ev)();
extern void ABISELECT(_ZThn7824_N8S7511C24D1Ev,_ZThn4628_N8S7511C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7511C24D0Ev,_ZTv0_n40_N8S7511C24D0Ev)();
extern void ABISELECT(_ZThn7824_N8S7511C24D0Ev,_ZThn4628_N8S7511C24D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C24D1Ev,_ZTv0_n16_N8S7511C24D1Ev)();
extern void ABISELECT(_ZThn10992_N8S7511C24D1Ev,_ZThn6520_N8S7511C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C24D0Ev,_ZTv0_n16_N8S7511C24D0Ev)();
extern void ABISELECT(_ZThn10992_N8S7511C24D0Ev,_ZThn6520_N8S7511C24D0Ev)() __attribute__((weak));
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN8S7511C122v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S7511C24D1Ev,_ZTv0_n20_N8S7511C24D1Ev)();
extern void ABISELECT(_ZThn19792_N8S7511C24D1Ev,_ZThn11748_N8S7511C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7511C24D0Ev,_ZTv0_n20_N8S7511C24D0Ev)();
extern void ABISELECT(_ZThn19792_N8S7511C24D0Ev,_ZThn11748_N8S7511C24D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7511C24[] = {
  ABISELECT(19792,11748),
  ABISELECT(7808,4624),
  ABISELECT(19728,11708),
  ABISELECT(16864,10004),
  ABISELECT(6336,3744),
  ABISELECT(15216,9004),
  ABISELECT(13920,8244),
  ABISELECT(13792,8168),
  ABISELECT(10992,6520),
  ABISELECT(7824,4628),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&_ZN8S7511C213v10Ev,
  (VTBL_ENTRY)&_ZN8S7511C213v11Ev,
  (VTBL_ENTRY)&_ZN8S7511C24D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C24D0Ev,
  ABISELECT(10496,6220),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C24D1Ev,_ZThn1948_N8S7511C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C24D0Ev,_ZThn1948_N8S7511C24D0Ev),
  0,
  0,
  ABISELECT(-6336,-3744),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  ABISELECT(-7824,-4628),
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1488,-884),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-7824,-4628),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C24D1Ev,_ZTv0_n40_N8S7511C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C24D0Ev,_ZTv0_n40_N8S7511C24D0Ev),
  ABISELECT(-10992,-6520),
  ABISELECT(2800,1648),
  ABISELECT(-10992,-6520),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C24D1Ev,_ZTv0_n16_N8S7511C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C24D0Ev,_ZTv0_n16_N8S7511C24D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-13920,-8244),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8880,-5260),
  ABISELECT(-1424,-836),
  ABISELECT(-15216,-9004),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-16864,-10004),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
  ABISELECT(-19792,-11748),
  ABISELECT(-8800,-5228),
  ABISELECT(-6000,-3580),
  ABISELECT(-19792,-11748),
  (VTBL_ENTRY)&(_ZTI8S7511C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7511C24D1Ev,_ZTv0_n20_N8S7511C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7511C24D0Ev,_ZTv0_n20_N8S7511C24D0Ev),
};
extern VTBL_ENTRY _ZTV8S7511C24[];
extern void _ZN8S7511C213v10Ev();
extern void _ZN8S7511C213v11Ev();
extern void _ZN8S7511C20D1Ev();
extern void _ZN8S7511C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C20__8S7511C24[] = {
  ABISELECT(19728,11708),
  ABISELECT(16864,10004),
  ABISELECT(6336,3744),
  ABISELECT(15216,9004),
  ABISELECT(13920,8244),
  ABISELECT(13792,8168),
  ABISELECT(10992,6520),
  ABISELECT(7824,4628),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C213v10Ev,
  (VTBL_ENTRY)&_ZN8S7511C213v11Ev,
  (VTBL_ENTRY)&_ZN8S7511C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C20D0Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C78S7511C20__A1__8S7511C24[] = {
  ABISELECT(10496,6220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C78S7511C20__A3__8S7511C24[] = {
  ABISELECT(10496,6220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn7824_N8S7511C20D1Ev,_ZThn4628_N8S7511C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev)();
extern void ABISELECT(_ZThn7824_N8S7511C20D0Ev,_ZThn4628_N8S7511C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C6__8S7511C20__8S7511C24[] = {
  ABISELECT(-7824,-4628),
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1488,-884),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-7824,-4628),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn10992_N8S7511C20D1Ev,_ZThn6520_N8S7511C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev)();
extern void ABISELECT(_ZThn10992_N8S7511C20D0Ev,_ZThn6520_N8S7511C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C20__8S7511C24[] = {
  ABISELECT(-10992,-6520),
  ABISELECT(2800,1648),
  ABISELECT(-10992,-6520),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__8S7511C20__8S7511C24[] = {
  ABISELECT(-128,-76),
  ABISELECT(-13920,-8244),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__8S7511C20__8S7511C24[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8880,-5260),
  ABISELECT(-1424,-836),
  ABISELECT(-15216,-9004),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C20__8S7511C24[] = {
  0,
  0,
  ABISELECT(-6336,-3744),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__8S7511C20__8S7511C24[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-16864,-10004),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void ABISELECT(_ZThn3296_N8S7511C20D1Ev,_ZThn1948_N8S7511C20D1Ev)();
extern void ABISELECT(_ZThn3296_N8S7511C20D0Ev,_ZThn1948_N8S7511C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7511C7__A__8S7511C20__8S7511C24[] = {
  ABISELECT(10496,6220),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S7511C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C20D1Ev,_ZThn1948_N8S7511C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S7511C20D0Ev,_ZThn1948_N8S7511C20D0Ev),
};
extern void _ZN7S7511C6D1Ev();
extern void _ZN7S7511C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C6__8S7511C24[] = {
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1488,-884),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C6__8S7511C24[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C6__8S7511C24[] = {
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C6__8S7511C24[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8880,-5260),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__7S7511C6__8S7511C24[] = {
  0,
  0,
  ABISELECT(1488,884),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C6__8S7511C24[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C24[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__8S7511C24[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__8S7511C24[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__8S7511C24[] = {
  ABISELECT(-1296,-760),
  ABISELECT(-8880,-5260),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C11__8S7511C24[] = {
  0,
  0,
  ABISELECT(8880,5260),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11__8S7511C24[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__8S7511C24[] = {
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C12__A2__8S7511C24[] = {
  ABISELECT(-3072,-1836),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C26D1Ev();
extern void _ZN8S7511C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C26__8S7511C24[] = {
  ABISELECT(-8800,-5228),
  ABISELECT(-6000,-3580),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C26[0]),
  (VTBL_ENTRY)&_ZN8S7511C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7511C26D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C26__A4__8S7511C24[] = {
  ABISELECT(-6000,-3580),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S7511C26D1Ev,_ZTv0_n16_N8S7511C26D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7511C26D0Ev,_ZTv0_n16_N8S7511C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7511C7__8S7511C26__8S7511C24[] = {
  ABISELECT(8800,5228),
  ABISELECT(2800,1648),
  ABISELECT(8800,5228),
  (VTBL_ENTRY)&(_ZTI8S7511C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C26D1Ev,_ZTv0_n16_N8S7511C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7511C26D0Ev,_ZTv0_n16_N8S7511C26D0Ev),
};
static  VTT_ENTRY vtt_S7511C24[] = {
  {&(_ZTV8S7511C24[12]),  12,70},
  {&(_tg__ZTV8S7511C20__8S7511C24[10]),  10,14},
  {&(_tg__ZTV7S7511C78S7511C20__A1__8S7511C24[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C78S7511C20__A3__8S7511C24[3]),  3,3},
  {&(_tg__ZTV7S7511C6__8S7511C20__8S7511C24[10]),  10,12},
  {&(_tg__ZTV7S7511C7__8S7511C20__8S7511C24[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__8S7511C20__8S7511C24[3]),  3,3},
  {&(_tg__ZTV8S7511C11__8S7511C20__8S7511C24[7]),  7,9},
  {&(_tg__ZTV7S7511C3__8S7511C20__8S7511C24[4]),  4,6},
  {&(_tg__ZTV8S7511C12__8S7511C20__8S7511C24[5]),  5,6},
  {&(_tg__ZTV7S7511C7__A__8S7511C20__8S7511C24[3]),  3,5},
  {&(_ZTV8S7511C24[25]),  25,70},
  {&(_ZTV8S7511C24[37]),  37,70},
  {&(_ZTV8S7511C24[43]),  43,70},
  {&(_ZTV8S7511C24[48]),  48,70},
  {&(_ZTV8S7511C24[55]),  55,70},
  {&(_ZTV8S7511C24[62]),  62,70},
  {&(_ZTV8S7511C24[19]),  19,70},
  {&(_ZTV8S7511C24[68]),  68,70},
  {&(_tg__ZTV7S7511C6__8S7511C24[9]),  9,11},
  {&(_tg__ZTV7S7511C7__7S7511C6__8S7511C24[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__7S7511C6__8S7511C24[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C6__8S7511C24[7]),  7,9},
  {&(_tg__ZTV7S7511C3__7S7511C6__8S7511C24[4]),  4,6},
  {&(_tg__ZTV8S7511C12__7S7511C6__8S7511C24[5]),  5,6},
  {&(_tg__ZTV7S7511C7__8S7511C24[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__8S7511C24[3]),  3,3},
  {&(_tg__ZTV7S7511C4__A1__8S7511C24[3]),  3,3},
  {&(_tg__ZTV8S7511C11__8S7511C24[5]),  5,7},
  {&(_tg__ZTV7S7511C3__8S7511C11__8S7511C24[4]),  4,6},
  {&(_tg__ZTV7S7511C4__8S7511C11__8S7511C24[3]),  3,3},
  {&(_tg__ZTV8S7511C12__8S7511C24[4]),  4,5},
  {&(_tg__ZTV7S7511C48S7511C12__A2__8S7511C24[3]),  3,3},
  {&(_tg__ZTV8S7511C26__8S7511C24[4]),  4,6},
  {&(_tg__ZTV7S7511C48S7511C26__A4__8S7511C24[3]),  3,3},
  {&(_tg__ZTV7S7511C7__8S7511C26__8S7511C24[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7511C24[];
extern  VTBL_ENTRY _ZTV8S7511C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C24[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C20D0Ev,_ZTv0_n16_N8S7511C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10992_N8S7511C20D0Ev,_ZThn6520_N8S7511C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C20D1Ev,_ZTv0_n16_N8S7511C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10992_N8S7511C20D1Ev,_ZThn6520_N8S7511C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C20D0Ev,_ZTv0_n40_N8S7511C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7511C20D0Ev,_ZThn4628_N8S7511C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C20D1Ev,_ZTv0_n40_N8S7511C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7511C20D1Ev,_ZThn4628_N8S7511C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7511C24D0Ev,_ZTv0_n20_N8S7511C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19792_N8S7511C24D0Ev,_ZThn11748_N8S7511C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7511C24D1Ev,_ZTv0_n20_N8S7511C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19792_N8S7511C24D1Ev,_ZThn11748_N8S7511C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C24D0Ev,_ZTv0_n16_N8S7511C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10992_N8S7511C24D0Ev,_ZThn6520_N8S7511C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7511C24D1Ev,_ZTv0_n16_N8S7511C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10992_N8S7511C24D1Ev,_ZThn6520_N8S7511C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C24D0Ev,_ZTv0_n40_N8S7511C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7511C24D0Ev,_ZThn4628_N8S7511C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7511C24D1Ev,_ZTv0_n40_N8S7511C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7511C24D1Ev,_ZThn4628_N8S7511C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C24 = {  "S7511C24", // class name
  bases_S7511C24, 20,
  &(vtc_S7511C24[0]), // expected_vtbl_contents
  &(vtt_S7511C24[0]), // expected_vtt_contents
  ABISELECT(21296,12648), // object size
  NSPAIRA(_ZTI8S7511C24),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7511C24),70, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7511C24),36, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7511C1  : S7511C2 {
  char s7511c1f0;
  char s7511c1f1;
  ::S7511C24 s7511c1f2;
  __tsi64 s7511c1f3[7];
  int s7511c1f4;
  virtual  ~S7511C1(); // _ZN7S7511C1D2Ev
  S7511C1(); // tgen
};
//SIG(1 S7511C1) C1{ BC2{ VBC3{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4{ VBC5{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC5 FC5 Fp Fi Fp[7] Fi[2] FC5 FC5[6] FL[2] Fp Fi Fp}} VBC6{ VBC7{ VBC5 BC4 vd Fi Fp[3] Fi FU8{ m Fs:0 Fi FL Fp} FC9{} FC9 FC4 FU8 Fp[3]} BC10{ m Fi Fs FL Fp} VBC4 VBC11{ VBC5 VBC3 VBC4 v3 v4 FL Fi FL[5] Fi[9] Fi Fi FC4 Fp Fc Fp FC10 Fp[8]} VBC12{ BC10 VBC13{ m Fi Fi FL Fp[6]} BC4 v5 Fs Fi FD Fc Fi Fl Fp FC3 Fi Fp} vd Fi Fi Fp[7] Fi FC14{ BC10 VBC5 BC4 VBC3 BC13 Fs FC13 Fi Fi}} BC10 vd v6 v7 Fi FD Fp Fi FC15{ VBC16{ VBC4 VBC11 VBC17{ VBC14 VBC18{ BC7 vd v8 v9 FC3 Fp Fc:5 Fi Fi Fp Fi FC12 FU19{ m Fp FL Fc Fi Fi FD}[9] Fi:21} BC7 BC5 vd Fp Fp FL Fs Fi} BC13 vd Fp Fp} BC5 BC20{ VBC6 BC21{ v10 v11 Fi FC12 FC5 Fp[10] Fp} BC7 Fi Fp FD[5]} BC6 BC17 vd Fi Fp FC6 Fp Fi FC22{ VBC13 BC12 VBC7 VBC23{ v12 Fp Fi:7 Fp Fi Fp Fp Fp[6] Fs Fi Fi Fp} BC18 vd FC14 FL Fc:8 FL[3] FC18 FL Fi[7] Fp Fi} FC16 FC5 Fi} Fc Fp} vd Fc Fc FC24{ VBC3 VBC25{ m Fi} BC5 BC20 VBC26{ BC4 VBC7 Fc:0 Fp Fp FL Fi[8] FC5 Fi FD} FC9 FC9} FL[7] Fi}


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

static void Test_S7511C1()
{
  extern Class_Descriptor cd_S7511C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7963,18941)];
    init_test(&cd_S7511C1, buf);
    S7511C1 *dp, &lv = *(dp=new (buf) S7511C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(127392,75760), "sizeof(S7511C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7511C1)");
    check_base_class_offset(lv, (S7511C3*)(S7511C2*), ABISELECT(113952,67760), "S7511C1");
    check_base_class_offset(lv, (S7511C3*)(S7511C11*), ABISELECT(113952,67760), "S7511C1");
    check_base_class_offset(lv, (S7511C5*)(S7511C7*), ABISELECT(121392,72180), "S7511C1");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C7*), ABISELECT(121392,72180), "S7511C1");
    /*is_ambiguous_... S7511C1::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C5*)(S7511C4*), ABISELECT(121392,72180), "S7511C1");
    check_base_class_offset(lv, (S7511C5*)(S7511C11*), ABISELECT(121392,72180), "S7511C1");
    check_base_class_offset(lv, (S7511C5*)(S7511C4*)(S7511C12*), ABISELECT(121392,72180), "S7511C1");
    check_base_class_offset(lv, (S7511C4*)(S7511C7*), ABISELECT(118592,70532), "S7511C1");
    check_base_class_offset(lv, (S7511C7*)(S7511C6*), ABISELECT(118592,70532), "S7511C1");
    /*is_ambiguous_... S7511C6::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S7511C6*), ABISELECT(115432,68644), "S7511C1");
    /*is_ambiguous_... S7511C6::S7511C4 */ AMB_check_base_class_offset(lv, (S7511C4*)(S7511C6*), ABISELECT(121520,72256), "S7511C1");
    check_base_class_offset(lv, (S7511C4*)(S7511C11*), ABISELECT(121520,72256), "S7511C1");
    check_base_class_offset(lv, (S7511C11*)(S7511C6*), ABISELECT(122816,73016), "S7511C1");
    check_base_class_offset(lv, (S7511C10*)(S7511C12*), ABISELECT(125752,74776), "S7511C1");
    check_base_class_offset(lv, (S7511C13*)(S7511C12*), ABISELECT(127328,75720), "S7511C1");
    check_base_class_offset(lv, (S7511C4*)(S7511C12*), ABISELECT(124464,74016), "S7511C1");
    check_base_class_offset(lv, (S7511C12*)(S7511C6*), ABISELECT(124464,74016), "S7511C1");
    check_base_class_offset(lv, (S7511C6*)(S7511C2*), ABISELECT(115424,68640), "S7511C1");
    /*is_ambiguous_... S7511C2::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S7511C2*), ABISELECT(8,4), "S7511C1");
    check_base_class_offset(lv, (S7511C2*), 0, "S7511C1");
    check_field_offset(lv, s7511c1f0, ABISELECT(92576,55048), "S7511C1.s7511c1f0");
    check_field_offset(lv, s7511c1f1, ABISELECT(92577,55049), "S7511C1.s7511c1f1");
    check_field_offset(lv, s7511c1f2, ABISELECT(92592,55052), "S7511C1.s7511c1f2");
    check_field_offset(lv, s7511c1f3, ABISELECT(113888,67700), "S7511C1.s7511c1f3");
    check_field_offset(lv, s7511c1f4, ABISELECT(113944,67756), "S7511C1.s7511c1f4");
    test_class_info(&lv, &cd_S7511C1);
    dp->~S7511C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7511C1(Test_S7511C1, "S7511C1", ABISELECT(127392,75760));

#else // __cplusplus

extern void _ZN7S7511C1C1Ev();
extern void _ZN7S7511C1D2Ev();
Name_Map name_map_S7511C1[] = {
  NSPAIR(_ZN7S7511C1C1Ev),
  NSPAIR(_ZN7S7511C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C3;
extern VTBL_ENTRY _ZTI7S7511C3[];
extern  VTBL_ENTRY _ZTV7S7511C3[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C7;
extern VTBL_ENTRY _ZTI7S7511C7[];
extern  VTBL_ENTRY _ZTV7S7511C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C7[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C11;
extern VTBL_ENTRY _ZTI8S7511C11[];
extern  VTBL_ENTRY _ZTV8S7511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C11[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C13;
extern VTBL_ENTRY _ZTI8S7511C13[];
extern Class_Descriptor cd_S7511C4;
extern VTBL_ENTRY _ZTI7S7511C4[];
extern  VTBL_ENTRY _ZTV7S7511C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C4[];
extern Class_Descriptor cd_S7511C12;
extern VTBL_ENTRY _ZTI8S7511C12[];
extern  VTBL_ENTRY _ZTV8S7511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7511C12[];
extern Class_Descriptor cd_S7511C6;
extern VTBL_ENTRY _ZTI7S7511C6[];
extern  VTBL_ENTRY _ZTV7S7511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C6[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C2;
extern VTBL_ENTRY _ZTI7S7511C2[];
extern  VTBL_ENTRY _ZTV7S7511C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C2[];
static Base_Class bases_S7511C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C3,    ABISELECT(113952,67760), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7511C5,    ABISELECT(121392,72180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    ABISELECT(118592,70532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7511C7,    ABISELECT(118592,70532), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(115432,68644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7511C4,    ABISELECT(121520,72256), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7511C11,    ABISELECT(122816,73016), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(125752,74776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C13,    ABISELECT(127328,75720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7511C4,    ABISELECT(124464,74016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7511C12,    ABISELECT(124464,74016), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C6,    ABISELECT(115424,68640), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7511C10,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7511C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7511C1[];
extern void _ZN7S7511C1D1Ev();
extern void _ZN7S7511C1D0Ev();
extern void _ZN7S7511C22v6Ev();
extern void _ZN7S7511C22v7Ev();
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S7511C1D1Ev,_ZTv0_n40_N7S7511C1D1Ev)();
extern void ABISELECT(_ZThn115424_N7S7511C1D1Ev,_ZThn68640_N7S7511C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7511C1D0Ev,_ZTv0_n40_N7S7511C1D0Ev)();
extern void ABISELECT(_ZThn115424_N7S7511C1D0Ev,_ZThn68640_N7S7511C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C1D1Ev,_ZTv0_n16_N7S7511C1D1Ev)();
extern void ABISELECT(_ZThn118592_N7S7511C1D1Ev,_ZThn70532_N7S7511C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C1D0Ev,_ZTv0_n16_N7S7511C1D0Ev)();
extern void ABISELECT(_ZThn118592_N7S7511C1D0Ev,_ZThn70532_N7S7511C1D0Ev)() __attribute__((weak));
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY vtc_S7511C1[] = {
  ABISELECT(127328,75720),
  ABISELECT(124464,74016),
  ABISELECT(122816,73016),
  ABISELECT(121520,72256),
  ABISELECT(121392,72180),
  ABISELECT(118592,70532),
  ABISELECT(115424,68640),
  ABISELECT(113952,67760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C1[0]),
  (VTBL_ENTRY)&_ZN7S7511C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7511C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7511C22v7Ev,
  0,
  0,
  ABISELECT(-113952,-67760),
  (VTBL_ENTRY)&(_ZTI7S7511C1[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
  ABISELECT(-115424,-68640),
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1472,-880),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-115424,-68640),
  (VTBL_ENTRY)&(_ZTI7S7511C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7511C1D1Ev,_ZTv0_n40_N7S7511C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7511C1D0Ev,_ZTv0_n40_N7S7511C1D0Ev),
  ABISELECT(-118592,-70532),
  ABISELECT(2800,1648),
  ABISELECT(-118592,-70532),
  (VTBL_ENTRY)&(_ZTI7S7511C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C1D1Ev,_ZTv0_n16_N7S7511C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C1D0Ev,_ZTv0_n16_N7S7511C1D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-121520,-72256),
  (VTBL_ENTRY)&(_ZTI7S7511C1[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8864,-5256),
  ABISELECT(-1424,-836),
  ABISELECT(-122816,-73016),
  (VTBL_ENTRY)&(_ZTI7S7511C1[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-124464,-74016),
  (VTBL_ENTRY)&(_ZTI7S7511C1[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern VTBL_ENTRY _ZTV7S7511C1[];
extern void _ZN7S7511C2D1Ev();
extern void _ZN7S7511C2D0Ev();
extern void _ZN7S7511C22v6Ev();
extern void _ZN7S7511C22v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C2__7S7511C1[] = {
  ABISELECT(127328,75720),
  ABISELECT(124464,74016),
  ABISELECT(122816,73016),
  ABISELECT(121520,72256),
  ABISELECT(121392,72180),
  ABISELECT(118592,70532),
  ABISELECT(115424,68640),
  ABISELECT(113952,67760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN7S7511C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7511C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7511C22v7Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__7S7511C2__7S7511C1[] = {
  0,
  0,
  ABISELECT(-113952,-67760),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void ABISELECT(_ZTv0_n80_N7S7511C2D1Ev,_ZTv0_n40_N7S7511C2D1Ev)();
extern void ABISELECT(_ZThn115424_N7S7511C2D1Ev,_ZThn68640_N7S7511C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7511C2D0Ev,_ZTv0_n40_N7S7511C2D0Ev)();
extern void ABISELECT(_ZThn115424_N7S7511C2D0Ev,_ZThn68640_N7S7511C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C6__7S7511C2__7S7511C1[] = {
  ABISELECT(-115424,-68640),
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1472,-880),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-115424,-68640),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7511C2D1Ev,_ZTv0_n40_N7S7511C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7511C2D0Ev,_ZTv0_n40_N7S7511C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7511C2D1Ev,_ZTv0_n16_N7S7511C2D1Ev)();
extern void ABISELECT(_ZThn118592_N7S7511C2D1Ev,_ZThn70532_N7S7511C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C2D0Ev,_ZTv0_n16_N7S7511C2D0Ev)();
extern void ABISELECT(_ZThn118592_N7S7511C2D0Ev,_ZThn70532_N7S7511C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C2__7S7511C1[] = {
  ABISELECT(-118592,-70532),
  ABISELECT(2800,1648),
  ABISELECT(-118592,-70532),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C2D1Ev,_ZTv0_n16_N7S7511C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C2D0Ev,_ZTv0_n16_N7S7511C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C2__7S7511C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-121520,-72256),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C2__7S7511C1[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8864,-5256),
  ABISELECT(-1424,-836),
  ABISELECT(-122816,-73016),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C2__7S7511C1[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-124464,-74016),
  (VTBL_ENTRY)&(_ZTI7S7511C2[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void _ZN7S7511C6D1Ev();
extern void _ZN7S7511C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C6__7S7511C1[] = {
  ABISELECT(11904,7080),
  ABISELECT(9040,5376),
  ABISELECT(-1472,-880),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev)();
extern void ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C6__7S7511C1[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C6__7S7511C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C6__7S7511C1[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(-8864,-5256),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__7S7511C6__7S7511C1[] = {
  0,
  0,
  ABISELECT(1472,880),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C6__7S7511C1[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI7S7511C6[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
extern void _ZN7S7511C7D1Ev();
extern void _ZN7S7511C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C7__7S7511C1[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C7[0]),
  (VTBL_ENTRY)&_ZN7S7511C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7511C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C47S7511C7__7S7511C1[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__A1__7S7511C1[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
extern void _ZN8S7511C112v3Ev();
extern void _ZN8S7511C112v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C11__7S7511C1[] = {
  ABISELECT(-1296,-760),
  ABISELECT(-8864,-5256),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN8S7511C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7511C112v4Ev,
};
extern void _ZN7S7511C32v1Ev();
extern void _ZN7S7511C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7511C3__8S7511C11__7S7511C1[] = {
  0,
  0,
  ABISELECT(8864,5256),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
  (VTBL_ENTRY)&_ZN7S7511C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7511C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C4__8S7511C11__7S7511C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S7511C11[0]),
};
extern void _ZN8S7511C122v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7511C12__7S7511C1[] = {
  ABISELECT(2864,1704),
  ABISELECT(-3072,-1836),
  0,
  (VTBL_ENTRY)&(_ZTI8S7511C12[0]),
  (VTBL_ENTRY)&_ZN8S7511C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7511C48S7511C12__A2__7S7511C1[] = {
  ABISELECT(-3072,-1836),
  0,
  (VTBL_ENTRY)&(_ZTI7S7511C4[0]),
};
static  VTT_ENTRY vtt_S7511C1[] = {
  {&(_ZTV7S7511C1[10]),  10,56},
  {&(_tg__ZTV7S7511C2__7S7511C1[10]),  10,14},
  {&(_tg__ZTV7S7511C3__7S7511C2__7S7511C1[4]),  4,6},
  {&(_tg__ZTV7S7511C6__7S7511C2__7S7511C1[10]),  10,12},
  {&(_tg__ZTV7S7511C7__7S7511C2__7S7511C1[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__7S7511C2__7S7511C1[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C2__7S7511C1[7]),  7,9},
  {&(_tg__ZTV8S7511C12__7S7511C2__7S7511C1[5]),  5,6},
  {&(_ZTV7S7511C1[18]),  18,56},
  {&(_ZTV7S7511C1[30]),  30,56},
  {&(_ZTV7S7511C1[36]),  36,56},
  {&(_ZTV7S7511C1[41]),  41,56},
  {&(_ZTV7S7511C1[48]),  48,56},
  {&(_ZTV7S7511C1[55]),  55,56},
  {&(_tg__ZTV7S7511C6__7S7511C1[9]),  9,11},
  {&(_tg__ZTV7S7511C7__7S7511C6__7S7511C1[4]),  4,6},
  {&(_tg__ZTV7S7511C4__A1__7S7511C6__7S7511C1[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C6__7S7511C1[7]),  7,9},
  {&(_tg__ZTV7S7511C3__7S7511C6__7S7511C1[4]),  4,6},
  {&(_tg__ZTV8S7511C12__7S7511C6__7S7511C1[5]),  5,6},
  {&(_tg__ZTV7S7511C7__7S7511C1[3]),  3,5},
  {&(_tg__ZTV7S7511C47S7511C7__7S7511C1[3]),  3,3},
  {&(_tg__ZTV7S7511C4__A1__7S7511C1[3]),  3,3},
  {&(_tg__ZTV8S7511C11__7S7511C1[5]),  5,7},
  {&(_tg__ZTV7S7511C3__8S7511C11__7S7511C1[4]),  4,6},
  {&(_tg__ZTV7S7511C4__8S7511C11__7S7511C1[3]),  3,3},
  {&(_tg__ZTV8S7511C12__7S7511C1[4]),  4,5},
  {&(_tg__ZTV7S7511C48S7511C12__A2__7S7511C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7511C1[];
extern  VTBL_ENTRY _ZTV7S7511C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7511C1[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D0Ev,_ZTv0_n16_N7S7511C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D0Ev,_ZThn1892_N7S7511C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C6D1Ev,_ZTv0_n16_N7S7511C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N7S7511C6D1Ev,_ZThn1892_N7S7511C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C2D0Ev,_ZTv0_n16_N7S7511C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn118592_N7S7511C2D0Ev,_ZThn70532_N7S7511C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C2D1Ev,_ZTv0_n16_N7S7511C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn118592_N7S7511C2D1Ev,_ZThn70532_N7S7511C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7511C2D0Ev,_ZTv0_n40_N7S7511C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn115424_N7S7511C2D0Ev,_ZThn68640_N7S7511C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7511C2D1Ev,_ZTv0_n40_N7S7511C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn115424_N7S7511C2D1Ev,_ZThn68640_N7S7511C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C1D0Ev,_ZTv0_n16_N7S7511C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn118592_N7S7511C1D0Ev,_ZThn70532_N7S7511C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7511C1D1Ev,_ZTv0_n16_N7S7511C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn118592_N7S7511C1D1Ev,_ZThn70532_N7S7511C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7511C1D0Ev,_ZTv0_n40_N7S7511C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn115424_N7S7511C1D0Ev,_ZThn68640_N7S7511C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7511C1D1Ev,_ZTv0_n40_N7S7511C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn115424_N7S7511C1D1Ev,_ZThn68640_N7S7511C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7511C1 = {  "S7511C1", // class name
  bases_S7511C1, 14,
  &(vtc_S7511C1[0]), // expected_vtbl_contents
  &(vtt_S7511C1[0]), // expected_vtt_contents
  ABISELECT(127392,75760), // object size
  NSPAIRA(_ZTI7S7511C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7511C1),56, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7511C1),28, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S195C6  {
  int s195c6f0;
  __tsi64 s195c6f1;
  void *s195c6f2[4];
  int s195c6f3[2];
  void *s195c6f4;
  ::S100C8_nt s195c6f5;
  void *s195c6f6[2];
  virtual  ~S195C6(); // _ZN6S195C6D1Ev
  virtual void  v4(); // _ZN6S195C62v4Ev
  virtual void  v5(); // _ZN6S195C62v5Ev
  virtual void  v6(); // _ZN6S195C62v6Ev
  virtual void  v7(); // _ZN6S195C62v7Ev
  virtual void  v8(); // _ZN6S195C62v8Ev
  virtual void  v9(); // _ZN6S195C62v9Ev
  virtual void  v10(); // _ZN6S195C63v10Ev
  virtual void  v11(); // _ZN6S195C63v11Ev
  virtual void  v12(); // _ZN6S195C63v12Ev
  virtual void  v13(); // _ZN6S195C63v13Ev
  virtual void  v14(); // _ZN6S195C63v14Ev
  virtual void  v15(); // _ZN6S195C63v15Ev
  virtual void  v16(); // _ZN6S195C63v16Ev
  virtual void  v17(); // _ZN6S195C63v17Ev
  virtual void  v18(); // _ZN6S195C63v18Ev
  virtual void  v19(); // _ZN6S195C63v19Ev
  virtual void  v20(); // _ZN6S195C63v20Ev
  virtual void  v21(); // _ZN6S195C63v21Ev
  virtual void  v22(); // _ZN6S195C63v22Ev
  virtual void  v23(); // _ZN6S195C63v23Ev
  virtual void  v24(); // _ZN6S195C63v24Ev
  virtual void  v25(); // _ZN6S195C63v25Ev
  virtual void  v26(); // _ZN6S195C63v26Ev
  virtual void  v27(); // _ZN6S195C63v27Ev
  virtual void  v28(); // _ZN6S195C63v28Ev
  virtual void  v29(); // _ZN6S195C63v29Ev
  virtual void  v30(); // _ZN6S195C63v30Ev
  virtual void  v31(); // _ZN6S195C63v31Ev
  virtual void  v32(); // _ZN6S195C63v32Ev
  virtual void  v33(); // _ZN6S195C63v33Ev
  virtual void  v34(); // _ZN6S195C63v34Ev
  virtual void  v35(); // _ZN6S195C63v35Ev
  virtual void  v36(); // _ZN6S195C63v36Ev
  virtual void  v37(); // _ZN6S195C63v37Ev
  virtual void  v38(); // _ZN6S195C63v38Ev
  virtual void  v39(); // _ZN6S195C63v39Ev
  virtual void  v40(); // _ZN6S195C63v40Ev
  virtual void  v41(); // _ZN6S195C63v41Ev
  virtual void  v42(); // _ZN6S195C63v42Ev
  virtual void  v43(); // _ZN6S195C63v43Ev
  virtual void  v44(); // _ZN6S195C63v44Ev
  virtual void  v45(); // _ZN6S195C63v45Ev
  virtual void  v46(); // _ZN6S195C63v46Ev
  virtual void  v47(); // _ZN6S195C63v47Ev
  virtual void  v48(); // _ZN6S195C63v48Ev
  virtual void  v49(); // _ZN6S195C63v49Ev
  virtual void  v50(); // _ZN6S195C63v50Ev
  virtual void  v51(); // _ZN6S195C63v51Ev
  virtual void  v52(); // _ZN6S195C63v52Ev
  virtual void  v53(); // _ZN6S195C63v53Ev
  virtual void  v54(); // _ZN6S195C63v54Ev
  virtual void  v55(); // _ZN6S195C63v55Ev
  virtual void  v56(); // _ZN6S195C63v56Ev
  virtual void  v57(); // _ZN6S195C63v57Ev
  virtual void  v58(); // _ZN6S195C63v58Ev
  virtual void  v59(); // _ZN6S195C63v59Ev
  virtual void  v60(); // _ZN6S195C63v60Ev
  virtual void  v61(); // _ZN6S195C63v61Ev
  virtual void  v62(); // _ZN6S195C63v62Ev
  virtual void  v63(); // _ZN6S195C63v63Ev
  virtual void  v64(); // _ZN6S195C63v64Ev
  virtual void  v65(); // _ZN6S195C63v65Ev
  virtual void  v66(); // _ZN6S195C63v66Ev
  virtual void  v67(); // _ZN6S195C63v67Ev
  S195C6(); // tgen
};
//SIG(-1 S195C6) 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]}


 S195C6 ::~S195C6(){ note_dtor("S195C6", this);}
void  S195C6 ::v4(){vfunc_called(this, "_ZN6S195C62v4Ev");}
void  S195C6 ::v5(){vfunc_called(this, "_ZN6S195C62v5Ev");}
void  S195C6 ::v6(){vfunc_called(this, "_ZN6S195C62v6Ev");}
void  S195C6 ::v7(){vfunc_called(this, "_ZN6S195C62v7Ev");}
void  S195C6 ::v8(){vfunc_called(this, "_ZN6S195C62v8Ev");}
void  S195C6 ::v9(){vfunc_called(this, "_ZN6S195C62v9Ev");}
void  S195C6 ::v10(){vfunc_called(this, "_ZN6S195C63v10Ev");}
void  S195C6 ::v11(){vfunc_called(this, "_ZN6S195C63v11Ev");}
void  S195C6 ::v12(){vfunc_called(this, "_ZN6S195C63v12Ev");}
void  S195C6 ::v13(){vfunc_called(this, "_ZN6S195C63v13Ev");}
void  S195C6 ::v14(){vfunc_called(this, "_ZN6S195C63v14Ev");}
void  S195C6 ::v15(){vfunc_called(this, "_ZN6S195C63v15Ev");}
void  S195C6 ::v16(){vfunc_called(this, "_ZN6S195C63v16Ev");}
void  S195C6 ::v17(){vfunc_called(this, "_ZN6S195C63v17Ev");}
void  S195C6 ::v18(){vfunc_called(this, "_ZN6S195C63v18Ev");}
void  S195C6 ::v19(){vfunc_called(this, "_ZN6S195C63v19Ev");}
void  S195C6 ::v20(){vfunc_called(this, "_ZN6S195C63v20Ev");}
void  S195C6 ::v21(){vfunc_called(this, "_ZN6S195C63v21Ev");}
void  S195C6 ::v22(){vfunc_called(this, "_ZN6S195C63v22Ev");}
void  S195C6 ::v23(){vfunc_called(this, "_ZN6S195C63v23Ev");}
void  S195C6 ::v24(){vfunc_called(this, "_ZN6S195C63v24Ev");}
void  S195C6 ::v25(){vfunc_called(this, "_ZN6S195C63v25Ev");}
void  S195C6 ::v26(){vfunc_called(this, "_ZN6S195C63v26Ev");}
void  S195C6 ::v27(){vfunc_called(this, "_ZN6S195C63v27Ev");}
void  S195C6 ::v28(){vfunc_called(this, "_ZN6S195C63v28Ev");}
void  S195C6 ::v29(){vfunc_called(this, "_ZN6S195C63v29Ev");}
void  S195C6 ::v30(){vfunc_called(this, "_ZN6S195C63v30Ev");}
void  S195C6 ::v31(){vfunc_called(this, "_ZN6S195C63v31Ev");}
void  S195C6 ::v32(){vfunc_called(this, "_ZN6S195C63v32Ev");}
void  S195C6 ::v33(){vfunc_called(this, "_ZN6S195C63v33Ev");}
void  S195C6 ::v34(){vfunc_called(this, "_ZN6S195C63v34Ev");}
void  S195C6 ::v35(){vfunc_called(this, "_ZN6S195C63v35Ev");}
void  S195C6 ::v36(){vfunc_called(this, "_ZN6S195C63v36Ev");}
void  S195C6 ::v37(){vfunc_called(this, "_ZN6S195C63v37Ev");}
void  S195C6 ::v38(){vfunc_called(this, "_ZN6S195C63v38Ev");}
void  S195C6 ::v39(){vfunc_called(this, "_ZN6S195C63v39Ev");}
void  S195C6 ::v40(){vfunc_called(this, "_ZN6S195C63v40Ev");}
void  S195C6 ::v41(){vfunc_called(this, "_ZN6S195C63v41Ev");}
void  S195C6 ::v42(){vfunc_called(this, "_ZN6S195C63v42Ev");}
void  S195C6 ::v43(){vfunc_called(this, "_ZN6S195C63v43Ev");}
void  S195C6 ::v44(){vfunc_called(this, "_ZN6S195C63v44Ev");}
void  S195C6 ::v45(){vfunc_called(this, "_ZN6S195C63v45Ev");}
void  S195C6 ::v46(){vfunc_called(this, "_ZN6S195C63v46Ev");}
void  S195C6 ::v47(){vfunc_called(this, "_ZN6S195C63v47Ev");}
void  S195C6 ::v48(){vfunc_called(this, "_ZN6S195C63v48Ev");}
void  S195C6 ::v49(){vfunc_called(this, "_ZN6S195C63v49Ev");}
void  S195C6 ::v50(){vfunc_called(this, "_ZN6S195C63v50Ev");}
void  S195C6 ::v51(){vfunc_called(this, "_ZN6S195C63v51Ev");}
void  S195C6 ::v52(){vfunc_called(this, "_ZN6S195C63v52Ev");}
void  S195C6 ::v53(){vfunc_called(this, "_ZN6S195C63v53Ev");}
void  S195C6 ::v54(){vfunc_called(this, "_ZN6S195C63v54Ev");}
void  S195C6 ::v55(){vfunc_called(this, "_ZN6S195C63v55Ev");}
void  S195C6 ::v56(){vfunc_called(this, "_ZN6S195C63v56Ev");}
void  S195C6 ::v57(){vfunc_called(this, "_ZN6S195C63v57Ev");}
void  S195C6 ::v58(){vfunc_called(this, "_ZN6S195C63v58Ev");}
void  S195C6 ::v59(){vfunc_called(this, "_ZN6S195C63v59Ev");}
void  S195C6 ::v60(){vfunc_called(this, "_ZN6S195C63v60Ev");}
void  S195C6 ::v61(){vfunc_called(this, "_ZN6S195C63v61Ev");}
void  S195C6 ::v62(){vfunc_called(this, "_ZN6S195C63v62Ev");}
void  S195C6 ::v63(){vfunc_called(this, "_ZN6S195C63v63Ev");}
void  S195C6 ::v64(){vfunc_called(this, "_ZN6S195C63v64Ev");}
void  S195C6 ::v65(){vfunc_called(this, "_ZN6S195C63v65Ev");}
void  S195C6 ::v66(){vfunc_called(this, "_ZN6S195C63v66Ev");}
void  S195C6 ::v67(){vfunc_called(this, "_ZN6S195C63v67Ev");}
S195C6 ::S195C6(){ note_ctor("S195C6", this);} // tgen

static void Test_S195C6()
{
  extern Class_Descriptor cd_S195C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S195C6, buf);
    S195C6 *dp, &lv = *(dp=new (buf) S195C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S195C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S195C6)");
    check_field_offset(lv, s195c6f0, ABISELECT(8,4), "S195C6.s195c6f0");
    check_field_offset(lv, s195c6f1, ABISELECT(16,8), "S195C6.s195c6f1");
    check_field_offset(lv, s195c6f2, ABISELECT(24,16), "S195C6.s195c6f2");
    check_field_offset(lv, s195c6f3, ABISELECT(56,32), "S195C6.s195c6f3");
    check_field_offset(lv, s195c6f4, ABISELECT(64,40), "S195C6.s195c6f4");
    check_field_offset(lv, s195c6f5, ABISELECT(72,44), "S195C6.s195c6f5");
    check_field_offset(lv, s195c6f6, ABISELECT(80,52), "S195C6.s195c6f6");
    test_class_info(&lv, &cd_S195C6);
    dp->~S195C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS195C6(Test_S195C6, "S195C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S195C6C1Ev();
extern void _ZN6S195C6D1Ev();
Name_Map name_map_S195C6[] = {
  NSPAIR(_ZN6S195C6C1Ev),
  NSPAIR(_ZN6S195C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S195C6[];
extern void _ZN6S195C6D1Ev();
extern void _ZN6S195C6D0Ev();
extern void _ZN6S195C62v4Ev();
extern void _ZN6S195C62v5Ev();
extern void _ZN6S195C62v6Ev();
extern void _ZN6S195C62v7Ev();
extern void _ZN6S195C62v8Ev();
extern void _ZN6S195C62v9Ev();
extern void _ZN6S195C63v10Ev();
extern void _ZN6S195C63v11Ev();
extern void _ZN6S195C63v12Ev();
extern void _ZN6S195C63v13Ev();
extern void _ZN6S195C63v14Ev();
extern void _ZN6S195C63v15Ev();
extern void _ZN6S195C63v16Ev();
extern void _ZN6S195C63v17Ev();
extern void _ZN6S195C63v18Ev();
extern void _ZN6S195C63v19Ev();
extern void _ZN6S195C63v20Ev();
extern void _ZN6S195C63v21Ev();
extern void _ZN6S195C63v22Ev();
extern void _ZN6S195C63v23Ev();
extern void _ZN6S195C63v24Ev();
extern void _ZN6S195C63v25Ev();
extern void _ZN6S195C63v26Ev();
extern void _ZN6S195C63v27Ev();
extern void _ZN6S195C63v28Ev();
extern void _ZN6S195C63v29Ev();
extern void _ZN6S195C63v30Ev();
extern void _ZN6S195C63v31Ev();
extern void _ZN6S195C63v32Ev();
extern void _ZN6S195C63v33Ev();
extern void _ZN6S195C63v34Ev();
extern void _ZN6S195C63v35Ev();
extern void _ZN6S195C63v36Ev();
extern void _ZN6S195C63v37Ev();
extern void _ZN6S195C63v38Ev();
extern void _ZN6S195C63v39Ev();
extern void _ZN6S195C63v40Ev();
extern void _ZN6S195C63v41Ev();
extern void _ZN6S195C63v42Ev();
extern void _ZN6S195C63v43Ev();
extern void _ZN6S195C63v44Ev();
extern void _ZN6S195C63v45Ev();
extern void _ZN6S195C63v46Ev();
extern void _ZN6S195C63v47Ev();
extern void _ZN6S195C63v48Ev();
extern void _ZN6S195C63v49Ev();
extern void _ZN6S195C63v50Ev();
extern void _ZN6S195C63v51Ev();
extern void _ZN6S195C63v52Ev();
extern void _ZN6S195C63v53Ev();
extern void _ZN6S195C63v54Ev();
extern void _ZN6S195C63v55Ev();
extern void _ZN6S195C63v56Ev();
extern void _ZN6S195C63v57Ev();
extern void _ZN6S195C63v58Ev();
extern void _ZN6S195C63v59Ev();
extern void _ZN6S195C63v60Ev();
extern void _ZN6S195C63v61Ev();
extern void _ZN6S195C63v62Ev();
extern void _ZN6S195C63v63Ev();
extern void _ZN6S195C63v64Ev();
extern void _ZN6S195C63v65Ev();
extern void _ZN6S195C63v66Ev();
extern void _ZN6S195C63v67Ev();
static  VTBL_ENTRY vtc_S195C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S195C6[0]),
  (VTBL_ENTRY)&_ZN6S195C6D1Ev,
  (VTBL_ENTRY)&_ZN6S195C6D0Ev,
  (VTBL_ENTRY)&_ZN6S195C62v4Ev,
  (VTBL_ENTRY)&_ZN6S195C62v5Ev,
  (VTBL_ENTRY)&_ZN6S195C62v6Ev,
  (VTBL_ENTRY)&_ZN6S195C62v7Ev,
  (VTBL_ENTRY)&_ZN6S195C62v8Ev,
  (VTBL_ENTRY)&_ZN6S195C62v9Ev,
  (VTBL_ENTRY)&_ZN6S195C63v10Ev,
  (VTBL_ENTRY)&_ZN6S195C63v11Ev,
  (VTBL_ENTRY)&_ZN6S195C63v12Ev,
  (VTBL_ENTRY)&_ZN6S195C63v13Ev,
  (VTBL_ENTRY)&_ZN6S195C63v14Ev,
  (VTBL_ENTRY)&_ZN6S195C63v15Ev,
  (VTBL_ENTRY)&_ZN6S195C63v16Ev,
  (VTBL_ENTRY)&_ZN6S195C63v17Ev,
  (VTBL_ENTRY)&_ZN6S195C63v18Ev,
  (VTBL_ENTRY)&_ZN6S195C63v19Ev,
  (VTBL_ENTRY)&_ZN6S195C63v20Ev,
  (VTBL_ENTRY)&_ZN6S195C63v21Ev,
  (VTBL_ENTRY)&_ZN6S195C63v22Ev,
  (VTBL_ENTRY)&_ZN6S195C63v23Ev,
  (VTBL_ENTRY)&_ZN6S195C63v24Ev,
  (VTBL_ENTRY)&_ZN6S195C63v25Ev,
  (VTBL_ENTRY)&_ZN6S195C63v26Ev,
  (VTBL_ENTRY)&_ZN6S195C63v27Ev,
  (VTBL_ENTRY)&_ZN6S195C63v28Ev,
  (VTBL_ENTRY)&_ZN6S195C63v29Ev,
  (VTBL_ENTRY)&_ZN6S195C63v30Ev,
  (VTBL_ENTRY)&_ZN6S195C63v31Ev,
  (VTBL_ENTRY)&_ZN6S195C63v32Ev,
  (VTBL_ENTRY)&_ZN6S195C63v33Ev,
  (VTBL_ENTRY)&_ZN6S195C63v34Ev,
  (VTBL_ENTRY)&_ZN6S195C63v35Ev,
  (VTBL_ENTRY)&_ZN6S195C63v36Ev,
  (VTBL_ENTRY)&_ZN6S195C63v37Ev,
  (VTBL_ENTRY)&_ZN6S195C63v38Ev,
  (VTBL_ENTRY)&_ZN6S195C63v39Ev,
  (VTBL_ENTRY)&_ZN6S195C63v40Ev,
  (VTBL_ENTRY)&_ZN6S195C63v41Ev,
  (VTBL_ENTRY)&_ZN6S195C63v42Ev,
  (VTBL_ENTRY)&_ZN6S195C63v43Ev,
  (VTBL_ENTRY)&_ZN6S195C63v44Ev,
  (VTBL_ENTRY)&_ZN6S195C63v45Ev,
  (VTBL_ENTRY)&_ZN6S195C63v46Ev,
  (VTBL_ENTRY)&_ZN6S195C63v47Ev,
  (VTBL_ENTRY)&_ZN6S195C63v48Ev,
  (VTBL_ENTRY)&_ZN6S195C63v49Ev,
  (VTBL_ENTRY)&_ZN6S195C63v50Ev,
  (VTBL_ENTRY)&_ZN6S195C63v51Ev,
  (VTBL_ENTRY)&_ZN6S195C63v52Ev,
  (VTBL_ENTRY)&_ZN6S195C63v53Ev,
  (VTBL_ENTRY)&_ZN6S195C63v54Ev,
  (VTBL_ENTRY)&_ZN6S195C63v55Ev,
  (VTBL_ENTRY)&_ZN6S195C63v56Ev,
  (VTBL_ENTRY)&_ZN6S195C63v57Ev,
  (VTBL_ENTRY)&_ZN6S195C63v58Ev,
  (VTBL_ENTRY)&_ZN6S195C63v59Ev,
  (VTBL_ENTRY)&_ZN6S195C63v60Ev,
  (VTBL_ENTRY)&_ZN6S195C63v61Ev,
  (VTBL_ENTRY)&_ZN6S195C63v62Ev,
  (VTBL_ENTRY)&_ZN6S195C63v63Ev,
  (VTBL_ENTRY)&_ZN6S195C63v64Ev,
  (VTBL_ENTRY)&_ZN6S195C63v65Ev,
  (VTBL_ENTRY)&_ZN6S195C63v66Ev,
  (VTBL_ENTRY)&_ZN6S195C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S195C6[];
extern  VTBL_ENTRY _ZTV6S195C6[];
Class_Descriptor cd_S195C6 = {  "S195C6", // class name
  0,0,//no base classes
  &(vtc_S195C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S195C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S195C6),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  S195C5_nt  : S195C6 {
  int s195c5f0[2];
  void *s195c5f1;
  int s195c5f2[2];
  ::S100C39_nt s195c5f3;
  ::S100C39_nt s195c5f4;
  ::S2382C30 s195c5f5;
  ::S100C39_nt s195c5f6;
  unsigned int s195c5f7:1;
  unsigned int s195c5f8:1;
  unsigned int s195c5f9:1;
  unsigned int s195c5f10:1;
  unsigned int s195c5f11:1;
  int s195c5f12[2];
  virtual  ~S195C5_nt(); // _ZN9S195C5_ntD1Ev
  virtual void  v68(); // _ZN9S195C5_nt3v68Ev
  virtual void  v69(); // _ZN9S195C5_nt3v69Ev
  virtual void  v70(); // _ZN9S195C5_nt3v70Ev
  virtual void  v71(); // _ZN9S195C5_nt3v71Ev
  virtual void  v72(); // _ZN9S195C5_nt3v72Ev
  virtual void  v73(); // _ZN9S195C5_nt3v73Ev
  virtual void  v74(); // _ZN9S195C5_nt3v74Ev
  virtual void  v75(); // _ZN9S195C5_nt3v75Ev
  virtual void  v76(); // _ZN9S195C5_nt3v76Ev
  virtual void  v77(); // _ZN9S195C5_nt3v77Ev
  virtual void  v78(); // _ZN9S195C5_nt3v78Ev
  virtual void  v79(); // _ZN9S195C5_nt3v79Ev
  virtual void  v80(); // _ZN9S195C5_nt3v80Ev
  virtual void  v81(); // _ZN9S195C5_nt3v81Ev
  virtual void  v82(); // _ZN9S195C5_nt3v82Ev
  virtual void  v83(); // _ZN9S195C5_nt3v83Ev
  virtual void  v84(); // _ZN9S195C5_nt3v84Ev
  virtual void  v85(); // _ZN9S195C5_nt3v85Ev
  virtual void  v86(); // _ZN9S195C5_nt3v86Ev
  virtual void  v87(); // _ZN9S195C5_nt3v87Ev
  virtual void  v88(); // _ZN9S195C5_nt3v88Ev
  virtual void  v89(); // _ZN9S195C5_nt3v89Ev
  S195C5_nt(); // tgen
};
//SIG(-1 S195C5_nt) C1{ BC2{ vd 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 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 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S195C5_nt ::~S195C5_nt(){ note_dtor("S195C5_nt", this);}
void  S195C5_nt ::v68(){vfunc_called(this, "_ZN9S195C5_nt3v68Ev");}
void  S195C5_nt ::v69(){vfunc_called(this, "_ZN9S195C5_nt3v69Ev");}
void  S195C5_nt ::v70(){vfunc_called(this, "_ZN9S195C5_nt3v70Ev");}
void  S195C5_nt ::v71(){vfunc_called(this, "_ZN9S195C5_nt3v71Ev");}
void  S195C5_nt ::v72(){vfunc_called(this, "_ZN9S195C5_nt3v72Ev");}
void  S195C5_nt ::v73(){vfunc_called(this, "_ZN9S195C5_nt3v73Ev");}
void  S195C5_nt ::v74(){vfunc_called(this, "_ZN9S195C5_nt3v74Ev");}
void  S195C5_nt ::v75(){vfunc_called(this, "_ZN9S195C5_nt3v75Ev");}
void  S195C5_nt ::v76(){vfunc_called(this, "_ZN9S195C5_nt3v76Ev");}
void  S195C5_nt ::v77(){vfunc_called(this, "_ZN9S195C5_nt3v77Ev");}
void  S195C5_nt ::v78(){vfunc_called(this, "_ZN9S195C5_nt3v78Ev");}
void  S195C5_nt ::v79(){vfunc_called(this, "_ZN9S195C5_nt3v79Ev");}
void  S195C5_nt ::v80(){vfunc_called(this, "_ZN9S195C5_nt3v80Ev");}
void  S195C5_nt ::v81(){vfunc_called(this, "_ZN9S195C5_nt3v81Ev");}
void  S195C5_nt ::v82(){vfunc_called(this, "_ZN9S195C5_nt3v82Ev");}
void  S195C5_nt ::v83(){vfunc_called(this, "_ZN9S195C5_nt3v83Ev");}
void  S195C5_nt ::v84(){vfunc_called(this, "_ZN9S195C5_nt3v84Ev");}
void  S195C5_nt ::v85(){vfunc_called(this, "_ZN9S195C5_nt3v85Ev");}
void  S195C5_nt ::v86(){vfunc_called(this, "_ZN9S195C5_nt3v86Ev");}
void  S195C5_nt ::v87(){vfunc_called(this, "_ZN9S195C5_nt3v87Ev");}
void  S195C5_nt ::v88(){vfunc_called(this, "_ZN9S195C5_nt3v88Ev");}
void  S195C5_nt ::v89(){vfunc_called(this, "_ZN9S195C5_nt3v89Ev");}
S195C5_nt ::S195C5_nt(){ note_ctor("S195C5_nt", this);} // tgen

//skip512 S195C5_nt

#else // __cplusplus

extern void _ZN9S195C5_ntC1Ev();
extern void _ZN9S195C5_ntD1Ev();
Name_Map name_map_S195C5_nt[] = {
  NSPAIR(_ZN9S195C5_ntC1Ev),
  NSPAIR(_ZN9S195C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S195C6;
extern VTBL_ENTRY _ZTI6S195C6[];
extern  VTBL_ENTRY _ZTV6S195C6[];
static Base_Class bases_S195C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S195C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S195C5_nt[];
extern void _ZN9S195C5_ntD1Ev();
extern void _ZN9S195C5_ntD0Ev();
extern void _ZN6S195C62v4Ev();
extern void _ZN6S195C62v5Ev();
extern void _ZN6S195C62v6Ev();
extern void _ZN6S195C62v7Ev();
extern void _ZN6S195C62v8Ev();
extern void _ZN6S195C62v9Ev();
extern void _ZN6S195C63v10Ev();
extern void _ZN6S195C63v11Ev();
extern void _ZN6S195C63v12Ev();
extern void _ZN6S195C63v13Ev();
extern void _ZN6S195C63v14Ev();
extern void _ZN6S195C63v15Ev();
extern void _ZN6S195C63v16Ev();
extern void _ZN6S195C63v17Ev();
extern void _ZN6S195C63v18Ev();
extern void _ZN6S195C63v19Ev();
extern void _ZN6S195C63v20Ev();
extern void _ZN6S195C63v21Ev();
extern void _ZN6S195C63v22Ev();
extern void _ZN6S195C63v23Ev();
extern void _ZN6S195C63v24Ev();
extern void _ZN6S195C63v25Ev();
extern void _ZN6S195C63v26Ev();
extern void _ZN6S195C63v27Ev();
extern void _ZN6S195C63v28Ev();
extern void _ZN6S195C63v29Ev();
extern void _ZN6S195C63v30Ev();
extern void _ZN6S195C63v31Ev();
extern void _ZN6S195C63v32Ev();
extern void _ZN6S195C63v33Ev();
extern void _ZN6S195C63v34Ev();
extern void _ZN6S195C63v35Ev();
extern void _ZN6S195C63v36Ev();
extern void _ZN6S195C63v37Ev();
extern void _ZN6S195C63v38Ev();
extern void _ZN6S195C63v39Ev();
extern void _ZN6S195C63v40Ev();
extern void _ZN6S195C63v41Ev();
extern void _ZN6S195C63v42Ev();
extern void _ZN6S195C63v43Ev();
extern void _ZN6S195C63v44Ev();
extern void _ZN6S195C63v45Ev();
extern void _ZN6S195C63v46Ev();
extern void _ZN6S195C63v47Ev();
extern void _ZN6S195C63v48Ev();
extern void _ZN6S195C63v49Ev();
extern void _ZN6S195C63v50Ev();
extern void _ZN6S195C63v51Ev();
extern void _ZN6S195C63v52Ev();
extern void _ZN6S195C63v53Ev();
extern void _ZN6S195C63v54Ev();
extern void _ZN6S195C63v55Ev();
extern void _ZN6S195C63v56Ev();
extern void _ZN6S195C63v57Ev();
extern void _ZN6S195C63v58Ev();
extern void _ZN6S195C63v59Ev();
extern void _ZN6S195C63v60Ev();
extern void _ZN6S195C63v61Ev();
extern void _ZN6S195C63v62Ev();
extern void _ZN6S195C63v63Ev();
extern void _ZN6S195C63v64Ev();
extern void _ZN6S195C63v65Ev();
extern void _ZN6S195C63v66Ev();
extern void _ZN6S195C63v67Ev();
extern void _ZN9S195C5_nt3v68Ev();
extern void _ZN9S195C5_nt3v69Ev();
extern void _ZN9S195C5_nt3v70Ev();
extern void _ZN9S195C5_nt3v71Ev();
extern void _ZN9S195C5_nt3v72Ev();
extern void _ZN9S195C5_nt3v73Ev();
extern void _ZN9S195C5_nt3v74Ev();
extern void _ZN9S195C5_nt3v75Ev();
extern void _ZN9S195C5_nt3v76Ev();
extern void _ZN9S195C5_nt3v77Ev();
extern void _ZN9S195C5_nt3v78Ev();
extern void _ZN9S195C5_nt3v79Ev();
extern void _ZN9S195C5_nt3v80Ev();
extern void _ZN9S195C5_nt3v81Ev();
extern void _ZN9S195C5_nt3v82Ev();
extern void _ZN9S195C5_nt3v83Ev();
extern void _ZN9S195C5_nt3v84Ev();
extern void _ZN9S195C5_nt3v85Ev();
extern void _ZN9S195C5_nt3v86Ev();
extern void _ZN9S195C5_nt3v87Ev();
extern void _ZN9S195C5_nt3v88Ev();
extern void _ZN9S195C5_nt3v89Ev();
static  VTBL_ENTRY vtc_S195C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S195C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S195C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S195C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S195C62v4Ev,
  (VTBL_ENTRY)&_ZN6S195C62v5Ev,
  (VTBL_ENTRY)&_ZN6S195C62v6Ev,
  (VTBL_ENTRY)&_ZN6S195C62v7Ev,
  (VTBL_ENTRY)&_ZN6S195C62v8Ev,
  (VTBL_ENTRY)&_ZN6S195C62v9Ev,
  (VTBL_ENTRY)&_ZN6S195C63v10Ev,
  (VTBL_ENTRY)&_ZN6S195C63v11Ev,
  (VTBL_ENTRY)&_ZN6S195C63v12Ev,
  (VTBL_ENTRY)&_ZN6S195C63v13Ev,
  (VTBL_ENTRY)&_ZN6S195C63v14Ev,
  (VTBL_ENTRY)&_ZN6S195C63v15Ev,
  (VTBL_ENTRY)&_ZN6S195C63v16Ev,
  (VTBL_ENTRY)&_ZN6S195C63v17Ev,
  (VTBL_ENTRY)&_ZN6S195C63v18Ev,
  (VTBL_ENTRY)&_ZN6S195C63v19Ev,
  (VTBL_ENTRY)&_ZN6S195C63v20Ev,
  (VTBL_ENTRY)&_ZN6S195C63v21Ev,
  (VTBL_ENTRY)&_ZN6S195C63v22Ev,
  (VTBL_ENTRY)&_ZN6S195C63v23Ev,
  (VTBL_ENTRY)&_ZN6S195C63v24Ev,
  (VTBL_ENTRY)&_ZN6S195C63v25Ev,
  (VTBL_ENTRY)&_ZN6S195C63v26Ev,
  (VTBL_ENTRY)&_ZN6S195C63v27Ev,
  (VTBL_ENTRY)&_ZN6S195C63v28Ev,
  (VTBL_ENTRY)&_ZN6S195C63v29Ev,
  (VTBL_ENTRY)&_ZN6S195C63v30Ev,
  (VTBL_ENTRY)&_ZN6S195C63v31Ev,
  (VTBL_ENTRY)&_ZN6S195C63v32Ev,
  (VTBL_ENTRY)&_ZN6S195C63v33Ev,
  (VTBL_ENTRY)&_ZN6S195C63v34Ev,
  (VTBL_ENTRY)&_ZN6S195C63v35Ev,
  (VTBL_ENTRY)&_ZN6S195C63v36Ev,
  (VTBL_ENTRY)&_ZN6S195C63v37Ev,
  (VTBL_ENTRY)&_ZN6S195C63v38Ev,
  (VTBL_ENTRY)&_ZN6S195C63v39Ev,
  (VTBL_ENTRY)&_ZN6S195C63v40Ev,
  (VTBL_ENTRY)&_ZN6S195C63v41Ev,
  (VTBL_ENTRY)&_ZN6S195C63v42Ev,
  (VTBL_ENTRY)&_ZN6S195C63v43Ev,
  (VTBL_ENTRY)&_ZN6S195C63v44Ev,
  (VTBL_ENTRY)&_ZN6S195C63v45Ev,
  (VTBL_ENTRY)&_ZN6S195C63v46Ev,
  (VTBL_ENTRY)&_ZN6S195C63v47Ev,
  (VTBL_ENTRY)&_ZN6S195C63v48Ev,
  (VTBL_ENTRY)&_ZN6S195C63v49Ev,
  (VTBL_ENTRY)&_ZN6S195C63v50Ev,
  (VTBL_ENTRY)&_ZN6S195C63v51Ev,
  (VTBL_ENTRY)&_ZN6S195C63v52Ev,
  (VTBL_ENTRY)&_ZN6S195C63v53Ev,
  (VTBL_ENTRY)&_ZN6S195C63v54Ev,
  (VTBL_ENTRY)&_ZN6S195C63v55Ev,
  (VTBL_ENTRY)&_ZN6S195C63v56Ev,
  (VTBL_ENTRY)&_ZN6S195C63v57Ev,
  (VTBL_ENTRY)&_ZN6S195C63v58Ev,
  (VTBL_ENTRY)&_ZN6S195C63v59Ev,
  (VTBL_ENTRY)&_ZN6S195C63v60Ev,
  (VTBL_ENTRY)&_ZN6S195C63v61Ev,
  (VTBL_ENTRY)&_ZN6S195C63v62Ev,
  (VTBL_ENTRY)&_ZN6S195C63v63Ev,
  (VTBL_ENTRY)&_ZN6S195C63v64Ev,
  (VTBL_ENTRY)&_ZN6S195C63v65Ev,
  (VTBL_ENTRY)&_ZN6S195C63v66Ev,
  (VTBL_ENTRY)&_ZN6S195C63v67Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI9S195C5_nt[];
VTBL_ENTRY *P__ZTI9S195C5_nt = _ZTI9S195C5_nt; 
extern  VTBL_ENTRY _ZTV9S195C5_nt[];
Class_Descriptor cd_S195C5_nt = {  "S195C5_nt", // class name
  bases_S195C5_nt, 1,
  &(vtc_S195C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S195C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S195C5_nt),90, //virtual function table var
  2, // 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  S195C4_nt  : S195C5_nt {
  unsigned int s195c4f0:1;
  unsigned int s195c4f1:1;
  unsigned int s195c4f2:1;
  ::S100C44 s195c4f3;
  ::S100C40 s195c4f4;
  ::S100C19 s195c4f5;
  ::S100C15 s195c4f6;
  int s195c4f7[3];
  virtual  ~S195C4_nt(); // _ZN9S195C4_ntD1Ev
  virtual void  v90(); // _ZN9S195C4_nt3v90Ev
  virtual void  v91(); // _ZN9S195C4_nt3v91Ev
  virtual void  v92(); // _ZN9S195C4_nt3v92Ev
  virtual void  v93(); // _ZN9S195C4_nt3v93Ev
  virtual void  v94(); // _ZN9S195C4_nt3v94Ev
  virtual void  v95(); // _ZN9S195C4_nt3v95Ev
  virtual void  v96(); // _ZN9S195C4_nt3v96Ev
  virtual void  v97(); // _ZN9S195C4_nt3v97Ev
  virtual void  v98(); // _ZN9S195C4_nt3v98Ev
  virtual void  v99(); // _ZN9S195C4_nt3v99Ev
  virtual void  v100(); // _ZN9S195C4_nt4v100Ev
  virtual void  v101(); // _ZN9S195C4_nt4v101Ev
  virtual void  v102(); // _ZN9S195C4_nt4v102Ev
  virtual void  v103(); // _ZN9S195C4_nt4v103Ev
  virtual void  v104(); // _ZN9S195C4_nt4v104Ev
  virtual void  v105(); // _ZN9S195C4_nt4v105Ev
  virtual void  v106(); // _ZN9S195C4_nt4v106Ev
  virtual void  v107(); // _ZN9S195C4_nt4v107Ev
  virtual void  v108(); // _ZN9S195C4_nt4v108Ev
  virtual void  v109(); // _ZN9S195C4_nt4v109Ev
  S195C4_nt(); // tgen
};
//SIG(-1 S195C4_nt) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[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 FC10{ BC11{ BC8}} FC6 FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} Fi[3]}


 S195C4_nt ::~S195C4_nt(){ note_dtor("S195C4_nt", this);}
void  S195C4_nt ::v90(){vfunc_called(this, "_ZN9S195C4_nt3v90Ev");}
void  S195C4_nt ::v91(){vfunc_called(this, "_ZN9S195C4_nt3v91Ev");}
void  S195C4_nt ::v92(){vfunc_called(this, "_ZN9S195C4_nt3v92Ev");}
void  S195C4_nt ::v93(){vfunc_called(this, "_ZN9S195C4_nt3v93Ev");}
void  S195C4_nt ::v94(){vfunc_called(this, "_ZN9S195C4_nt3v94Ev");}
void  S195C4_nt ::v95(){vfunc_called(this, "_ZN9S195C4_nt3v95Ev");}
void  S195C4_nt ::v96(){vfunc_called(this, "_ZN9S195C4_nt3v96Ev");}
void  S195C4_nt ::v97(){vfunc_called(this, "_ZN9S195C4_nt3v97Ev");}
void  S195C4_nt ::v98(){vfunc_called(this, "_ZN9S195C4_nt3v98Ev");}
void  S195C4_nt ::v99(){vfunc_called(this, "_ZN9S195C4_nt3v99Ev");}
void  S195C4_nt ::v100(){vfunc_called(this, "_ZN9S195C4_nt4v100Ev");}
void  S195C4_nt ::v101(){vfunc_called(this, "_ZN9S195C4_nt4v101Ev");}
void  S195C4_nt ::v102(){vfunc_called(this, "_ZN9S195C4_nt4v102Ev");}
void  S195C4_nt ::v103(){vfunc_called(this, "_ZN9S195C4_nt4v103Ev");}
void  S195C4_nt ::v104(){vfunc_called(this, "_ZN9S195C4_nt4v104Ev");}
void  S195C4_nt ::v105(){vfunc_called(this, "_ZN9S195C4_nt4v105Ev");}
void  S195C4_nt ::v106(){vfunc_called(this, "_ZN9S195C4_nt4v106Ev");}
void  S195C4_nt ::v107(){vfunc_called(this, "_ZN9S195C4_nt4v107Ev");}
void  S195C4_nt ::v108(){vfunc_called(this, "_ZN9S195C4_nt4v108Ev");}
void  S195C4_nt ::v109(){vfunc_called(this, "_ZN9S195C4_nt4v109Ev");}
S195C4_nt ::S195C4_nt(){ note_ctor("S195C4_nt", this);} // tgen

//skip512 S195C4_nt

#else // __cplusplus

extern void _ZN9S195C4_ntC1Ev();
extern void _ZN9S195C4_ntD1Ev();
Name_Map name_map_S195C4_nt[] = {
  NSPAIR(_ZN9S195C4_ntC1Ev),
  NSPAIR(_ZN9S195C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S195C6;
extern VTBL_ENTRY _ZTI6S195C6[];
extern  VTBL_ENTRY _ZTV6S195C6[];
extern Class_Descriptor cd_S195C5_nt;
extern VTBL_ENTRY _ZTI9S195C5_nt[];
extern  VTBL_ENTRY _ZTV9S195C5_nt[];
static Base_Class bases_S195C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S195C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S195C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S195C4_nt[];
extern void _ZN9S195C4_ntD1Ev();
extern void _ZN9S195C4_ntD0Ev();
extern void _ZN6S195C62v4Ev();
extern void _ZN6S195C62v5Ev();
extern void _ZN6S195C62v6Ev();
extern void _ZN6S195C62v7Ev();
extern void _ZN6S195C62v8Ev();
extern void _ZN6S195C62v9Ev();
extern void _ZN6S195C63v10Ev();
extern void _ZN6S195C63v11Ev();
extern void _ZN6S195C63v12Ev();
extern void _ZN6S195C63v13Ev();
extern void _ZN6S195C63v14Ev();
extern void _ZN6S195C63v15Ev();
extern void _ZN6S195C63v16Ev();
extern void _ZN6S195C63v17Ev();
extern void _ZN6S195C63v18Ev();
extern void _ZN6S195C63v19Ev();
extern void _ZN6S195C63v20Ev();
extern void _ZN6S195C63v21Ev();
extern void _ZN6S195C63v22Ev();
extern void _ZN6S195C63v23Ev();
extern void _ZN6S195C63v24Ev();
extern void _ZN6S195C63v25Ev();
extern void _ZN6S195C63v26Ev();
extern void _ZN6S195C63v27Ev();
extern void _ZN6S195C63v28Ev();
extern void _ZN6S195C63v29Ev();
extern void _ZN6S195C63v30Ev();
extern void _ZN6S195C63v31Ev();
extern void _ZN6S195C63v32Ev();
extern void _ZN6S195C63v33Ev();
extern void _ZN6S195C63v34Ev();
extern void _ZN6S195C63v35Ev();
extern void _ZN6S195C63v36Ev();
extern void _ZN6S195C63v37Ev();
extern void _ZN6S195C63v38Ev();
extern void _ZN6S195C63v39Ev();
extern void _ZN6S195C63v40Ev();
extern void _ZN6S195C63v41Ev();
extern void _ZN6S195C63v42Ev();
extern void _ZN6S195C63v43Ev();
extern void _ZN6S195C63v44Ev();
extern void _ZN6S195C63v45Ev();
extern void _ZN6S195C63v46Ev();
extern void _ZN6S195C63v47Ev();
extern void _ZN6S195C63v48Ev();
extern void _ZN6S195C63v49Ev();
extern void _ZN6S195C63v50Ev();
extern void _ZN6S195C63v51Ev();
extern void _ZN6S195C63v52Ev();
extern void _ZN6S195C63v53Ev();
extern void _ZN6S195C63v54Ev();
extern void _ZN6S195C63v55Ev();
extern void _ZN6S195C63v56Ev();
extern void _ZN6S195C63v57Ev();
extern void _ZN6S195C63v58Ev();
extern void _ZN6S195C63v59Ev();
extern void _ZN6S195C63v60Ev();
extern void _ZN6S195C63v61Ev();
extern void _ZN6S195C63v62Ev();
extern void _ZN6S195C63v63Ev();
extern void _ZN6S195C63v64Ev();
extern void _ZN6S195C63v65Ev();
extern void _ZN6S195C63v66Ev();
extern void _ZN6S195C63v67Ev();
extern void _ZN9S195C5_nt3v68Ev();
extern void _ZN9S195C5_nt3v69Ev();
extern void _ZN9S195C5_nt3v70Ev();
extern void _ZN9S195C5_nt3v71Ev();
extern void _ZN9S195C5_nt3v72Ev();
extern void _ZN9S195C5_nt3v73Ev();
extern void _ZN9S195C5_nt3v74Ev();
extern void _ZN9S195C5_nt3v75Ev();
extern void _ZN9S195C5_nt3v76Ev();
extern void _ZN9S195C5_nt3v77Ev();
extern void _ZN9S195C5_nt3v78Ev();
extern void _ZN9S195C5_nt3v79Ev();
extern void _ZN9S195C5_nt3v80Ev();
extern void _ZN9S195C5_nt3v81Ev();
extern void _ZN9S195C5_nt3v82Ev();
extern void _ZN9S195C5_nt3v83Ev();
extern void _ZN9S195C5_nt3v84Ev();
extern void _ZN9S195C5_nt3v85Ev();
extern void _ZN9S195C5_nt3v86Ev();
extern void _ZN9S195C5_nt3v87Ev();
extern void _ZN9S195C5_nt3v88Ev();
extern void _ZN9S195C5_nt3v89Ev();
extern void _ZN9S195C4_nt3v90Ev();
extern void _ZN9S195C4_nt3v91Ev();
extern void _ZN9S195C4_nt3v92Ev();
extern void _ZN9S195C4_nt3v93Ev();
extern void _ZN9S195C4_nt3v94Ev();
extern void _ZN9S195C4_nt3v95Ev();
extern void _ZN9S195C4_nt3v96Ev();
extern void _ZN9S195C4_nt3v97Ev();
extern void _ZN9S195C4_nt3v98Ev();
extern void _ZN9S195C4_nt3v99Ev();
extern void _ZN9S195C4_nt4v100Ev();
extern void _ZN9S195C4_nt4v101Ev();
extern void _ZN9S195C4_nt4v102Ev();
extern void _ZN9S195C4_nt4v103Ev();
extern void _ZN9S195C4_nt4v104Ev();
extern void _ZN9S195C4_nt4v105Ev();
extern void _ZN9S195C4_nt4v106Ev();
extern void _ZN9S195C4_nt4v107Ev();
extern void _ZN9S195C4_nt4v108Ev();
extern void _ZN9S195C4_nt4v109Ev();
static  VTBL_ENTRY vtc_S195C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S195C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S195C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S195C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S195C62v4Ev,
  (VTBL_ENTRY)&_ZN6S195C62v5Ev,
  (VTBL_ENTRY)&_ZN6S195C62v6Ev,
  (VTBL_ENTRY)&_ZN6S195C62v7Ev,
  (VTBL_ENTRY)&_ZN6S195C62v8Ev,
  (VTBL_ENTRY)&_ZN6S195C62v9Ev,
  (VTBL_ENTRY)&_ZN6S195C63v10Ev,
  (VTBL_ENTRY)&_ZN6S195C63v11Ev,
  (VTBL_ENTRY)&_ZN6S195C63v12Ev,
  (VTBL_ENTRY)&_ZN6S195C63v13Ev,
  (VTBL_ENTRY)&_ZN6S195C63v14Ev,
  (VTBL_ENTRY)&_ZN6S195C63v15Ev,
  (VTBL_ENTRY)&_ZN6S195C63v16Ev,
  (VTBL_ENTRY)&_ZN6S195C63v17Ev,
  (VTBL_ENTRY)&_ZN6S195C63v18Ev,
  (VTBL_ENTRY)&_ZN6S195C63v19Ev,
  (VTBL_ENTRY)&_ZN6S195C63v20Ev,
  (VTBL_ENTRY)&_ZN6S195C63v21Ev,
  (VTBL_ENTRY)&_ZN6S195C63v22Ev,
  (VTBL_ENTRY)&_ZN6S195C63v23Ev,
  (VTBL_ENTRY)&_ZN6S195C63v24Ev,
  (VTBL_ENTRY)&_ZN6S195C63v25Ev,
  (VTBL_ENTRY)&_ZN6S195C63v26Ev,
  (VTBL_ENTRY)&_ZN6S195C63v27Ev,
  (VTBL_ENTRY)&_ZN6S195C63v28Ev,
  (VTBL_ENTRY)&_ZN6S195C63v29Ev,
  (VTBL_ENTRY)&_ZN6S195C63v30Ev,
  (VTBL_ENTRY)&_ZN6S195C63v31Ev,
  (VTBL_ENTRY)&_ZN6S195C63v32Ev,
  (VTBL_ENTRY)&_ZN6S195C63v33Ev,
  (VTBL_ENTRY)&_ZN6S195C63v34Ev,
  (VTBL_ENTRY)&_ZN6S195C63v35Ev,
  (VTBL_ENTRY)&_ZN6S195C63v36Ev,
  (VTBL_ENTRY)&_ZN6S195C63v37Ev,
  (VTBL_ENTRY)&_ZN6S195C63v38Ev,
  (VTBL_ENTRY)&_ZN6S195C63v39Ev,
  (VTBL_ENTRY)&_ZN6S195C63v40Ev,
  (VTBL_ENTRY)&_ZN6S195C63v41Ev,
  (VTBL_ENTRY)&_ZN6S195C63v42Ev,
  (VTBL_ENTRY)&_ZN6S195C63v43Ev,
  (VTBL_ENTRY)&_ZN6S195C63v44Ev,
  (VTBL_ENTRY)&_ZN6S195C63v45Ev,
  (VTBL_ENTRY)&_ZN6S195C63v46Ev,
  (VTBL_ENTRY)&_ZN6S195C63v47Ev,
  (VTBL_ENTRY)&_ZN6S195C63v48Ev,
  (VTBL_ENTRY)&_ZN6S195C63v49Ev,
  (VTBL_ENTRY)&_ZN6S195C63v50Ev,
  (VTBL_ENTRY)&_ZN6S195C63v51Ev,
  (VTBL_ENTRY)&_ZN6S195C63v52Ev,
  (VTBL_ENTRY)&_ZN6S195C63v53Ev,
  (VTBL_ENTRY)&_ZN6S195C63v54Ev,
  (VTBL_ENTRY)&_ZN6S195C63v55Ev,
  (VTBL_ENTRY)&_ZN6S195C63v56Ev,
  (VTBL_ENTRY)&_ZN6S195C63v57Ev,
  (VTBL_ENTRY)&_ZN6S195C63v58Ev,
  (VTBL_ENTRY)&_ZN6S195C63v59Ev,
  (VTBL_ENTRY)&_ZN6S195C63v60Ev,
  (VTBL_ENTRY)&_ZN6S195C63v61Ev,
  (VTBL_ENTRY)&_ZN6S195C63v62Ev,
  (VTBL_ENTRY)&_ZN6S195C63v63Ev,
  (VTBL_ENTRY)&_ZN6S195C63v64Ev,
  (VTBL_ENTRY)&_ZN6S195C63v65Ev,
  (VTBL_ENTRY)&_ZN6S195C63v66Ev,
  (VTBL_ENTRY)&_ZN6S195C63v67Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v109Ev,
};
extern VTBL_ENTRY _ZTI9S195C4_nt[];
VTBL_ENTRY *P__ZTI9S195C4_nt = _ZTI9S195C4_nt; 
extern  VTBL_ENTRY _ZTV9S195C4_nt[];
Class_Descriptor cd_S195C4_nt = {  "S195C4_nt", // class name
  bases_S195C4_nt, 2,
  &(vtc_S195C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S195C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S195C4_nt),110, //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  S195C3_nt  : S195C4_nt {
  ::S100C8_nt s195c3f0;
  unsigned int s195c3f1:1;
  ::S100C10_nt s195c3f2;
  virtual  ~S195C3_nt(); // _ZN9S195C3_ntD1Ev
  virtual void  v110(); // _ZN9S195C3_nt4v110Ev
  virtual void  v111(); // _ZN9S195C3_nt4v111Ev
  virtual void  v112(); // _ZN9S195C3_nt4v112Ev
  virtual void  v113(); // _ZN9S195C3_nt4v113Ev
  S195C3_nt(); // tgen
};
//SIG(-1 S195C3_nt) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC7 FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC17{ BC18{ BC9}}}


 S195C3_nt ::~S195C3_nt(){ note_dtor("S195C3_nt", this);}
void  S195C3_nt ::v110(){vfunc_called(this, "_ZN9S195C3_nt4v110Ev");}
void  S195C3_nt ::v111(){vfunc_called(this, "_ZN9S195C3_nt4v111Ev");}
void  S195C3_nt ::v112(){vfunc_called(this, "_ZN9S195C3_nt4v112Ev");}
void  S195C3_nt ::v113(){vfunc_called(this, "_ZN9S195C3_nt4v113Ev");}
S195C3_nt ::S195C3_nt(){ note_ctor("S195C3_nt", this);} // tgen

//skip512 S195C3_nt

#else // __cplusplus

extern void _ZN9S195C3_ntC1Ev();
extern void _ZN9S195C3_ntD1Ev();
Name_Map name_map_S195C3_nt[] = {
  NSPAIR(_ZN9S195C3_ntC1Ev),
  NSPAIR(_ZN9S195C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S195C6;
extern VTBL_ENTRY _ZTI6S195C6[];
extern  VTBL_ENTRY _ZTV6S195C6[];
extern Class_Descriptor cd_S195C5_nt;
extern VTBL_ENTRY _ZTI9S195C5_nt[];
extern  VTBL_ENTRY _ZTV9S195C5_nt[];
extern Class_Descriptor cd_S195C4_nt;
extern VTBL_ENTRY _ZTI9S195C4_nt[];
extern  VTBL_ENTRY _ZTV9S195C4_nt[];
static Base_Class bases_S195C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S195C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S195C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S195C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S195C3_nt[];
extern void _ZN9S195C3_ntD1Ev();
extern void _ZN9S195C3_ntD0Ev();
extern void _ZN6S195C62v4Ev();
extern void _ZN6S195C62v5Ev();
extern void _ZN6S195C62v6Ev();
extern void _ZN6S195C62v7Ev();
extern void _ZN6S195C62v8Ev();
extern void _ZN6S195C62v9Ev();
extern void _ZN6S195C63v10Ev();
extern void _ZN6S195C63v11Ev();
extern void _ZN6S195C63v12Ev();
extern void _ZN6S195C63v13Ev();
extern void _ZN6S195C63v14Ev();
extern void _ZN6S195C63v15Ev();
extern void _ZN6S195C63v16Ev();
extern void _ZN6S195C63v17Ev();
extern void _ZN6S195C63v18Ev();
extern void _ZN6S195C63v19Ev();
extern void _ZN6S195C63v20Ev();
extern void _ZN6S195C63v21Ev();
extern void _ZN6S195C63v22Ev();
extern void _ZN6S195C63v23Ev();
extern void _ZN6S195C63v24Ev();
extern void _ZN6S195C63v25Ev();
extern void _ZN6S195C63v26Ev();
extern void _ZN6S195C63v27Ev();
extern void _ZN6S195C63v28Ev();
extern void _ZN6S195C63v29Ev();
extern void _ZN6S195C63v30Ev();
extern void _ZN6S195C63v31Ev();
extern void _ZN6S195C63v32Ev();
extern void _ZN6S195C63v33Ev();
extern void _ZN6S195C63v34Ev();
extern void _ZN6S195C63v35Ev();
extern void _ZN6S195C63v36Ev();
extern void _ZN6S195C63v37Ev();
extern void _ZN6S195C63v38Ev();
extern void _ZN6S195C63v39Ev();
extern void _ZN6S195C63v40Ev();
extern void _ZN6S195C63v41Ev();
extern void _ZN6S195C63v42Ev();
extern void _ZN6S195C63v43Ev();
extern void _ZN6S195C63v44Ev();
extern void _ZN6S195C63v45Ev();
extern void _ZN6S195C63v46Ev();
extern void _ZN6S195C63v47Ev();
extern void _ZN6S195C63v48Ev();
extern void _ZN6S195C63v49Ev();
extern void _ZN6S195C63v50Ev();
extern void _ZN6S195C63v51Ev();
extern void _ZN6S195C63v52Ev();
extern void _ZN6S195C63v53Ev();
extern void _ZN6S195C63v54Ev();
extern void _ZN6S195C63v55Ev();
extern void _ZN6S195C63v56Ev();
extern void _ZN6S195C63v57Ev();
extern void _ZN6S195C63v58Ev();
extern void _ZN6S195C63v59Ev();
extern void _ZN6S195C63v60Ev();
extern void _ZN6S195C63v61Ev();
extern void _ZN6S195C63v62Ev();
extern void _ZN6S195C63v63Ev();
extern void _ZN6S195C63v64Ev();
extern void _ZN6S195C63v65Ev();
extern void _ZN6S195C63v66Ev();
extern void _ZN6S195C63v67Ev();
extern void _ZN9S195C5_nt3v68Ev();
extern void _ZN9S195C5_nt3v69Ev();
extern void _ZN9S195C5_nt3v70Ev();
extern void _ZN9S195C5_nt3v71Ev();
extern void _ZN9S195C5_nt3v72Ev();
extern void _ZN9S195C5_nt3v73Ev();
extern void _ZN9S195C5_nt3v74Ev();
extern void _ZN9S195C5_nt3v75Ev();
extern void _ZN9S195C5_nt3v76Ev();
extern void _ZN9S195C5_nt3v77Ev();
extern void _ZN9S195C5_nt3v78Ev();
extern void _ZN9S195C5_nt3v79Ev();
extern void _ZN9S195C5_nt3v80Ev();
extern void _ZN9S195C5_nt3v81Ev();
extern void _ZN9S195C5_nt3v82Ev();
extern void _ZN9S195C5_nt3v83Ev();
extern void _ZN9S195C5_nt3v84Ev();
extern void _ZN9S195C5_nt3v85Ev();
extern void _ZN9S195C5_nt3v86Ev();
extern void _ZN9S195C5_nt3v87Ev();
extern void _ZN9S195C5_nt3v88Ev();
extern void _ZN9S195C5_nt3v89Ev();
extern void _ZN9S195C4_nt3v90Ev();
extern void _ZN9S195C4_nt3v91Ev();
extern void _ZN9S195C4_nt3v92Ev();
extern void _ZN9S195C4_nt3v93Ev();
extern void _ZN9S195C4_nt3v94Ev();
extern void _ZN9S195C4_nt3v95Ev();
extern void _ZN9S195C4_nt3v96Ev();
extern void _ZN9S195C4_nt3v97Ev();
extern void _ZN9S195C4_nt3v98Ev();
extern void _ZN9S195C4_nt3v99Ev();
extern void _ZN9S195C4_nt4v100Ev();
extern void _ZN9S195C4_nt4v101Ev();
extern void _ZN9S195C4_nt4v102Ev();
extern void _ZN9S195C4_nt4v103Ev();
extern void _ZN9S195C4_nt4v104Ev();
extern void _ZN9S195C4_nt4v105Ev();
extern void _ZN9S195C4_nt4v106Ev();
extern void _ZN9S195C4_nt4v107Ev();
extern void _ZN9S195C4_nt4v108Ev();
extern void _ZN9S195C4_nt4v109Ev();
extern void _ZN9S195C3_nt4v110Ev();
extern void _ZN9S195C3_nt4v111Ev();
extern void _ZN9S195C3_nt4v112Ev();
extern void _ZN9S195C3_nt4v113Ev();
static  VTBL_ENTRY vtc_S195C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S195C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S195C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S195C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S195C62v4Ev,
  (VTBL_ENTRY)&_ZN6S195C62v5Ev,
  (VTBL_ENTRY)&_ZN6S195C62v6Ev,
  (VTBL_ENTRY)&_ZN6S195C62v7Ev,
  (VTBL_ENTRY)&_ZN6S195C62v8Ev,
  (VTBL_ENTRY)&_ZN6S195C62v9Ev,
  (VTBL_ENTRY)&_ZN6S195C63v10Ev,
  (VTBL_ENTRY)&_ZN6S195C63v11Ev,
  (VTBL_ENTRY)&_ZN6S195C63v12Ev,
  (VTBL_ENTRY)&_ZN6S195C63v13Ev,
  (VTBL_ENTRY)&_ZN6S195C63v14Ev,
  (VTBL_ENTRY)&_ZN6S195C63v15Ev,
  (VTBL_ENTRY)&_ZN6S195C63v16Ev,
  (VTBL_ENTRY)&_ZN6S195C63v17Ev,
  (VTBL_ENTRY)&_ZN6S195C63v18Ev,
  (VTBL_ENTRY)&_ZN6S195C63v19Ev,
  (VTBL_ENTRY)&_ZN6S195C63v20Ev,
  (VTBL_ENTRY)&_ZN6S195C63v21Ev,
  (VTBL_ENTRY)&_ZN6S195C63v22Ev,
  (VTBL_ENTRY)&_ZN6S195C63v23Ev,
  (VTBL_ENTRY)&_ZN6S195C63v24Ev,
  (VTBL_ENTRY)&_ZN6S195C63v25Ev,
  (VTBL_ENTRY)&_ZN6S195C63v26Ev,
  (VTBL_ENTRY)&_ZN6S195C63v27Ev,
  (VTBL_ENTRY)&_ZN6S195C63v28Ev,
  (VTBL_ENTRY)&_ZN6S195C63v29Ev,
  (VTBL_ENTRY)&_ZN6S195C63v30Ev,
  (VTBL_ENTRY)&_ZN6S195C63v31Ev,
  (VTBL_ENTRY)&_ZN6S195C63v32Ev,
  (VTBL_ENTRY)&_ZN6S195C63v33Ev,
  (VTBL_ENTRY)&_ZN6S195C63v34Ev,
  (VTBL_ENTRY)&_ZN6S195C63v35Ev,
  (VTBL_ENTRY)&_ZN6S195C63v36Ev,
  (VTBL_ENTRY)&_ZN6S195C63v37Ev,
  (VTBL_ENTRY)&_ZN6S195C63v38Ev,
  (VTBL_ENTRY)&_ZN6S195C63v39Ev,
  (VTBL_ENTRY)&_ZN6S195C63v40Ev,
  (VTBL_ENTRY)&_ZN6S195C63v41Ev,
  (VTBL_ENTRY)&_ZN6S195C63v42Ev,
  (VTBL_ENTRY)&_ZN6S195C63v43Ev,
  (VTBL_ENTRY)&_ZN6S195C63v44Ev,
  (VTBL_ENTRY)&_ZN6S195C63v45Ev,
  (VTBL_ENTRY)&_ZN6S195C63v46Ev,
  (VTBL_ENTRY)&_ZN6S195C63v47Ev,
  (VTBL_ENTRY)&_ZN6S195C63v48Ev,
  (VTBL_ENTRY)&_ZN6S195C63v49Ev,
  (VTBL_ENTRY)&_ZN6S195C63v50Ev,
  (VTBL_ENTRY)&_ZN6S195C63v51Ev,
  (VTBL_ENTRY)&_ZN6S195C63v52Ev,
  (VTBL_ENTRY)&_ZN6S195C63v53Ev,
  (VTBL_ENTRY)&_ZN6S195C63v54Ev,
  (VTBL_ENTRY)&_ZN6S195C63v55Ev,
  (VTBL_ENTRY)&_ZN6S195C63v56Ev,
  (VTBL_ENTRY)&_ZN6S195C63v57Ev,
  (VTBL_ENTRY)&_ZN6S195C63v58Ev,
  (VTBL_ENTRY)&_ZN6S195C63v59Ev,
  (VTBL_ENTRY)&_ZN6S195C63v60Ev,
  (VTBL_ENTRY)&_ZN6S195C63v61Ev,
  (VTBL_ENTRY)&_ZN6S195C63v62Ev,
  (VTBL_ENTRY)&_ZN6S195C63v63Ev,
  (VTBL_ENTRY)&_ZN6S195C63v64Ev,
  (VTBL_ENTRY)&_ZN6S195C63v65Ev,
  (VTBL_ENTRY)&_ZN6S195C63v66Ev,
  (VTBL_ENTRY)&_ZN6S195C63v67Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI9S195C3_nt[];
VTBL_ENTRY *P__ZTI9S195C3_nt = _ZTI9S195C3_nt; 
extern  VTBL_ENTRY _ZTV9S195C3_nt[];
Class_Descriptor cd_S195C3_nt = {  "S195C3_nt", // class name
  bases_S195C3_nt, 3,
  &(vtc_S195C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S195C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S195C3_nt),114, //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  S195C24  : S100C12_nt {
};
//SIG(-1 S195C24) C1{ BC2{ m Fp Fi[2]}}



static void Test_S195C24()
{
  extern Class_Descriptor cd_S195C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S195C24, buf);
    S195C24 &lv = *(new (buf) S195C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S195C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S195C24)");
    check_base_class_offset(lv, (S100C12_nt*), 0, "S195C24");
    test_class_info(&lv, &cd_S195C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS195C24(Test_S195C24, "S195C24", ABISELECT(16,12));

#else // __cplusplus

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



//skip512 S195C23_nt

#else // __cplusplus

extern Class_Descriptor cd_S100C12_nt;
extern Class_Descriptor cd_S195C24;
static Base_Class bases_S195C23_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S100C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S195C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S195C2_nt  : S195C3_nt {
  ::S195C23_nt s195c2f0;
  unsigned int s195c2f1:1;
  virtual  ~S195C2_nt(); // _ZN9S195C2_ntD1Ev
  virtual void  v114(); // _ZN9S195C2_nt4v114Ev
  virtual void  v115(); // _ZN9S195C2_nt4v115Ev
  virtual void  v116(); // _ZN9S195C2_nt4v116Ev
  virtual void  v117(); // _ZN9S195C2_nt4v117Ev
  virtual void  v118(); // _ZN9S195C2_nt4v118Ev
  virtual void  v119(); // _ZN9S195C2_nt4v119Ev
  virtual void  v120(); // _ZN9S195C2_nt4v120Ev
  S195C2_nt(); // tgen
};
//SIG(-1 S195C2_nt) 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 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC8 FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC18{ BC19{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC20{ BC21{ BC10}} Fi:1}


 S195C2_nt ::~S195C2_nt(){ note_dtor("S195C2_nt", this);}
void  S195C2_nt ::v114(){vfunc_called(this, "_ZN9S195C2_nt4v114Ev");}
void  S195C2_nt ::v115(){vfunc_called(this, "_ZN9S195C2_nt4v115Ev");}
void  S195C2_nt ::v116(){vfunc_called(this, "_ZN9S195C2_nt4v116Ev");}
void  S195C2_nt ::v117(){vfunc_called(this, "_ZN9S195C2_nt4v117Ev");}
void  S195C2_nt ::v118(){vfunc_called(this, "_ZN9S195C2_nt4v118Ev");}
void  S195C2_nt ::v119(){vfunc_called(this, "_ZN9S195C2_nt4v119Ev");}
void  S195C2_nt ::v120(){vfunc_called(this, "_ZN9S195C2_nt4v120Ev");}
S195C2_nt ::S195C2_nt(){ note_ctor("S195C2_nt", this);} // tgen

//skip512 S195C2_nt

#else // __cplusplus

extern void _ZN9S195C2_ntC1Ev();
extern void _ZN9S195C2_ntD1Ev();
Name_Map name_map_S195C2_nt[] = {
  NSPAIR(_ZN9S195C2_ntC1Ev),
  NSPAIR(_ZN9S195C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S195C6;
extern VTBL_ENTRY _ZTI6S195C6[];
extern  VTBL_ENTRY _ZTV6S195C6[];
extern Class_Descriptor cd_S195C5_nt;
extern VTBL_ENTRY _ZTI9S195C5_nt[];
extern  VTBL_ENTRY _ZTV9S195C5_nt[];
extern Class_Descriptor cd_S195C4_nt;
extern VTBL_ENTRY _ZTI9S195C4_nt[];
extern  VTBL_ENTRY _ZTV9S195C4_nt[];
extern Class_Descriptor cd_S195C3_nt;
extern VTBL_ENTRY _ZTI9S195C3_nt[];
extern  VTBL_ENTRY _ZTV9S195C3_nt[];
static Base_Class bases_S195C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S195C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S195C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S195C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S195C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S195C2_nt[];
extern void _ZN9S195C2_ntD1Ev();
extern void _ZN9S195C2_ntD0Ev();
extern void _ZN6S195C62v4Ev();
extern void _ZN6S195C62v5Ev();
extern void _ZN6S195C62v6Ev();
extern void _ZN6S195C62v7Ev();
extern void _ZN6S195C62v8Ev();
extern void _ZN6S195C62v9Ev();
extern void _ZN6S195C63v10Ev();
extern void _ZN6S195C63v11Ev();
extern void _ZN6S195C63v12Ev();
extern void _ZN6S195C63v13Ev();
extern void _ZN6S195C63v14Ev();
extern void _ZN6S195C63v15Ev();
extern void _ZN6S195C63v16Ev();
extern void _ZN6S195C63v17Ev();
extern void _ZN6S195C63v18Ev();
extern void _ZN6S195C63v19Ev();
extern void _ZN6S195C63v20Ev();
extern void _ZN6S195C63v21Ev();
extern void _ZN6S195C63v22Ev();
extern void _ZN6S195C63v23Ev();
extern void _ZN6S195C63v24Ev();
extern void _ZN6S195C63v25Ev();
extern void _ZN6S195C63v26Ev();
extern void _ZN6S195C63v27Ev();
extern void _ZN6S195C63v28Ev();
extern void _ZN6S195C63v29Ev();
extern void _ZN6S195C63v30Ev();
extern void _ZN6S195C63v31Ev();
extern void _ZN6S195C63v32Ev();
extern void _ZN6S195C63v33Ev();
extern void _ZN6S195C63v34Ev();
extern void _ZN6S195C63v35Ev();
extern void _ZN6S195C63v36Ev();
extern void _ZN6S195C63v37Ev();
extern void _ZN6S195C63v38Ev();
extern void _ZN6S195C63v39Ev();
extern void _ZN6S195C63v40Ev();
extern void _ZN6S195C63v41Ev();
extern void _ZN6S195C63v42Ev();
extern void _ZN6S195C63v43Ev();
extern void _ZN6S195C63v44Ev();
extern void _ZN6S195C63v45Ev();
extern void _ZN6S195C63v46Ev();
extern void _ZN6S195C63v47Ev();
extern void _ZN6S195C63v48Ev();
extern void _ZN6S195C63v49Ev();
extern void _ZN6S195C63v50Ev();
extern void _ZN6S195C63v51Ev();
extern void _ZN6S195C63v52Ev();
extern void _ZN6S195C63v53Ev();
extern void _ZN6S195C63v54Ev();
extern void _ZN6S195C63v55Ev();
extern void _ZN6S195C63v56Ev();
extern void _ZN6S195C63v57Ev();
extern void _ZN6S195C63v58Ev();
extern void _ZN6S195C63v59Ev();
extern void _ZN6S195C63v60Ev();
extern void _ZN6S195C63v61Ev();
extern void _ZN6S195C63v62Ev();
extern void _ZN6S195C63v63Ev();
extern void _ZN6S195C63v64Ev();
extern void _ZN6S195C63v65Ev();
extern void _ZN6S195C63v66Ev();
extern void _ZN6S195C63v67Ev();
extern void _ZN9S195C5_nt3v68Ev();
extern void _ZN9S195C5_nt3v69Ev();
extern void _ZN9S195C5_nt3v70Ev();
extern void _ZN9S195C5_nt3v71Ev();
extern void _ZN9S195C5_nt3v72Ev();
extern void _ZN9S195C5_nt3v73Ev();
extern void _ZN9S195C5_nt3v74Ev();
extern void _ZN9S195C5_nt3v75Ev();
extern void _ZN9S195C5_nt3v76Ev();
extern void _ZN9S195C5_nt3v77Ev();
extern void _ZN9S195C5_nt3v78Ev();
extern void _ZN9S195C5_nt3v79Ev();
extern void _ZN9S195C5_nt3v80Ev();
extern void _ZN9S195C5_nt3v81Ev();
extern void _ZN9S195C5_nt3v82Ev();
extern void _ZN9S195C5_nt3v83Ev();
extern void _ZN9S195C5_nt3v84Ev();
extern void _ZN9S195C5_nt3v85Ev();
extern void _ZN9S195C5_nt3v86Ev();
extern void _ZN9S195C5_nt3v87Ev();
extern void _ZN9S195C5_nt3v88Ev();
extern void _ZN9S195C5_nt3v89Ev();
extern void _ZN9S195C4_nt3v90Ev();
extern void _ZN9S195C4_nt3v91Ev();
extern void _ZN9S195C4_nt3v92Ev();
extern void _ZN9S195C4_nt3v93Ev();
extern void _ZN9S195C4_nt3v94Ev();
extern void _ZN9S195C4_nt3v95Ev();
extern void _ZN9S195C4_nt3v96Ev();
extern void _ZN9S195C4_nt3v97Ev();
extern void _ZN9S195C4_nt3v98Ev();
extern void _ZN9S195C4_nt3v99Ev();
extern void _ZN9S195C4_nt4v100Ev();
extern void _ZN9S195C4_nt4v101Ev();
extern void _ZN9S195C4_nt4v102Ev();
extern void _ZN9S195C4_nt4v103Ev();
extern void _ZN9S195C4_nt4v104Ev();
extern void _ZN9S195C4_nt4v105Ev();
extern void _ZN9S195C4_nt4v106Ev();
extern void _ZN9S195C4_nt4v107Ev();
extern void _ZN9S195C4_nt4v108Ev();
extern void _ZN9S195C4_nt4v109Ev();
extern void _ZN9S195C3_nt4v110Ev();
extern void _ZN9S195C3_nt4v111Ev();
extern void _ZN9S195C3_nt4v112Ev();
extern void _ZN9S195C3_nt4v113Ev();
extern void _ZN9S195C2_nt4v114Ev();
extern void _ZN9S195C2_nt4v115Ev();
extern void _ZN9S195C2_nt4v116Ev();
extern void _ZN9S195C2_nt4v117Ev();
extern void _ZN9S195C2_nt4v118Ev();
extern void _ZN9S195C2_nt4v119Ev();
extern void _ZN9S195C2_nt4v120Ev();
static  VTBL_ENTRY vtc_S195C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S195C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S195C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S195C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S195C62v4Ev,
  (VTBL_ENTRY)&_ZN6S195C62v5Ev,
  (VTBL_ENTRY)&_ZN6S195C62v6Ev,
  (VTBL_ENTRY)&_ZN6S195C62v7Ev,
  (VTBL_ENTRY)&_ZN6S195C62v8Ev,
  (VTBL_ENTRY)&_ZN6S195C62v9Ev,
  (VTBL_ENTRY)&_ZN6S195C63v10Ev,
  (VTBL_ENTRY)&_ZN6S195C63v11Ev,
  (VTBL_ENTRY)&_ZN6S195C63v12Ev,
  (VTBL_ENTRY)&_ZN6S195C63v13Ev,
  (VTBL_ENTRY)&_ZN6S195C63v14Ev,
  (VTBL_ENTRY)&_ZN6S195C63v15Ev,
  (VTBL_ENTRY)&_ZN6S195C63v16Ev,
  (VTBL_ENTRY)&_ZN6S195C63v17Ev,
  (VTBL_ENTRY)&_ZN6S195C63v18Ev,
  (VTBL_ENTRY)&_ZN6S195C63v19Ev,
  (VTBL_ENTRY)&_ZN6S195C63v20Ev,
  (VTBL_ENTRY)&_ZN6S195C63v21Ev,
  (VTBL_ENTRY)&_ZN6S195C63v22Ev,
  (VTBL_ENTRY)&_ZN6S195C63v23Ev,
  (VTBL_ENTRY)&_ZN6S195C63v24Ev,
  (VTBL_ENTRY)&_ZN6S195C63v25Ev,
  (VTBL_ENTRY)&_ZN6S195C63v26Ev,
  (VTBL_ENTRY)&_ZN6S195C63v27Ev,
  (VTBL_ENTRY)&_ZN6S195C63v28Ev,
  (VTBL_ENTRY)&_ZN6S195C63v29Ev,
  (VTBL_ENTRY)&_ZN6S195C63v30Ev,
  (VTBL_ENTRY)&_ZN6S195C63v31Ev,
  (VTBL_ENTRY)&_ZN6S195C63v32Ev,
  (VTBL_ENTRY)&_ZN6S195C63v33Ev,
  (VTBL_ENTRY)&_ZN6S195C63v34Ev,
  (VTBL_ENTRY)&_ZN6S195C63v35Ev,
  (VTBL_ENTRY)&_ZN6S195C63v36Ev,
  (VTBL_ENTRY)&_ZN6S195C63v37Ev,
  (VTBL_ENTRY)&_ZN6S195C63v38Ev,
  (VTBL_ENTRY)&_ZN6S195C63v39Ev,
  (VTBL_ENTRY)&_ZN6S195C63v40Ev,
  (VTBL_ENTRY)&_ZN6S195C63v41Ev,
  (VTBL_ENTRY)&_ZN6S195C63v42Ev,
  (VTBL_ENTRY)&_ZN6S195C63v43Ev,
  (VTBL_ENTRY)&_ZN6S195C63v44Ev,
  (VTBL_ENTRY)&_ZN6S195C63v45Ev,
  (VTBL_ENTRY)&_ZN6S195C63v46Ev,
  (VTBL_ENTRY)&_ZN6S195C63v47Ev,
  (VTBL_ENTRY)&_ZN6S195C63v48Ev,
  (VTBL_ENTRY)&_ZN6S195C63v49Ev,
  (VTBL_ENTRY)&_ZN6S195C63v50Ev,
  (VTBL_ENTRY)&_ZN6S195C63v51Ev,
  (VTBL_ENTRY)&_ZN6S195C63v52Ev,
  (VTBL_ENTRY)&_ZN6S195C63v53Ev,
  (VTBL_ENTRY)&_ZN6S195C63v54Ev,
  (VTBL_ENTRY)&_ZN6S195C63v55Ev,
  (VTBL_ENTRY)&_ZN6S195C63v56Ev,
  (VTBL_ENTRY)&_ZN6S195C63v57Ev,
  (VTBL_ENTRY)&_ZN6S195C63v58Ev,
  (VTBL_ENTRY)&_ZN6S195C63v59Ev,
  (VTBL_ENTRY)&_ZN6S195C63v60Ev,
  (VTBL_ENTRY)&_ZN6S195C63v61Ev,
  (VTBL_ENTRY)&_ZN6S195C63v62Ev,
  (VTBL_ENTRY)&_ZN6S195C63v63Ev,
  (VTBL_ENTRY)&_ZN6S195C63v64Ev,
  (VTBL_ENTRY)&_ZN6S195C63v65Ev,
  (VTBL_ENTRY)&_ZN6S195C63v66Ev,
  (VTBL_ENTRY)&_ZN6S195C63v67Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v120Ev,
};
extern VTBL_ENTRY _ZTI9S195C2_nt[];
VTBL_ENTRY *P__ZTI9S195C2_nt = _ZTI9S195C2_nt; 
extern  VTBL_ENTRY _ZTV9S195C2_nt[];
Class_Descriptor cd_S195C2_nt = {  "S195C2_nt", // class name
  bases_S195C2_nt, 4,
  &(vtc_S195C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI9S195C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S195C2_nt),121, //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  S195C1  : S195C2_nt {
  ::S195C23_nt s195c1f0;
  unsigned int s195c1f1:1;
  virtual  ~S195C1(); // _ZN6S195C1D1Ev
  virtual void  v1(); // _ZN6S195C12v1Ev
  virtual void  v2(); // _ZN6S195C12v2Ev
  virtual void  v3(); // _ZN6S195C12v3Ev
  S195C1(); // tgen
};
//SIG(1 S195C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC9 FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC19{ BC20{ BC11}}} vd v114 v115 v116 v117 v118 v119 v120 FC21{ BC22{ BC11}} Fi:1} vd v1 v2 v3 FC21 Fi:1}


 S195C1 ::~S195C1(){ note_dtor("S195C1", this);}
void  S195C1 ::v1(){vfunc_called(this, "_ZN6S195C12v1Ev");}
void  S195C1 ::v2(){vfunc_called(this, "_ZN6S195C12v2Ev");}
void  S195C1 ::v3(){vfunc_called(this, "_ZN6S195C12v3Ev");}
S195C1 ::S195C1(){ note_ctor("S195C1", this);} // tgen

static void Test_S195C1()
{
  extern Class_Descriptor cd_S195C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,64)];
    init_test(&cd_S195C1, buf);
    S195C1 *dp, &lv = *(dp=new (buf) S195C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,252), "sizeof(S195C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S195C1)");
    check_base_class_offset(lv, (S195C6*)(S195C5_nt*)(S195C4_nt*)(S195C3_nt*)(S195C2_nt*), 0, "S195C1");
    check_base_class_offset(lv, (S195C5_nt*)(S195C4_nt*)(S195C3_nt*)(S195C2_nt*), 0, "S195C1");
    check_base_class_offset(lv, (S195C4_nt*)(S195C3_nt*)(S195C2_nt*), 0, "S195C1");
    check_base_class_offset(lv, (S195C3_nt*)(S195C2_nt*), 0, "S195C1");
    check_base_class_offset(lv, (S195C2_nt*), 0, "S195C1");
    check_field_offset(lv, s195c1f0, ABISELECT(320,236), "S195C1.s195c1f0");
    set_bf_and_test(lv, s195c1f1, ABISELECT(336,248), 0, 1, 1, "S195C1");
    test_class_info(&lv, &cd_S195C1);
    dp->~S195C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS195C1(Test_S195C1, "S195C1", ABISELECT(344,252));

#else // __cplusplus

extern void _ZN6S195C1C1Ev();
extern void _ZN6S195C1D1Ev();
Name_Map name_map_S195C1[] = {
  NSPAIR(_ZN6S195C1C1Ev),
  NSPAIR(_ZN6S195C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S195C6;
extern VTBL_ENTRY _ZTI6S195C6[];
extern  VTBL_ENTRY _ZTV6S195C6[];
extern Class_Descriptor cd_S195C5_nt;
extern VTBL_ENTRY _ZTI9S195C5_nt[];
extern  VTBL_ENTRY _ZTV9S195C5_nt[];
extern Class_Descriptor cd_S195C4_nt;
extern VTBL_ENTRY _ZTI9S195C4_nt[];
extern  VTBL_ENTRY _ZTV9S195C4_nt[];
extern Class_Descriptor cd_S195C3_nt;
extern VTBL_ENTRY _ZTI9S195C3_nt[];
extern  VTBL_ENTRY _ZTV9S195C3_nt[];
extern Class_Descriptor cd_S195C2_nt;
extern VTBL_ENTRY _ZTI9S195C2_nt[];
extern  VTBL_ENTRY _ZTV9S195C2_nt[];
static Base_Class bases_S195C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S195C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S195C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S195C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S195C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S195C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S195C1[];
extern void _ZN6S195C1D1Ev();
extern void _ZN6S195C1D0Ev();
extern void _ZN6S195C62v4Ev();
extern void _ZN6S195C62v5Ev();
extern void _ZN6S195C62v6Ev();
extern void _ZN6S195C62v7Ev();
extern void _ZN6S195C62v8Ev();
extern void _ZN6S195C62v9Ev();
extern void _ZN6S195C63v10Ev();
extern void _ZN6S195C63v11Ev();
extern void _ZN6S195C63v12Ev();
extern void _ZN6S195C63v13Ev();
extern void _ZN6S195C63v14Ev();
extern void _ZN6S195C63v15Ev();
extern void _ZN6S195C63v16Ev();
extern void _ZN6S195C63v17Ev();
extern void _ZN6S195C63v18Ev();
extern void _ZN6S195C63v19Ev();
extern void _ZN6S195C63v20Ev();
extern void _ZN6S195C63v21Ev();
extern void _ZN6S195C63v22Ev();
extern void _ZN6S195C63v23Ev();
extern void _ZN6S195C63v24Ev();
extern void _ZN6S195C63v25Ev();
extern void _ZN6S195C63v26Ev();
extern void _ZN6S195C63v27Ev();
extern void _ZN6S195C63v28Ev();
extern void _ZN6S195C63v29Ev();
extern void _ZN6S195C63v30Ev();
extern void _ZN6S195C63v31Ev();
extern void _ZN6S195C63v32Ev();
extern void _ZN6S195C63v33Ev();
extern void _ZN6S195C63v34Ev();
extern void _ZN6S195C63v35Ev();
extern void _ZN6S195C63v36Ev();
extern void _ZN6S195C63v37Ev();
extern void _ZN6S195C63v38Ev();
extern void _ZN6S195C63v39Ev();
extern void _ZN6S195C63v40Ev();
extern void _ZN6S195C63v41Ev();
extern void _ZN6S195C63v42Ev();
extern void _ZN6S195C63v43Ev();
extern void _ZN6S195C63v44Ev();
extern void _ZN6S195C63v45Ev();
extern void _ZN6S195C63v46Ev();
extern void _ZN6S195C63v47Ev();
extern void _ZN6S195C63v48Ev();
extern void _ZN6S195C63v49Ev();
extern void _ZN6S195C63v50Ev();
extern void _ZN6S195C63v51Ev();
extern void _ZN6S195C63v52Ev();
extern void _ZN6S195C63v53Ev();
extern void _ZN6S195C63v54Ev();
extern void _ZN6S195C63v55Ev();
extern void _ZN6S195C63v56Ev();
extern void _ZN6S195C63v57Ev();
extern void _ZN6S195C63v58Ev();
extern void _ZN6S195C63v59Ev();
extern void _ZN6S195C63v60Ev();
extern void _ZN6S195C63v61Ev();
extern void _ZN6S195C63v62Ev();
extern void _ZN6S195C63v63Ev();
extern void _ZN6S195C63v64Ev();
extern void _ZN6S195C63v65Ev();
extern void _ZN6S195C63v66Ev();
extern void _ZN6S195C63v67Ev();
extern void _ZN9S195C5_nt3v68Ev();
extern void _ZN9S195C5_nt3v69Ev();
extern void _ZN9S195C5_nt3v70Ev();
extern void _ZN9S195C5_nt3v71Ev();
extern void _ZN9S195C5_nt3v72Ev();
extern void _ZN9S195C5_nt3v73Ev();
extern void _ZN9S195C5_nt3v74Ev();
extern void _ZN9S195C5_nt3v75Ev();
extern void _ZN9S195C5_nt3v76Ev();
extern void _ZN9S195C5_nt3v77Ev();
extern void _ZN9S195C5_nt3v78Ev();
extern void _ZN9S195C5_nt3v79Ev();
extern void _ZN9S195C5_nt3v80Ev();
extern void _ZN9S195C5_nt3v81Ev();
extern void _ZN9S195C5_nt3v82Ev();
extern void _ZN9S195C5_nt3v83Ev();
extern void _ZN9S195C5_nt3v84Ev();
extern void _ZN9S195C5_nt3v85Ev();
extern void _ZN9S195C5_nt3v86Ev();
extern void _ZN9S195C5_nt3v87Ev();
extern void _ZN9S195C5_nt3v88Ev();
extern void _ZN9S195C5_nt3v89Ev();
extern void _ZN9S195C4_nt3v90Ev();
extern void _ZN9S195C4_nt3v91Ev();
extern void _ZN9S195C4_nt3v92Ev();
extern void _ZN9S195C4_nt3v93Ev();
extern void _ZN9S195C4_nt3v94Ev();
extern void _ZN9S195C4_nt3v95Ev();
extern void _ZN9S195C4_nt3v96Ev();
extern void _ZN9S195C4_nt3v97Ev();
extern void _ZN9S195C4_nt3v98Ev();
extern void _ZN9S195C4_nt3v99Ev();
extern void _ZN9S195C4_nt4v100Ev();
extern void _ZN9S195C4_nt4v101Ev();
extern void _ZN9S195C4_nt4v102Ev();
extern void _ZN9S195C4_nt4v103Ev();
extern void _ZN9S195C4_nt4v104Ev();
extern void _ZN9S195C4_nt4v105Ev();
extern void _ZN9S195C4_nt4v106Ev();
extern void _ZN9S195C4_nt4v107Ev();
extern void _ZN9S195C4_nt4v108Ev();
extern void _ZN9S195C4_nt4v109Ev();
extern void _ZN9S195C3_nt4v110Ev();
extern void _ZN9S195C3_nt4v111Ev();
extern void _ZN9S195C3_nt4v112Ev();
extern void _ZN9S195C3_nt4v113Ev();
extern void _ZN9S195C2_nt4v114Ev();
extern void _ZN9S195C2_nt4v115Ev();
extern void _ZN9S195C2_nt4v116Ev();
extern void _ZN9S195C2_nt4v117Ev();
extern void _ZN9S195C2_nt4v118Ev();
extern void _ZN9S195C2_nt4v119Ev();
extern void _ZN9S195C2_nt4v120Ev();
extern void _ZN6S195C12v1Ev();
extern void _ZN6S195C12v2Ev();
extern void _ZN6S195C12v3Ev();
static  VTBL_ENTRY vtc_S195C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S195C1[0]),
  (VTBL_ENTRY)&_ZN6S195C1D1Ev,
  (VTBL_ENTRY)&_ZN6S195C1D0Ev,
  (VTBL_ENTRY)&_ZN6S195C62v4Ev,
  (VTBL_ENTRY)&_ZN6S195C62v5Ev,
  (VTBL_ENTRY)&_ZN6S195C62v6Ev,
  (VTBL_ENTRY)&_ZN6S195C62v7Ev,
  (VTBL_ENTRY)&_ZN6S195C62v8Ev,
  (VTBL_ENTRY)&_ZN6S195C62v9Ev,
  (VTBL_ENTRY)&_ZN6S195C63v10Ev,
  (VTBL_ENTRY)&_ZN6S195C63v11Ev,
  (VTBL_ENTRY)&_ZN6S195C63v12Ev,
  (VTBL_ENTRY)&_ZN6S195C63v13Ev,
  (VTBL_ENTRY)&_ZN6S195C63v14Ev,
  (VTBL_ENTRY)&_ZN6S195C63v15Ev,
  (VTBL_ENTRY)&_ZN6S195C63v16Ev,
  (VTBL_ENTRY)&_ZN6S195C63v17Ev,
  (VTBL_ENTRY)&_ZN6S195C63v18Ev,
  (VTBL_ENTRY)&_ZN6S195C63v19Ev,
  (VTBL_ENTRY)&_ZN6S195C63v20Ev,
  (VTBL_ENTRY)&_ZN6S195C63v21Ev,
  (VTBL_ENTRY)&_ZN6S195C63v22Ev,
  (VTBL_ENTRY)&_ZN6S195C63v23Ev,
  (VTBL_ENTRY)&_ZN6S195C63v24Ev,
  (VTBL_ENTRY)&_ZN6S195C63v25Ev,
  (VTBL_ENTRY)&_ZN6S195C63v26Ev,
  (VTBL_ENTRY)&_ZN6S195C63v27Ev,
  (VTBL_ENTRY)&_ZN6S195C63v28Ev,
  (VTBL_ENTRY)&_ZN6S195C63v29Ev,
  (VTBL_ENTRY)&_ZN6S195C63v30Ev,
  (VTBL_ENTRY)&_ZN6S195C63v31Ev,
  (VTBL_ENTRY)&_ZN6S195C63v32Ev,
  (VTBL_ENTRY)&_ZN6S195C63v33Ev,
  (VTBL_ENTRY)&_ZN6S195C63v34Ev,
  (VTBL_ENTRY)&_ZN6S195C63v35Ev,
  (VTBL_ENTRY)&_ZN6S195C63v36Ev,
  (VTBL_ENTRY)&_ZN6S195C63v37Ev,
  (VTBL_ENTRY)&_ZN6S195C63v38Ev,
  (VTBL_ENTRY)&_ZN6S195C63v39Ev,
  (VTBL_ENTRY)&_ZN6S195C63v40Ev,
  (VTBL_ENTRY)&_ZN6S195C63v41Ev,
  (VTBL_ENTRY)&_ZN6S195C63v42Ev,
  (VTBL_ENTRY)&_ZN6S195C63v43Ev,
  (VTBL_ENTRY)&_ZN6S195C63v44Ev,
  (VTBL_ENTRY)&_ZN6S195C63v45Ev,
  (VTBL_ENTRY)&_ZN6S195C63v46Ev,
  (VTBL_ENTRY)&_ZN6S195C63v47Ev,
  (VTBL_ENTRY)&_ZN6S195C63v48Ev,
  (VTBL_ENTRY)&_ZN6S195C63v49Ev,
  (VTBL_ENTRY)&_ZN6S195C63v50Ev,
  (VTBL_ENTRY)&_ZN6S195C63v51Ev,
  (VTBL_ENTRY)&_ZN6S195C63v52Ev,
  (VTBL_ENTRY)&_ZN6S195C63v53Ev,
  (VTBL_ENTRY)&_ZN6S195C63v54Ev,
  (VTBL_ENTRY)&_ZN6S195C63v55Ev,
  (VTBL_ENTRY)&_ZN6S195C63v56Ev,
  (VTBL_ENTRY)&_ZN6S195C63v57Ev,
  (VTBL_ENTRY)&_ZN6S195C63v58Ev,
  (VTBL_ENTRY)&_ZN6S195C63v59Ev,
  (VTBL_ENTRY)&_ZN6S195C63v60Ev,
  (VTBL_ENTRY)&_ZN6S195C63v61Ev,
  (VTBL_ENTRY)&_ZN6S195C63v62Ev,
  (VTBL_ENTRY)&_ZN6S195C63v63Ev,
  (VTBL_ENTRY)&_ZN6S195C63v64Ev,
  (VTBL_ENTRY)&_ZN6S195C63v65Ev,
  (VTBL_ENTRY)&_ZN6S195C63v66Ev,
  (VTBL_ENTRY)&_ZN6S195C63v67Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S195C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S195C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S195C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S195C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN6S195C12v1Ev,
  (VTBL_ENTRY)&_ZN6S195C12v2Ev,
  (VTBL_ENTRY)&_ZN6S195C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S195C1[];
extern  VTBL_ENTRY _ZTV6S195C1[];
Class_Descriptor cd_S195C1 = {  "S195C1", // class name
  bases_S195C1, 5,
  &(vtc_S195C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,252), // object size
  NSPAIRA(_ZTI6S195C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S195C1),124, //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  S208C6  {
  int s208c6f0;
  __tsi64 s208c6f1;
  void *s208c6f2[4];
  int s208c6f3[2];
  void *s208c6f4;
  ::S100C8_nt s208c6f5;
  void *s208c6f6[2];
  virtual  ~S208C6(); // _ZN6S208C6D1Ev
  virtual void  v4(); // _ZN6S208C62v4Ev
  virtual void  v5(); // _ZN6S208C62v5Ev
  virtual void  v6(); // _ZN6S208C62v6Ev
  virtual void  v7(); // _ZN6S208C62v7Ev
  virtual void  v8(); // _ZN6S208C62v8Ev
  virtual void  v9(); // _ZN6S208C62v9Ev
  virtual void  v10(); // _ZN6S208C63v10Ev
  virtual void  v11(); // _ZN6S208C63v11Ev
  virtual void  v12(); // _ZN6S208C63v12Ev
  virtual void  v13(); // _ZN6S208C63v13Ev
  virtual void  v14(); // _ZN6S208C63v14Ev
  virtual void  v15(); // _ZN6S208C63v15Ev
  virtual void  v16(); // _ZN6S208C63v16Ev
  virtual void  v17(); // _ZN6S208C63v17Ev
  virtual void  v18(); // _ZN6S208C63v18Ev
  virtual void  v19(); // _ZN6S208C63v19Ev
  virtual void  v20(); // _ZN6S208C63v20Ev
  virtual void  v21(); // _ZN6S208C63v21Ev
  virtual void  v22(); // _ZN6S208C63v22Ev
  virtual void  v23(); // _ZN6S208C63v23Ev
  virtual void  v24(); // _ZN6S208C63v24Ev
  virtual void  v25(); // _ZN6S208C63v25Ev
  virtual void  v26(); // _ZN6S208C63v26Ev
  virtual void  v27(); // _ZN6S208C63v27Ev
  virtual void  v28(); // _ZN6S208C63v28Ev
  virtual void  v29(); // _ZN6S208C63v29Ev
  virtual void  v30(); // _ZN6S208C63v30Ev
  virtual void  v31(); // _ZN6S208C63v31Ev
  virtual void  v32(); // _ZN6S208C63v32Ev
  virtual void  v33(); // _ZN6S208C63v33Ev
  virtual void  v34(); // _ZN6S208C63v34Ev
  virtual void  v35(); // _ZN6S208C63v35Ev
  virtual void  v36(); // _ZN6S208C63v36Ev
  virtual void  v37(); // _ZN6S208C63v37Ev
  virtual void  v38(); // _ZN6S208C63v38Ev
  virtual void  v39(); // _ZN6S208C63v39Ev
  virtual void  v40(); // _ZN6S208C63v40Ev
  virtual void  v41(); // _ZN6S208C63v41Ev
  virtual void  v42(); // _ZN6S208C63v42Ev
  virtual void  v43(); // _ZN6S208C63v43Ev
  virtual void  v44(); // _ZN6S208C63v44Ev
  virtual void  v45(); // _ZN6S208C63v45Ev
  virtual void  v46(); // _ZN6S208C63v46Ev
  virtual void  v47(); // _ZN6S208C63v47Ev
  virtual void  v48(); // _ZN6S208C63v48Ev
  virtual void  v49(); // _ZN6S208C63v49Ev
  virtual void  v50(); // _ZN6S208C63v50Ev
  virtual void  v51(); // _ZN6S208C63v51Ev
  virtual void  v52(); // _ZN6S208C63v52Ev
  virtual void  v53(); // _ZN6S208C63v53Ev
  virtual void  v54(); // _ZN6S208C63v54Ev
  virtual void  v55(); // _ZN6S208C63v55Ev
  virtual void  v56(); // _ZN6S208C63v56Ev
  virtual void  v57(); // _ZN6S208C63v57Ev
  virtual void  v58(); // _ZN6S208C63v58Ev
  virtual void  v59(); // _ZN6S208C63v59Ev
  virtual void  v60(); // _ZN6S208C63v60Ev
  virtual void  v61(); // _ZN6S208C63v61Ev
  virtual void  v62(); // _ZN6S208C63v62Ev
  virtual void  v63(); // _ZN6S208C63v63Ev
  virtual void  v64(); // _ZN6S208C63v64Ev
  virtual void  v65(); // _ZN6S208C63v65Ev
  virtual void  v66(); // _ZN6S208C63v66Ev
  virtual void  v67(); // _ZN6S208C63v67Ev
  S208C6(); // tgen
};
//SIG(-1 S208C6) 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]}


 S208C6 ::~S208C6(){ note_dtor("S208C6", this);}
void  S208C6 ::v4(){vfunc_called(this, "_ZN6S208C62v4Ev");}
void  S208C6 ::v5(){vfunc_called(this, "_ZN6S208C62v5Ev");}
void  S208C6 ::v6(){vfunc_called(this, "_ZN6S208C62v6Ev");}
void  S208C6 ::v7(){vfunc_called(this, "_ZN6S208C62v7Ev");}
void  S208C6 ::v8(){vfunc_called(this, "_ZN6S208C62v8Ev");}
void  S208C6 ::v9(){vfunc_called(this, "_ZN6S208C62v9Ev");}
void  S208C6 ::v10(){vfunc_called(this, "_ZN6S208C63v10Ev");}
void  S208C6 ::v11(){vfunc_called(this, "_ZN6S208C63v11Ev");}
void  S208C6 ::v12(){vfunc_called(this, "_ZN6S208C63v12Ev");}
void  S208C6 ::v13(){vfunc_called(this, "_ZN6S208C63v13Ev");}
void  S208C6 ::v14(){vfunc_called(this, "_ZN6S208C63v14Ev");}
void  S208C6 ::v15(){vfunc_called(this, "_ZN6S208C63v15Ev");}
void  S208C6 ::v16(){vfunc_called(this, "_ZN6S208C63v16Ev");}
void  S208C6 ::v17(){vfunc_called(this, "_ZN6S208C63v17Ev");}
void  S208C6 ::v18(){vfunc_called(this, "_ZN6S208C63v18Ev");}
void  S208C6 ::v19(){vfunc_called(this, "_ZN6S208C63v19Ev");}
void  S208C6 ::v20(){vfunc_called(this, "_ZN6S208C63v20Ev");}
void  S208C6 ::v21(){vfunc_called(this, "_ZN6S208C63v21Ev");}
void  S208C6 ::v22(){vfunc_called(this, "_ZN6S208C63v22Ev");}
void  S208C6 ::v23(){vfunc_called(this, "_ZN6S208C63v23Ev");}
void  S208C6 ::v24(){vfunc_called(this, "_ZN6S208C63v24Ev");}
void  S208C6 ::v25(){vfunc_called(this, "_ZN6S208C63v25Ev");}
void  S208C6 ::v26(){vfunc_called(this, "_ZN6S208C63v26Ev");}
void  S208C6 ::v27(){vfunc_called(this, "_ZN6S208C63v27Ev");}
void  S208C6 ::v28(){vfunc_called(this, "_ZN6S208C63v28Ev");}
void  S208C6 ::v29(){vfunc_called(this, "_ZN6S208C63v29Ev");}
void  S208C6 ::v30(){vfunc_called(this, "_ZN6S208C63v30Ev");}
void  S208C6 ::v31(){vfunc_called(this, "_ZN6S208C63v31Ev");}
void  S208C6 ::v32(){vfunc_called(this, "_ZN6S208C63v32Ev");}
void  S208C6 ::v33(){vfunc_called(this, "_ZN6S208C63v33Ev");}
void  S208C6 ::v34(){vfunc_called(this, "_ZN6S208C63v34Ev");}
void  S208C6 ::v35(){vfunc_called(this, "_ZN6S208C63v35Ev");}
void  S208C6 ::v36(){vfunc_called(this, "_ZN6S208C63v36Ev");}
void  S208C6 ::v37(){vfunc_called(this, "_ZN6S208C63v37Ev");}
void  S208C6 ::v38(){vfunc_called(this, "_ZN6S208C63v38Ev");}
void  S208C6 ::v39(){vfunc_called(this, "_ZN6S208C63v39Ev");}
void  S208C6 ::v40(){vfunc_called(this, "_ZN6S208C63v40Ev");}
void  S208C6 ::v41(){vfunc_called(this, "_ZN6S208C63v41Ev");}
void  S208C6 ::v42(){vfunc_called(this, "_ZN6S208C63v42Ev");}
void  S208C6 ::v43(){vfunc_called(this, "_ZN6S208C63v43Ev");}
void  S208C6 ::v44(){vfunc_called(this, "_ZN6S208C63v44Ev");}
void  S208C6 ::v45(){vfunc_called(this, "_ZN6S208C63v45Ev");}
void  S208C6 ::v46(){vfunc_called(this, "_ZN6S208C63v46Ev");}
void  S208C6 ::v47(){vfunc_called(this, "_ZN6S208C63v47Ev");}
void  S208C6 ::v48(){vfunc_called(this, "_ZN6S208C63v48Ev");}
void  S208C6 ::v49(){vfunc_called(this, "_ZN6S208C63v49Ev");}
void  S208C6 ::v50(){vfunc_called(this, "_ZN6S208C63v50Ev");}
void  S208C6 ::v51(){vfunc_called(this, "_ZN6S208C63v51Ev");}
void  S208C6 ::v52(){vfunc_called(this, "_ZN6S208C63v52Ev");}
void  S208C6 ::v53(){vfunc_called(this, "_ZN6S208C63v53Ev");}
void  S208C6 ::v54(){vfunc_called(this, "_ZN6S208C63v54Ev");}
void  S208C6 ::v55(){vfunc_called(this, "_ZN6S208C63v55Ev");}
void  S208C6 ::v56(){vfunc_called(this, "_ZN6S208C63v56Ev");}
void  S208C6 ::v57(){vfunc_called(this, "_ZN6S208C63v57Ev");}
void  S208C6 ::v58(){vfunc_called(this, "_ZN6S208C63v58Ev");}
void  S208C6 ::v59(){vfunc_called(this, "_ZN6S208C63v59Ev");}
void  S208C6 ::v60(){vfunc_called(this, "_ZN6S208C63v60Ev");}
void  S208C6 ::v61(){vfunc_called(this, "_ZN6S208C63v61Ev");}
void  S208C6 ::v62(){vfunc_called(this, "_ZN6S208C63v62Ev");}
void  S208C6 ::v63(){vfunc_called(this, "_ZN6S208C63v63Ev");}
void  S208C6 ::v64(){vfunc_called(this, "_ZN6S208C63v64Ev");}
void  S208C6 ::v65(){vfunc_called(this, "_ZN6S208C63v65Ev");}
void  S208C6 ::v66(){vfunc_called(this, "_ZN6S208C63v66Ev");}
void  S208C6 ::v67(){vfunc_called(this, "_ZN6S208C63v67Ev");}
S208C6 ::S208C6(){ note_ctor("S208C6", this);} // tgen

static void Test_S208C6()
{
  extern Class_Descriptor cd_S208C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S208C6, buf);
    S208C6 *dp, &lv = *(dp=new (buf) S208C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S208C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S208C6)");
    check_field_offset(lv, s208c6f0, ABISELECT(8,4), "S208C6.s208c6f0");
    check_field_offset(lv, s208c6f1, ABISELECT(16,8), "S208C6.s208c6f1");
    check_field_offset(lv, s208c6f2, ABISELECT(24,16), "S208C6.s208c6f2");
    check_field_offset(lv, s208c6f3, ABISELECT(56,32), "S208C6.s208c6f3");
    check_field_offset(lv, s208c6f4, ABISELECT(64,40), "S208C6.s208c6f4");
    check_field_offset(lv, s208c6f5, ABISELECT(72,44), "S208C6.s208c6f5");
    check_field_offset(lv, s208c6f6, ABISELECT(80,52), "S208C6.s208c6f6");
    test_class_info(&lv, &cd_S208C6);
    dp->~S208C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS208C6(Test_S208C6, "S208C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S208C6C1Ev();
extern void _ZN6S208C6D1Ev();
Name_Map name_map_S208C6[] = {
  NSPAIR(_ZN6S208C6C1Ev),
  NSPAIR(_ZN6S208C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S208C6[];
extern void _ZN6S208C6D1Ev();
extern void _ZN6S208C6D0Ev();
extern void _ZN6S208C62v4Ev();
extern void _ZN6S208C62v5Ev();
extern void _ZN6S208C62v6Ev();
extern void _ZN6S208C62v7Ev();
extern void _ZN6S208C62v8Ev();
extern void _ZN6S208C62v9Ev();
extern void _ZN6S208C63v10Ev();
extern void _ZN6S208C63v11Ev();
extern void _ZN6S208C63v12Ev();
extern void _ZN6S208C63v13Ev();
extern void _ZN6S208C63v14Ev();
extern void _ZN6S208C63v15Ev();
extern void _ZN6S208C63v16Ev();
extern void _ZN6S208C63v17Ev();
extern void _ZN6S208C63v18Ev();
extern void _ZN6S208C63v19Ev();
extern void _ZN6S208C63v20Ev();
extern void _ZN6S208C63v21Ev();
extern void _ZN6S208C63v22Ev();
extern void _ZN6S208C63v23Ev();
extern void _ZN6S208C63v24Ev();
extern void _ZN6S208C63v25Ev();
extern void _ZN6S208C63v26Ev();
extern void _ZN6S208C63v27Ev();
extern void _ZN6S208C63v28Ev();
extern void _ZN6S208C63v29Ev();
extern void _ZN6S208C63v30Ev();
extern void _ZN6S208C63v31Ev();
extern void _ZN6S208C63v32Ev();
extern void _ZN6S208C63v33Ev();
extern void _ZN6S208C63v34Ev();
extern void _ZN6S208C63v35Ev();
extern void _ZN6S208C63v36Ev();
extern void _ZN6S208C63v37Ev();
extern void _ZN6S208C63v38Ev();
extern void _ZN6S208C63v39Ev();
extern void _ZN6S208C63v40Ev();
extern void _ZN6S208C63v41Ev();
extern void _ZN6S208C63v42Ev();
extern void _ZN6S208C63v43Ev();
extern void _ZN6S208C63v44Ev();
extern void _ZN6S208C63v45Ev();
extern void _ZN6S208C63v46Ev();
extern void _ZN6S208C63v47Ev();
extern void _ZN6S208C63v48Ev();
extern void _ZN6S208C63v49Ev();
extern void _ZN6S208C63v50Ev();
extern void _ZN6S208C63v51Ev();
extern void _ZN6S208C63v52Ev();
extern void _ZN6S208C63v53Ev();
extern void _ZN6S208C63v54Ev();
extern void _ZN6S208C63v55Ev();
extern void _ZN6S208C63v56Ev();
extern void _ZN6S208C63v57Ev();
extern void _ZN6S208C63v58Ev();
extern void _ZN6S208C63v59Ev();
extern void _ZN6S208C63v60Ev();
extern void _ZN6S208C63v61Ev();
extern void _ZN6S208C63v62Ev();
extern void _ZN6S208C63v63Ev();
extern void _ZN6S208C63v64Ev();
extern void _ZN6S208C63v65Ev();
extern void _ZN6S208C63v66Ev();
extern void _ZN6S208C63v67Ev();
static  VTBL_ENTRY vtc_S208C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S208C6[0]),
  (VTBL_ENTRY)&_ZN6S208C6D1Ev,
  (VTBL_ENTRY)&_ZN6S208C6D0Ev,
  (VTBL_ENTRY)&_ZN6S208C62v4Ev,
  (VTBL_ENTRY)&_ZN6S208C62v5Ev,
  (VTBL_ENTRY)&_ZN6S208C62v6Ev,
  (VTBL_ENTRY)&_ZN6S208C62v7Ev,
  (VTBL_ENTRY)&_ZN6S208C62v8Ev,
  (VTBL_ENTRY)&_ZN6S208C62v9Ev,
  (VTBL_ENTRY)&_ZN6S208C63v10Ev,
  (VTBL_ENTRY)&_ZN6S208C63v11Ev,
  (VTBL_ENTRY)&_ZN6S208C63v12Ev,
  (VTBL_ENTRY)&_ZN6S208C63v13Ev,
  (VTBL_ENTRY)&_ZN6S208C63v14Ev,
  (VTBL_ENTRY)&_ZN6S208C63v15Ev,
  (VTBL_ENTRY)&_ZN6S208C63v16Ev,
  (VTBL_ENTRY)&_ZN6S208C63v17Ev,
  (VTBL_ENTRY)&_ZN6S208C63v18Ev,
  (VTBL_ENTRY)&_ZN6S208C63v19Ev,
  (VTBL_ENTRY)&_ZN6S208C63v20Ev,
  (VTBL_ENTRY)&_ZN6S208C63v21Ev,
  (VTBL_ENTRY)&_ZN6S208C63v22Ev,
  (VTBL_ENTRY)&_ZN6S208C63v23Ev,
  (VTBL_ENTRY)&_ZN6S208C63v24Ev,
  (VTBL_ENTRY)&_ZN6S208C63v25Ev,
  (VTBL_ENTRY)&_ZN6S208C63v26Ev,
  (VTBL_ENTRY)&_ZN6S208C63v27Ev,
  (VTBL_ENTRY)&_ZN6S208C63v28Ev,
  (VTBL_ENTRY)&_ZN6S208C63v29Ev,
  (VTBL_ENTRY)&_ZN6S208C63v30Ev,
  (VTBL_ENTRY)&_ZN6S208C63v31Ev,
  (VTBL_ENTRY)&_ZN6S208C63v32Ev,
  (VTBL_ENTRY)&_ZN6S208C63v33Ev,
  (VTBL_ENTRY)&_ZN6S208C63v34Ev,
  (VTBL_ENTRY)&_ZN6S208C63v35Ev,
  (VTBL_ENTRY)&_ZN6S208C63v36Ev,
  (VTBL_ENTRY)&_ZN6S208C63v37Ev,
  (VTBL_ENTRY)&_ZN6S208C63v38Ev,
  (VTBL_ENTRY)&_ZN6S208C63v39Ev,
  (VTBL_ENTRY)&_ZN6S208C63v40Ev,
  (VTBL_ENTRY)&_ZN6S208C63v41Ev,
  (VTBL_ENTRY)&_ZN6S208C63v42Ev,
  (VTBL_ENTRY)&_ZN6S208C63v43Ev,
  (VTBL_ENTRY)&_ZN6S208C63v44Ev,
  (VTBL_ENTRY)&_ZN6S208C63v45Ev,
  (VTBL_ENTRY)&_ZN6S208C63v46Ev,
  (VTBL_ENTRY)&_ZN6S208C63v47Ev,
  (VTBL_ENTRY)&_ZN6S208C63v48Ev,
  (VTBL_ENTRY)&_ZN6S208C63v49Ev,
  (VTBL_ENTRY)&_ZN6S208C63v50Ev,
  (VTBL_ENTRY)&_ZN6S208C63v51Ev,
  (VTBL_ENTRY)&_ZN6S208C63v52Ev,
  (VTBL_ENTRY)&_ZN6S208C63v53Ev,
  (VTBL_ENTRY)&_ZN6S208C63v54Ev,
  (VTBL_ENTRY)&_ZN6S208C63v55Ev,
  (VTBL_ENTRY)&_ZN6S208C63v56Ev,
  (VTBL_ENTRY)&_ZN6S208C63v57Ev,
  (VTBL_ENTRY)&_ZN6S208C63v58Ev,
  (VTBL_ENTRY)&_ZN6S208C63v59Ev,
  (VTBL_ENTRY)&_ZN6S208C63v60Ev,
  (VTBL_ENTRY)&_ZN6S208C63v61Ev,
  (VTBL_ENTRY)&_ZN6S208C63v62Ev,
  (VTBL_ENTRY)&_ZN6S208C63v63Ev,
  (VTBL_ENTRY)&_ZN6S208C63v64Ev,
  (VTBL_ENTRY)&_ZN6S208C63v65Ev,
  (VTBL_ENTRY)&_ZN6S208C63v66Ev,
  (VTBL_ENTRY)&_ZN6S208C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S208C6[];
extern  VTBL_ENTRY _ZTV6S208C6[];
Class_Descriptor cd_S208C6 = {  "S208C6", // class name
  0,0,//no base classes
  &(vtc_S208C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S208C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S208C6),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  S208C5  : S208C6 {
  int s208c5f0[2];
  void *s208c5f1;
  int s208c5f2[2];
  ::S100C39_nt s208c5f3;
  ::S100C39_nt s208c5f4;
  ::S2382C30 s208c5f5;
  ::S100C39_nt s208c5f6;
  unsigned int s208c5f7:1;
  unsigned int s208c5f8:1;
  unsigned int s208c5f9:1;
  unsigned int s208c5f10:1;
  unsigned int s208c5f11:1;
  int s208c5f12[2];
  virtual  ~S208C5(); // _ZN6S208C5D1Ev
  virtual void  v68(); // _ZN6S208C53v68Ev
  virtual void  v69(); // _ZN6S208C53v69Ev
  virtual void  v70(); // _ZN6S208C53v70Ev
  virtual void  v71(); // _ZN6S208C53v71Ev
  virtual void  v72(); // _ZN6S208C53v72Ev
  virtual void  v73(); // _ZN6S208C53v73Ev
  virtual void  v74(); // _ZN6S208C53v74Ev
  virtual void  v75(); // _ZN6S208C53v75Ev
  virtual void  v76(); // _ZN6S208C53v76Ev
  virtual void  v77(); // _ZN6S208C53v77Ev
  virtual void  v78(); // _ZN6S208C53v78Ev
  virtual void  v79(); // _ZN6S208C53v79Ev
  virtual void  v80(); // _ZN6S208C53v80Ev
  virtual void  v81(); // _ZN6S208C53v81Ev
  virtual void  v82(); // _ZN6S208C53v82Ev
  virtual void  v83(); // _ZN6S208C53v83Ev
  virtual void  v84(); // _ZN6S208C53v84Ev
  virtual void  v85(); // _ZN6S208C53v85Ev
  virtual void  v86(); // _ZN6S208C53v86Ev
  virtual void  v87(); // _ZN6S208C53v87Ev
  virtual void  v88(); // _ZN6S208C53v88Ev
  virtual void  v89(); // _ZN6S208C53v89Ev
  S208C5(); // tgen
};
//SIG(-1 S208C5) C1{ BC2{ vd 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 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 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S208C5 ::~S208C5(){ note_dtor("S208C5", this);}
void  S208C5 ::v68(){vfunc_called(this, "_ZN6S208C53v68Ev");}
void  S208C5 ::v69(){vfunc_called(this, "_ZN6S208C53v69Ev");}
void  S208C5 ::v70(){vfunc_called(this, "_ZN6S208C53v70Ev");}
void  S208C5 ::v71(){vfunc_called(this, "_ZN6S208C53v71Ev");}
void  S208C5 ::v72(){vfunc_called(this, "_ZN6S208C53v72Ev");}
void  S208C5 ::v73(){vfunc_called(this, "_ZN6S208C53v73Ev");}
void  S208C5 ::v74(){vfunc_called(this, "_ZN6S208C53v74Ev");}
void  S208C5 ::v75(){vfunc_called(this, "_ZN6S208C53v75Ev");}
void  S208C5 ::v76(){vfunc_called(this, "_ZN6S208C53v76Ev");}
void  S208C5 ::v77(){vfunc_called(this, "_ZN6S208C53v77Ev");}
void  S208C5 ::v78(){vfunc_called(this, "_ZN6S208C53v78Ev");}
void  S208C5 ::v79(){vfunc_called(this, "_ZN6S208C53v79Ev");}
void  S208C5 ::v80(){vfunc_called(this, "_ZN6S208C53v80Ev");}
void  S208C5 ::v81(){vfunc_called(this, "_ZN6S208C53v81Ev");}
void  S208C5 ::v82(){vfunc_called(this, "_ZN6S208C53v82Ev");}
void  S208C5 ::v83(){vfunc_called(this, "_ZN6S208C53v83Ev");}
void  S208C5 ::v84(){vfunc_called(this, "_ZN6S208C53v84Ev");}
void  S208C5 ::v85(){vfunc_called(this, "_ZN6S208C53v85Ev");}
void  S208C5 ::v86(){vfunc_called(this, "_ZN6S208C53v86Ev");}
void  S208C5 ::v87(){vfunc_called(this, "_ZN6S208C53v87Ev");}
void  S208C5 ::v88(){vfunc_called(this, "_ZN6S208C53v88Ev");}
void  S208C5 ::v89(){vfunc_called(this, "_ZN6S208C53v89Ev");}
S208C5 ::S208C5(){ note_ctor("S208C5", this);} // tgen

static void Test_S208C5()
{
  extern Class_Descriptor cd_S208C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S208C5, buf);
    S208C5 *dp, &lv = *(dp=new (buf) S208C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S208C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S208C5)");
    check_base_class_offset(lv, (S208C6*), 0, "S208C5");
    check_field_offset(lv, s208c5f0, ABISELECT(96,60), "S208C5.s208c5f0");
    check_field_offset(lv, s208c5f1, ABISELECT(104,68), "S208C5.s208c5f1");
    check_field_offset(lv, s208c5f2, ABISELECT(112,72), "S208C5.s208c5f2");
    check_field_offset(lv, s208c5f3, ABISELECT(120,80), "S208C5.s208c5f3");
    check_field_offset(lv, s208c5f4, ABISELECT(136,92), "S208C5.s208c5f4");
    check_field_offset(lv, s208c5f5, ABISELECT(152,104), "S208C5.s208c5f5");
    check_field_offset(lv, s208c5f6, ABISELECT(160,108), "S208C5.s208c5f6");
    set_bf_and_test(lv, s208c5f7, ABISELECT(176,120), 0, 1, 1, "S208C5");
    set_bf_and_test(lv, s208c5f8, ABISELECT(176,120), 1, 1, 1, "S208C5");
    set_bf_and_test(lv, s208c5f9, ABISELECT(176,120), 2, 1, 1, "S208C5");
    set_bf_and_test(lv, s208c5f10, ABISELECT(176,120), 3, 1, 1, "S208C5");
    set_bf_and_test(lv, s208c5f11, ABISELECT(176,120), 4, 1, 1, "S208C5");
    check_field_offset(lv, s208c5f12, ABISELECT(180,124), "S208C5.s208c5f12");
    test_class_info(&lv, &cd_S208C5);
    dp->~S208C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS208C5(Test_S208C5, "S208C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S208C5C1Ev();
extern void _ZN6S208C5D1Ev();
Name_Map name_map_S208C5[] = {
  NSPAIR(_ZN6S208C5C1Ev),
  NSPAIR(_ZN6S208C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S208C6;
extern VTBL_ENTRY _ZTI6S208C6[];
extern  VTBL_ENTRY _ZTV6S208C6[];
static Base_Class bases_S208C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S208C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S208C5[];
extern void _ZN6S208C5D1Ev();
extern void _ZN6S208C5D0Ev();
extern void _ZN6S208C62v4Ev();
extern void _ZN6S208C62v5Ev();
extern void _ZN6S208C62v6Ev();
extern void _ZN6S208C62v7Ev();
extern void _ZN6S208C62v8Ev();
extern void _ZN6S208C62v9Ev();
extern void _ZN6S208C63v10Ev();
extern void _ZN6S208C63v11Ev();
extern void _ZN6S208C63v12Ev();
extern void _ZN6S208C63v13Ev();
extern void _ZN6S208C63v14Ev();
extern void _ZN6S208C63v15Ev();
extern void _ZN6S208C63v16Ev();
extern void _ZN6S208C63v17Ev();
extern void _ZN6S208C63v18Ev();
extern void _ZN6S208C63v19Ev();
extern void _ZN6S208C63v20Ev();
extern void _ZN6S208C63v21Ev();
extern void _ZN6S208C63v22Ev();
extern void _ZN6S208C63v23Ev();
extern void _ZN6S208C63v24Ev();
extern void _ZN6S208C63v25Ev();
extern void _ZN6S208C63v26Ev();
extern void _ZN6S208C63v27Ev();
extern void _ZN6S208C63v28Ev();
extern void _ZN6S208C63v29Ev();
extern void _ZN6S208C63v30Ev();
extern void _ZN6S208C63v31Ev();
extern void _ZN6S208C63v32Ev();
extern void _ZN6S208C63v33Ev();
extern void _ZN6S208C63v34Ev();
extern void _ZN6S208C63v35Ev();
extern void _ZN6S208C63v36Ev();
extern void _ZN6S208C63v37Ev();
extern void _ZN6S208C63v38Ev();
extern void _ZN6S208C63v39Ev();
extern void _ZN6S208C63v40Ev();
extern void _ZN6S208C63v41Ev();
extern void _ZN6S208C63v42Ev();
extern void _ZN6S208C63v43Ev();
extern void _ZN6S208C63v44Ev();
extern void _ZN6S208C63v45Ev();
extern void _ZN6S208C63v46Ev();
extern void _ZN6S208C63v47Ev();
extern void _ZN6S208C63v48Ev();
extern void _ZN6S208C63v49Ev();
extern void _ZN6S208C63v50Ev();
extern void _ZN6S208C63v51Ev();
extern void _ZN6S208C63v52Ev();
extern void _ZN6S208C63v53Ev();
extern void _ZN6S208C63v54Ev();
extern void _ZN6S208C63v55Ev();
extern void _ZN6S208C63v56Ev();
extern void _ZN6S208C63v57Ev();
extern void _ZN6S208C63v58Ev();
extern void _ZN6S208C63v59Ev();
extern void _ZN6S208C63v60Ev();
extern void _ZN6S208C63v61Ev();
extern void _ZN6S208C63v62Ev();
extern void _ZN6S208C63v63Ev();
extern void _ZN6S208C63v64Ev();
extern void _ZN6S208C63v65Ev();
extern void _ZN6S208C63v66Ev();
extern void _ZN6S208C63v67Ev();
extern void _ZN6S208C53v68Ev();
extern void _ZN6S208C53v69Ev();
extern void _ZN6S208C53v70Ev();
extern void _ZN6S208C53v71Ev();
extern void _ZN6S208C53v72Ev();
extern void _ZN6S208C53v73Ev();
extern void _ZN6S208C53v74Ev();
extern void _ZN6S208C53v75Ev();
extern void _ZN6S208C53v76Ev();
extern void _ZN6S208C53v77Ev();
extern void _ZN6S208C53v78Ev();
extern void _ZN6S208C53v79Ev();
extern void _ZN6S208C53v80Ev();
extern void _ZN6S208C53v81Ev();
extern void _ZN6S208C53v82Ev();
extern void _ZN6S208C53v83Ev();
extern void _ZN6S208C53v84Ev();
extern void _ZN6S208C53v85Ev();
extern void _ZN6S208C53v86Ev();
extern void _ZN6S208C53v87Ev();
extern void _ZN6S208C53v88Ev();
extern void _ZN6S208C53v89Ev();
static  VTBL_ENTRY vtc_S208C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S208C5[0]),
  (VTBL_ENTRY)&_ZN6S208C5D1Ev,
  (VTBL_ENTRY)&_ZN6S208C5D0Ev,
  (VTBL_ENTRY)&_ZN6S208C62v4Ev,
  (VTBL_ENTRY)&_ZN6S208C62v5Ev,
  (VTBL_ENTRY)&_ZN6S208C62v6Ev,
  (VTBL_ENTRY)&_ZN6S208C62v7Ev,
  (VTBL_ENTRY)&_ZN6S208C62v8Ev,
  (VTBL_ENTRY)&_ZN6S208C62v9Ev,
  (VTBL_ENTRY)&_ZN6S208C63v10Ev,
  (VTBL_ENTRY)&_ZN6S208C63v11Ev,
  (VTBL_ENTRY)&_ZN6S208C63v12Ev,
  (VTBL_ENTRY)&_ZN6S208C63v13Ev,
  (VTBL_ENTRY)&_ZN6S208C63v14Ev,
  (VTBL_ENTRY)&_ZN6S208C63v15Ev,
  (VTBL_ENTRY)&_ZN6S208C63v16Ev,
  (VTBL_ENTRY)&_ZN6S208C63v17Ev,
  (VTBL_ENTRY)&_ZN6S208C63v18Ev,
  (VTBL_ENTRY)&_ZN6S208C63v19Ev,
  (VTBL_ENTRY)&_ZN6S208C63v20Ev,
  (VTBL_ENTRY)&_ZN6S208C63v21Ev,
  (VTBL_ENTRY)&_ZN6S208C63v22Ev,
  (VTBL_ENTRY)&_ZN6S208C63v23Ev,
  (VTBL_ENTRY)&_ZN6S208C63v24Ev,
  (VTBL_ENTRY)&_ZN6S208C63v25Ev,
  (VTBL_ENTRY)&_ZN6S208C63v26Ev,
  (VTBL_ENTRY)&_ZN6S208C63v27Ev,
  (VTBL_ENTRY)&_ZN6S208C63v28Ev,
  (VTBL_ENTRY)&_ZN6S208C63v29Ev,
  (VTBL_ENTRY)&_ZN6S208C63v30Ev,
  (VTBL_ENTRY)&_ZN6S208C63v31Ev,
  (VTBL_ENTRY)&_ZN6S208C63v32Ev,
  (VTBL_ENTRY)&_ZN6S208C63v33Ev,
  (VTBL_ENTRY)&_ZN6S208C63v34Ev,
  (VTBL_ENTRY)&_ZN6S208C63v35Ev,
  (VTBL_ENTRY)&_ZN6S208C63v36Ev,
  (VTBL_ENTRY)&_ZN6S208C63v37Ev,
  (VTBL_ENTRY)&_ZN6S208C63v38Ev,
  (VTBL_ENTRY)&_ZN6S208C63v39Ev,
  (VTBL_ENTRY)&_ZN6S208C63v40Ev,
  (VTBL_ENTRY)&_ZN6S208C63v41Ev,
  (VTBL_ENTRY)&_ZN6S208C63v42Ev,
  (VTBL_ENTRY)&_ZN6S208C63v43Ev,
  (VTBL_ENTRY)&_ZN6S208C63v44Ev,
  (VTBL_ENTRY)&_ZN6S208C63v45Ev,
  (VTBL_ENTRY)&_ZN6S208C63v46Ev,
  (VTBL_ENTRY)&_ZN6S208C63v47Ev,
  (VTBL_ENTRY)&_ZN6S208C63v48Ev,
  (VTBL_ENTRY)&_ZN6S208C63v49Ev,
  (VTBL_ENTRY)&_ZN6S208C63v50Ev,
  (VTBL_ENTRY)&_ZN6S208C63v51Ev,
  (VTBL_ENTRY)&_ZN6S208C63v52Ev,
  (VTBL_ENTRY)&_ZN6S208C63v53Ev,
  (VTBL_ENTRY)&_ZN6S208C63v54Ev,
  (VTBL_ENTRY)&_ZN6S208C63v55Ev,
  (VTBL_ENTRY)&_ZN6S208C63v56Ev,
  (VTBL_ENTRY)&_ZN6S208C63v57Ev,
  (VTBL_ENTRY)&_ZN6S208C63v58Ev,
  (VTBL_ENTRY)&_ZN6S208C63v59Ev,
  (VTBL_ENTRY)&_ZN6S208C63v60Ev,
  (VTBL_ENTRY)&_ZN6S208C63v61Ev,
  (VTBL_ENTRY)&_ZN6S208C63v62Ev,
  (VTBL_ENTRY)&_ZN6S208C63v63Ev,
  (VTBL_ENTRY)&_ZN6S208C63v64Ev,
  (VTBL_ENTRY)&_ZN6S208C63v65Ev,
  (VTBL_ENTRY)&_ZN6S208C63v66Ev,
  (VTBL_ENTRY)&_ZN6S208C63v67Ev,
  (VTBL_ENTRY)&_ZN6S208C53v68Ev,
  (VTBL_ENTRY)&_ZN6S208C53v69Ev,
  (VTBL_ENTRY)&_ZN6S208C53v70Ev,
  (VTBL_ENTRY)&_ZN6S208C53v71Ev,
  (VTBL_ENTRY)&_ZN6S208C53v72Ev,
  (VTBL_ENTRY)&_ZN6S208C53v73Ev,
  (VTBL_ENTRY)&_ZN6S208C53v74Ev,
  (VTBL_ENTRY)&_ZN6S208C53v75Ev,
  (VTBL_ENTRY)&_ZN6S208C53v76Ev,
  (VTBL_ENTRY)&_ZN6S208C53v77Ev,
  (VTBL_ENTRY)&_ZN6S208C53v78Ev,
  (VTBL_ENTRY)&_ZN6S208C53v79Ev,
  (VTBL_ENTRY)&_ZN6S208C53v80Ev,
  (VTBL_ENTRY)&_ZN6S208C53v81Ev,
  (VTBL_ENTRY)&_ZN6S208C53v82Ev,
  (VTBL_ENTRY)&_ZN6S208C53v83Ev,
  (VTBL_ENTRY)&_ZN6S208C53v84Ev,
  (VTBL_ENTRY)&_ZN6S208C53v85Ev,
  (VTBL_ENTRY)&_ZN6S208C53v86Ev,
  (VTBL_ENTRY)&_ZN6S208C53v87Ev,
  (VTBL_ENTRY)&_ZN6S208C53v88Ev,
  (VTBL_ENTRY)&_ZN6S208C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S208C5[];
extern  VTBL_ENTRY _ZTV6S208C5[];
Class_Descriptor cd_S208C5 = {  "S208C5", // class name
  bases_S208C5, 1,
  &(vtc_S208C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S208C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S208C5),90, //virtual function table var
  2, // 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  S208C4  : S208C5 {
  unsigned int s208c4f0:1;
  unsigned int s208c4f1:1;
  unsigned int s208c4f2:1;
  ::S195C23_nt s208c4f3;
  ::S100C44 s208c4f4;
  ::S100C40 s208c4f5;
  ::S100C19 s208c4f6;
  int s208c4f7[3];
  virtual  ~S208C4(); // _ZN6S208C4D1Ev
  virtual void  v90(); // _ZN6S208C43v90Ev
  virtual void  v91(); // _ZN6S208C43v91Ev
  virtual void  v92(); // _ZN6S208C43v92Ev
  virtual void  v93(); // _ZN6S208C43v93Ev
  virtual void  v94(); // _ZN6S208C43v94Ev
  virtual void  v95(); // _ZN6S208C43v95Ev
  virtual void  v96(); // _ZN6S208C43v96Ev
  virtual void  v97(); // _ZN6S208C43v97Ev
  virtual void  v98(); // _ZN6S208C43v98Ev
  virtual void  v99(); // _ZN6S208C43v99Ev
  virtual void  v100(); // _ZN6S208C44v100Ev
  virtual void  v101(); // _ZN6S208C44v101Ev
  virtual void  v102(); // _ZN6S208C44v102Ev
  virtual void  v103(); // _ZN6S208C44v103Ev
  virtual void  v104(); // _ZN6S208C44v104Ev
  virtual void  v105(); // _ZN6S208C44v105Ev
  virtual void  v106(); // _ZN6S208C44v106Ev
  virtual void  v107(); // _ZN6S208C44v107Ev
  virtual void  v108(); // _ZN6S208C44v108Ev
  virtual void  v109(); // _ZN6S208C44v109Ev
  S208C4(); // tgen
};
//SIG(-1 S208C4) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[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 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC6 FC14{ BC15{ BC8}} Fi[3]}


 S208C4 ::~S208C4(){ note_dtor("S208C4", this);}
void  S208C4 ::v90(){vfunc_called(this, "_ZN6S208C43v90Ev");}
void  S208C4 ::v91(){vfunc_called(this, "_ZN6S208C43v91Ev");}
void  S208C4 ::v92(){vfunc_called(this, "_ZN6S208C43v92Ev");}
void  S208C4 ::v93(){vfunc_called(this, "_ZN6S208C43v93Ev");}
void  S208C4 ::v94(){vfunc_called(this, "_ZN6S208C43v94Ev");}
void  S208C4 ::v95(){vfunc_called(this, "_ZN6S208C43v95Ev");}
void  S208C4 ::v96(){vfunc_called(this, "_ZN6S208C43v96Ev");}
void  S208C4 ::v97(){vfunc_called(this, "_ZN6S208C43v97Ev");}
void  S208C4 ::v98(){vfunc_called(this, "_ZN6S208C43v98Ev");}
void  S208C4 ::v99(){vfunc_called(this, "_ZN6S208C43v99Ev");}
void  S208C4 ::v100(){vfunc_called(this, "_ZN6S208C44v100Ev");}
void  S208C4 ::v101(){vfunc_called(this, "_ZN6S208C44v101Ev");}
void  S208C4 ::v102(){vfunc_called(this, "_ZN6S208C44v102Ev");}
void  S208C4 ::v103(){vfunc_called(this, "_ZN6S208C44v103Ev");}
void  S208C4 ::v104(){vfunc_called(this, "_ZN6S208C44v104Ev");}
void  S208C4 ::v105(){vfunc_called(this, "_ZN6S208C44v105Ev");}
void  S208C4 ::v106(){vfunc_called(this, "_ZN6S208C44v106Ev");}
void  S208C4 ::v107(){vfunc_called(this, "_ZN6S208C44v107Ev");}
void  S208C4 ::v108(){vfunc_called(this, "_ZN6S208C44v108Ev");}
void  S208C4 ::v109(){vfunc_called(this, "_ZN6S208C44v109Ev");}
S208C4 ::S208C4(){ note_ctor("S208C4", this);} // tgen

static void Test_S208C4()
{
  extern Class_Descriptor cd_S208C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S208C4, buf);
    S208C4 *dp, &lv = *(dp=new (buf) S208C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S208C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S208C4)");
    check_base_class_offset(lv, (S208C6*)(S208C5*), 0, "S208C4");
    check_base_class_offset(lv, (S208C5*), 0, "S208C4");
    set_bf_and_test(lv, s208c4f0, ABISELECT(188,132), 0, 1, 1, "S208C4");
    set_bf_and_test(lv, s208c4f1, ABISELECT(188,132), 1, 1, 1, "S208C4");
    set_bf_and_test(lv, s208c4f2, ABISELECT(188,132), 2, 1, 1, "S208C4");
    check_field_offset(lv, s208c4f3, ABISELECT(192,136), "S208C4.s208c4f3");
    check_field_offset(lv, s208c4f4, ABISELECT(208,148), "S208C4.s208c4f4");
    check_field_offset(lv, s208c4f5, ABISELECT(224,160), "S208C4.s208c4f5");
    check_field_offset(lv, s208c4f6, ABISELECT(240,172), "S208C4.s208c4f6");
    check_field_offset(lv, s208c4f7, ABISELECT(256,184), "S208C4.s208c4f7");
    test_class_info(&lv, &cd_S208C4);
    dp->~S208C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS208C4(Test_S208C4, "S208C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S208C4C1Ev();
extern void _ZN6S208C4D1Ev();
Name_Map name_map_S208C4[] = {
  NSPAIR(_ZN6S208C4C1Ev),
  NSPAIR(_ZN6S208C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S208C6;
extern VTBL_ENTRY _ZTI6S208C6[];
extern  VTBL_ENTRY _ZTV6S208C6[];
extern Class_Descriptor cd_S208C5;
extern VTBL_ENTRY _ZTI6S208C5[];
extern  VTBL_ENTRY _ZTV6S208C5[];
static Base_Class bases_S208C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S208C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S208C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S208C4[];
extern void _ZN6S208C4D1Ev();
extern void _ZN6S208C4D0Ev();
extern void _ZN6S208C62v4Ev();
extern void _ZN6S208C62v5Ev();
extern void _ZN6S208C62v6Ev();
extern void _ZN6S208C62v7Ev();
extern void _ZN6S208C62v8Ev();
extern void _ZN6S208C62v9Ev();
extern void _ZN6S208C63v10Ev();
extern void _ZN6S208C63v11Ev();
extern void _ZN6S208C63v12Ev();
extern void _ZN6S208C63v13Ev();
extern void _ZN6S208C63v14Ev();
extern void _ZN6S208C63v15Ev();
extern void _ZN6S208C63v16Ev();
extern void _ZN6S208C63v17Ev();
extern void _ZN6S208C63v18Ev();
extern void _ZN6S208C63v19Ev();
extern void _ZN6S208C63v20Ev();
extern void _ZN6S208C63v21Ev();
extern void _ZN6S208C63v22Ev();
extern void _ZN6S208C63v23Ev();
extern void _ZN6S208C63v24Ev();
extern void _ZN6S208C63v25Ev();
extern void _ZN6S208C63v26Ev();
extern void _ZN6S208C63v27Ev();
extern void _ZN6S208C63v28Ev();
extern void _ZN6S208C63v29Ev();
extern void _ZN6S208C63v30Ev();
extern void _ZN6S208C63v31Ev();
extern void _ZN6S208C63v32Ev();
extern void _ZN6S208C63v33Ev();
extern void _ZN6S208C63v34Ev();
extern void _ZN6S208C63v35Ev();
extern void _ZN6S208C63v36Ev();
extern void _ZN6S208C63v37Ev();
extern void _ZN6S208C63v38Ev();
extern void _ZN6S208C63v39Ev();
extern void _ZN6S208C63v40Ev();
extern void _ZN6S208C63v41Ev();
extern void _ZN6S208C63v42Ev();
extern void _ZN6S208C63v43Ev();
extern void _ZN6S208C63v44Ev();
extern void _ZN6S208C63v45Ev();
extern void _ZN6S208C63v46Ev();
extern void _ZN6S208C63v47Ev();
extern void _ZN6S208C63v48Ev();
extern void _ZN6S208C63v49Ev();
extern void _ZN6S208C63v50Ev();
extern void _ZN6S208C63v51Ev();
extern void _ZN6S208C63v52Ev();
extern void _ZN6S208C63v53Ev();
extern void _ZN6S208C63v54Ev();
extern void _ZN6S208C63v55Ev();
extern void _ZN6S208C63v56Ev();
extern void _ZN6S208C63v57Ev();
extern void _ZN6S208C63v58Ev();
extern void _ZN6S208C63v59Ev();
extern void _ZN6S208C63v60Ev();
extern void _ZN6S208C63v61Ev();
extern void _ZN6S208C63v62Ev();
extern void _ZN6S208C63v63Ev();
extern void _ZN6S208C63v64Ev();
extern void _ZN6S208C63v65Ev();
extern void _ZN6S208C63v66Ev();
extern void _ZN6S208C63v67Ev();
extern void _ZN6S208C53v68Ev();
extern void _ZN6S208C53v69Ev();
extern void _ZN6S208C53v70Ev();
extern void _ZN6S208C53v71Ev();
extern void _ZN6S208C53v72Ev();
extern void _ZN6S208C53v73Ev();
extern void _ZN6S208C53v74Ev();
extern void _ZN6S208C53v75Ev();
extern void _ZN6S208C53v76Ev();
extern void _ZN6S208C53v77Ev();
extern void _ZN6S208C53v78Ev();
extern void _ZN6S208C53v79Ev();
extern void _ZN6S208C53v80Ev();
extern void _ZN6S208C53v81Ev();
extern void _ZN6S208C53v82Ev();
extern void _ZN6S208C53v83Ev();
extern void _ZN6S208C53v84Ev();
extern void _ZN6S208C53v85Ev();
extern void _ZN6S208C53v86Ev();
extern void _ZN6S208C53v87Ev();
extern void _ZN6S208C53v88Ev();
extern void _ZN6S208C53v89Ev();
extern void _ZN6S208C43v90Ev();
extern void _ZN6S208C43v91Ev();
extern void _ZN6S208C43v92Ev();
extern void _ZN6S208C43v93Ev();
extern void _ZN6S208C43v94Ev();
extern void _ZN6S208C43v95Ev();
extern void _ZN6S208C43v96Ev();
extern void _ZN6S208C43v97Ev();
extern void _ZN6S208C43v98Ev();
extern void _ZN6S208C43v99Ev();
extern void _ZN6S208C44v100Ev();
extern void _ZN6S208C44v101Ev();
extern void _ZN6S208C44v102Ev();
extern void _ZN6S208C44v103Ev();
extern void _ZN6S208C44v104Ev();
extern void _ZN6S208C44v105Ev();
extern void _ZN6S208C44v106Ev();
extern void _ZN6S208C44v107Ev();
extern void _ZN6S208C44v108Ev();
extern void _ZN6S208C44v109Ev();
static  VTBL_ENTRY vtc_S208C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S208C4[0]),
  (VTBL_ENTRY)&_ZN6S208C4D1Ev,
  (VTBL_ENTRY)&_ZN6S208C4D0Ev,
  (VTBL_ENTRY)&_ZN6S208C62v4Ev,
  (VTBL_ENTRY)&_ZN6S208C62v5Ev,
  (VTBL_ENTRY)&_ZN6S208C62v6Ev,
  (VTBL_ENTRY)&_ZN6S208C62v7Ev,
  (VTBL_ENTRY)&_ZN6S208C62v8Ev,
  (VTBL_ENTRY)&_ZN6S208C62v9Ev,
  (VTBL_ENTRY)&_ZN6S208C63v10Ev,
  (VTBL_ENTRY)&_ZN6S208C63v11Ev,
  (VTBL_ENTRY)&_ZN6S208C63v12Ev,
  (VTBL_ENTRY)&_ZN6S208C63v13Ev,
  (VTBL_ENTRY)&_ZN6S208C63v14Ev,
  (VTBL_ENTRY)&_ZN6S208C63v15Ev,
  (VTBL_ENTRY)&_ZN6S208C63v16Ev,
  (VTBL_ENTRY)&_ZN6S208C63v17Ev,
  (VTBL_ENTRY)&_ZN6S208C63v18Ev,
  (VTBL_ENTRY)&_ZN6S208C63v19Ev,
  (VTBL_ENTRY)&_ZN6S208C63v20Ev,
  (VTBL_ENTRY)&_ZN6S208C63v21Ev,
  (VTBL_ENTRY)&_ZN6S208C63v22Ev,
  (VTBL_ENTRY)&_ZN6S208C63v23Ev,
  (VTBL_ENTRY)&_ZN6S208C63v24Ev,
  (VTBL_ENTRY)&_ZN6S208C63v25Ev,
  (VTBL_ENTRY)&_ZN6S208C63v26Ev,
  (VTBL_ENTRY)&_ZN6S208C63v27Ev,
  (VTBL_ENTRY)&_ZN6S208C63v28Ev,
  (VTBL_ENTRY)&_ZN6S208C63v29Ev,
  (VTBL_ENTRY)&_ZN6S208C63v30Ev,
  (VTBL_ENTRY)&_ZN6S208C63v31Ev,
  (VTBL_ENTRY)&_ZN6S208C63v32Ev,
  (VTBL_ENTRY)&_ZN6S208C63v33Ev,
  (VTBL_ENTRY)&_ZN6S208C63v34Ev,
  (VTBL_ENTRY)&_ZN6S208C63v35Ev,
  (VTBL_ENTRY)&_ZN6S208C63v36Ev,
  (VTBL_ENTRY)&_ZN6S208C63v37Ev,
  (VTBL_ENTRY)&_ZN6S208C63v38Ev,
  (VTBL_ENTRY)&_ZN6S208C63v39Ev,
  (VTBL_ENTRY)&_ZN6S208C63v40Ev,
  (VTBL_ENTRY)&_ZN6S208C63v41Ev,
  (VTBL_ENTRY)&_ZN6S208C63v42Ev,
  (VTBL_ENTRY)&_ZN6S208C63v43Ev,
  (VTBL_ENTRY)&_ZN6S208C63v44Ev,
  (VTBL_ENTRY)&_ZN6S208C63v45Ev,
  (VTBL_ENTRY)&_ZN6S208C63v46Ev,
  (VTBL_ENTRY)&_ZN6S208C63v47Ev,
  (VTBL_ENTRY)&_ZN6S208C63v48Ev,
  (VTBL_ENTRY)&_ZN6S208C63v49Ev,
  (VTBL_ENTRY)&_ZN6S208C63v50Ev,
  (VTBL_ENTRY)&_ZN6S208C63v51Ev,
  (VTBL_ENTRY)&_ZN6S208C63v52Ev,
  (VTBL_ENTRY)&_ZN6S208C63v53Ev,
  (VTBL_ENTRY)&_ZN6S208C63v54Ev,
  (VTBL_ENTRY)&_ZN6S208C63v55Ev,
  (VTBL_ENTRY)&_ZN6S208C63v56Ev,
  (VTBL_ENTRY)&_ZN6S208C63v57Ev,
  (VTBL_ENTRY)&_ZN6S208C63v58Ev,
  (VTBL_ENTRY)&_ZN6S208C63v59Ev,
  (VTBL_ENTRY)&_ZN6S208C63v60Ev,
  (VTBL_ENTRY)&_ZN6S208C63v61Ev,
  (VTBL_ENTRY)&_ZN6S208C63v62Ev,
  (VTBL_ENTRY)&_ZN6S208C63v63Ev,
  (VTBL_ENTRY)&_ZN6S208C63v64Ev,
  (VTBL_ENTRY)&_ZN6S208C63v65Ev,
  (VTBL_ENTRY)&_ZN6S208C63v66Ev,
  (VTBL_ENTRY)&_ZN6S208C63v67Ev,
  (VTBL_ENTRY)&_ZN6S208C53v68Ev,
  (VTBL_ENTRY)&_ZN6S208C53v69Ev,
  (VTBL_ENTRY)&_ZN6S208C53v70Ev,
  (VTBL_ENTRY)&_ZN6S208C53v71Ev,
  (VTBL_ENTRY)&_ZN6S208C53v72Ev,
  (VTBL_ENTRY)&_ZN6S208C53v73Ev,
  (VTBL_ENTRY)&_ZN6S208C53v74Ev,
  (VTBL_ENTRY)&_ZN6S208C53v75Ev,
  (VTBL_ENTRY)&_ZN6S208C53v76Ev,
  (VTBL_ENTRY)&_ZN6S208C53v77Ev,
  (VTBL_ENTRY)&_ZN6S208C53v78Ev,
  (VTBL_ENTRY)&_ZN6S208C53v79Ev,
  (VTBL_ENTRY)&_ZN6S208C53v80Ev,
  (VTBL_ENTRY)&_ZN6S208C53v81Ev,
  (VTBL_ENTRY)&_ZN6S208C53v82Ev,
  (VTBL_ENTRY)&_ZN6S208C53v83Ev,
  (VTBL_ENTRY)&_ZN6S208C53v84Ev,
  (VTBL_ENTRY)&_ZN6S208C53v85Ev,
  (VTBL_ENTRY)&_ZN6S208C53v86Ev,
  (VTBL_ENTRY)&_ZN6S208C53v87Ev,
  (VTBL_ENTRY)&_ZN6S208C53v88Ev,
  (VTBL_ENTRY)&_ZN6S208C53v89Ev,
  (VTBL_ENTRY)&_ZN6S208C43v90Ev,
  (VTBL_ENTRY)&_ZN6S208C43v91Ev,
  (VTBL_ENTRY)&_ZN6S208C43v92Ev,
  (VTBL_ENTRY)&_ZN6S208C43v93Ev,
  (VTBL_ENTRY)&_ZN6S208C43v94Ev,
  (VTBL_ENTRY)&_ZN6S208C43v95Ev,
  (VTBL_ENTRY)&_ZN6S208C43v96Ev,
  (VTBL_ENTRY)&_ZN6S208C43v97Ev,
  (VTBL_ENTRY)&_ZN6S208C43v98Ev,
  (VTBL_ENTRY)&_ZN6S208C43v99Ev,
  (VTBL_ENTRY)&_ZN6S208C44v100Ev,
  (VTBL_ENTRY)&_ZN6S208C44v101Ev,
  (VTBL_ENTRY)&_ZN6S208C44v102Ev,
  (VTBL_ENTRY)&_ZN6S208C44v103Ev,
  (VTBL_ENTRY)&_ZN6S208C44v104Ev,
  (VTBL_ENTRY)&_ZN6S208C44v105Ev,
  (VTBL_ENTRY)&_ZN6S208C44v106Ev,
  (VTBL_ENTRY)&_ZN6S208C44v107Ev,
  (VTBL_ENTRY)&_ZN6S208C44v108Ev,
  (VTBL_ENTRY)&_ZN6S208C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S208C4[];
extern  VTBL_ENTRY _ZTV6S208C4[];
Class_Descriptor cd_S208C4 = {  "S208C4", // class name
  bases_S208C4, 2,
  &(vtc_S208C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S208C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S208C4),110, //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  S208C3  : S208C4 {
  ::S100C8_nt s208c3f0;
  unsigned int s208c3f1:1;
  ::S100C15 s208c3f2;
  virtual  ~S208C3(); // _ZN6S208C3D1Ev
  virtual void  v110(); // _ZN6S208C34v110Ev
  virtual void  v111(); // _ZN6S208C34v111Ev
  virtual void  v112(); // _ZN6S208C34v112Ev
  virtual void  v113(); // _ZN6S208C34v113Ev
  S208C3(); // tgen
};
//SIG(-1 S208C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC7 FC15{ BC16{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC17{ BC18{ BC9}}}


 S208C3 ::~S208C3(){ note_dtor("S208C3", this);}
void  S208C3 ::v110(){vfunc_called(this, "_ZN6S208C34v110Ev");}
void  S208C3 ::v111(){vfunc_called(this, "_ZN6S208C34v111Ev");}
void  S208C3 ::v112(){vfunc_called(this, "_ZN6S208C34v112Ev");}
void  S208C3 ::v113(){vfunc_called(this, "_ZN6S208C34v113Ev");}
S208C3 ::S208C3(){ note_ctor("S208C3", this);} // tgen

static void Test_S208C3()
{
  extern Class_Descriptor cd_S208C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S208C3, buf);
    S208C3 *dp, &lv = *(dp=new (buf) S208C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S208C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S208C3)");
    check_base_class_offset(lv, (S208C6*)(S208C5*)(S208C4*), 0, "S208C3");
    check_base_class_offset(lv, (S208C5*)(S208C4*), 0, "S208C3");
    check_base_class_offset(lv, (S208C4*), 0, "S208C3");
    check_field_offset(lv, s208c3f0, ABISELECT(268,196), "S208C3.s208c3f0");
    set_bf_and_test(lv, s208c3f1, ABISELECT(276,204), 0, 1, 1, "S208C3");
    check_field_offset(lv, s208c3f2, ABISELECT(280,208), "S208C3.s208c3f2");
    test_class_info(&lv, &cd_S208C3);
    dp->~S208C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS208C3(Test_S208C3, "S208C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S208C3C1Ev();
extern void _ZN6S208C3D1Ev();
Name_Map name_map_S208C3[] = {
  NSPAIR(_ZN6S208C3C1Ev),
  NSPAIR(_ZN6S208C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S208C6;
extern VTBL_ENTRY _ZTI6S208C6[];
extern  VTBL_ENTRY _ZTV6S208C6[];
extern Class_Descriptor cd_S208C5;
extern VTBL_ENTRY _ZTI6S208C5[];
extern  VTBL_ENTRY _ZTV6S208C5[];
extern Class_Descriptor cd_S208C4;
extern VTBL_ENTRY _ZTI6S208C4[];
extern  VTBL_ENTRY _ZTV6S208C4[];
static Base_Class bases_S208C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S208C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S208C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S208C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S208C3[];
extern void _ZN6S208C3D1Ev();
extern void _ZN6S208C3D0Ev();
extern void _ZN6S208C62v4Ev();
extern void _ZN6S208C62v5Ev();
extern void _ZN6S208C62v6Ev();
extern void _ZN6S208C62v7Ev();
extern void _ZN6S208C62v8Ev();
extern void _ZN6S208C62v9Ev();
extern void _ZN6S208C63v10Ev();
extern void _ZN6S208C63v11Ev();
extern void _ZN6S208C63v12Ev();
extern void _ZN6S208C63v13Ev();
extern void _ZN6S208C63v14Ev();
extern void _ZN6S208C63v15Ev();
extern void _ZN6S208C63v16Ev();
extern void _ZN6S208C63v17Ev();
extern void _ZN6S208C63v18Ev();
extern void _ZN6S208C63v19Ev();
extern void _ZN6S208C63v20Ev();
extern void _ZN6S208C63v21Ev();
extern void _ZN6S208C63v22Ev();
extern void _ZN6S208C63v23Ev();
extern void _ZN6S208C63v24Ev();
extern void _ZN6S208C63v25Ev();
extern void _ZN6S208C63v26Ev();
extern void _ZN6S208C63v27Ev();
extern void _ZN6S208C63v28Ev();
extern void _ZN6S208C63v29Ev();
extern void _ZN6S208C63v30Ev();
extern void _ZN6S208C63v31Ev();
extern void _ZN6S208C63v32Ev();
extern void _ZN6S208C63v33Ev();
extern void _ZN6S208C63v34Ev();
extern void _ZN6S208C63v35Ev();
extern void _ZN6S208C63v36Ev();
extern void _ZN6S208C63v37Ev();
extern void _ZN6S208C63v38Ev();
extern void _ZN6S208C63v39Ev();
extern void _ZN6S208C63v40Ev();
extern void _ZN6S208C63v41Ev();
extern void _ZN6S208C63v42Ev();
extern void _ZN6S208C63v43Ev();
extern void _ZN6S208C63v44Ev();
extern void _ZN6S208C63v45Ev();
extern void _ZN6S208C63v46Ev();
extern void _ZN6S208C63v47Ev();
extern void _ZN6S208C63v48Ev();
extern void _ZN6S208C63v49Ev();
extern void _ZN6S208C63v50Ev();
extern void _ZN6S208C63v51Ev();
extern void _ZN6S208C63v52Ev();
extern void _ZN6S208C63v53Ev();
extern void _ZN6S208C63v54Ev();
extern void _ZN6S208C63v55Ev();
extern void _ZN6S208C63v56Ev();
extern void _ZN6S208C63v57Ev();
extern void _ZN6S208C63v58Ev();
extern void _ZN6S208C63v59Ev();
extern void _ZN6S208C63v60Ev();
extern void _ZN6S208C63v61Ev();
extern void _ZN6S208C63v62Ev();
extern void _ZN6S208C63v63Ev();
extern void _ZN6S208C63v64Ev();
extern void _ZN6S208C63v65Ev();
extern void _ZN6S208C63v66Ev();
extern void _ZN6S208C63v67Ev();
extern void _ZN6S208C53v68Ev();
extern void _ZN6S208C53v69Ev();
extern void _ZN6S208C53v70Ev();
extern void _ZN6S208C53v71Ev();
extern void _ZN6S208C53v72Ev();
extern void _ZN6S208C53v73Ev();
extern void _ZN6S208C53v74Ev();
extern void _ZN6S208C53v75Ev();
extern void _ZN6S208C53v76Ev();
extern void _ZN6S208C53v77Ev();
extern void _ZN6S208C53v78Ev();
extern void _ZN6S208C53v79Ev();
extern void _ZN6S208C53v80Ev();
extern void _ZN6S208C53v81Ev();
extern void _ZN6S208C53v82Ev();
extern void _ZN6S208C53v83Ev();
extern void _ZN6S208C53v84Ev();
extern void _ZN6S208C53v85Ev();
extern void _ZN6S208C53v86Ev();
extern void _ZN6S208C53v87Ev();
extern void _ZN6S208C53v88Ev();
extern void _ZN6S208C53v89Ev();
extern void _ZN6S208C43v90Ev();
extern void _ZN6S208C43v91Ev();
extern void _ZN6S208C43v92Ev();
extern void _ZN6S208C43v93Ev();
extern void _ZN6S208C43v94Ev();
extern void _ZN6S208C43v95Ev();
extern void _ZN6S208C43v96Ev();
extern void _ZN6S208C43v97Ev();
extern void _ZN6S208C43v98Ev();
extern void _ZN6S208C43v99Ev();
extern void _ZN6S208C44v100Ev();
extern void _ZN6S208C44v101Ev();
extern void _ZN6S208C44v102Ev();
extern void _ZN6S208C44v103Ev();
extern void _ZN6S208C44v104Ev();
extern void _ZN6S208C44v105Ev();
extern void _ZN6S208C44v106Ev();
extern void _ZN6S208C44v107Ev();
extern void _ZN6S208C44v108Ev();
extern void _ZN6S208C44v109Ev();
extern void _ZN6S208C34v110Ev();
extern void _ZN6S208C34v111Ev();
extern void _ZN6S208C34v112Ev();
extern void _ZN6S208C34v113Ev();
static  VTBL_ENTRY vtc_S208C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S208C3[0]),
  (VTBL_ENTRY)&_ZN6S208C3D1Ev,
  (VTBL_ENTRY)&_ZN6S208C3D0Ev,
  (VTBL_ENTRY)&_ZN6S208C62v4Ev,
  (VTBL_ENTRY)&_ZN6S208C62v5Ev,
  (VTBL_ENTRY)&_ZN6S208C62v6Ev,
  (VTBL_ENTRY)&_ZN6S208C62v7Ev,
  (VTBL_ENTRY)&_ZN6S208C62v8Ev,
  (VTBL_ENTRY)&_ZN6S208C62v9Ev,
  (VTBL_ENTRY)&_ZN6S208C63v10Ev,
  (VTBL_ENTRY)&_ZN6S208C63v11Ev,
  (VTBL_ENTRY)&_ZN6S208C63v12Ev,
  (VTBL_ENTRY)&_ZN6S208C63v13Ev,
  (VTBL_ENTRY)&_ZN6S208C63v14Ev,
  (VTBL_ENTRY)&_ZN6S208C63v15Ev,
  (VTBL_ENTRY)&_ZN6S208C63v16Ev,
  (VTBL_ENTRY)&_ZN6S208C63v17Ev,
  (VTBL_ENTRY)&_ZN6S208C63v18Ev,
  (VTBL_ENTRY)&_ZN6S208C63v19Ev,
  (VTBL_ENTRY)&_ZN6S208C63v20Ev,
  (VTBL_ENTRY)&_ZN6S208C63v21Ev,
  (VTBL_ENTRY)&_ZN6S208C63v22Ev,
  (VTBL_ENTRY)&_ZN6S208C63v23Ev,
  (VTBL_ENTRY)&_ZN6S208C63v24Ev,
  (VTBL_ENTRY)&_ZN6S208C63v25Ev,
  (VTBL_ENTRY)&_ZN6S208C63v26Ev,
  (VTBL_ENTRY)&_ZN6S208C63v27Ev,
  (VTBL_ENTRY)&_ZN6S208C63v28Ev,
  (VTBL_ENTRY)&_ZN6S208C63v29Ev,
  (VTBL_ENTRY)&_ZN6S208C63v30Ev,
  (VTBL_ENTRY)&_ZN6S208C63v31Ev,
  (VTBL_ENTRY)&_ZN6S208C63v32Ev,
  (VTBL_ENTRY)&_ZN6S208C63v33Ev,
  (VTBL_ENTRY)&_ZN6S208C63v34Ev,
  (VTBL_ENTRY)&_ZN6S208C63v35Ev,
  (VTBL_ENTRY)&_ZN6S208C63v36Ev,
  (VTBL_ENTRY)&_ZN6S208C63v37Ev,
  (VTBL_ENTRY)&_ZN6S208C63v38Ev,
  (VTBL_ENTRY)&_ZN6S208C63v39Ev,
  (VTBL_ENTRY)&_ZN6S208C63v40Ev,
  (VTBL_ENTRY)&_ZN6S208C63v41Ev,
  (VTBL_ENTRY)&_ZN6S208C63v42Ev,
  (VTBL_ENTRY)&_ZN6S208C63v43Ev,
  (VTBL_ENTRY)&_ZN6S208C63v44Ev,
  (VTBL_ENTRY)&_ZN6S208C63v45Ev,
  (VTBL_ENTRY)&_ZN6S208C63v46Ev,
  (VTBL_ENTRY)&_ZN6S208C63v47Ev,
  (VTBL_ENTRY)&_ZN6S208C63v48Ev,
  (VTBL_ENTRY)&_ZN6S208C63v49Ev,
  (VTBL_ENTRY)&_ZN6S208C63v50Ev,
  (VTBL_ENTRY)&_ZN6S208C63v51Ev,
  (VTBL_ENTRY)&_ZN6S208C63v52Ev,
  (VTBL_ENTRY)&_ZN6S208C63v53Ev,
  (VTBL_ENTRY)&_ZN6S208C63v54Ev,
  (VTBL_ENTRY)&_ZN6S208C63v55Ev,
  (VTBL_ENTRY)&_ZN6S208C63v56Ev,
  (VTBL_ENTRY)&_ZN6S208C63v57Ev,
  (VTBL_ENTRY)&_ZN6S208C63v58Ev,
  (VTBL_ENTRY)&_ZN6S208C63v59Ev,
  (VTBL_ENTRY)&_ZN6S208C63v60Ev,
  (VTBL_ENTRY)&_ZN6S208C63v61Ev,
  (VTBL_ENTRY)&_ZN6S208C63v62Ev,
  (VTBL_ENTRY)&_ZN6S208C63v63Ev,
  (VTBL_ENTRY)&_ZN6S208C63v64Ev,
  (VTBL_ENTRY)&_ZN6S208C63v65Ev,
  (VTBL_ENTRY)&_ZN6S208C63v66Ev,
  (VTBL_ENTRY)&_ZN6S208C63v67Ev,
  (VTBL_ENTRY)&_ZN6S208C53v68Ev,
  (VTBL_ENTRY)&_ZN6S208C53v69Ev,
  (VTBL_ENTRY)&_ZN6S208C53v70Ev,
  (VTBL_ENTRY)&_ZN6S208C53v71Ev,
  (VTBL_ENTRY)&_ZN6S208C53v72Ev,
  (VTBL_ENTRY)&_ZN6S208C53v73Ev,
  (VTBL_ENTRY)&_ZN6S208C53v74Ev,
  (VTBL_ENTRY)&_ZN6S208C53v75Ev,
  (VTBL_ENTRY)&_ZN6S208C53v76Ev,
  (VTBL_ENTRY)&_ZN6S208C53v77Ev,
  (VTBL_ENTRY)&_ZN6S208C53v78Ev,
  (VTBL_ENTRY)&_ZN6S208C53v79Ev,
  (VTBL_ENTRY)&_ZN6S208C53v80Ev,
  (VTBL_ENTRY)&_ZN6S208C53v81Ev,
  (VTBL_ENTRY)&_ZN6S208C53v82Ev,
  (VTBL_ENTRY)&_ZN6S208C53v83Ev,
  (VTBL_ENTRY)&_ZN6S208C53v84Ev,
  (VTBL_ENTRY)&_ZN6S208C53v85Ev,
  (VTBL_ENTRY)&_ZN6S208C53v86Ev,
  (VTBL_ENTRY)&_ZN6S208C53v87Ev,
  (VTBL_ENTRY)&_ZN6S208C53v88Ev,
  (VTBL_ENTRY)&_ZN6S208C53v89Ev,
  (VTBL_ENTRY)&_ZN6S208C43v90Ev,
  (VTBL_ENTRY)&_ZN6S208C43v91Ev,
  (VTBL_ENTRY)&_ZN6S208C43v92Ev,
  (VTBL_ENTRY)&_ZN6S208C43v93Ev,
  (VTBL_ENTRY)&_ZN6S208C43v94Ev,
  (VTBL_ENTRY)&_ZN6S208C43v95Ev,
  (VTBL_ENTRY)&_ZN6S208C43v96Ev,
  (VTBL_ENTRY)&_ZN6S208C43v97Ev,
  (VTBL_ENTRY)&_ZN6S208C43v98Ev,
  (VTBL_ENTRY)&_ZN6S208C43v99Ev,
  (VTBL_ENTRY)&_ZN6S208C44v100Ev,
  (VTBL_ENTRY)&_ZN6S208C44v101Ev,
  (VTBL_ENTRY)&_ZN6S208C44v102Ev,
  (VTBL_ENTRY)&_ZN6S208C44v103Ev,
  (VTBL_ENTRY)&_ZN6S208C44v104Ev,
  (VTBL_ENTRY)&_ZN6S208C44v105Ev,
  (VTBL_ENTRY)&_ZN6S208C44v106Ev,
  (VTBL_ENTRY)&_ZN6S208C44v107Ev,
  (VTBL_ENTRY)&_ZN6S208C44v108Ev,
  (VTBL_ENTRY)&_ZN6S208C44v109Ev,
  (VTBL_ENTRY)&_ZN6S208C34v110Ev,
  (VTBL_ENTRY)&_ZN6S208C34v111Ev,
  (VTBL_ENTRY)&_ZN6S208C34v112Ev,
  (VTBL_ENTRY)&_ZN6S208C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S208C3[];
extern  VTBL_ENTRY _ZTV6S208C3[];
Class_Descriptor cd_S208C3 = {  "S208C3", // class name
  bases_S208C3, 3,
  &(vtc_S208C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S208C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S208C3),114, //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  S208C2_nt  : S208C3 {
  int s208c2f0;
  unsigned int s208c2f1:1;
  virtual  ~S208C2_nt(); // _ZN9S208C2_ntD1Ev
  virtual void  v114(); // _ZN9S208C2_nt4v114Ev
  virtual void  v115(); // _ZN9S208C2_nt4v115Ev
  virtual void  v116(); // _ZN9S208C2_nt4v116Ev
  virtual void  v117(); // _ZN9S208C2_nt4v117Ev
  virtual void  v118(); // _ZN9S208C2_nt4v118Ev
  virtual void  v119(); // _ZN9S208C2_nt4v119Ev
  virtual void  v120(); // _ZN9S208C2_nt4v120Ev
  virtual void  v121(); // _ZN9S208C2_nt4v121Ev
  S208C2_nt(); // tgen
};
//SIG(-1 S208C2_nt) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC8 FC16{ BC17{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC18{ BC19{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S208C2_nt ::~S208C2_nt(){ note_dtor("S208C2_nt", this);}
void  S208C2_nt ::v114(){vfunc_called(this, "_ZN9S208C2_nt4v114Ev");}
void  S208C2_nt ::v115(){vfunc_called(this, "_ZN9S208C2_nt4v115Ev");}
void  S208C2_nt ::v116(){vfunc_called(this, "_ZN9S208C2_nt4v116Ev");}
void  S208C2_nt ::v117(){vfunc_called(this, "_ZN9S208C2_nt4v117Ev");}
void  S208C2_nt ::v118(){vfunc_called(this, "_ZN9S208C2_nt4v118Ev");}
void  S208C2_nt ::v119(){vfunc_called(this, "_ZN9S208C2_nt4v119Ev");}
void  S208C2_nt ::v120(){vfunc_called(this, "_ZN9S208C2_nt4v120Ev");}
void  S208C2_nt ::v121(){vfunc_called(this, "_ZN9S208C2_nt4v121Ev");}
S208C2_nt ::S208C2_nt(){ note_ctor("S208C2_nt", this);} // tgen

//skip512 S208C2_nt

#else // __cplusplus

extern void _ZN9S208C2_ntC1Ev();
extern void _ZN9S208C2_ntD1Ev();
Name_Map name_map_S208C2_nt[] = {
  NSPAIR(_ZN9S208C2_ntC1Ev),
  NSPAIR(_ZN9S208C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S208C6;
extern VTBL_ENTRY _ZTI6S208C6[];
extern  VTBL_ENTRY _ZTV6S208C6[];
extern Class_Descriptor cd_S208C5;
extern VTBL_ENTRY _ZTI6S208C5[];
extern  VTBL_ENTRY _ZTV6S208C5[];
extern Class_Descriptor cd_S208C4;
extern VTBL_ENTRY _ZTI6S208C4[];
extern  VTBL_ENTRY _ZTV6S208C4[];
extern Class_Descriptor cd_S208C3;
extern VTBL_ENTRY _ZTI6S208C3[];
extern  VTBL_ENTRY _ZTV6S208C3[];
static Base_Class bases_S208C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S208C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S208C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S208C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S208C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S208C2_nt[];
extern void _ZN9S208C2_ntD1Ev();
extern void _ZN9S208C2_ntD0Ev();
extern void _ZN6S208C62v4Ev();
extern void _ZN6S208C62v5Ev();
extern void _ZN6S208C62v6Ev();
extern void _ZN6S208C62v7Ev();
extern void _ZN6S208C62v8Ev();
extern void _ZN6S208C62v9Ev();
extern void _ZN6S208C63v10Ev();
extern void _ZN6S208C63v11Ev();
extern void _ZN6S208C63v12Ev();
extern void _ZN6S208C63v13Ev();
extern void _ZN6S208C63v14Ev();
extern void _ZN6S208C63v15Ev();
extern void _ZN6S208C63v16Ev();
extern void _ZN6S208C63v17Ev();
extern void _ZN6S208C63v18Ev();
extern void _ZN6S208C63v19Ev();
extern void _ZN6S208C63v20Ev();
extern void _ZN6S208C63v21Ev();
extern void _ZN6S208C63v22Ev();
extern void _ZN6S208C63v23Ev();
extern void _ZN6S208C63v24Ev();
extern void _ZN6S208C63v25Ev();
extern void _ZN6S208C63v26Ev();
extern void _ZN6S208C63v27Ev();
extern void _ZN6S208C63v28Ev();
extern void _ZN6S208C63v29Ev();
extern void _ZN6S208C63v30Ev();
extern void _ZN6S208C63v31Ev();
extern void _ZN6S208C63v32Ev();
extern void _ZN6S208C63v33Ev();
extern void _ZN6S208C63v34Ev();
extern void _ZN6S208C63v35Ev();
extern void _ZN6S208C63v36Ev();
extern void _ZN6S208C63v37Ev();
extern void _ZN6S208C63v38Ev();
extern void _ZN6S208C63v39Ev();
extern void _ZN6S208C63v40Ev();
extern void _ZN6S208C63v41Ev();
extern void _ZN6S208C63v42Ev();
extern void _ZN6S208C63v43Ev();
extern void _ZN6S208C63v44Ev();
extern void _ZN6S208C63v45Ev();
extern void _ZN6S208C63v46Ev();
extern void _ZN6S208C63v47Ev();
extern void _ZN6S208C63v48Ev();
extern void _ZN6S208C63v49Ev();
extern void _ZN6S208C63v50Ev();
extern void _ZN6S208C63v51Ev();
extern void _ZN6S208C63v52Ev();
extern void _ZN6S208C63v53Ev();
extern void _ZN6S208C63v54Ev();
extern void _ZN6S208C63v55Ev();
extern void _ZN6S208C63v56Ev();
extern void _ZN6S208C63v57Ev();
extern void _ZN6S208C63v58Ev();
extern void _ZN6S208C63v59Ev();
extern void _ZN6S208C63v60Ev();
extern void _ZN6S208C63v61Ev();
extern void _ZN6S208C63v62Ev();
extern void _ZN6S208C63v63Ev();
extern void _ZN6S208C63v64Ev();
extern void _ZN6S208C63v65Ev();
extern void _ZN6S208C63v66Ev();
extern void _ZN6S208C63v67Ev();
extern void _ZN6S208C53v68Ev();
extern void _ZN6S208C53v69Ev();
extern void _ZN6S208C53v70Ev();
extern void _ZN6S208C53v71Ev();
extern void _ZN6S208C53v72Ev();
extern void _ZN6S208C53v73Ev();
extern void _ZN6S208C53v74Ev();
extern void _ZN6S208C53v75Ev();
extern void _ZN6S208C53v76Ev();
extern void _ZN6S208C53v77Ev();
extern void _ZN6S208C53v78Ev();
extern void _ZN6S208C53v79Ev();
extern void _ZN6S208C53v80Ev();
extern void _ZN6S208C53v81Ev();
extern void _ZN6S208C53v82Ev();
extern void _ZN6S208C53v83Ev();
extern void _ZN6S208C53v84Ev();
extern void _ZN6S208C53v85Ev();
extern void _ZN6S208C53v86Ev();
extern void _ZN6S208C53v87Ev();
extern void _ZN6S208C53v88Ev();
extern void _ZN6S208C53v89Ev();
extern void _ZN6S208C43v90Ev();
extern void _ZN6S208C43v91Ev();
extern void _ZN6S208C43v92Ev();
extern void _ZN6S208C43v93Ev();
extern void _ZN6S208C43v94Ev();
extern void _ZN6S208C43v95Ev();
extern void _ZN6S208C43v96Ev();
extern void _ZN6S208C43v97Ev();
extern void _ZN6S208C43v98Ev();
extern void _ZN6S208C43v99Ev();
extern void _ZN6S208C44v100Ev();
extern void _ZN6S208C44v101Ev();
extern void _ZN6S208C44v102Ev();
extern void _ZN6S208C44v103Ev();
extern void _ZN6S208C44v104Ev();
extern void _ZN6S208C44v105Ev();
extern void _ZN6S208C44v106Ev();
extern void _ZN6S208C44v107Ev();
extern void _ZN6S208C44v108Ev();
extern void _ZN6S208C44v109Ev();
extern void _ZN6S208C34v110Ev();
extern void _ZN6S208C34v111Ev();
extern void _ZN6S208C34v112Ev();
extern void _ZN6S208C34v113Ev();
extern void _ZN9S208C2_nt4v114Ev();
extern void _ZN9S208C2_nt4v115Ev();
extern void _ZN9S208C2_nt4v116Ev();
extern void _ZN9S208C2_nt4v117Ev();
extern void _ZN9S208C2_nt4v118Ev();
extern void _ZN9S208C2_nt4v119Ev();
extern void _ZN9S208C2_nt4v120Ev();
extern void _ZN9S208C2_nt4v121Ev();
static  VTBL_ENTRY vtc_S208C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S208C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S208C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S208C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S208C62v4Ev,
  (VTBL_ENTRY)&_ZN6S208C62v5Ev,
  (VTBL_ENTRY)&_ZN6S208C62v6Ev,
  (VTBL_ENTRY)&_ZN6S208C62v7Ev,
  (VTBL_ENTRY)&_ZN6S208C62v8Ev,
  (VTBL_ENTRY)&_ZN6S208C62v9Ev,
  (VTBL_ENTRY)&_ZN6S208C63v10Ev,
  (VTBL_ENTRY)&_ZN6S208C63v11Ev,
  (VTBL_ENTRY)&_ZN6S208C63v12Ev,
  (VTBL_ENTRY)&_ZN6S208C63v13Ev,
  (VTBL_ENTRY)&_ZN6S208C63v14Ev,
  (VTBL_ENTRY)&_ZN6S208C63v15Ev,
  (VTBL_ENTRY)&_ZN6S208C63v16Ev,
  (VTBL_ENTRY)&_ZN6S208C63v17Ev,
  (VTBL_ENTRY)&_ZN6S208C63v18Ev,
  (VTBL_ENTRY)&_ZN6S208C63v19Ev,
  (VTBL_ENTRY)&_ZN6S208C63v20Ev,
  (VTBL_ENTRY)&_ZN6S208C63v21Ev,
  (VTBL_ENTRY)&_ZN6S208C63v22Ev,
  (VTBL_ENTRY)&_ZN6S208C63v23Ev,
  (VTBL_ENTRY)&_ZN6S208C63v24Ev,
  (VTBL_ENTRY)&_ZN6S208C63v25Ev,
  (VTBL_ENTRY)&_ZN6S208C63v26Ev,
  (VTBL_ENTRY)&_ZN6S208C63v27Ev,
  (VTBL_ENTRY)&_ZN6S208C63v28Ev,
  (VTBL_ENTRY)&_ZN6S208C63v29Ev,
  (VTBL_ENTRY)&_ZN6S208C63v30Ev,
  (VTBL_ENTRY)&_ZN6S208C63v31Ev,
  (VTBL_ENTRY)&_ZN6S208C63v32Ev,
  (VTBL_ENTRY)&_ZN6S208C63v33Ev,
  (VTBL_ENTRY)&_ZN6S208C63v34Ev,
  (VTBL_ENTRY)&_ZN6S208C63v35Ev,
  (VTBL_ENTRY)&_ZN6S208C63v36Ev,
  (VTBL_ENTRY)&_ZN6S208C63v37Ev,
  (VTBL_ENTRY)&_ZN6S208C63v38Ev,
  (VTBL_ENTRY)&_ZN6S208C63v39Ev,
  (VTBL_ENTRY)&_ZN6S208C63v40Ev,
  (VTBL_ENTRY)&_ZN6S208C63v41Ev,
  (VTBL_ENTRY)&_ZN6S208C63v42Ev,
  (VTBL_ENTRY)&_ZN6S208C63v43Ev,
  (VTBL_ENTRY)&_ZN6S208C63v44Ev,
  (VTBL_ENTRY)&_ZN6S208C63v45Ev,
  (VTBL_ENTRY)&_ZN6S208C63v46Ev,
  (VTBL_ENTRY)&_ZN6S208C63v47Ev,
  (VTBL_ENTRY)&_ZN6S208C63v48Ev,
  (VTBL_ENTRY)&_ZN6S208C63v49Ev,
  (VTBL_ENTRY)&_ZN6S208C63v50Ev,
  (VTBL_ENTRY)&_ZN6S208C63v51Ev,
  (VTBL_ENTRY)&_ZN6S208C63v52Ev,
  (VTBL_ENTRY)&_ZN6S208C63v53Ev,
  (VTBL_ENTRY)&_ZN6S208C63v54Ev,
  (VTBL_ENTRY)&_ZN6S208C63v55Ev,
  (VTBL_ENTRY)&_ZN6S208C63v56Ev,
  (VTBL_ENTRY)&_ZN6S208C63v57Ev,
  (VTBL_ENTRY)&_ZN6S208C63v58Ev,
  (VTBL_ENTRY)&_ZN6S208C63v59Ev,
  (VTBL_ENTRY)&_ZN6S208C63v60Ev,
  (VTBL_ENTRY)&_ZN6S208C63v61Ev,
  (VTBL_ENTRY)&_ZN6S208C63v62Ev,
  (VTBL_ENTRY)&_ZN6S208C63v63Ev,
  (VTBL_ENTRY)&_ZN6S208C63v64Ev,
  (VTBL_ENTRY)&_ZN6S208C63v65Ev,
  (VTBL_ENTRY)&_ZN6S208C63v66Ev,
  (VTBL_ENTRY)&_ZN6S208C63v67Ev,
  (VTBL_ENTRY)&_ZN6S208C53v68Ev,
  (VTBL_ENTRY)&_ZN6S208C53v69Ev,
  (VTBL_ENTRY)&_ZN6S208C53v70Ev,
  (VTBL_ENTRY)&_ZN6S208C53v71Ev,
  (VTBL_ENTRY)&_ZN6S208C53v72Ev,
  (VTBL_ENTRY)&_ZN6S208C53v73Ev,
  (VTBL_ENTRY)&_ZN6S208C53v74Ev,
  (VTBL_ENTRY)&_ZN6S208C53v75Ev,
  (VTBL_ENTRY)&_ZN6S208C53v76Ev,
  (VTBL_ENTRY)&_ZN6S208C53v77Ev,
  (VTBL_ENTRY)&_ZN6S208C53v78Ev,
  (VTBL_ENTRY)&_ZN6S208C53v79Ev,
  (VTBL_ENTRY)&_ZN6S208C53v80Ev,
  (VTBL_ENTRY)&_ZN6S208C53v81Ev,
  (VTBL_ENTRY)&_ZN6S208C53v82Ev,
  (VTBL_ENTRY)&_ZN6S208C53v83Ev,
  (VTBL_ENTRY)&_ZN6S208C53v84Ev,
  (VTBL_ENTRY)&_ZN6S208C53v85Ev,
  (VTBL_ENTRY)&_ZN6S208C53v86Ev,
  (VTBL_ENTRY)&_ZN6S208C53v87Ev,
  (VTBL_ENTRY)&_ZN6S208C53v88Ev,
  (VTBL_ENTRY)&_ZN6S208C53v89Ev,
  (VTBL_ENTRY)&_ZN6S208C43v90Ev,
  (VTBL_ENTRY)&_ZN6S208C43v91Ev,
  (VTBL_ENTRY)&_ZN6S208C43v92Ev,
  (VTBL_ENTRY)&_ZN6S208C43v93Ev,
  (VTBL_ENTRY)&_ZN6S208C43v94Ev,
  (VTBL_ENTRY)&_ZN6S208C43v95Ev,
  (VTBL_ENTRY)&_ZN6S208C43v96Ev,
  (VTBL_ENTRY)&_ZN6S208C43v97Ev,
  (VTBL_ENTRY)&_ZN6S208C43v98Ev,
  (VTBL_ENTRY)&_ZN6S208C43v99Ev,
  (VTBL_ENTRY)&_ZN6S208C44v100Ev,
  (VTBL_ENTRY)&_ZN6S208C44v101Ev,
  (VTBL_ENTRY)&_ZN6S208C44v102Ev,
  (VTBL_ENTRY)&_ZN6S208C44v103Ev,
  (VTBL_ENTRY)&_ZN6S208C44v104Ev,
  (VTBL_ENTRY)&_ZN6S208C44v105Ev,
  (VTBL_ENTRY)&_ZN6S208C44v106Ev,
  (VTBL_ENTRY)&_ZN6S208C44v107Ev,
  (VTBL_ENTRY)&_ZN6S208C44v108Ev,
  (VTBL_ENTRY)&_ZN6S208C44v109Ev,
  (VTBL_ENTRY)&_ZN6S208C34v110Ev,
  (VTBL_ENTRY)&_ZN6S208C34v111Ev,
  (VTBL_ENTRY)&_ZN6S208C34v112Ev,
  (VTBL_ENTRY)&_ZN6S208C34v113Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v121Ev,
};
extern VTBL_ENTRY _ZTI9S208C2_nt[];
VTBL_ENTRY *P__ZTI9S208C2_nt = _ZTI9S208C2_nt; 
extern  VTBL_ENTRY _ZTV9S208C2_nt[];
Class_Descriptor cd_S208C2_nt = {  "S208C2_nt", // class name
  bases_S208C2_nt, 4,
  &(vtc_S208C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI9S208C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S208C2_nt),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  S208C1  : S208C2_nt {
  virtual  ~S208C1(); // _ZN6S208C1D1Ev
  virtual void  v1(); // _ZN6S208C12v1Ev
  virtual void  v2(); // _ZN6S208C12v2Ev
  virtual void  v3(); // _ZN6S208C12v3Ev
  S208C1(); // tgen
};
//SIG(1 S208C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC9 FC17{ BC18{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC19{ BC20{ BC11}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v1 v2 v3}


 S208C1 ::~S208C1(){ note_dtor("S208C1", this);}
void  S208C1 ::v1(){vfunc_called(this, "_ZN6S208C12v1Ev");}
void  S208C1 ::v2(){vfunc_called(this, "_ZN6S208C12v2Ev");}
void  S208C1 ::v3(){vfunc_called(this, "_ZN6S208C12v3Ev");}
S208C1 ::S208C1(){ note_ctor("S208C1", this);} // tgen

static void Test_S208C1()
{
  extern Class_Descriptor cd_S208C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S208C1, buf);
    S208C1 *dp, &lv = *(dp=new (buf) S208C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S208C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S208C1)");
    check_base_class_offset(lv, (S208C6*)(S208C5*)(S208C4*)(S208C3*)(S208C2_nt*), 0, "S208C1");
    check_base_class_offset(lv, (S208C5*)(S208C4*)(S208C3*)(S208C2_nt*), 0, "S208C1");
    check_base_class_offset(lv, (S208C4*)(S208C3*)(S208C2_nt*), 0, "S208C1");
    check_base_class_offset(lv, (S208C3*)(S208C2_nt*), 0, "S208C1");
    check_base_class_offset(lv, (S208C2_nt*), 0, "S208C1");
    test_class_info(&lv, &cd_S208C1);
    dp->~S208C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS208C1(Test_S208C1, "S208C1", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN6S208C1C1Ev();
extern void _ZN6S208C1D1Ev();
Name_Map name_map_S208C1[] = {
  NSPAIR(_ZN6S208C1C1Ev),
  NSPAIR(_ZN6S208C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S208C6;
extern VTBL_ENTRY _ZTI6S208C6[];
extern  VTBL_ENTRY _ZTV6S208C6[];
extern Class_Descriptor cd_S208C5;
extern VTBL_ENTRY _ZTI6S208C5[];
extern  VTBL_ENTRY _ZTV6S208C5[];
extern Class_Descriptor cd_S208C4;
extern VTBL_ENTRY _ZTI6S208C4[];
extern  VTBL_ENTRY _ZTV6S208C4[];
extern Class_Descriptor cd_S208C3;
extern VTBL_ENTRY _ZTI6S208C3[];
extern  VTBL_ENTRY _ZTV6S208C3[];
extern Class_Descriptor cd_S208C2_nt;
extern VTBL_ENTRY _ZTI9S208C2_nt[];
extern  VTBL_ENTRY _ZTV9S208C2_nt[];
static Base_Class bases_S208C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S208C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S208C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S208C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S208C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S208C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S208C1[];
extern void _ZN6S208C1D1Ev();
extern void _ZN6S208C1D0Ev();
extern void _ZN6S208C62v4Ev();
extern void _ZN6S208C62v5Ev();
extern void _ZN6S208C62v6Ev();
extern void _ZN6S208C62v7Ev();
extern void _ZN6S208C62v8Ev();
extern void _ZN6S208C62v9Ev();
extern void _ZN6S208C63v10Ev();
extern void _ZN6S208C63v11Ev();
extern void _ZN6S208C63v12Ev();
extern void _ZN6S208C63v13Ev();
extern void _ZN6S208C63v14Ev();
extern void _ZN6S208C63v15Ev();
extern void _ZN6S208C63v16Ev();
extern void _ZN6S208C63v17Ev();
extern void _ZN6S208C63v18Ev();
extern void _ZN6S208C63v19Ev();
extern void _ZN6S208C63v20Ev();
extern void _ZN6S208C63v21Ev();
extern void _ZN6S208C63v22Ev();
extern void _ZN6S208C63v23Ev();
extern void _ZN6S208C63v24Ev();
extern void _ZN6S208C63v25Ev();
extern void _ZN6S208C63v26Ev();
extern void _ZN6S208C63v27Ev();
extern void _ZN6S208C63v28Ev();
extern void _ZN6S208C63v29Ev();
extern void _ZN6S208C63v30Ev();
extern void _ZN6S208C63v31Ev();
extern void _ZN6S208C63v32Ev();
extern void _ZN6S208C63v33Ev();
extern void _ZN6S208C63v34Ev();
extern void _ZN6S208C63v35Ev();
extern void _ZN6S208C63v36Ev();
extern void _ZN6S208C63v37Ev();
extern void _ZN6S208C63v38Ev();
extern void _ZN6S208C63v39Ev();
extern void _ZN6S208C63v40Ev();
extern void _ZN6S208C63v41Ev();
extern void _ZN6S208C63v42Ev();
extern void _ZN6S208C63v43Ev();
extern void _ZN6S208C63v44Ev();
extern void _ZN6S208C63v45Ev();
extern void _ZN6S208C63v46Ev();
extern void _ZN6S208C63v47Ev();
extern void _ZN6S208C63v48Ev();
extern void _ZN6S208C63v49Ev();
extern void _ZN6S208C63v50Ev();
extern void _ZN6S208C63v51Ev();
extern void _ZN6S208C63v52Ev();
extern void _ZN6S208C63v53Ev();
extern void _ZN6S208C63v54Ev();
extern void _ZN6S208C63v55Ev();
extern void _ZN6S208C63v56Ev();
extern void _ZN6S208C63v57Ev();
extern void _ZN6S208C63v58Ev();
extern void _ZN6S208C63v59Ev();
extern void _ZN6S208C63v60Ev();
extern void _ZN6S208C63v61Ev();
extern void _ZN6S208C63v62Ev();
extern void _ZN6S208C63v63Ev();
extern void _ZN6S208C63v64Ev();
extern void _ZN6S208C63v65Ev();
extern void _ZN6S208C63v66Ev();
extern void _ZN6S208C63v67Ev();
extern void _ZN6S208C53v68Ev();
extern void _ZN6S208C53v69Ev();
extern void _ZN6S208C53v70Ev();
extern void _ZN6S208C53v71Ev();
extern void _ZN6S208C53v72Ev();
extern void _ZN6S208C53v73Ev();
extern void _ZN6S208C53v74Ev();
extern void _ZN6S208C53v75Ev();
extern void _ZN6S208C53v76Ev();
extern void _ZN6S208C53v77Ev();
extern void _ZN6S208C53v78Ev();
extern void _ZN6S208C53v79Ev();
extern void _ZN6S208C53v80Ev();
extern void _ZN6S208C53v81Ev();
extern void _ZN6S208C53v82Ev();
extern void _ZN6S208C53v83Ev();
extern void _ZN6S208C53v84Ev();
extern void _ZN6S208C53v85Ev();
extern void _ZN6S208C53v86Ev();
extern void _ZN6S208C53v87Ev();
extern void _ZN6S208C53v88Ev();
extern void _ZN6S208C53v89Ev();
extern void _ZN6S208C43v90Ev();
extern void _ZN6S208C43v91Ev();
extern void _ZN6S208C43v92Ev();
extern void _ZN6S208C43v93Ev();
extern void _ZN6S208C43v94Ev();
extern void _ZN6S208C43v95Ev();
extern void _ZN6S208C43v96Ev();
extern void _ZN6S208C43v97Ev();
extern void _ZN6S208C43v98Ev();
extern void _ZN6S208C43v99Ev();
extern void _ZN6S208C44v100Ev();
extern void _ZN6S208C44v101Ev();
extern void _ZN6S208C44v102Ev();
extern void _ZN6S208C44v103Ev();
extern void _ZN6S208C44v104Ev();
extern void _ZN6S208C44v105Ev();
extern void _ZN6S208C44v106Ev();
extern void _ZN6S208C44v107Ev();
extern void _ZN6S208C44v108Ev();
extern void _ZN6S208C44v109Ev();
extern void _ZN6S208C34v110Ev();
extern void _ZN6S208C34v111Ev();
extern void _ZN6S208C34v112Ev();
extern void _ZN6S208C34v113Ev();
extern void _ZN9S208C2_nt4v114Ev();
extern void _ZN9S208C2_nt4v115Ev();
extern void _ZN9S208C2_nt4v116Ev();
extern void _ZN9S208C2_nt4v117Ev();
extern void _ZN9S208C2_nt4v118Ev();
extern void _ZN9S208C2_nt4v119Ev();
extern void _ZN9S208C2_nt4v120Ev();
extern void _ZN9S208C2_nt4v121Ev();
extern void _ZN6S208C12v1Ev();
extern void _ZN6S208C12v2Ev();
extern void _ZN6S208C12v3Ev();
static  VTBL_ENTRY vtc_S208C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S208C1[0]),
  (VTBL_ENTRY)&_ZN6S208C1D1Ev,
  (VTBL_ENTRY)&_ZN6S208C1D0Ev,
  (VTBL_ENTRY)&_ZN6S208C62v4Ev,
  (VTBL_ENTRY)&_ZN6S208C62v5Ev,
  (VTBL_ENTRY)&_ZN6S208C62v6Ev,
  (VTBL_ENTRY)&_ZN6S208C62v7Ev,
  (VTBL_ENTRY)&_ZN6S208C62v8Ev,
  (VTBL_ENTRY)&_ZN6S208C62v9Ev,
  (VTBL_ENTRY)&_ZN6S208C63v10Ev,
  (VTBL_ENTRY)&_ZN6S208C63v11Ev,
  (VTBL_ENTRY)&_ZN6S208C63v12Ev,
  (VTBL_ENTRY)&_ZN6S208C63v13Ev,
  (VTBL_ENTRY)&_ZN6S208C63v14Ev,
  (VTBL_ENTRY)&_ZN6S208C63v15Ev,
  (VTBL_ENTRY)&_ZN6S208C63v16Ev,
  (VTBL_ENTRY)&_ZN6S208C63v17Ev,
  (VTBL_ENTRY)&_ZN6S208C63v18Ev,
  (VTBL_ENTRY)&_ZN6S208C63v19Ev,
  (VTBL_ENTRY)&_ZN6S208C63v20Ev,
  (VTBL_ENTRY)&_ZN6S208C63v21Ev,
  (VTBL_ENTRY)&_ZN6S208C63v22Ev,
  (VTBL_ENTRY)&_ZN6S208C63v23Ev,
  (VTBL_ENTRY)&_ZN6S208C63v24Ev,
  (VTBL_ENTRY)&_ZN6S208C63v25Ev,
  (VTBL_ENTRY)&_ZN6S208C63v26Ev,
  (VTBL_ENTRY)&_ZN6S208C63v27Ev,
  (VTBL_ENTRY)&_ZN6S208C63v28Ev,
  (VTBL_ENTRY)&_ZN6S208C63v29Ev,
  (VTBL_ENTRY)&_ZN6S208C63v30Ev,
  (VTBL_ENTRY)&_ZN6S208C63v31Ev,
  (VTBL_ENTRY)&_ZN6S208C63v32Ev,
  (VTBL_ENTRY)&_ZN6S208C63v33Ev,
  (VTBL_ENTRY)&_ZN6S208C63v34Ev,
  (VTBL_ENTRY)&_ZN6S208C63v35Ev,
  (VTBL_ENTRY)&_ZN6S208C63v36Ev,
  (VTBL_ENTRY)&_ZN6S208C63v37Ev,
  (VTBL_ENTRY)&_ZN6S208C63v38Ev,
  (VTBL_ENTRY)&_ZN6S208C63v39Ev,
  (VTBL_ENTRY)&_ZN6S208C63v40Ev,
  (VTBL_ENTRY)&_ZN6S208C63v41Ev,
  (VTBL_ENTRY)&_ZN6S208C63v42Ev,
  (VTBL_ENTRY)&_ZN6S208C63v43Ev,
  (VTBL_ENTRY)&_ZN6S208C63v44Ev,
  (VTBL_ENTRY)&_ZN6S208C63v45Ev,
  (VTBL_ENTRY)&_ZN6S208C63v46Ev,
  (VTBL_ENTRY)&_ZN6S208C63v47Ev,
  (VTBL_ENTRY)&_ZN6S208C63v48Ev,
  (VTBL_ENTRY)&_ZN6S208C63v49Ev,
  (VTBL_ENTRY)&_ZN6S208C63v50Ev,
  (VTBL_ENTRY)&_ZN6S208C63v51Ev,
  (VTBL_ENTRY)&_ZN6S208C63v52Ev,
  (VTBL_ENTRY)&_ZN6S208C63v53Ev,
  (VTBL_ENTRY)&_ZN6S208C63v54Ev,
  (VTBL_ENTRY)&_ZN6S208C63v55Ev,
  (VTBL_ENTRY)&_ZN6S208C63v56Ev,
  (VTBL_ENTRY)&_ZN6S208C63v57Ev,
  (VTBL_ENTRY)&_ZN6S208C63v58Ev,
  (VTBL_ENTRY)&_ZN6S208C63v59Ev,
  (VTBL_ENTRY)&_ZN6S208C63v60Ev,
  (VTBL_ENTRY)&_ZN6S208C63v61Ev,
  (VTBL_ENTRY)&_ZN6S208C63v62Ev,
  (VTBL_ENTRY)&_ZN6S208C63v63Ev,
  (VTBL_ENTRY)&_ZN6S208C63v64Ev,
  (VTBL_ENTRY)&_ZN6S208C63v65Ev,
  (VTBL_ENTRY)&_ZN6S208C63v66Ev,
  (VTBL_ENTRY)&_ZN6S208C63v67Ev,
  (VTBL_ENTRY)&_ZN6S208C53v68Ev,
  (VTBL_ENTRY)&_ZN6S208C53v69Ev,
  (VTBL_ENTRY)&_ZN6S208C53v70Ev,
  (VTBL_ENTRY)&_ZN6S208C53v71Ev,
  (VTBL_ENTRY)&_ZN6S208C53v72Ev,
  (VTBL_ENTRY)&_ZN6S208C53v73Ev,
  (VTBL_ENTRY)&_ZN6S208C53v74Ev,
  (VTBL_ENTRY)&_ZN6S208C53v75Ev,
  (VTBL_ENTRY)&_ZN6S208C53v76Ev,
  (VTBL_ENTRY)&_ZN6S208C53v77Ev,
  (VTBL_ENTRY)&_ZN6S208C53v78Ev,
  (VTBL_ENTRY)&_ZN6S208C53v79Ev,
  (VTBL_ENTRY)&_ZN6S208C53v80Ev,
  (VTBL_ENTRY)&_ZN6S208C53v81Ev,
  (VTBL_ENTRY)&_ZN6S208C53v82Ev,
  (VTBL_ENTRY)&_ZN6S208C53v83Ev,
  (VTBL_ENTRY)&_ZN6S208C53v84Ev,
  (VTBL_ENTRY)&_ZN6S208C53v85Ev,
  (VTBL_ENTRY)&_ZN6S208C53v86Ev,
  (VTBL_ENTRY)&_ZN6S208C53v87Ev,
  (VTBL_ENTRY)&_ZN6S208C53v88Ev,
  (VTBL_ENTRY)&_ZN6S208C53v89Ev,
  (VTBL_ENTRY)&_ZN6S208C43v90Ev,
  (VTBL_ENTRY)&_ZN6S208C43v91Ev,
  (VTBL_ENTRY)&_ZN6S208C43v92Ev,
  (VTBL_ENTRY)&_ZN6S208C43v93Ev,
  (VTBL_ENTRY)&_ZN6S208C43v94Ev,
  (VTBL_ENTRY)&_ZN6S208C43v95Ev,
  (VTBL_ENTRY)&_ZN6S208C43v96Ev,
  (VTBL_ENTRY)&_ZN6S208C43v97Ev,
  (VTBL_ENTRY)&_ZN6S208C43v98Ev,
  (VTBL_ENTRY)&_ZN6S208C43v99Ev,
  (VTBL_ENTRY)&_ZN6S208C44v100Ev,
  (VTBL_ENTRY)&_ZN6S208C44v101Ev,
  (VTBL_ENTRY)&_ZN6S208C44v102Ev,
  (VTBL_ENTRY)&_ZN6S208C44v103Ev,
  (VTBL_ENTRY)&_ZN6S208C44v104Ev,
  (VTBL_ENTRY)&_ZN6S208C44v105Ev,
  (VTBL_ENTRY)&_ZN6S208C44v106Ev,
  (VTBL_ENTRY)&_ZN6S208C44v107Ev,
  (VTBL_ENTRY)&_ZN6S208C44v108Ev,
  (VTBL_ENTRY)&_ZN6S208C44v109Ev,
  (VTBL_ENTRY)&_ZN6S208C34v110Ev,
  (VTBL_ENTRY)&_ZN6S208C34v111Ev,
  (VTBL_ENTRY)&_ZN6S208C34v112Ev,
  (VTBL_ENTRY)&_ZN6S208C34v113Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S208C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN6S208C12v1Ev,
  (VTBL_ENTRY)&_ZN6S208C12v2Ev,
  (VTBL_ENTRY)&_ZN6S208C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S208C1[];
extern  VTBL_ENTRY _ZTV6S208C1[];
Class_Descriptor cd_S208C1 = {  "S208C1", // class name
  bases_S208C1, 5,
  &(vtc_S208C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI6S208C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S208C1),125, //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  S531C5  {
  int s531c5f0;
  __tsi64 s531c5f1;
  void *s531c5f2[4];
  int s531c5f3[2];
  void *s531c5f4;
  ::S100C8_nt s531c5f5;
  void *s531c5f6[2];
  virtual  ~S531C5(); // _ZN6S531C5D1Ev
  virtual void  v3(); // _ZN6S531C52v3Ev
  virtual void  v4(); // _ZN6S531C52v4Ev
  virtual void  v5(); // _ZN6S531C52v5Ev
  virtual void  v6(); // _ZN6S531C52v6Ev
  virtual void  v7(); // _ZN6S531C52v7Ev
  virtual void  v8(); // _ZN6S531C52v8Ev
  virtual void  v9(); // _ZN6S531C52v9Ev
  virtual void  v10(); // _ZN6S531C53v10Ev
  virtual void  v11(); // _ZN6S531C53v11Ev
  virtual void  v12(); // _ZN6S531C53v12Ev
  virtual void  v13(); // _ZN6S531C53v13Ev
  virtual void  v14(); // _ZN6S531C53v14Ev
  virtual void  v15(); // _ZN6S531C53v15Ev
  virtual void  v16(); // _ZN6S531C53v16Ev
  virtual void  v17(); // _ZN6S531C53v17Ev
  virtual void  v18(); // _ZN6S531C53v18Ev
  virtual void  v19(); // _ZN6S531C53v19Ev
  virtual void  v20(); // _ZN6S531C53v20Ev
  virtual void  v21(); // _ZN6S531C53v21Ev
  virtual void  v22(); // _ZN6S531C53v22Ev
  virtual void  v23(); // _ZN6S531C53v23Ev
  virtual void  v24(); // _ZN6S531C53v24Ev
  virtual void  v25(); // _ZN6S531C53v25Ev
  virtual void  v26(); // _ZN6S531C53v26Ev
  virtual void  v27(); // _ZN6S531C53v27Ev
  virtual void  v28(); // _ZN6S531C53v28Ev
  virtual void  v29(); // _ZN6S531C53v29Ev
  virtual void  v30(); // _ZN6S531C53v30Ev
  virtual void  v31(); // _ZN6S531C53v31Ev
  virtual void  v32(); // _ZN6S531C53v32Ev
  virtual void  v33(); // _ZN6S531C53v33Ev
  virtual void  v34(); // _ZN6S531C53v34Ev
  virtual void  v35(); // _ZN6S531C53v35Ev
  virtual void  v36(); // _ZN6S531C53v36Ev
  virtual void  v37(); // _ZN6S531C53v37Ev
  virtual void  v38(); // _ZN6S531C53v38Ev
  virtual void  v39(); // _ZN6S531C53v39Ev
  virtual void  v40(); // _ZN6S531C53v40Ev
  virtual void  v41(); // _ZN6S531C53v41Ev
  virtual void  v42(); // _ZN6S531C53v42Ev
  virtual void  v43(); // _ZN6S531C53v43Ev
  virtual void  v44(); // _ZN6S531C53v44Ev
  virtual void  v45(); // _ZN6S531C53v45Ev
  virtual void  v46(); // _ZN6S531C53v46Ev
  virtual void  v47(); // _ZN6S531C53v47Ev
  virtual void  v48(); // _ZN6S531C53v48Ev
  virtual void  v49(); // _ZN6S531C53v49Ev
  virtual void  v50(); // _ZN6S531C53v50Ev
  virtual void  v51(); // _ZN6S531C53v51Ev
  virtual void  v52(); // _ZN6S531C53v52Ev
  virtual void  v53(); // _ZN6S531C53v53Ev
  virtual void  v54(); // _ZN6S531C53v54Ev
  virtual void  v55(); // _ZN6S531C53v55Ev
  virtual void  v56(); // _ZN6S531C53v56Ev
  virtual void  v57(); // _ZN6S531C53v57Ev
  virtual void  v58(); // _ZN6S531C53v58Ev
  virtual void  v59(); // _ZN6S531C53v59Ev
  virtual void  v60(); // _ZN6S531C53v60Ev
  virtual void  v61(); // _ZN6S531C53v61Ev
  virtual void  v62(); // _ZN6S531C53v62Ev
  virtual void  v63(); // _ZN6S531C53v63Ev
  virtual void  v64(); // _ZN6S531C53v64Ev
  virtual void  v65(); // _ZN6S531C53v65Ev
  virtual void  v66(); // _ZN6S531C53v66Ev
  S531C5(); // tgen
};
//SIG(-1 S531C5) 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]}


 S531C5 ::~S531C5(){ note_dtor("S531C5", this);}
void  S531C5 ::v3(){vfunc_called(this, "_ZN6S531C52v3Ev");}
void  S531C5 ::v4(){vfunc_called(this, "_ZN6S531C52v4Ev");}
void  S531C5 ::v5(){vfunc_called(this, "_ZN6S531C52v5Ev");}
void  S531C5 ::v6(){vfunc_called(this, "_ZN6S531C52v6Ev");}
void  S531C5 ::v7(){vfunc_called(this, "_ZN6S531C52v7Ev");}
void  S531C5 ::v8(){vfunc_called(this, "_ZN6S531C52v8Ev");}
void  S531C5 ::v9(){vfunc_called(this, "_ZN6S531C52v9Ev");}
void  S531C5 ::v10(){vfunc_called(this, "_ZN6S531C53v10Ev");}
void  S531C5 ::v11(){vfunc_called(this, "_ZN6S531C53v11Ev");}
void  S531C5 ::v12(){vfunc_called(this, "_ZN6S531C53v12Ev");}
void  S531C5 ::v13(){vfunc_called(this, "_ZN6S531C53v13Ev");}
void  S531C5 ::v14(){vfunc_called(this, "_ZN6S531C53v14Ev");}
void  S531C5 ::v15(){vfunc_called(this, "_ZN6S531C53v15Ev");}
void  S531C5 ::v16(){vfunc_called(this, "_ZN6S531C53v16Ev");}
void  S531C5 ::v17(){vfunc_called(this, "_ZN6S531C53v17Ev");}
void  S531C5 ::v18(){vfunc_called(this, "_ZN6S531C53v18Ev");}
void  S531C5 ::v19(){vfunc_called(this, "_ZN6S531C53v19Ev");}
void  S531C5 ::v20(){vfunc_called(this, "_ZN6S531C53v20Ev");}
void  S531C5 ::v21(){vfunc_called(this, "_ZN6S531C53v21Ev");}
void  S531C5 ::v22(){vfunc_called(this, "_ZN6S531C53v22Ev");}
void  S531C5 ::v23(){vfunc_called(this, "_ZN6S531C53v23Ev");}
void  S531C5 ::v24(){vfunc_called(this, "_ZN6S531C53v24Ev");}
void  S531C5 ::v25(){vfunc_called(this, "_ZN6S531C53v25Ev");}
void  S531C5 ::v26(){vfunc_called(this, "_ZN6S531C53v26Ev");}
void  S531C5 ::v27(){vfunc_called(this, "_ZN6S531C53v27Ev");}
void  S531C5 ::v28(){vfunc_called(this, "_ZN6S531C53v28Ev");}
void  S531C5 ::v29(){vfunc_called(this, "_ZN6S531C53v29Ev");}
void  S531C5 ::v30(){vfunc_called(this, "_ZN6S531C53v30Ev");}
void  S531C5 ::v31(){vfunc_called(this, "_ZN6S531C53v31Ev");}
void  S531C5 ::v32(){vfunc_called(this, "_ZN6S531C53v32Ev");}
void  S531C5 ::v33(){vfunc_called(this, "_ZN6S531C53v33Ev");}
void  S531C5 ::v34(){vfunc_called(this, "_ZN6S531C53v34Ev");}
void  S531C5 ::v35(){vfunc_called(this, "_ZN6S531C53v35Ev");}
void  S531C5 ::v36(){vfunc_called(this, "_ZN6S531C53v36Ev");}
void  S531C5 ::v37(){vfunc_called(this, "_ZN6S531C53v37Ev");}
void  S531C5 ::v38(){vfunc_called(this, "_ZN6S531C53v38Ev");}
void  S531C5 ::v39(){vfunc_called(this, "_ZN6S531C53v39Ev");}
void  S531C5 ::v40(){vfunc_called(this, "_ZN6S531C53v40Ev");}
void  S531C5 ::v41(){vfunc_called(this, "_ZN6S531C53v41Ev");}
void  S531C5 ::v42(){vfunc_called(this, "_ZN6S531C53v42Ev");}
void  S531C5 ::v43(){vfunc_called(this, "_ZN6S531C53v43Ev");}
void  S531C5 ::v44(){vfunc_called(this, "_ZN6S531C53v44Ev");}
void  S531C5 ::v45(){vfunc_called(this, "_ZN6S531C53v45Ev");}
void  S531C5 ::v46(){vfunc_called(this, "_ZN6S531C53v46Ev");}
void  S531C5 ::v47(){vfunc_called(this, "_ZN6S531C53v47Ev");}
void  S531C5 ::v48(){vfunc_called(this, "_ZN6S531C53v48Ev");}
void  S531C5 ::v49(){vfunc_called(this, "_ZN6S531C53v49Ev");}
void  S531C5 ::v50(){vfunc_called(this, "_ZN6S531C53v50Ev");}
void  S531C5 ::v51(){vfunc_called(this, "_ZN6S531C53v51Ev");}
void  S531C5 ::v52(){vfunc_called(this, "_ZN6S531C53v52Ev");}
void  S531C5 ::v53(){vfunc_called(this, "_ZN6S531C53v53Ev");}
void  S531C5 ::v54(){vfunc_called(this, "_ZN6S531C53v54Ev");}
void  S531C5 ::v55(){vfunc_called(this, "_ZN6S531C53v55Ev");}
void  S531C5 ::v56(){vfunc_called(this, "_ZN6S531C53v56Ev");}
void  S531C5 ::v57(){vfunc_called(this, "_ZN6S531C53v57Ev");}
void  S531C5 ::v58(){vfunc_called(this, "_ZN6S531C53v58Ev");}
void  S531C5 ::v59(){vfunc_called(this, "_ZN6S531C53v59Ev");}
void  S531C5 ::v60(){vfunc_called(this, "_ZN6S531C53v60Ev");}
void  S531C5 ::v61(){vfunc_called(this, "_ZN6S531C53v61Ev");}
void  S531C5 ::v62(){vfunc_called(this, "_ZN6S531C53v62Ev");}
void  S531C5 ::v63(){vfunc_called(this, "_ZN6S531C53v63Ev");}
void  S531C5 ::v64(){vfunc_called(this, "_ZN6S531C53v64Ev");}
void  S531C5 ::v65(){vfunc_called(this, "_ZN6S531C53v65Ev");}
void  S531C5 ::v66(){vfunc_called(this, "_ZN6S531C53v66Ev");}
S531C5 ::S531C5(){ note_ctor("S531C5", this);} // tgen

static void Test_S531C5()
{
  extern Class_Descriptor cd_S531C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S531C5, buf);
    S531C5 *dp, &lv = *(dp=new (buf) S531C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S531C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S531C5)");
    check_field_offset(lv, s531c5f0, ABISELECT(8,4), "S531C5.s531c5f0");
    check_field_offset(lv, s531c5f1, ABISELECT(16,8), "S531C5.s531c5f1");
    check_field_offset(lv, s531c5f2, ABISELECT(24,16), "S531C5.s531c5f2");
    check_field_offset(lv, s531c5f3, ABISELECT(56,32), "S531C5.s531c5f3");
    check_field_offset(lv, s531c5f4, ABISELECT(64,40), "S531C5.s531c5f4");
    check_field_offset(lv, s531c5f5, ABISELECT(72,44), "S531C5.s531c5f5");
    check_field_offset(lv, s531c5f6, ABISELECT(80,52), "S531C5.s531c5f6");
    test_class_info(&lv, &cd_S531C5);
    dp->~S531C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS531C5(Test_S531C5, "S531C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S531C5C1Ev();
extern void _ZN6S531C5D1Ev();
Name_Map name_map_S531C5[] = {
  NSPAIR(_ZN6S531C5C1Ev),
  NSPAIR(_ZN6S531C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S531C5[];
extern void _ZN6S531C5D1Ev();
extern void _ZN6S531C5D0Ev();
extern void _ZN6S531C52v3Ev();
extern void _ZN6S531C52v4Ev();
extern void _ZN6S531C52v5Ev();
extern void _ZN6S531C52v6Ev();
extern void _ZN6S531C52v7Ev();
extern void _ZN6S531C52v8Ev();
extern void _ZN6S531C52v9Ev();
extern void _ZN6S531C53v10Ev();
extern void _ZN6S531C53v11Ev();
extern void _ZN6S531C53v12Ev();
extern void _ZN6S531C53v13Ev();
extern void _ZN6S531C53v14Ev();
extern void _ZN6S531C53v15Ev();
extern void _ZN6S531C53v16Ev();
extern void _ZN6S531C53v17Ev();
extern void _ZN6S531C53v18Ev();
extern void _ZN6S531C53v19Ev();
extern void _ZN6S531C53v20Ev();
extern void _ZN6S531C53v21Ev();
extern void _ZN6S531C53v22Ev();
extern void _ZN6S531C53v23Ev();
extern void _ZN6S531C53v24Ev();
extern void _ZN6S531C53v25Ev();
extern void _ZN6S531C53v26Ev();
extern void _ZN6S531C53v27Ev();
extern void _ZN6S531C53v28Ev();
extern void _ZN6S531C53v29Ev();
extern void _ZN6S531C53v30Ev();
extern void _ZN6S531C53v31Ev();
extern void _ZN6S531C53v32Ev();
extern void _ZN6S531C53v33Ev();
extern void _ZN6S531C53v34Ev();
extern void _ZN6S531C53v35Ev();
extern void _ZN6S531C53v36Ev();
extern void _ZN6S531C53v37Ev();
extern void _ZN6S531C53v38Ev();
extern void _ZN6S531C53v39Ev();
extern void _ZN6S531C53v40Ev();
extern void _ZN6S531C53v41Ev();
extern void _ZN6S531C53v42Ev();
extern void _ZN6S531C53v43Ev();
extern void _ZN6S531C53v44Ev();
extern void _ZN6S531C53v45Ev();
extern void _ZN6S531C53v46Ev();
extern void _ZN6S531C53v47Ev();
extern void _ZN6S531C53v48Ev();
extern void _ZN6S531C53v49Ev();
extern void _ZN6S531C53v50Ev();
extern void _ZN6S531C53v51Ev();
extern void _ZN6S531C53v52Ev();
extern void _ZN6S531C53v53Ev();
extern void _ZN6S531C53v54Ev();
extern void _ZN6S531C53v55Ev();
extern void _ZN6S531C53v56Ev();
extern void _ZN6S531C53v57Ev();
extern void _ZN6S531C53v58Ev();
extern void _ZN6S531C53v59Ev();
extern void _ZN6S531C53v60Ev();
extern void _ZN6S531C53v61Ev();
extern void _ZN6S531C53v62Ev();
extern void _ZN6S531C53v63Ev();
extern void _ZN6S531C53v64Ev();
extern void _ZN6S531C53v65Ev();
extern void _ZN6S531C53v66Ev();
static  VTBL_ENTRY vtc_S531C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S531C5[0]),
  (VTBL_ENTRY)&_ZN6S531C5D1Ev,
  (VTBL_ENTRY)&_ZN6S531C5D0Ev,
  (VTBL_ENTRY)&_ZN6S531C52v3Ev,
  (VTBL_ENTRY)&_ZN6S531C52v4Ev,
  (VTBL_ENTRY)&_ZN6S531C52v5Ev,
  (VTBL_ENTRY)&_ZN6S531C52v6Ev,
  (VTBL_ENTRY)&_ZN6S531C52v7Ev,
  (VTBL_ENTRY)&_ZN6S531C52v8Ev,
  (VTBL_ENTRY)&_ZN6S531C52v9Ev,
  (VTBL_ENTRY)&_ZN6S531C53v10Ev,
  (VTBL_ENTRY)&_ZN6S531C53v11Ev,
  (VTBL_ENTRY)&_ZN6S531C53v12Ev,
  (VTBL_ENTRY)&_ZN6S531C53v13Ev,
  (VTBL_ENTRY)&_ZN6S531C53v14Ev,
  (VTBL_ENTRY)&_ZN6S531C53v15Ev,
  (VTBL_ENTRY)&_ZN6S531C53v16Ev,
  (VTBL_ENTRY)&_ZN6S531C53v17Ev,
  (VTBL_ENTRY)&_ZN6S531C53v18Ev,
  (VTBL_ENTRY)&_ZN6S531C53v19Ev,
  (VTBL_ENTRY)&_ZN6S531C53v20Ev,
  (VTBL_ENTRY)&_ZN6S531C53v21Ev,
  (VTBL_ENTRY)&_ZN6S531C53v22Ev,
  (VTBL_ENTRY)&_ZN6S531C53v23Ev,
  (VTBL_ENTRY)&_ZN6S531C53v24Ev,
  (VTBL_ENTRY)&_ZN6S531C53v25Ev,
  (VTBL_ENTRY)&_ZN6S531C53v26Ev,
  (VTBL_ENTRY)&_ZN6S531C53v27Ev,
  (VTBL_ENTRY)&_ZN6S531C53v28Ev,
  (VTBL_ENTRY)&_ZN6S531C53v29Ev,
  (VTBL_ENTRY)&_ZN6S531C53v30Ev,
  (VTBL_ENTRY)&_ZN6S531C53v31Ev,
  (VTBL_ENTRY)&_ZN6S531C53v32Ev,
  (VTBL_ENTRY)&_ZN6S531C53v33Ev,
  (VTBL_ENTRY)&_ZN6S531C53v34Ev,
  (VTBL_ENTRY)&_ZN6S531C53v35Ev,
  (VTBL_ENTRY)&_ZN6S531C53v36Ev,
  (VTBL_ENTRY)&_ZN6S531C53v37Ev,
  (VTBL_ENTRY)&_ZN6S531C53v38Ev,
  (VTBL_ENTRY)&_ZN6S531C53v39Ev,
  (VTBL_ENTRY)&_ZN6S531C53v40Ev,
  (VTBL_ENTRY)&_ZN6S531C53v41Ev,
  (VTBL_ENTRY)&_ZN6S531C53v42Ev,
  (VTBL_ENTRY)&_ZN6S531C53v43Ev,
  (VTBL_ENTRY)&_ZN6S531C53v44Ev,
  (VTBL_ENTRY)&_ZN6S531C53v45Ev,
  (VTBL_ENTRY)&_ZN6S531C53v46Ev,
  (VTBL_ENTRY)&_ZN6S531C53v47Ev,
  (VTBL_ENTRY)&_ZN6S531C53v48Ev,
  (VTBL_ENTRY)&_ZN6S531C53v49Ev,
  (VTBL_ENTRY)&_ZN6S531C53v50Ev,
  (VTBL_ENTRY)&_ZN6S531C53v51Ev,
  (VTBL_ENTRY)&_ZN6S531C53v52Ev,
  (VTBL_ENTRY)&_ZN6S531C53v53Ev,
  (VTBL_ENTRY)&_ZN6S531C53v54Ev,
  (VTBL_ENTRY)&_ZN6S531C53v55Ev,
  (VTBL_ENTRY)&_ZN6S531C53v56Ev,
  (VTBL_ENTRY)&_ZN6S531C53v57Ev,
  (VTBL_ENTRY)&_ZN6S531C53v58Ev,
  (VTBL_ENTRY)&_ZN6S531C53v59Ev,
  (VTBL_ENTRY)&_ZN6S531C53v60Ev,
  (VTBL_ENTRY)&_ZN6S531C53v61Ev,
  (VTBL_ENTRY)&_ZN6S531C53v62Ev,
  (VTBL_ENTRY)&_ZN6S531C53v63Ev,
  (VTBL_ENTRY)&_ZN6S531C53v64Ev,
  (VTBL_ENTRY)&_ZN6S531C53v65Ev,
  (VTBL_ENTRY)&_ZN6S531C53v66Ev,
};
extern VTBL_ENTRY _ZTI6S531C5[];
extern  VTBL_ENTRY _ZTV6S531C5[];
Class_Descriptor cd_S531C5 = {  "S531C5", // class name
  0,0,//no base classes
  &(vtc_S531C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S531C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S531C5),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  S531C4  : S531C5 {
  int s531c4f0[2];
  void *s531c4f1;
  int s531c4f2[2];
  ::S100C39_nt s531c4f3;
  ::S100C39_nt s531c4f4;
  ::S2382C30 s531c4f5;
  ::S100C39_nt s531c4f6;
  unsigned int s531c4f7:1;
  unsigned int s531c4f8:1;
  unsigned int s531c4f9:1;
  unsigned int s531c4f10:1;
  unsigned int s531c4f11:1;
  int s531c4f12[2];
  virtual  ~S531C4(); // _ZN6S531C4D1Ev
  virtual void  v67(); // _ZN6S531C43v67Ev
  virtual void  v68(); // _ZN6S531C43v68Ev
  virtual void  v69(); // _ZN6S531C43v69Ev
  virtual void  v70(); // _ZN6S531C43v70Ev
  virtual void  v71(); // _ZN6S531C43v71Ev
  virtual void  v72(); // _ZN6S531C43v72Ev
  virtual void  v73(); // _ZN6S531C43v73Ev
  virtual void  v74(); // _ZN6S531C43v74Ev
  virtual void  v75(); // _ZN6S531C43v75Ev
  virtual void  v76(); // _ZN6S531C43v76Ev
  virtual void  v77(); // _ZN6S531C43v77Ev
  virtual void  v78(); // _ZN6S531C43v78Ev
  virtual void  v79(); // _ZN6S531C43v79Ev
  virtual void  v80(); // _ZN6S531C43v80Ev
  virtual void  v81(); // _ZN6S531C43v81Ev
  virtual void  v82(); // _ZN6S531C43v82Ev
  virtual void  v83(); // _ZN6S531C43v83Ev
  virtual void  v84(); // _ZN6S531C43v84Ev
  virtual void  v85(); // _ZN6S531C43v85Ev
  virtual void  v86(); // _ZN6S531C43v86Ev
  virtual void  v87(); // _ZN6S531C43v87Ev
  virtual void  v88(); // _ZN6S531C43v88Ev
  S531C4(); // tgen
};
//SIG(-1 S531C4) C1{ BC2{ vd 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 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 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S531C4 ::~S531C4(){ note_dtor("S531C4", this);}
void  S531C4 ::v67(){vfunc_called(this, "_ZN6S531C43v67Ev");}
void  S531C4 ::v68(){vfunc_called(this, "_ZN6S531C43v68Ev");}
void  S531C4 ::v69(){vfunc_called(this, "_ZN6S531C43v69Ev");}
void  S531C4 ::v70(){vfunc_called(this, "_ZN6S531C43v70Ev");}
void  S531C4 ::v71(){vfunc_called(this, "_ZN6S531C43v71Ev");}
void  S531C4 ::v72(){vfunc_called(this, "_ZN6S531C43v72Ev");}
void  S531C4 ::v73(){vfunc_called(this, "_ZN6S531C43v73Ev");}
void  S531C4 ::v74(){vfunc_called(this, "_ZN6S531C43v74Ev");}
void  S531C4 ::v75(){vfunc_called(this, "_ZN6S531C43v75Ev");}
void  S531C4 ::v76(){vfunc_called(this, "_ZN6S531C43v76Ev");}
void  S531C4 ::v77(){vfunc_called(this, "_ZN6S531C43v77Ev");}
void  S531C4 ::v78(){vfunc_called(this, "_ZN6S531C43v78Ev");}
void  S531C4 ::v79(){vfunc_called(this, "_ZN6S531C43v79Ev");}
void  S531C4 ::v80(){vfunc_called(this, "_ZN6S531C43v80Ev");}
void  S531C4 ::v81(){vfunc_called(this, "_ZN6S531C43v81Ev");}
void  S531C4 ::v82(){vfunc_called(this, "_ZN6S531C43v82Ev");}
void  S531C4 ::v83(){vfunc_called(this, "_ZN6S531C43v83Ev");}
void  S531C4 ::v84(){vfunc_called(this, "_ZN6S531C43v84Ev");}
void  S531C4 ::v85(){vfunc_called(this, "_ZN6S531C43v85Ev");}
void  S531C4 ::v86(){vfunc_called(this, "_ZN6S531C43v86Ev");}
void  S531C4 ::v87(){vfunc_called(this, "_ZN6S531C43v87Ev");}
void  S531C4 ::v88(){vfunc_called(this, "_ZN6S531C43v88Ev");}
S531C4 ::S531C4(){ note_ctor("S531C4", this);} // tgen

static void Test_S531C4()
{
  extern Class_Descriptor cd_S531C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S531C4, buf);
    S531C4 *dp, &lv = *(dp=new (buf) S531C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S531C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S531C4)");
    check_base_class_offset(lv, (S531C5*), 0, "S531C4");
    check_field_offset(lv, s531c4f0, ABISELECT(96,60), "S531C4.s531c4f0");
    check_field_offset(lv, s531c4f1, ABISELECT(104,68), "S531C4.s531c4f1");
    check_field_offset(lv, s531c4f2, ABISELECT(112,72), "S531C4.s531c4f2");
    check_field_offset(lv, s531c4f3, ABISELECT(120,80), "S531C4.s531c4f3");
    check_field_offset(lv, s531c4f4, ABISELECT(136,92), "S531C4.s531c4f4");
    check_field_offset(lv, s531c4f5, ABISELECT(152,104), "S531C4.s531c4f5");
    check_field_offset(lv, s531c4f6, ABISELECT(160,108), "S531C4.s531c4f6");
    set_bf_and_test(lv, s531c4f7, ABISELECT(176,120), 0, 1, 1, "S531C4");
    set_bf_and_test(lv, s531c4f8, ABISELECT(176,120), 1, 1, 1, "S531C4");
    set_bf_and_test(lv, s531c4f9, ABISELECT(176,120), 2, 1, 1, "S531C4");
    set_bf_and_test(lv, s531c4f10, ABISELECT(176,120), 3, 1, 1, "S531C4");
    set_bf_and_test(lv, s531c4f11, ABISELECT(176,120), 4, 1, 1, "S531C4");
    check_field_offset(lv, s531c4f12, ABISELECT(180,124), "S531C4.s531c4f12");
    test_class_info(&lv, &cd_S531C4);
    dp->~S531C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS531C4(Test_S531C4, "S531C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S531C4C1Ev();
extern void _ZN6S531C4D1Ev();
Name_Map name_map_S531C4[] = {
  NSPAIR(_ZN6S531C4C1Ev),
  NSPAIR(_ZN6S531C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S531C5;
extern VTBL_ENTRY _ZTI6S531C5[];
extern  VTBL_ENTRY _ZTV6S531C5[];
static Base_Class bases_S531C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S531C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S531C4[];
extern void _ZN6S531C4D1Ev();
extern void _ZN6S531C4D0Ev();
extern void _ZN6S531C52v3Ev();
extern void _ZN6S531C52v4Ev();
extern void _ZN6S531C52v5Ev();
extern void _ZN6S531C52v6Ev();
extern void _ZN6S531C52v7Ev();
extern void _ZN6S531C52v8Ev();
extern void _ZN6S531C52v9Ev();
extern void _ZN6S531C53v10Ev();
extern void _ZN6S531C53v11Ev();
extern void _ZN6S531C53v12Ev();
extern void _ZN6S531C53v13Ev();
extern void _ZN6S531C53v14Ev();
extern void _ZN6S531C53v15Ev();
extern void _ZN6S531C53v16Ev();
extern void _ZN6S531C53v17Ev();
extern void _ZN6S531C53v18Ev();
extern void _ZN6S531C53v19Ev();
extern void _ZN6S531C53v20Ev();
extern void _ZN6S531C53v21Ev();
extern void _ZN6S531C53v22Ev();
extern void _ZN6S531C53v23Ev();
extern void _ZN6S531C53v24Ev();
extern void _ZN6S531C53v25Ev();
extern void _ZN6S531C53v26Ev();
extern void _ZN6S531C53v27Ev();
extern void _ZN6S531C53v28Ev();
extern void _ZN6S531C53v29Ev();
extern void _ZN6S531C53v30Ev();
extern void _ZN6S531C53v31Ev();
extern void _ZN6S531C53v32Ev();
extern void _ZN6S531C53v33Ev();
extern void _ZN6S531C53v34Ev();
extern void _ZN6S531C53v35Ev();
extern void _ZN6S531C53v36Ev();
extern void _ZN6S531C53v37Ev();
extern void _ZN6S531C53v38Ev();
extern void _ZN6S531C53v39Ev();
extern void _ZN6S531C53v40Ev();
extern void _ZN6S531C53v41Ev();
extern void _ZN6S531C53v42Ev();
extern void _ZN6S531C53v43Ev();
extern void _ZN6S531C53v44Ev();
extern void _ZN6S531C53v45Ev();
extern void _ZN6S531C53v46Ev();
extern void _ZN6S531C53v47Ev();
extern void _ZN6S531C53v48Ev();
extern void _ZN6S531C53v49Ev();
extern void _ZN6S531C53v50Ev();
extern void _ZN6S531C53v51Ev();
extern void _ZN6S531C53v52Ev();
extern void _ZN6S531C53v53Ev();
extern void _ZN6S531C53v54Ev();
extern void _ZN6S531C53v55Ev();
extern void _ZN6S531C53v56Ev();
extern void _ZN6S531C53v57Ev();
extern void _ZN6S531C53v58Ev();
extern void _ZN6S531C53v59Ev();
extern void _ZN6S531C53v60Ev();
extern void _ZN6S531C53v61Ev();
extern void _ZN6S531C53v62Ev();
extern void _ZN6S531C53v63Ev();
extern void _ZN6S531C53v64Ev();
extern void _ZN6S531C53v65Ev();
extern void _ZN6S531C53v66Ev();
extern void _ZN6S531C43v67Ev();
extern void _ZN6S531C43v68Ev();
extern void _ZN6S531C43v69Ev();
extern void _ZN6S531C43v70Ev();
extern void _ZN6S531C43v71Ev();
extern void _ZN6S531C43v72Ev();
extern void _ZN6S531C43v73Ev();
extern void _ZN6S531C43v74Ev();
extern void _ZN6S531C43v75Ev();
extern void _ZN6S531C43v76Ev();
extern void _ZN6S531C43v77Ev();
extern void _ZN6S531C43v78Ev();
extern void _ZN6S531C43v79Ev();
extern void _ZN6S531C43v80Ev();
extern void _ZN6S531C43v81Ev();
extern void _ZN6S531C43v82Ev();
extern void _ZN6S531C43v83Ev();
extern void _ZN6S531C43v84Ev();
extern void _ZN6S531C43v85Ev();
extern void _ZN6S531C43v86Ev();
extern void _ZN6S531C43v87Ev();
extern void _ZN6S531C43v88Ev();
static  VTBL_ENTRY vtc_S531C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S531C4[0]),
  (VTBL_ENTRY)&_ZN6S531C4D1Ev,
  (VTBL_ENTRY)&_ZN6S531C4D0Ev,
  (VTBL_ENTRY)&_ZN6S531C52v3Ev,
  (VTBL_ENTRY)&_ZN6S531C52v4Ev,
  (VTBL_ENTRY)&_ZN6S531C52v5Ev,
  (VTBL_ENTRY)&_ZN6S531C52v6Ev,
  (VTBL_ENTRY)&_ZN6S531C52v7Ev,
  (VTBL_ENTRY)&_ZN6S531C52v8Ev,
  (VTBL_ENTRY)&_ZN6S531C52v9Ev,
  (VTBL_ENTRY)&_ZN6S531C53v10Ev,
  (VTBL_ENTRY)&_ZN6S531C53v11Ev,
  (VTBL_ENTRY)&_ZN6S531C53v12Ev,
  (VTBL_ENTRY)&_ZN6S531C53v13Ev,
  (VTBL_ENTRY)&_ZN6S531C53v14Ev,
  (VTBL_ENTRY)&_ZN6S531C53v15Ev,
  (VTBL_ENTRY)&_ZN6S531C53v16Ev,
  (VTBL_ENTRY)&_ZN6S531C53v17Ev,
  (VTBL_ENTRY)&_ZN6S531C53v18Ev,
  (VTBL_ENTRY)&_ZN6S531C53v19Ev,
  (VTBL_ENTRY)&_ZN6S531C53v20Ev,
  (VTBL_ENTRY)&_ZN6S531C53v21Ev,
  (VTBL_ENTRY)&_ZN6S531C53v22Ev,
  (VTBL_ENTRY)&_ZN6S531C53v23Ev,
  (VTBL_ENTRY)&_ZN6S531C53v24Ev,
  (VTBL_ENTRY)&_ZN6S531C53v25Ev,
  (VTBL_ENTRY)&_ZN6S531C53v26Ev,
  (VTBL_ENTRY)&_ZN6S531C53v27Ev,
  (VTBL_ENTRY)&_ZN6S531C53v28Ev,
  (VTBL_ENTRY)&_ZN6S531C53v29Ev,
  (VTBL_ENTRY)&_ZN6S531C53v30Ev,
  (VTBL_ENTRY)&_ZN6S531C53v31Ev,
  (VTBL_ENTRY)&_ZN6S531C53v32Ev,
  (VTBL_ENTRY)&_ZN6S531C53v33Ev,
  (VTBL_ENTRY)&_ZN6S531C53v34Ev,
  (VTBL_ENTRY)&_ZN6S531C53v35Ev,
  (VTBL_ENTRY)&_ZN6S531C53v36Ev,
  (VTBL_ENTRY)&_ZN6S531C53v37Ev,
  (VTBL_ENTRY)&_ZN6S531C53v38Ev,
  (VTBL_ENTRY)&_ZN6S531C53v39Ev,
  (VTBL_ENTRY)&_ZN6S531C53v40Ev,
  (VTBL_ENTRY)&_ZN6S531C53v41Ev,
  (VTBL_ENTRY)&_ZN6S531C53v42Ev,
  (VTBL_ENTRY)&_ZN6S531C53v43Ev,
  (VTBL_ENTRY)&_ZN6S531C53v44Ev,
  (VTBL_ENTRY)&_ZN6S531C53v45Ev,
  (VTBL_ENTRY)&_ZN6S531C53v46Ev,
  (VTBL_ENTRY)&_ZN6S531C53v47Ev,
  (VTBL_ENTRY)&_ZN6S531C53v48Ev,
  (VTBL_ENTRY)&_ZN6S531C53v49Ev,
  (VTBL_ENTRY)&_ZN6S531C53v50Ev,
  (VTBL_ENTRY)&_ZN6S531C53v51Ev,
  (VTBL_ENTRY)&_ZN6S531C53v52Ev,
  (VTBL_ENTRY)&_ZN6S531C53v53Ev,
  (VTBL_ENTRY)&_ZN6S531C53v54Ev,
  (VTBL_ENTRY)&_ZN6S531C53v55Ev,
  (VTBL_ENTRY)&_ZN6S531C53v56Ev,
  (VTBL_ENTRY)&_ZN6S531C53v57Ev,
  (VTBL_ENTRY)&_ZN6S531C53v58Ev,
  (VTBL_ENTRY)&_ZN6S531C53v59Ev,
  (VTBL_ENTRY)&_ZN6S531C53v60Ev,
  (VTBL_ENTRY)&_ZN6S531C53v61Ev,
  (VTBL_ENTRY)&_ZN6S531C53v62Ev,
  (VTBL_ENTRY)&_ZN6S531C53v63Ev,
  (VTBL_ENTRY)&_ZN6S531C53v64Ev,
  (VTBL_ENTRY)&_ZN6S531C53v65Ev,
  (VTBL_ENTRY)&_ZN6S531C53v66Ev,
  (VTBL_ENTRY)&_ZN6S531C43v67Ev,
  (VTBL_ENTRY)&_ZN6S531C43v68Ev,
  (VTBL_ENTRY)&_ZN6S531C43v69Ev,
  (VTBL_ENTRY)&_ZN6S531C43v70Ev,
  (VTBL_ENTRY)&_ZN6S531C43v71Ev,
  (VTBL_ENTRY)&_ZN6S531C43v72Ev,
  (VTBL_ENTRY)&_ZN6S531C43v73Ev,
  (VTBL_ENTRY)&_ZN6S531C43v74Ev,
  (VTBL_ENTRY)&_ZN6S531C43v75Ev,
  (VTBL_ENTRY)&_ZN6S531C43v76Ev,
  (VTBL_ENTRY)&_ZN6S531C43v77Ev,
  (VTBL_ENTRY)&_ZN6S531C43v78Ev,
  (VTBL_ENTRY)&_ZN6S531C43v79Ev,
  (VTBL_ENTRY)&_ZN6S531C43v80Ev,
  (VTBL_ENTRY)&_ZN6S531C43v81Ev,
  (VTBL_ENTRY)&_ZN6S531C43v82Ev,
  (VTBL_ENTRY)&_ZN6S531C43v83Ev,
  (VTBL_ENTRY)&_ZN6S531C43v84Ev,
  (VTBL_ENTRY)&_ZN6S531C43v85Ev,
  (VTBL_ENTRY)&_ZN6S531C43v86Ev,
  (VTBL_ENTRY)&_ZN6S531C43v87Ev,
  (VTBL_ENTRY)&_ZN6S531C43v88Ev,
};
extern VTBL_ENTRY _ZTI6S531C4[];
extern  VTBL_ENTRY _ZTV6S531C4[];
Class_Descriptor cd_S531C4 = {  "S531C4", // class name
  bases_S531C4, 1,
  &(vtc_S531C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S531C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S531C4),90, //virtual function table var
  2, // 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  S531C3  : S531C4 {
  unsigned int s531c3f0:1;
  unsigned int s531c3f1:1;
  unsigned int s531c3f2:1;
  ::S195C23_nt s531c3f3;
  ::S100C44 s531c3f4;
  ::S100C40 s531c3f5;
  ::S100C19 s531c3f6;
  int s531c3f7[3];
  virtual  ~S531C3(); // _ZN6S531C3D1Ev
  virtual void  v89(); // _ZN6S531C33v89Ev
  virtual void  v90(); // _ZN6S531C33v90Ev
  virtual void  v91(); // _ZN6S531C33v91Ev
  virtual void  v92(); // _ZN6S531C33v92Ev
  virtual void  v93(); // _ZN6S531C33v93Ev
  virtual void  v94(); // _ZN6S531C33v94Ev
  virtual void  v95(); // _ZN6S531C33v95Ev
  virtual void  v96(); // _ZN6S531C33v96Ev
  virtual void  v97(); // _ZN6S531C33v97Ev
  virtual void  v98(); // _ZN6S531C33v98Ev
  virtual void  v99(); // _ZN6S531C33v99Ev
  virtual void  v100(); // _ZN6S531C34v100Ev
  virtual void  v101(); // _ZN6S531C34v101Ev
  virtual void  v102(); // _ZN6S531C34v102Ev
  virtual void  v103(); // _ZN6S531C34v103Ev
  virtual void  v104(); // _ZN6S531C34v104Ev
  virtual void  v105(); // _ZN6S531C34v105Ev
  virtual void  v106(); // _ZN6S531C34v106Ev
  virtual void  v107(); // _ZN6S531C34v107Ev
  virtual void  v108(); // _ZN6S531C34v108Ev
  S531C3(); // tgen
};
//SIG(-1 S531C3) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[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 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC6 FC14{ BC15{ BC8}} Fi[3]}


 S531C3 ::~S531C3(){ note_dtor("S531C3", this);}
void  S531C3 ::v89(){vfunc_called(this, "_ZN6S531C33v89Ev");}
void  S531C3 ::v90(){vfunc_called(this, "_ZN6S531C33v90Ev");}
void  S531C3 ::v91(){vfunc_called(this, "_ZN6S531C33v91Ev");}
void  S531C3 ::v92(){vfunc_called(this, "_ZN6S531C33v92Ev");}
void  S531C3 ::v93(){vfunc_called(this, "_ZN6S531C33v93Ev");}
void  S531C3 ::v94(){vfunc_called(this, "_ZN6S531C33v94Ev");}
void  S531C3 ::v95(){vfunc_called(this, "_ZN6S531C33v95Ev");}
void  S531C3 ::v96(){vfunc_called(this, "_ZN6S531C33v96Ev");}
void  S531C3 ::v97(){vfunc_called(this, "_ZN6S531C33v97Ev");}
void  S531C3 ::v98(){vfunc_called(this, "_ZN6S531C33v98Ev");}
void  S531C3 ::v99(){vfunc_called(this, "_ZN6S531C33v99Ev");}
void  S531C3 ::v100(){vfunc_called(this, "_ZN6S531C34v100Ev");}
void  S531C3 ::v101(){vfunc_called(this, "_ZN6S531C34v101Ev");}
void  S531C3 ::v102(){vfunc_called(this, "_ZN6S531C34v102Ev");}
void  S531C3 ::v103(){vfunc_called(this, "_ZN6S531C34v103Ev");}
void  S531C3 ::v104(){vfunc_called(this, "_ZN6S531C34v104Ev");}
void  S531C3 ::v105(){vfunc_called(this, "_ZN6S531C34v105Ev");}
void  S531C3 ::v106(){vfunc_called(this, "_ZN6S531C34v106Ev");}
void  S531C3 ::v107(){vfunc_called(this, "_ZN6S531C34v107Ev");}
void  S531C3 ::v108(){vfunc_called(this, "_ZN6S531C34v108Ev");}
S531C3 ::S531C3(){ note_ctor("S531C3", this);} // tgen

static void Test_S531C3()
{
  extern Class_Descriptor cd_S531C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S531C3, buf);
    S531C3 *dp, &lv = *(dp=new (buf) S531C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S531C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S531C3)");
    check_base_class_offset(lv, (S531C5*)(S531C4*), 0, "S531C3");
    check_base_class_offset(lv, (S531C4*), 0, "S531C3");
    set_bf_and_test(lv, s531c3f0, ABISELECT(188,132), 0, 1, 1, "S531C3");
    set_bf_and_test(lv, s531c3f1, ABISELECT(188,132), 1, 1, 1, "S531C3");
    set_bf_and_test(lv, s531c3f2, ABISELECT(188,132), 2, 1, 1, "S531C3");
    check_field_offset(lv, s531c3f3, ABISELECT(192,136), "S531C3.s531c3f3");
    check_field_offset(lv, s531c3f4, ABISELECT(208,148), "S531C3.s531c3f4");
    check_field_offset(lv, s531c3f5, ABISELECT(224,160), "S531C3.s531c3f5");
    check_field_offset(lv, s531c3f6, ABISELECT(240,172), "S531C3.s531c3f6");
    check_field_offset(lv, s531c3f7, ABISELECT(256,184), "S531C3.s531c3f7");
    test_class_info(&lv, &cd_S531C3);
    dp->~S531C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS531C3(Test_S531C3, "S531C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S531C3C1Ev();
extern void _ZN6S531C3D1Ev();
Name_Map name_map_S531C3[] = {
  NSPAIR(_ZN6S531C3C1Ev),
  NSPAIR(_ZN6S531C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S531C5;
extern VTBL_ENTRY _ZTI6S531C5[];
extern  VTBL_ENTRY _ZTV6S531C5[];
extern Class_Descriptor cd_S531C4;
extern VTBL_ENTRY _ZTI6S531C4[];
extern  VTBL_ENTRY _ZTV6S531C4[];
static Base_Class bases_S531C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S531C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S531C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S531C3[];
extern void _ZN6S531C3D1Ev();
extern void _ZN6S531C3D0Ev();
extern void _ZN6S531C52v3Ev();
extern void _ZN6S531C52v4Ev();
extern void _ZN6S531C52v5Ev();
extern void _ZN6S531C52v6Ev();
extern void _ZN6S531C52v7Ev();
extern void _ZN6S531C52v8Ev();
extern void _ZN6S531C52v9Ev();
extern void _ZN6S531C53v10Ev();
extern void _ZN6S531C53v11Ev();
extern void _ZN6S531C53v12Ev();
extern void _ZN6S531C53v13Ev();
extern void _ZN6S531C53v14Ev();
extern void _ZN6S531C53v15Ev();
extern void _ZN6S531C53v16Ev();
extern void _ZN6S531C53v17Ev();
extern void _ZN6S531C53v18Ev();
extern void _ZN6S531C53v19Ev();
extern void _ZN6S531C53v20Ev();
extern void _ZN6S531C53v21Ev();
extern void _ZN6S531C53v22Ev();
extern void _ZN6S531C53v23Ev();
extern void _ZN6S531C53v24Ev();
extern void _ZN6S531C53v25Ev();
extern void _ZN6S531C53v26Ev();
extern void _ZN6S531C53v27Ev();
extern void _ZN6S531C53v28Ev();
extern void _ZN6S531C53v29Ev();
extern void _ZN6S531C53v30Ev();
extern void _ZN6S531C53v31Ev();
extern void _ZN6S531C53v32Ev();
extern void _ZN6S531C53v33Ev();
extern void _ZN6S531C53v34Ev();
extern void _ZN6S531C53v35Ev();
extern void _ZN6S531C53v36Ev();
extern void _ZN6S531C53v37Ev();
extern void _ZN6S531C53v38Ev();
extern void _ZN6S531C53v39Ev();
extern void _ZN6S531C53v40Ev();
extern void _ZN6S531C53v41Ev();
extern void _ZN6S531C53v42Ev();
extern void _ZN6S531C53v43Ev();
extern void _ZN6S531C53v44Ev();
extern void _ZN6S531C53v45Ev();
extern void _ZN6S531C53v46Ev();
extern void _ZN6S531C53v47Ev();
extern void _ZN6S531C53v48Ev();
extern void _ZN6S531C53v49Ev();
extern void _ZN6S531C53v50Ev();
extern void _ZN6S531C53v51Ev();
extern void _ZN6S531C53v52Ev();
extern void _ZN6S531C53v53Ev();
extern void _ZN6S531C53v54Ev();
extern void _ZN6S531C53v55Ev();
extern void _ZN6S531C53v56Ev();
extern void _ZN6S531C53v57Ev();
extern void _ZN6S531C53v58Ev();
extern void _ZN6S531C53v59Ev();
extern void _ZN6S531C53v60Ev();
extern void _ZN6S531C53v61Ev();
extern void _ZN6S531C53v62Ev();
extern void _ZN6S531C53v63Ev();
extern void _ZN6S531C53v64Ev();
extern void _ZN6S531C53v65Ev();
extern void _ZN6S531C53v66Ev();
extern void _ZN6S531C43v67Ev();
extern void _ZN6S531C43v68Ev();
extern void _ZN6S531C43v69Ev();
extern void _ZN6S531C43v70Ev();
extern void _ZN6S531C43v71Ev();
extern void _ZN6S531C43v72Ev();
extern void _ZN6S531C43v73Ev();
extern void _ZN6S531C43v74Ev();
extern void _ZN6S531C43v75Ev();
extern void _ZN6S531C43v76Ev();
extern void _ZN6S531C43v77Ev();
extern void _ZN6S531C43v78Ev();
extern void _ZN6S531C43v79Ev();
extern void _ZN6S531C43v80Ev();
extern void _ZN6S531C43v81Ev();
extern void _ZN6S531C43v82Ev();
extern void _ZN6S531C43v83Ev();
extern void _ZN6S531C43v84Ev();
extern void _ZN6S531C43v85Ev();
extern void _ZN6S531C43v86Ev();
extern void _ZN6S531C43v87Ev();
extern void _ZN6S531C43v88Ev();
extern void _ZN6S531C33v89Ev();
extern void _ZN6S531C33v90Ev();
extern void _ZN6S531C33v91Ev();
extern void _ZN6S531C33v92Ev();
extern void _ZN6S531C33v93Ev();
extern void _ZN6S531C33v94Ev();
extern void _ZN6S531C33v95Ev();
extern void _ZN6S531C33v96Ev();
extern void _ZN6S531C33v97Ev();
extern void _ZN6S531C33v98Ev();
extern void _ZN6S531C33v99Ev();
extern void _ZN6S531C34v100Ev();
extern void _ZN6S531C34v101Ev();
extern void _ZN6S531C34v102Ev();
extern void _ZN6S531C34v103Ev();
extern void _ZN6S531C34v104Ev();
extern void _ZN6S531C34v105Ev();
extern void _ZN6S531C34v106Ev();
extern void _ZN6S531C34v107Ev();
extern void _ZN6S531C34v108Ev();
static  VTBL_ENTRY vtc_S531C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S531C3[0]),
  (VTBL_ENTRY)&_ZN6S531C3D1Ev,
  (VTBL_ENTRY)&_ZN6S531C3D0Ev,
  (VTBL_ENTRY)&_ZN6S531C52v3Ev,
  (VTBL_ENTRY)&_ZN6S531C52v4Ev,
  (VTBL_ENTRY)&_ZN6S531C52v5Ev,
  (VTBL_ENTRY)&_ZN6S531C52v6Ev,
  (VTBL_ENTRY)&_ZN6S531C52v7Ev,
  (VTBL_ENTRY)&_ZN6S531C52v8Ev,
  (VTBL_ENTRY)&_ZN6S531C52v9Ev,
  (VTBL_ENTRY)&_ZN6S531C53v10Ev,
  (VTBL_ENTRY)&_ZN6S531C53v11Ev,
  (VTBL_ENTRY)&_ZN6S531C53v12Ev,
  (VTBL_ENTRY)&_ZN6S531C53v13Ev,
  (VTBL_ENTRY)&_ZN6S531C53v14Ev,
  (VTBL_ENTRY)&_ZN6S531C53v15Ev,
  (VTBL_ENTRY)&_ZN6S531C53v16Ev,
  (VTBL_ENTRY)&_ZN6S531C53v17Ev,
  (VTBL_ENTRY)&_ZN6S531C53v18Ev,
  (VTBL_ENTRY)&_ZN6S531C53v19Ev,
  (VTBL_ENTRY)&_ZN6S531C53v20Ev,
  (VTBL_ENTRY)&_ZN6S531C53v21Ev,
  (VTBL_ENTRY)&_ZN6S531C53v22Ev,
  (VTBL_ENTRY)&_ZN6S531C53v23Ev,
  (VTBL_ENTRY)&_ZN6S531C53v24Ev,
  (VTBL_ENTRY)&_ZN6S531C53v25Ev,
  (VTBL_ENTRY)&_ZN6S531C53v26Ev,
  (VTBL_ENTRY)&_ZN6S531C53v27Ev,
  (VTBL_ENTRY)&_ZN6S531C53v28Ev,
  (VTBL_ENTRY)&_ZN6S531C53v29Ev,
  (VTBL_ENTRY)&_ZN6S531C53v30Ev,
  (VTBL_ENTRY)&_ZN6S531C53v31Ev,
  (VTBL_ENTRY)&_ZN6S531C53v32Ev,
  (VTBL_ENTRY)&_ZN6S531C53v33Ev,
  (VTBL_ENTRY)&_ZN6S531C53v34Ev,
  (VTBL_ENTRY)&_ZN6S531C53v35Ev,
  (VTBL_ENTRY)&_ZN6S531C53v36Ev,
  (VTBL_ENTRY)&_ZN6S531C53v37Ev,
  (VTBL_ENTRY)&_ZN6S531C53v38Ev,
  (VTBL_ENTRY)&_ZN6S531C53v39Ev,
  (VTBL_ENTRY)&_ZN6S531C53v40Ev,
  (VTBL_ENTRY)&_ZN6S531C53v41Ev,
  (VTBL_ENTRY)&_ZN6S531C53v42Ev,
  (VTBL_ENTRY)&_ZN6S531C53v43Ev,
  (VTBL_ENTRY)&_ZN6S531C53v44Ev,
  (VTBL_ENTRY)&_ZN6S531C53v45Ev,
  (VTBL_ENTRY)&_ZN6S531C53v46Ev,
  (VTBL_ENTRY)&_ZN6S531C53v47Ev,
  (VTBL_ENTRY)&_ZN6S531C53v48Ev,
  (VTBL_ENTRY)&_ZN6S531C53v49Ev,
  (VTBL_ENTRY)&_ZN6S531C53v50Ev,
  (VTBL_ENTRY)&_ZN6S531C53v51Ev,
  (VTBL_ENTRY)&_ZN6S531C53v52Ev,
  (VTBL_ENTRY)&_ZN6S531C53v53Ev,
  (VTBL_ENTRY)&_ZN6S531C53v54Ev,
  (VTBL_ENTRY)&_ZN6S531C53v55Ev,
  (VTBL_ENTRY)&_ZN6S531C53v56Ev,
  (VTBL_ENTRY)&_ZN6S531C53v57Ev,
  (VTBL_ENTRY)&_ZN6S531C53v58Ev,
  (VTBL_ENTRY)&_ZN6S531C53v59Ev,
  (VTBL_ENTRY)&_ZN6S531C53v60Ev,
  (VTBL_ENTRY)&_ZN6S531C53v61Ev,
  (VTBL_ENTRY)&_ZN6S531C53v62Ev,
  (VTBL_ENTRY)&_ZN6S531C53v63Ev,
  (VTBL_ENTRY)&_ZN6S531C53v64Ev,
  (VTBL_ENTRY)&_ZN6S531C53v65Ev,
  (VTBL_ENTRY)&_ZN6S531C53v66Ev,
  (VTBL_ENTRY)&_ZN6S531C43v67Ev,
  (VTBL_ENTRY)&_ZN6S531C43v68Ev,
  (VTBL_ENTRY)&_ZN6S531C43v69Ev,
  (VTBL_ENTRY)&_ZN6S531C43v70Ev,
  (VTBL_ENTRY)&_ZN6S531C43v71Ev,
  (VTBL_ENTRY)&_ZN6S531C43v72Ev,
  (VTBL_ENTRY)&_ZN6S531C43v73Ev,
  (VTBL_ENTRY)&_ZN6S531C43v74Ev,
  (VTBL_ENTRY)&_ZN6S531C43v75Ev,
  (VTBL_ENTRY)&_ZN6S531C43v76Ev,
  (VTBL_ENTRY)&_ZN6S531C43v77Ev,
  (VTBL_ENTRY)&_ZN6S531C43v78Ev,
  (VTBL_ENTRY)&_ZN6S531C43v79Ev,
  (VTBL_ENTRY)&_ZN6S531C43v80Ev,
  (VTBL_ENTRY)&_ZN6S531C43v81Ev,
  (VTBL_ENTRY)&_ZN6S531C43v82Ev,
  (VTBL_ENTRY)&_ZN6S531C43v83Ev,
  (VTBL_ENTRY)&_ZN6S531C43v84Ev,
  (VTBL_ENTRY)&_ZN6S531C43v85Ev,
  (VTBL_ENTRY)&_ZN6S531C43v86Ev,
  (VTBL_ENTRY)&_ZN6S531C43v87Ev,
  (VTBL_ENTRY)&_ZN6S531C43v88Ev,
  (VTBL_ENTRY)&_ZN6S531C33v89Ev,
  (VTBL_ENTRY)&_ZN6S531C33v90Ev,
  (VTBL_ENTRY)&_ZN6S531C33v91Ev,
  (VTBL_ENTRY)&_ZN6S531C33v92Ev,
  (VTBL_ENTRY)&_ZN6S531C33v93Ev,
  (VTBL_ENTRY)&_ZN6S531C33v94Ev,
  (VTBL_ENTRY)&_ZN6S531C33v95Ev,
  (VTBL_ENTRY)&_ZN6S531C33v96Ev,
  (VTBL_ENTRY)&_ZN6S531C33v97Ev,
  (VTBL_ENTRY)&_ZN6S531C33v98Ev,
  (VTBL_ENTRY)&_ZN6S531C33v99Ev,
  (VTBL_ENTRY)&_ZN6S531C34v100Ev,
  (VTBL_ENTRY)&_ZN6S531C34v101Ev,
  (VTBL_ENTRY)&_ZN6S531C34v102Ev,
  (VTBL_ENTRY)&_ZN6S531C34v103Ev,
  (VTBL_ENTRY)&_ZN6S531C34v104Ev,
  (VTBL_ENTRY)&_ZN6S531C34v105Ev,
  (VTBL_ENTRY)&_ZN6S531C34v106Ev,
  (VTBL_ENTRY)&_ZN6S531C34v107Ev,
  (VTBL_ENTRY)&_ZN6S531C34v108Ev,
};
extern VTBL_ENTRY _ZTI6S531C3[];
extern  VTBL_ENTRY _ZTV6S531C3[];
Class_Descriptor cd_S531C3 = {  "S531C3", // class name
  bases_S531C3, 2,
  &(vtc_S531C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S531C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S531C3),110, //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  S531C2  : S531C3 {
  ::S100C8_nt s531c2f0;
  unsigned int s531c2f1:1;
  ::S100C15 s531c2f2;
  virtual  ~S531C2(); // _ZN6S531C2D1Ev
  virtual void  v109(); // _ZN6S531C24v109Ev
  virtual void  v110(); // _ZN6S531C24v110Ev
  virtual void  v111(); // _ZN6S531C24v111Ev
  virtual void  v112(); // _ZN6S531C24v112Ev
  S531C2(); // tgen
};
//SIG(-1 S531C2) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC7 FC15{ BC16{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC17{ BC18{ BC9}}}


 S531C2 ::~S531C2(){ note_dtor("S531C2", this);}
void  S531C2 ::v109(){vfunc_called(this, "_ZN6S531C24v109Ev");}
void  S531C2 ::v110(){vfunc_called(this, "_ZN6S531C24v110Ev");}
void  S531C2 ::v111(){vfunc_called(this, "_ZN6S531C24v111Ev");}
void  S531C2 ::v112(){vfunc_called(this, "_ZN6S531C24v112Ev");}
S531C2 ::S531C2(){ note_ctor("S531C2", this);} // tgen

static void Test_S531C2()
{
  extern Class_Descriptor cd_S531C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S531C2, buf);
    S531C2 *dp, &lv = *(dp=new (buf) S531C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S531C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S531C2)");
    check_base_class_offset(lv, (S531C5*)(S531C4*)(S531C3*), 0, "S531C2");
    check_base_class_offset(lv, (S531C4*)(S531C3*), 0, "S531C2");
    check_base_class_offset(lv, (S531C3*), 0, "S531C2");
    check_field_offset(lv, s531c2f0, ABISELECT(268,196), "S531C2.s531c2f0");
    set_bf_and_test(lv, s531c2f1, ABISELECT(276,204), 0, 1, 1, "S531C2");
    check_field_offset(lv, s531c2f2, ABISELECT(280,208), "S531C2.s531c2f2");
    test_class_info(&lv, &cd_S531C2);
    dp->~S531C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS531C2(Test_S531C2, "S531C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S531C2C1Ev();
extern void _ZN6S531C2D1Ev();
Name_Map name_map_S531C2[] = {
  NSPAIR(_ZN6S531C2C1Ev),
  NSPAIR(_ZN6S531C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S531C5;
extern VTBL_ENTRY _ZTI6S531C5[];
extern  VTBL_ENTRY _ZTV6S531C5[];
extern Class_Descriptor cd_S531C4;
extern VTBL_ENTRY _ZTI6S531C4[];
extern  VTBL_ENTRY _ZTV6S531C4[];
extern Class_Descriptor cd_S531C3;
extern VTBL_ENTRY _ZTI6S531C3[];
extern  VTBL_ENTRY _ZTV6S531C3[];
static Base_Class bases_S531C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S531C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S531C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S531C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S531C2[];
extern void _ZN6S531C2D1Ev();
extern void _ZN6S531C2D0Ev();
extern void _ZN6S531C52v3Ev();
extern void _ZN6S531C52v4Ev();
extern void _ZN6S531C52v5Ev();
extern void _ZN6S531C52v6Ev();
extern void _ZN6S531C52v7Ev();
extern void _ZN6S531C52v8Ev();
extern void _ZN6S531C52v9Ev();
extern void _ZN6S531C53v10Ev();
extern void _ZN6S531C53v11Ev();
extern void _ZN6S531C53v12Ev();
extern void _ZN6S531C53v13Ev();
extern void _ZN6S531C53v14Ev();
extern void _ZN6S531C53v15Ev();
extern void _ZN6S531C53v16Ev();
extern void _ZN6S531C53v17Ev();
extern void _ZN6S531C53v18Ev();
extern void _ZN6S531C53v19Ev();
extern void _ZN6S531C53v20Ev();
extern void _ZN6S531C53v21Ev();
extern void _ZN6S531C53v22Ev();
extern void _ZN6S531C53v23Ev();
extern void _ZN6S531C53v24Ev();
extern void _ZN6S531C53v25Ev();
extern void _ZN6S531C53v26Ev();
extern void _ZN6S531C53v27Ev();
extern void _ZN6S531C53v28Ev();
extern void _ZN6S531C53v29Ev();
extern void _ZN6S531C53v30Ev();
extern void _ZN6S531C53v31Ev();
extern void _ZN6S531C53v32Ev();
extern void _ZN6S531C53v33Ev();
extern void _ZN6S531C53v34Ev();
extern void _ZN6S531C53v35Ev();
extern void _ZN6S531C53v36Ev();
extern void _ZN6S531C53v37Ev();
extern void _ZN6S531C53v38Ev();
extern void _ZN6S531C53v39Ev();
extern void _ZN6S531C53v40Ev();
extern void _ZN6S531C53v41Ev();
extern void _ZN6S531C53v42Ev();
extern void _ZN6S531C53v43Ev();
extern void _ZN6S531C53v44Ev();
extern void _ZN6S531C53v45Ev();
extern void _ZN6S531C53v46Ev();
extern void _ZN6S531C53v47Ev();
extern void _ZN6S531C53v48Ev();
extern void _ZN6S531C53v49Ev();
extern void _ZN6S531C53v50Ev();
extern void _ZN6S531C53v51Ev();
extern void _ZN6S531C53v52Ev();
extern void _ZN6S531C53v53Ev();
extern void _ZN6S531C53v54Ev();
extern void _ZN6S531C53v55Ev();
extern void _ZN6S531C53v56Ev();
extern void _ZN6S531C53v57Ev();
extern void _ZN6S531C53v58Ev();
extern void _ZN6S531C53v59Ev();
extern void _ZN6S531C53v60Ev();
extern void _ZN6S531C53v61Ev();
extern void _ZN6S531C53v62Ev();
extern void _ZN6S531C53v63Ev();
extern void _ZN6S531C53v64Ev();
extern void _ZN6S531C53v65Ev();
extern void _ZN6S531C53v66Ev();
extern void _ZN6S531C43v67Ev();
extern void _ZN6S531C43v68Ev();
extern void _ZN6S531C43v69Ev();
extern void _ZN6S531C43v70Ev();
extern void _ZN6S531C43v71Ev();
extern void _ZN6S531C43v72Ev();
extern void _ZN6S531C43v73Ev();
extern void _ZN6S531C43v74Ev();
extern void _ZN6S531C43v75Ev();
extern void _ZN6S531C43v76Ev();
extern void _ZN6S531C43v77Ev();
extern void _ZN6S531C43v78Ev();
extern void _ZN6S531C43v79Ev();
extern void _ZN6S531C43v80Ev();
extern void _ZN6S531C43v81Ev();
extern void _ZN6S531C43v82Ev();
extern void _ZN6S531C43v83Ev();
extern void _ZN6S531C43v84Ev();
extern void _ZN6S531C43v85Ev();
extern void _ZN6S531C43v86Ev();
extern void _ZN6S531C43v87Ev();
extern void _ZN6S531C43v88Ev();
extern void _ZN6S531C33v89Ev();
extern void _ZN6S531C33v90Ev();
extern void _ZN6S531C33v91Ev();
extern void _ZN6S531C33v92Ev();
extern void _ZN6S531C33v93Ev();
extern void _ZN6S531C33v94Ev();
extern void _ZN6S531C33v95Ev();
extern void _ZN6S531C33v96Ev();
extern void _ZN6S531C33v97Ev();
extern void _ZN6S531C33v98Ev();
extern void _ZN6S531C33v99Ev();
extern void _ZN6S531C34v100Ev();
extern void _ZN6S531C34v101Ev();
extern void _ZN6S531C34v102Ev();
extern void _ZN6S531C34v103Ev();
extern void _ZN6S531C34v104Ev();
extern void _ZN6S531C34v105Ev();
extern void _ZN6S531C34v106Ev();
extern void _ZN6S531C34v107Ev();
extern void _ZN6S531C34v108Ev();
extern void _ZN6S531C24v109Ev();
extern void _ZN6S531C24v110Ev();
extern void _ZN6S531C24v111Ev();
extern void _ZN6S531C24v112Ev();
static  VTBL_ENTRY vtc_S531C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S531C2[0]),
  (VTBL_ENTRY)&_ZN6S531C2D1Ev,
  (VTBL_ENTRY)&_ZN6S531C2D0Ev,
  (VTBL_ENTRY)&_ZN6S531C52v3Ev,
  (VTBL_ENTRY)&_ZN6S531C52v4Ev,
  (VTBL_ENTRY)&_ZN6S531C52v5Ev,
  (VTBL_ENTRY)&_ZN6S531C52v6Ev,
  (VTBL_ENTRY)&_ZN6S531C52v7Ev,
  (VTBL_ENTRY)&_ZN6S531C52v8Ev,
  (VTBL_ENTRY)&_ZN6S531C52v9Ev,
  (VTBL_ENTRY)&_ZN6S531C53v10Ev,
  (VTBL_ENTRY)&_ZN6S531C53v11Ev,
  (VTBL_ENTRY)&_ZN6S531C53v12Ev,
  (VTBL_ENTRY)&_ZN6S531C53v13Ev,
  (VTBL_ENTRY)&_ZN6S531C53v14Ev,
  (VTBL_ENTRY)&_ZN6S531C53v15Ev,
  (VTBL_ENTRY)&_ZN6S531C53v16Ev,
  (VTBL_ENTRY)&_ZN6S531C53v17Ev,
  (VTBL_ENTRY)&_ZN6S531C53v18Ev,
  (VTBL_ENTRY)&_ZN6S531C53v19Ev,
  (VTBL_ENTRY)&_ZN6S531C53v20Ev,
  (VTBL_ENTRY)&_ZN6S531C53v21Ev,
  (VTBL_ENTRY)&_ZN6S531C53v22Ev,
  (VTBL_ENTRY)&_ZN6S531C53v23Ev,
  (VTBL_ENTRY)&_ZN6S531C53v24Ev,
  (VTBL_ENTRY)&_ZN6S531C53v25Ev,
  (VTBL_ENTRY)&_ZN6S531C53v26Ev,
  (VTBL_ENTRY)&_ZN6S531C53v27Ev,
  (VTBL_ENTRY)&_ZN6S531C53v28Ev,
  (VTBL_ENTRY)&_ZN6S531C53v29Ev,
  (VTBL_ENTRY)&_ZN6S531C53v30Ev,
  (VTBL_ENTRY)&_ZN6S531C53v31Ev,
  (VTBL_ENTRY)&_ZN6S531C53v32Ev,
  (VTBL_ENTRY)&_ZN6S531C53v33Ev,
  (VTBL_ENTRY)&_ZN6S531C53v34Ev,
  (VTBL_ENTRY)&_ZN6S531C53v35Ev,
  (VTBL_ENTRY)&_ZN6S531C53v36Ev,
  (VTBL_ENTRY)&_ZN6S531C53v37Ev,
  (VTBL_ENTRY)&_ZN6S531C53v38Ev,
  (VTBL_ENTRY)&_ZN6S531C53v39Ev,
  (VTBL_ENTRY)&_ZN6S531C53v40Ev,
  (VTBL_ENTRY)&_ZN6S531C53v41Ev,
  (VTBL_ENTRY)&_ZN6S531C53v42Ev,
  (VTBL_ENTRY)&_ZN6S531C53v43Ev,
  (VTBL_ENTRY)&_ZN6S531C53v44Ev,
  (VTBL_ENTRY)&_ZN6S531C53v45Ev,
  (VTBL_ENTRY)&_ZN6S531C53v46Ev,
  (VTBL_ENTRY)&_ZN6S531C53v47Ev,
  (VTBL_ENTRY)&_ZN6S531C53v48Ev,
  (VTBL_ENTRY)&_ZN6S531C53v49Ev,
  (VTBL_ENTRY)&_ZN6S531C53v50Ev,
  (VTBL_ENTRY)&_ZN6S531C53v51Ev,
  (VTBL_ENTRY)&_ZN6S531C53v52Ev,
  (VTBL_ENTRY)&_ZN6S531C53v53Ev,
  (VTBL_ENTRY)&_ZN6S531C53v54Ev,
  (VTBL_ENTRY)&_ZN6S531C53v55Ev,
  (VTBL_ENTRY)&_ZN6S531C53v56Ev,
  (VTBL_ENTRY)&_ZN6S531C53v57Ev,
  (VTBL_ENTRY)&_ZN6S531C53v58Ev,
  (VTBL_ENTRY)&_ZN6S531C53v59Ev,
  (VTBL_ENTRY)&_ZN6S531C53v60Ev,
  (VTBL_ENTRY)&_ZN6S531C53v61Ev,
  (VTBL_ENTRY)&_ZN6S531C53v62Ev,
  (VTBL_ENTRY)&_ZN6S531C53v63Ev,
  (VTBL_ENTRY)&_ZN6S531C53v64Ev,
  (VTBL_ENTRY)&_ZN6S531C53v65Ev,
  (VTBL_ENTRY)&_ZN6S531C53v66Ev,
  (VTBL_ENTRY)&_ZN6S531C43v67Ev,
  (VTBL_ENTRY)&_ZN6S531C43v68Ev,
  (VTBL_ENTRY)&_ZN6S531C43v69Ev,
  (VTBL_ENTRY)&_ZN6S531C43v70Ev,
  (VTBL_ENTRY)&_ZN6S531C43v71Ev,
  (VTBL_ENTRY)&_ZN6S531C43v72Ev,
  (VTBL_ENTRY)&_ZN6S531C43v73Ev,
  (VTBL_ENTRY)&_ZN6S531C43v74Ev,
  (VTBL_ENTRY)&_ZN6S531C43v75Ev,
  (VTBL_ENTRY)&_ZN6S531C43v76Ev,
  (VTBL_ENTRY)&_ZN6S531C43v77Ev,
  (VTBL_ENTRY)&_ZN6S531C43v78Ev,
  (VTBL_ENTRY)&_ZN6S531C43v79Ev,
  (VTBL_ENTRY)&_ZN6S531C43v80Ev,
  (VTBL_ENTRY)&_ZN6S531C43v81Ev,
  (VTBL_ENTRY)&_ZN6S531C43v82Ev,
  (VTBL_ENTRY)&_ZN6S531C43v83Ev,
  (VTBL_ENTRY)&_ZN6S531C43v84Ev,
  (VTBL_ENTRY)&_ZN6S531C43v85Ev,
  (VTBL_ENTRY)&_ZN6S531C43v86Ev,
  (VTBL_ENTRY)&_ZN6S531C43v87Ev,
  (VTBL_ENTRY)&_ZN6S531C43v88Ev,
  (VTBL_ENTRY)&_ZN6S531C33v89Ev,
  (VTBL_ENTRY)&_ZN6S531C33v90Ev,
  (VTBL_ENTRY)&_ZN6S531C33v91Ev,
  (VTBL_ENTRY)&_ZN6S531C33v92Ev,
  (VTBL_ENTRY)&_ZN6S531C33v93Ev,
  (VTBL_ENTRY)&_ZN6S531C33v94Ev,
  (VTBL_ENTRY)&_ZN6S531C33v95Ev,
  (VTBL_ENTRY)&_ZN6S531C33v96Ev,
  (VTBL_ENTRY)&_ZN6S531C33v97Ev,
  (VTBL_ENTRY)&_ZN6S531C33v98Ev,
  (VTBL_ENTRY)&_ZN6S531C33v99Ev,
  (VTBL_ENTRY)&_ZN6S531C34v100Ev,
  (VTBL_ENTRY)&_ZN6S531C34v101Ev,
  (VTBL_ENTRY)&_ZN6S531C34v102Ev,
  (VTBL_ENTRY)&_ZN6S531C34v103Ev,
  (VTBL_ENTRY)&_ZN6S531C34v104Ev,
  (VTBL_ENTRY)&_ZN6S531C34v105Ev,
  (VTBL_ENTRY)&_ZN6S531C34v106Ev,
  (VTBL_ENTRY)&_ZN6S531C34v107Ev,
  (VTBL_ENTRY)&_ZN6S531C34v108Ev,
  (VTBL_ENTRY)&_ZN6S531C24v109Ev,
  (VTBL_ENTRY)&_ZN6S531C24v110Ev,
  (VTBL_ENTRY)&_ZN6S531C24v111Ev,
  (VTBL_ENTRY)&_ZN6S531C24v112Ev,
};
extern VTBL_ENTRY _ZTI6S531C2[];
extern  VTBL_ENTRY _ZTV6S531C2[];
Class_Descriptor cd_S531C2 = {  "S531C2", // class name
  bases_S531C2, 3,
  &(vtc_S531C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S531C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S531C2),114, //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  S531C1  : S531C2 {
  void *s531c1f0;
  int s531c1f1[2];
  void *s531c1f2;
  virtual  ~S531C1(); // _ZN6S531C1D1Ev
  virtual void  v1(); // _ZN6S531C12v1Ev
  virtual void  v2(); // _ZN6S531C12v2Ev
  S531C1(); // tgen
};
//SIG(1 S531C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC8 FC16{ BC17{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC18{ BC19{ BC10}}} vd v1 v2 Fp Fi[2] Fp}


 S531C1 ::~S531C1(){ note_dtor("S531C1", this);}
void  S531C1 ::v1(){vfunc_called(this, "_ZN6S531C12v1Ev");}
void  S531C1 ::v2(){vfunc_called(this, "_ZN6S531C12v2Ev");}
S531C1 ::S531C1(){ note_ctor("S531C1", this);} // tgen

static void Test_S531C1()
{
  extern Class_Descriptor cd_S531C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S531C1, buf);
    S531C1 *dp, &lv = *(dp=new (buf) S531C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S531C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S531C1)");
    check_base_class_offset(lv, (S531C5*)(S531C4*)(S531C3*)(S531C2*), 0, "S531C1");
    check_base_class_offset(lv, (S531C4*)(S531C3*)(S531C2*), 0, "S531C1");
    check_base_class_offset(lv, (S531C3*)(S531C2*), 0, "S531C1");
    check_base_class_offset(lv, (S531C2*), 0, "S531C1");
    check_field_offset(lv, s531c1f0, ABISELECT(296,220), "S531C1.s531c1f0");
    check_field_offset(lv, s531c1f1, ABISELECT(304,224), "S531C1.s531c1f1");
    check_field_offset(lv, s531c1f2, ABISELECT(312,232), "S531C1.s531c1f2");
    test_class_info(&lv, &cd_S531C1);
    dp->~S531C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS531C1(Test_S531C1, "S531C1", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S531C1C1Ev();
extern void _ZN6S531C1D1Ev();
Name_Map name_map_S531C1[] = {
  NSPAIR(_ZN6S531C1C1Ev),
  NSPAIR(_ZN6S531C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S531C5;
extern VTBL_ENTRY _ZTI6S531C5[];
extern  VTBL_ENTRY _ZTV6S531C5[];
extern Class_Descriptor cd_S531C4;
extern VTBL_ENTRY _ZTI6S531C4[];
extern  VTBL_ENTRY _ZTV6S531C4[];
extern Class_Descriptor cd_S531C3;
extern VTBL_ENTRY _ZTI6S531C3[];
extern  VTBL_ENTRY _ZTV6S531C3[];
extern Class_Descriptor cd_S531C2;
extern VTBL_ENTRY _ZTI6S531C2[];
extern  VTBL_ENTRY _ZTV6S531C2[];
static Base_Class bases_S531C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S531C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S531C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S531C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S531C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S531C1[];
extern void _ZN6S531C1D1Ev();
extern void _ZN6S531C1D0Ev();
extern void _ZN6S531C52v3Ev();
extern void _ZN6S531C52v4Ev();
extern void _ZN6S531C52v5Ev();
extern void _ZN6S531C52v6Ev();
extern void _ZN6S531C52v7Ev();
extern void _ZN6S531C52v8Ev();
extern void _ZN6S531C52v9Ev();
extern void _ZN6S531C53v10Ev();
extern void _ZN6S531C53v11Ev();
extern void _ZN6S531C53v12Ev();
extern void _ZN6S531C53v13Ev();
extern void _ZN6S531C53v14Ev();
extern void _ZN6S531C53v15Ev();
extern void _ZN6S531C53v16Ev();
extern void _ZN6S531C53v17Ev();
extern void _ZN6S531C53v18Ev();
extern void _ZN6S531C53v19Ev();
extern void _ZN6S531C53v20Ev();
extern void _ZN6S531C53v21Ev();
extern void _ZN6S531C53v22Ev();
extern void _ZN6S531C53v23Ev();
extern void _ZN6S531C53v24Ev();
extern void _ZN6S531C53v25Ev();
extern void _ZN6S531C53v26Ev();
extern void _ZN6S531C53v27Ev();
extern void _ZN6S531C53v28Ev();
extern void _ZN6S531C53v29Ev();
extern void _ZN6S531C53v30Ev();
extern void _ZN6S531C53v31Ev();
extern void _ZN6S531C53v32Ev();
extern void _ZN6S531C53v33Ev();
extern void _ZN6S531C53v34Ev();
extern void _ZN6S531C53v35Ev();
extern void _ZN6S531C53v36Ev();
extern void _ZN6S531C53v37Ev();
extern void _ZN6S531C53v38Ev();
extern void _ZN6S531C53v39Ev();
extern void _ZN6S531C53v40Ev();
extern void _ZN6S531C53v41Ev();
extern void _ZN6S531C53v42Ev();
extern void _ZN6S531C53v43Ev();
extern void _ZN6S531C53v44Ev();
extern void _ZN6S531C53v45Ev();
extern void _ZN6S531C53v46Ev();
extern void _ZN6S531C53v47Ev();
extern void _ZN6S531C53v48Ev();
extern void _ZN6S531C53v49Ev();
extern void _ZN6S531C53v50Ev();
extern void _ZN6S531C53v51Ev();
extern void _ZN6S531C53v52Ev();
extern void _ZN6S531C53v53Ev();
extern void _ZN6S531C53v54Ev();
extern void _ZN6S531C53v55Ev();
extern void _ZN6S531C53v56Ev();
extern void _ZN6S531C53v57Ev();
extern void _ZN6S531C53v58Ev();
extern void _ZN6S531C53v59Ev();
extern void _ZN6S531C53v60Ev();
extern void _ZN6S531C53v61Ev();
extern void _ZN6S531C53v62Ev();
extern void _ZN6S531C53v63Ev();
extern void _ZN6S531C53v64Ev();
extern void _ZN6S531C53v65Ev();
extern void _ZN6S531C53v66Ev();
extern void _ZN6S531C43v67Ev();
extern void _ZN6S531C43v68Ev();
extern void _ZN6S531C43v69Ev();
extern void _ZN6S531C43v70Ev();
extern void _ZN6S531C43v71Ev();
extern void _ZN6S531C43v72Ev();
extern void _ZN6S531C43v73Ev();
extern void _ZN6S531C43v74Ev();
extern void _ZN6S531C43v75Ev();
extern void _ZN6S531C43v76Ev();
extern void _ZN6S531C43v77Ev();
extern void _ZN6S531C43v78Ev();
extern void _ZN6S531C43v79Ev();
extern void _ZN6S531C43v80Ev();
extern void _ZN6S531C43v81Ev();
extern void _ZN6S531C43v82Ev();
extern void _ZN6S531C43v83Ev();
extern void _ZN6S531C43v84Ev();
extern void _ZN6S531C43v85Ev();
extern void _ZN6S531C43v86Ev();
extern void _ZN6S531C43v87Ev();
extern void _ZN6S531C43v88Ev();
extern void _ZN6S531C33v89Ev();
extern void _ZN6S531C33v90Ev();
extern void _ZN6S531C33v91Ev();
extern void _ZN6S531C33v92Ev();
extern void _ZN6S531C33v93Ev();
extern void _ZN6S531C33v94Ev();
extern void _ZN6S531C33v95Ev();
extern void _ZN6S531C33v96Ev();
extern void _ZN6S531C33v97Ev();
extern void _ZN6S531C33v98Ev();
extern void _ZN6S531C33v99Ev();
extern void _ZN6S531C34v100Ev();
extern void _ZN6S531C34v101Ev();
extern void _ZN6S531C34v102Ev();
extern void _ZN6S531C34v103Ev();
extern void _ZN6S531C34v104Ev();
extern void _ZN6S531C34v105Ev();
extern void _ZN6S531C34v106Ev();
extern void _ZN6S531C34v107Ev();
extern void _ZN6S531C34v108Ev();
extern void _ZN6S531C24v109Ev();
extern void _ZN6S531C24v110Ev();
extern void _ZN6S531C24v111Ev();
extern void _ZN6S531C24v112Ev();
extern void _ZN6S531C12v1Ev();
extern void _ZN6S531C12v2Ev();
static  VTBL_ENTRY vtc_S531C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S531C1[0]),
  (VTBL_ENTRY)&_ZN6S531C1D1Ev,
  (VTBL_ENTRY)&_ZN6S531C1D0Ev,
  (VTBL_ENTRY)&_ZN6S531C52v3Ev,
  (VTBL_ENTRY)&_ZN6S531C52v4Ev,
  (VTBL_ENTRY)&_ZN6S531C52v5Ev,
  (VTBL_ENTRY)&_ZN6S531C52v6Ev,
  (VTBL_ENTRY)&_ZN6S531C52v7Ev,
  (VTBL_ENTRY)&_ZN6S531C52v8Ev,
  (VTBL_ENTRY)&_ZN6S531C52v9Ev,
  (VTBL_ENTRY)&_ZN6S531C53v10Ev,
  (VTBL_ENTRY)&_ZN6S531C53v11Ev,
  (VTBL_ENTRY)&_ZN6S531C53v12Ev,
  (VTBL_ENTRY)&_ZN6S531C53v13Ev,
  (VTBL_ENTRY)&_ZN6S531C53v14Ev,
  (VTBL_ENTRY)&_ZN6S531C53v15Ev,
  (VTBL_ENTRY)&_ZN6S531C53v16Ev,
  (VTBL_ENTRY)&_ZN6S531C53v17Ev,
  (VTBL_ENTRY)&_ZN6S531C53v18Ev,
  (VTBL_ENTRY)&_ZN6S531C53v19Ev,
  (VTBL_ENTRY)&_ZN6S531C53v20Ev,
  (VTBL_ENTRY)&_ZN6S531C53v21Ev,
  (VTBL_ENTRY)&_ZN6S531C53v22Ev,
  (VTBL_ENTRY)&_ZN6S531C53v23Ev,
  (VTBL_ENTRY)&_ZN6S531C53v24Ev,
  (VTBL_ENTRY)&_ZN6S531C53v25Ev,
  (VTBL_ENTRY)&_ZN6S531C53v26Ev,
  (VTBL_ENTRY)&_ZN6S531C53v27Ev,
  (VTBL_ENTRY)&_ZN6S531C53v28Ev,
  (VTBL_ENTRY)&_ZN6S531C53v29Ev,
  (VTBL_ENTRY)&_ZN6S531C53v30Ev,
  (VTBL_ENTRY)&_ZN6S531C53v31Ev,
  (VTBL_ENTRY)&_ZN6S531C53v32Ev,
  (VTBL_ENTRY)&_ZN6S531C53v33Ev,
  (VTBL_ENTRY)&_ZN6S531C53v34Ev,
  (VTBL_ENTRY)&_ZN6S531C53v35Ev,
  (VTBL_ENTRY)&_ZN6S531C53v36Ev,
  (VTBL_ENTRY)&_ZN6S531C53v37Ev,
  (VTBL_ENTRY)&_ZN6S531C53v38Ev,
  (VTBL_ENTRY)&_ZN6S531C53v39Ev,
  (VTBL_ENTRY)&_ZN6S531C53v40Ev,
  (VTBL_ENTRY)&_ZN6S531C53v41Ev,
  (VTBL_ENTRY)&_ZN6S531C53v42Ev,
  (VTBL_ENTRY)&_ZN6S531C53v43Ev,
  (VTBL_ENTRY)&_ZN6S531C53v44Ev,
  (VTBL_ENTRY)&_ZN6S531C53v45Ev,
  (VTBL_ENTRY)&_ZN6S531C53v46Ev,
  (VTBL_ENTRY)&_ZN6S531C53v47Ev,
  (VTBL_ENTRY)&_ZN6S531C53v48Ev,
  (VTBL_ENTRY)&_ZN6S531C53v49Ev,
  (VTBL_ENTRY)&_ZN6S531C53v50Ev,
  (VTBL_ENTRY)&_ZN6S531C53v51Ev,
  (VTBL_ENTRY)&_ZN6S531C53v52Ev,
  (VTBL_ENTRY)&_ZN6S531C53v53Ev,
  (VTBL_ENTRY)&_ZN6S531C53v54Ev,
  (VTBL_ENTRY)&_ZN6S531C53v55Ev,
  (VTBL_ENTRY)&_ZN6S531C53v56Ev,
  (VTBL_ENTRY)&_ZN6S531C53v57Ev,
  (VTBL_ENTRY)&_ZN6S531C53v58Ev,
  (VTBL_ENTRY)&_ZN6S531C53v59Ev,
  (VTBL_ENTRY)&_ZN6S531C53v60Ev,
  (VTBL_ENTRY)&_ZN6S531C53v61Ev,
  (VTBL_ENTRY)&_ZN6S531C53v62Ev,
  (VTBL_ENTRY)&_ZN6S531C53v63Ev,
  (VTBL_ENTRY)&_ZN6S531C53v64Ev,
  (VTBL_ENTRY)&_ZN6S531C53v65Ev,
  (VTBL_ENTRY)&_ZN6S531C53v66Ev,
  (VTBL_ENTRY)&_ZN6S531C43v67Ev,
  (VTBL_ENTRY)&_ZN6S531C43v68Ev,
  (VTBL_ENTRY)&_ZN6S531C43v69Ev,
  (VTBL_ENTRY)&_ZN6S531C43v70Ev,
  (VTBL_ENTRY)&_ZN6S531C43v71Ev,
  (VTBL_ENTRY)&_ZN6S531C43v72Ev,
  (VTBL_ENTRY)&_ZN6S531C43v73Ev,
  (VTBL_ENTRY)&_ZN6S531C43v74Ev,
  (VTBL_ENTRY)&_ZN6S531C43v75Ev,
  (VTBL_ENTRY)&_ZN6S531C43v76Ev,
  (VTBL_ENTRY)&_ZN6S531C43v77Ev,
  (VTBL_ENTRY)&_ZN6S531C43v78Ev,
  (VTBL_ENTRY)&_ZN6S531C43v79Ev,
  (VTBL_ENTRY)&_ZN6S531C43v80Ev,
  (VTBL_ENTRY)&_ZN6S531C43v81Ev,
  (VTBL_ENTRY)&_ZN6S531C43v82Ev,
  (VTBL_ENTRY)&_ZN6S531C43v83Ev,
  (VTBL_ENTRY)&_ZN6S531C43v84Ev,
  (VTBL_ENTRY)&_ZN6S531C43v85Ev,
  (VTBL_ENTRY)&_ZN6S531C43v86Ev,
  (VTBL_ENTRY)&_ZN6S531C43v87Ev,
  (VTBL_ENTRY)&_ZN6S531C43v88Ev,
  (VTBL_ENTRY)&_ZN6S531C33v89Ev,
  (VTBL_ENTRY)&_ZN6S531C33v90Ev,
  (VTBL_ENTRY)&_ZN6S531C33v91Ev,
  (VTBL_ENTRY)&_ZN6S531C33v92Ev,
  (VTBL_ENTRY)&_ZN6S531C33v93Ev,
  (VTBL_ENTRY)&_ZN6S531C33v94Ev,
  (VTBL_ENTRY)&_ZN6S531C33v95Ev,
  (VTBL_ENTRY)&_ZN6S531C33v96Ev,
  (VTBL_ENTRY)&_ZN6S531C33v97Ev,
  (VTBL_ENTRY)&_ZN6S531C33v98Ev,
  (VTBL_ENTRY)&_ZN6S531C33v99Ev,
  (VTBL_ENTRY)&_ZN6S531C34v100Ev,
  (VTBL_ENTRY)&_ZN6S531C34v101Ev,
  (VTBL_ENTRY)&_ZN6S531C34v102Ev,
  (VTBL_ENTRY)&_ZN6S531C34v103Ev,
  (VTBL_ENTRY)&_ZN6S531C34v104Ev,
  (VTBL_ENTRY)&_ZN6S531C34v105Ev,
  (VTBL_ENTRY)&_ZN6S531C34v106Ev,
  (VTBL_ENTRY)&_ZN6S531C34v107Ev,
  (VTBL_ENTRY)&_ZN6S531C34v108Ev,
  (VTBL_ENTRY)&_ZN6S531C24v109Ev,
  (VTBL_ENTRY)&_ZN6S531C24v110Ev,
  (VTBL_ENTRY)&_ZN6S531C24v111Ev,
  (VTBL_ENTRY)&_ZN6S531C24v112Ev,
  (VTBL_ENTRY)&_ZN6S531C12v1Ev,
  (VTBL_ENTRY)&_ZN6S531C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S531C1[];
extern  VTBL_ENTRY _ZTV6S531C1[];
Class_Descriptor cd_S531C1 = {  "S531C1", // class name
  bases_S531C1, 4,
  &(vtc_S531C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S531C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S531C1),116, //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  S888C10_nt  {
  __tsi64 s888c10f0[4];
  void  mf888c10(); // _ZN10S888C10_nt8mf888c10Ev
};
//SIG(-1 S888C10_nt) C1{ m FL[4]}


void  S888C10_nt ::mf888c10(){}

//skip512 S888C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C5  {
  void *s888c5f0;
  ::S2382C25 s888c5f1;
  ::S888C10_nt s888c5f2;
  char s888c5f3;
  virtual  ~S888C5(); // _ZN6S888C5D1Ev
  virtual void  v2(); // _ZN6S888C52v2Ev
  virtual void  v3(); // _ZN6S888C52v3Ev
  virtual void  v4(); // _ZN6S888C52v4Ev
  virtual void  v5(); // _ZN6S888C52v5Ev
  virtual void  v6(); // _ZN6S888C52v6Ev
  virtual void  v7(); // _ZN6S888C52v7Ev
  virtual void  v8(); // _ZN6S888C52v8Ev
  virtual void  v9(); // _ZN6S888C52v9Ev
  virtual void  v10(); // _ZN6S888C53v10Ev
  virtual void  v11(); // _ZN6S888C53v11Ev
  virtual void  v12(); // _ZN6S888C53v12Ev
  virtual void  v13(); // _ZN6S888C53v13Ev
  S888C5(); // tgen
};
//SIG(-1 S888C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S888C5 ::~S888C5(){ note_dtor("S888C5", this);}
void  S888C5 ::v2(){vfunc_called(this, "_ZN6S888C52v2Ev");}
void  S888C5 ::v3(){vfunc_called(this, "_ZN6S888C52v3Ev");}
void  S888C5 ::v4(){vfunc_called(this, "_ZN6S888C52v4Ev");}
void  S888C5 ::v5(){vfunc_called(this, "_ZN6S888C52v5Ev");}
void  S888C5 ::v6(){vfunc_called(this, "_ZN6S888C52v6Ev");}
void  S888C5 ::v7(){vfunc_called(this, "_ZN6S888C52v7Ev");}
void  S888C5 ::v8(){vfunc_called(this, "_ZN6S888C52v8Ev");}
void  S888C5 ::v9(){vfunc_called(this, "_ZN6S888C52v9Ev");}
void  S888C5 ::v10(){vfunc_called(this, "_ZN6S888C53v10Ev");}
void  S888C5 ::v11(){vfunc_called(this, "_ZN6S888C53v11Ev");}
void  S888C5 ::v12(){vfunc_called(this, "_ZN6S888C53v12Ev");}
void  S888C5 ::v13(){vfunc_called(this, "_ZN6S888C53v13Ev");}
S888C5 ::S888C5(){ note_ctor("S888C5", this);} // tgen

static void Test_S888C5()
{
  extern Class_Descriptor cd_S888C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S888C5, buf);
    S888C5 *dp, &lv = *(dp=new (buf) S888C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S888C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S888C5)");
    check_field_offset(lv, s888c5f0, ABISELECT(8,4), "S888C5.s888c5f0");
    check_field_offset(lv, s888c5f1, ABISELECT(16,8), "S888C5.s888c5f1");
    check_field_offset(lv, s888c5f2, ABISELECT(32,20), "S888C5.s888c5f2");
    check_field_offset(lv, s888c5f3, ABISELECT(64,52), "S888C5.s888c5f3");
    test_class_info(&lv, &cd_S888C5);
    dp->~S888C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS888C5(Test_S888C5, "S888C5", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN6S888C5C1Ev();
extern void _ZN6S888C5D1Ev();
Name_Map name_map_S888C5[] = {
  NSPAIR(_ZN6S888C5C1Ev),
  NSPAIR(_ZN6S888C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S888C5[];
extern void _ZN6S888C5D1Ev();
extern void _ZN6S888C5D0Ev();
extern void _ZN6S888C52v2Ev();
extern void _ZN6S888C52v3Ev();
extern void _ZN6S888C52v4Ev();
extern void _ZN6S888C52v5Ev();
extern void _ZN6S888C52v6Ev();
extern void _ZN6S888C52v7Ev();
extern void _ZN6S888C52v8Ev();
extern void _ZN6S888C52v9Ev();
extern void _ZN6S888C53v10Ev();
extern void _ZN6S888C53v11Ev();
extern void _ZN6S888C53v12Ev();
extern void _ZN6S888C53v13Ev();
static  VTBL_ENTRY vtc_S888C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S888C5[0]),
  (VTBL_ENTRY)&_ZN6S888C5D1Ev,
  (VTBL_ENTRY)&_ZN6S888C5D0Ev,
  (VTBL_ENTRY)&_ZN6S888C52v2Ev,
  (VTBL_ENTRY)&_ZN6S888C52v3Ev,
  (VTBL_ENTRY)&_ZN6S888C52v4Ev,
  (VTBL_ENTRY)&_ZN6S888C52v5Ev,
  (VTBL_ENTRY)&_ZN6S888C52v6Ev,
  (VTBL_ENTRY)&_ZN6S888C52v7Ev,
  (VTBL_ENTRY)&_ZN6S888C52v8Ev,
  (VTBL_ENTRY)&_ZN6S888C52v9Ev,
  (VTBL_ENTRY)&_ZN6S888C53v10Ev,
  (VTBL_ENTRY)&_ZN6S888C53v11Ev,
  (VTBL_ENTRY)&_ZN6S888C53v12Ev,
  (VTBL_ENTRY)&_ZN6S888C53v13Ev,
};
extern VTBL_ENTRY _ZTI6S888C5[];
extern  VTBL_ENTRY _ZTV6S888C5[];
Class_Descriptor cd_S888C5 = {  "S888C5", // class name
  0,0,//no base classes
  &(vtc_S888C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI6S888C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S888C5),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C4  : S888C5 {
  ::S2382C37 s888c4f0;
  virtual  ~S888C4(); // _ZN6S888C4D1Ev
  virtual void  v14(); // _ZN6S888C43v14Ev
  virtual void  v15(); // _ZN6S888C43v15Ev
  virtual void  v16(); // _ZN6S888C43v16Ev
  virtual void  v17(); // _ZN6S888C43v17Ev
  virtual void  v18(); // _ZN6S888C43v18Ev
  virtual void  v19(); // _ZN6S888C43v19Ev
  virtual void  v20(); // _ZN6S888C43v20Ev
  S888C4(); // tgen
};
//SIG(-1 S888C4) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S888C4 ::~S888C4(){ note_dtor("S888C4", this);}
void  S888C4 ::v14(){vfunc_called(this, "_ZN6S888C43v14Ev");}
void  S888C4 ::v15(){vfunc_called(this, "_ZN6S888C43v15Ev");}
void  S888C4 ::v16(){vfunc_called(this, "_ZN6S888C43v16Ev");}
void  S888C4 ::v17(){vfunc_called(this, "_ZN6S888C43v17Ev");}
void  S888C4 ::v18(){vfunc_called(this, "_ZN6S888C43v18Ev");}
void  S888C4 ::v19(){vfunc_called(this, "_ZN6S888C43v19Ev");}
void  S888C4 ::v20(){vfunc_called(this, "_ZN6S888C43v20Ev");}
S888C4 ::S888C4(){ note_ctor("S888C4", this);} // tgen

static void Test_S888C4()
{
  extern Class_Descriptor cd_S888C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S888C4, buf);
    S888C4 *dp, &lv = *(dp=new (buf) S888C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S888C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S888C4)");
    check_base_class_offset(lv, (S888C5*), 0, "S888C4");
    check_field_offset(lv, s888c4f0, ABISELECT(72,56), "S888C4.s888c4f0");
    test_class_info(&lv, &cd_S888C4);
    dp->~S888C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS888C4(Test_S888C4, "S888C4", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN6S888C4C1Ev();
extern void _ZN6S888C4D1Ev();
Name_Map name_map_S888C4[] = {
  NSPAIR(_ZN6S888C4C1Ev),
  NSPAIR(_ZN6S888C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S888C5;
extern VTBL_ENTRY _ZTI6S888C5[];
extern  VTBL_ENTRY _ZTV6S888C5[];
static Base_Class bases_S888C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S888C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S888C4[];
extern void _ZN6S888C4D1Ev();
extern void _ZN6S888C4D0Ev();
extern void _ZN6S888C52v2Ev();
extern void _ZN6S888C52v3Ev();
extern void _ZN6S888C52v4Ev();
extern void _ZN6S888C52v5Ev();
extern void _ZN6S888C52v6Ev();
extern void _ZN6S888C52v7Ev();
extern void _ZN6S888C52v8Ev();
extern void _ZN6S888C52v9Ev();
extern void _ZN6S888C53v10Ev();
extern void _ZN6S888C53v11Ev();
extern void _ZN6S888C53v12Ev();
extern void _ZN6S888C53v13Ev();
extern void _ZN6S888C43v14Ev();
extern void _ZN6S888C43v15Ev();
extern void _ZN6S888C43v16Ev();
extern void _ZN6S888C43v17Ev();
extern void _ZN6S888C43v18Ev();
extern void _ZN6S888C43v19Ev();
extern void _ZN6S888C43v20Ev();
static  VTBL_ENTRY vtc_S888C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S888C4[0]),
  (VTBL_ENTRY)&_ZN6S888C4D1Ev,
  (VTBL_ENTRY)&_ZN6S888C4D0Ev,
  (VTBL_ENTRY)&_ZN6S888C52v2Ev,
  (VTBL_ENTRY)&_ZN6S888C52v3Ev,
  (VTBL_ENTRY)&_ZN6S888C52v4Ev,
  (VTBL_ENTRY)&_ZN6S888C52v5Ev,
  (VTBL_ENTRY)&_ZN6S888C52v6Ev,
  (VTBL_ENTRY)&_ZN6S888C52v7Ev,
  (VTBL_ENTRY)&_ZN6S888C52v8Ev,
  (VTBL_ENTRY)&_ZN6S888C52v9Ev,
  (VTBL_ENTRY)&_ZN6S888C53v10Ev,
  (VTBL_ENTRY)&_ZN6S888C53v11Ev,
  (VTBL_ENTRY)&_ZN6S888C53v12Ev,
  (VTBL_ENTRY)&_ZN6S888C53v13Ev,
  (VTBL_ENTRY)&_ZN6S888C43v14Ev,
  (VTBL_ENTRY)&_ZN6S888C43v15Ev,
  (VTBL_ENTRY)&_ZN6S888C43v16Ev,
  (VTBL_ENTRY)&_ZN6S888C43v17Ev,
  (VTBL_ENTRY)&_ZN6S888C43v18Ev,
  (VTBL_ENTRY)&_ZN6S888C43v19Ev,
  (VTBL_ENTRY)&_ZN6S888C43v20Ev,
};
extern VTBL_ENTRY _ZTI6S888C4[];
extern  VTBL_ENTRY _ZTV6S888C4[];
Class_Descriptor cd_S888C4 = {  "S888C4", // class name
  bases_S888C4, 1,
  &(vtc_S888C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI6S888C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S888C4),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  S888C15_nt  {
  virtual  ~S888C15_nt(); // _ZN10S888C15_ntD1Ev
  virtual void  v21(); // _ZN10S888C15_nt3v21Ev
  virtual void  v22(); // _ZN10S888C15_nt3v22Ev
  virtual void  v23(); // _ZN10S888C15_nt3v23Ev
  S888C15_nt(); // tgen
};
//SIG(-1 S888C15_nt) C1{ vd v1 v2 v3}


 S888C15_nt ::~S888C15_nt(){ note_dtor("S888C15_nt", this);}
void  S888C15_nt ::v21(){vfunc_called(this, "_ZN10S888C15_nt3v21Ev");}
void  S888C15_nt ::v22(){vfunc_called(this, "_ZN10S888C15_nt3v22Ev");}
void  S888C15_nt ::v23(){vfunc_called(this, "_ZN10S888C15_nt3v23Ev");}
S888C15_nt ::S888C15_nt(){ note_ctor("S888C15_nt", this);} // tgen

//skip512 S888C15_nt

#else // __cplusplus

extern void _ZN10S888C15_ntC1Ev();
extern void _ZN10S888C15_ntD1Ev();
Name_Map name_map_S888C15_nt[] = {
  NSPAIR(_ZN10S888C15_ntC1Ev),
  NSPAIR(_ZN10S888C15_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S888C15_nt[];
extern void _ZN10S888C15_ntD1Ev();
extern void _ZN10S888C15_ntD0Ev();
extern void _ZN10S888C15_nt3v21Ev();
extern void _ZN10S888C15_nt3v22Ev();
extern void _ZN10S888C15_nt3v23Ev();
static  VTBL_ENTRY vtc_S888C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S888C15_nt[0]),
  (VTBL_ENTRY)&_ZN10S888C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S888C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v23Ev,
};
extern VTBL_ENTRY _ZTI10S888C15_nt[];
VTBL_ENTRY *P__ZTI10S888C15_nt = _ZTI10S888C15_nt; 
extern  VTBL_ENTRY _ZTV10S888C15_nt[];
Class_Descriptor cd_S888C15_nt = {  "S888C15_nt", // class name
  0,0,//no base classes
  &(vtc_S888C15_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S888C15_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S888C15_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  S888C14_nt  : S888C15_nt {
  virtual  ~S888C14_nt(); // _ZN10S888C14_ntD1Ev
  virtual void  v24(); // _ZN10S888C14_nt3v24Ev
  virtual void  v25(); // _ZN10S888C14_nt3v25Ev
  virtual void  v26(); // _ZN10S888C14_nt3v26Ev
  virtual void  v27(); // _ZN10S888C14_nt3v27Ev
  S888C14_nt(); // tgen
};
//SIG(-1 S888C14_nt) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S888C14_nt ::~S888C14_nt(){ note_dtor("S888C14_nt", this);}
void  S888C14_nt ::v24(){vfunc_called(this, "_ZN10S888C14_nt3v24Ev");}
void  S888C14_nt ::v25(){vfunc_called(this, "_ZN10S888C14_nt3v25Ev");}
void  S888C14_nt ::v26(){vfunc_called(this, "_ZN10S888C14_nt3v26Ev");}
void  S888C14_nt ::v27(){vfunc_called(this, "_ZN10S888C14_nt3v27Ev");}
S888C14_nt ::S888C14_nt(){ note_ctor("S888C14_nt", this);} // tgen

//skip512 S888C14_nt

#else // __cplusplus

extern void _ZN10S888C14_ntC1Ev();
extern void _ZN10S888C14_ntD1Ev();
Name_Map name_map_S888C14_nt[] = {
  NSPAIR(_ZN10S888C14_ntC1Ev),
  NSPAIR(_ZN10S888C14_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S888C15_nt;
extern VTBL_ENTRY _ZTI10S888C15_nt[];
extern  VTBL_ENTRY _ZTV10S888C15_nt[];
static Base_Class bases_S888C14_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S888C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S888C14_nt[];
extern void _ZN10S888C14_ntD1Ev();
extern void _ZN10S888C14_ntD0Ev();
extern void _ZN10S888C15_nt3v21Ev();
extern void _ZN10S888C15_nt3v22Ev();
extern void _ZN10S888C15_nt3v23Ev();
extern void _ZN10S888C14_nt3v24Ev();
extern void _ZN10S888C14_nt3v25Ev();
extern void _ZN10S888C14_nt3v26Ev();
extern void _ZN10S888C14_nt3v27Ev();
static  VTBL_ENTRY vtc_S888C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S888C14_nt[0]),
  (VTBL_ENTRY)&_ZN10S888C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S888C14_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI10S888C14_nt[];
VTBL_ENTRY *P__ZTI10S888C14_nt = _ZTI10S888C14_nt; 
extern  VTBL_ENTRY _ZTV10S888C14_nt[];
Class_Descriptor cd_S888C14_nt = {  "S888C14_nt", // class name
  bases_S888C14_nt, 1,
  &(vtc_S888C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S888C14_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S888C14_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C13  : S888C14_nt {
  ::S2382C29_nt s888c13f0;
  ::S888C10_nt s888c13f1;
  char s888c13f2;
  virtual  ~S888C13(); // _ZN7S888C13D1Ev
  virtual void  v28(); // _ZN7S888C133v28Ev
  virtual void  v29(); // _ZN7S888C133v29Ev
  virtual void  v30(); // _ZN7S888C133v30Ev
  S888C13(); // tgen
};
//SIG(-1 S888C13) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S888C13 ::~S888C13(){ note_dtor("S888C13", this);}
void  S888C13 ::v28(){vfunc_called(this, "_ZN7S888C133v28Ev");}
void  S888C13 ::v29(){vfunc_called(this, "_ZN7S888C133v29Ev");}
void  S888C13 ::v30(){vfunc_called(this, "_ZN7S888C133v30Ev");}
S888C13 ::S888C13(){ note_ctor("S888C13", this);} // tgen

static void Test_S888C13()
{
  extern Class_Descriptor cd_S888C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S888C13, buf);
    S888C13 *dp, &lv = *(dp=new (buf) S888C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S888C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S888C13)");
    check_base_class_offset(lv, (S888C15_nt*)(S888C14_nt*), 0, "S888C13");
    check_base_class_offset(lv, (S888C14_nt*), 0, "S888C13");
    check_field_offset(lv, s888c13f0, ABISELECT(8,4), "S888C13.s888c13f0");
    check_field_offset(lv, s888c13f1, ABISELECT(32,20), "S888C13.s888c13f1");
    check_field_offset(lv, s888c13f2, ABISELECT(64,52), "S888C13.s888c13f2");
    test_class_info(&lv, &cd_S888C13);
    dp->~S888C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS888C13(Test_S888C13, "S888C13", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S888C13C1Ev();
extern void _ZN7S888C13D1Ev();
Name_Map name_map_S888C13[] = {
  NSPAIR(_ZN7S888C13C1Ev),
  NSPAIR(_ZN7S888C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S888C15_nt;
extern VTBL_ENTRY _ZTI10S888C15_nt[];
extern  VTBL_ENTRY _ZTV10S888C15_nt[];
extern Class_Descriptor cd_S888C14_nt;
extern VTBL_ENTRY _ZTI10S888C14_nt[];
extern  VTBL_ENTRY _ZTV10S888C14_nt[];
static Base_Class bases_S888C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S888C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S888C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S888C13[];
extern void _ZN7S888C13D1Ev();
extern void _ZN7S888C13D0Ev();
extern void _ZN10S888C15_nt3v21Ev();
extern void _ZN10S888C15_nt3v22Ev();
extern void _ZN10S888C15_nt3v23Ev();
extern void _ZN10S888C14_nt3v24Ev();
extern void _ZN10S888C14_nt3v25Ev();
extern void _ZN10S888C14_nt3v26Ev();
extern void _ZN10S888C14_nt3v27Ev();
extern void _ZN7S888C133v28Ev();
extern void _ZN7S888C133v29Ev();
extern void _ZN7S888C133v30Ev();
static  VTBL_ENTRY vtc_S888C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S888C13[0]),
  (VTBL_ENTRY)&_ZN7S888C13D1Ev,
  (VTBL_ENTRY)&_ZN7S888C13D0Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN7S888C133v28Ev,
  (VTBL_ENTRY)&_ZN7S888C133v29Ev,
  (VTBL_ENTRY)&_ZN7S888C133v30Ev,
};
extern VTBL_ENTRY _ZTI7S888C13[];
extern  VTBL_ENTRY _ZTV7S888C13[];
Class_Descriptor cd_S888C13 = {  "S888C13", // class name
  bases_S888C13, 2,
  &(vtc_S888C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S888C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S888C13),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  S888C19_nt  {
  virtual  ~S888C19_nt(); // _ZN10S888C19_ntD1Ev
  virtual void  v31(); // _ZN10S888C19_nt3v31Ev
  virtual void  v32(); // _ZN10S888C19_nt3v32Ev
  virtual void  v33(); // _ZN10S888C19_nt3v33Ev
  virtual void  v34(); // _ZN10S888C19_nt3v34Ev
  virtual void  v35(); // _ZN10S888C19_nt3v35Ev
  virtual void  v36(); // _ZN10S888C19_nt3v36Ev
  virtual void  v37(); // _ZN10S888C19_nt3v37Ev
  virtual void  v38(); // _ZN10S888C19_nt3v38Ev
  virtual void  v39(); // _ZN10S888C19_nt3v39Ev
  virtual void  v40(); // _ZN10S888C19_nt3v40Ev
  virtual void  v41(); // _ZN10S888C19_nt3v41Ev
  virtual void  v42(); // _ZN10S888C19_nt3v42Ev
  virtual void  v43(); // _ZN10S888C19_nt3v43Ev
  virtual void  v44(); // _ZN10S888C19_nt3v44Ev
  virtual void  v45(); // _ZN10S888C19_nt3v45Ev
  virtual void  v46(); // _ZN10S888C19_nt3v46Ev
  virtual void  v47(); // _ZN10S888C19_nt3v47Ev
  virtual void  v48(); // _ZN10S888C19_nt3v48Ev
  virtual void  v49(); // _ZN10S888C19_nt3v49Ev
  virtual void  v50(); // _ZN10S888C19_nt3v50Ev
  virtual void  v51(); // _ZN10S888C19_nt3v51Ev
  virtual void  v52(); // _ZN10S888C19_nt3v52Ev
  virtual void  v53(); // _ZN10S888C19_nt3v53Ev
  virtual void  v54(); // _ZN10S888C19_nt3v54Ev
  virtual void  v55(); // _ZN10S888C19_nt3v55Ev
  virtual void  v56(); // _ZN10S888C19_nt3v56Ev
  S888C19_nt(); // tgen
};
//SIG(-1 S888C19_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}


 S888C19_nt ::~S888C19_nt(){ note_dtor("S888C19_nt", this);}
void  S888C19_nt ::v31(){vfunc_called(this, "_ZN10S888C19_nt3v31Ev");}
void  S888C19_nt ::v32(){vfunc_called(this, "_ZN10S888C19_nt3v32Ev");}
void  S888C19_nt ::v33(){vfunc_called(this, "_ZN10S888C19_nt3v33Ev");}
void  S888C19_nt ::v34(){vfunc_called(this, "_ZN10S888C19_nt3v34Ev");}
void  S888C19_nt ::v35(){vfunc_called(this, "_ZN10S888C19_nt3v35Ev");}
void  S888C19_nt ::v36(){vfunc_called(this, "_ZN10S888C19_nt3v36Ev");}
void  S888C19_nt ::v37(){vfunc_called(this, "_ZN10S888C19_nt3v37Ev");}
void  S888C19_nt ::v38(){vfunc_called(this, "_ZN10S888C19_nt3v38Ev");}
void  S888C19_nt ::v39(){vfunc_called(this, "_ZN10S888C19_nt3v39Ev");}
void  S888C19_nt ::v40(){vfunc_called(this, "_ZN10S888C19_nt3v40Ev");}
void  S888C19_nt ::v41(){vfunc_called(this, "_ZN10S888C19_nt3v41Ev");}
void  S888C19_nt ::v42(){vfunc_called(this, "_ZN10S888C19_nt3v42Ev");}
void  S888C19_nt ::v43(){vfunc_called(this, "_ZN10S888C19_nt3v43Ev");}
void  S888C19_nt ::v44(){vfunc_called(this, "_ZN10S888C19_nt3v44Ev");}
void  S888C19_nt ::v45(){vfunc_called(this, "_ZN10S888C19_nt3v45Ev");}
void  S888C19_nt ::v46(){vfunc_called(this, "_ZN10S888C19_nt3v46Ev");}
void  S888C19_nt ::v47(){vfunc_called(this, "_ZN10S888C19_nt3v47Ev");}
void  S888C19_nt ::v48(){vfunc_called(this, "_ZN10S888C19_nt3v48Ev");}
void  S888C19_nt ::v49(){vfunc_called(this, "_ZN10S888C19_nt3v49Ev");}
void  S888C19_nt ::v50(){vfunc_called(this, "_ZN10S888C19_nt3v50Ev");}
void  S888C19_nt ::v51(){vfunc_called(this, "_ZN10S888C19_nt3v51Ev");}
void  S888C19_nt ::v52(){vfunc_called(this, "_ZN10S888C19_nt3v52Ev");}
void  S888C19_nt ::v53(){vfunc_called(this, "_ZN10S888C19_nt3v53Ev");}
void  S888C19_nt ::v54(){vfunc_called(this, "_ZN10S888C19_nt3v54Ev");}
void  S888C19_nt ::v55(){vfunc_called(this, "_ZN10S888C19_nt3v55Ev");}
void  S888C19_nt ::v56(){vfunc_called(this, "_ZN10S888C19_nt3v56Ev");}
S888C19_nt ::S888C19_nt(){ note_ctor("S888C19_nt", this);} // tgen

//skip512 S888C19_nt

#else // __cplusplus

extern void _ZN10S888C19_ntC1Ev();
extern void _ZN10S888C19_ntD1Ev();
Name_Map name_map_S888C19_nt[] = {
  NSPAIR(_ZN10S888C19_ntC1Ev),
  NSPAIR(_ZN10S888C19_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S888C19_nt[];
extern void _ZN10S888C19_ntD1Ev();
extern void _ZN10S888C19_ntD0Ev();
extern void _ZN10S888C19_nt3v31Ev();
extern void _ZN10S888C19_nt3v32Ev();
extern void _ZN10S888C19_nt3v33Ev();
extern void _ZN10S888C19_nt3v34Ev();
extern void _ZN10S888C19_nt3v35Ev();
extern void _ZN10S888C19_nt3v36Ev();
extern void _ZN10S888C19_nt3v37Ev();
extern void _ZN10S888C19_nt3v38Ev();
extern void _ZN10S888C19_nt3v39Ev();
extern void _ZN10S888C19_nt3v40Ev();
extern void _ZN10S888C19_nt3v41Ev();
extern void _ZN10S888C19_nt3v42Ev();
extern void _ZN10S888C19_nt3v43Ev();
extern void _ZN10S888C19_nt3v44Ev();
extern void _ZN10S888C19_nt3v45Ev();
extern void _ZN10S888C19_nt3v46Ev();
extern void _ZN10S888C19_nt3v47Ev();
extern void _ZN10S888C19_nt3v48Ev();
extern void _ZN10S888C19_nt3v49Ev();
extern void _ZN10S888C19_nt3v50Ev();
extern void _ZN10S888C19_nt3v51Ev();
extern void _ZN10S888C19_nt3v52Ev();
extern void _ZN10S888C19_nt3v53Ev();
extern void _ZN10S888C19_nt3v54Ev();
extern void _ZN10S888C19_nt3v55Ev();
extern void _ZN10S888C19_nt3v56Ev();
static  VTBL_ENTRY vtc_S888C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S888C19_nt[0]),
  (VTBL_ENTRY)&_ZN10S888C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S888C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v56Ev,
};
extern VTBL_ENTRY _ZTI10S888C19_nt[];
VTBL_ENTRY *P__ZTI10S888C19_nt = _ZTI10S888C19_nt; 
extern  VTBL_ENTRY _ZTV10S888C19_nt[];
Class_Descriptor cd_S888C19_nt = {  "S888C19_nt", // class name
  0,0,//no base classes
  &(vtc_S888C19_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S888C19_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S888C19_nt),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C22_nt  {
  void *s888c22f0;
  int s888c22f1[4];
  char s888c22f2;
  int s888c22f3[3];
  void  mf888c22(); // _ZN10S888C22_nt8mf888c22Ev
};
//SIG(-1 S888C22_nt) C1{ m Fp Fi[4] Fc Fi[3]}


void  S888C22_nt ::mf888c22(){}

//skip512 S888C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C3  : S888C4 , S888C13 , S888C19_nt {
  ::S2382C20_nt s888c3f0;
  char s888c3f1[2];
  int s888c3f2;
  void *s888c3f3[5];
  char s888c3f4[2];
  void *s888c3f5;
  ::S888C22_nt s888c3f6;
  __tsi64 s888c3f7[2];
  int s888c3f8[2];
  virtual  ~S888C3(); // _ZN6S888C3D1Ev
  virtual void  v57(); // _ZN6S888C33v57Ev
  virtual void  v58(); // _ZN6S888C33v58Ev
  virtual void  v59(); // _ZN6S888C33v59Ev
  virtual void  v60(); // _ZN6S888C33v60Ev
  virtual void  v61(); // _ZN6S888C33v61Ev
  virtual void  v62(); // _ZN6S888C33v62Ev
  virtual void  v63(); // _ZN6S888C33v63Ev
  virtual void  v64(); // _ZN6S888C33v64Ev
  virtual void  v65(); // _ZN6S888C33v65Ev
  virtual void  v66(); // _ZN6S888C33v66Ev
  virtual void  v67(); // _ZN6S888C33v67Ev
  virtual void  v68(); // _ZN6S888C33v68Ev
  virtual void  v69(); // _ZN6S888C33v69Ev
  virtual void  v70(); // _ZN6S888C33v70Ev
  virtual void  v71(); // _ZN6S888C33v71Ev
  virtual void  v72(); // _ZN6S888C33v72Ev
  virtual void  v73(); // _ZN6S888C33v73Ev
  virtual void  v74(); // _ZN6S888C33v74Ev
  virtual void  v75(); // _ZN6S888C33v75Ev
  virtual void  v76(); // _ZN6S888C33v76Ev
  virtual void  v77(); // _ZN6S888C33v77Ev
  virtual void  v78(); // _ZN6S888C33v78Ev
  virtual void  v79(); // _ZN6S888C33v79Ev
  virtual void  v80(); // _ZN6S888C33v80Ev
  virtual void  v81(); // _ZN6S888C33v81Ev
  virtual void  v82(); // _ZN6S888C33v82Ev
  virtual void  v83(); // _ZN6S888C33v83Ev
  virtual void  v84(); // _ZN6S888C33v84Ev
  virtual void  v85(); // _ZN6S888C33v85Ev
  virtual void  v86(); // _ZN6S888C33v86Ev
  virtual void  v87(); // _ZN6S888C33v87Ev
  virtual void  v88(); // _ZN6S888C33v88Ev
  S888C3(); // tgen
};
//SIG(-1 S888C3) C1{ BC2{ BC3{ vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m FL[4]} Fc} vd v45 v46 v47 v48 v49 v50 v51 FC8{ m Fp Fi[2] FC9{ m}}} BC10{ BC11{ BC12{ vd v52 v53 v54} vd v55 v56 v57 v58} vd v59 v60 v61 FC13{ m Fp Fi[2] FC9} FC7 Fc} BC14{ vd 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} 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 FC15{ m Fp Fi FC16{ m}} Fc[2] Fi Fp[5] Fc[2] Fp FC17{ m Fp Fi[4] Fc Fi[3]} FL[2] Fi[2]}


 S888C3 ::~S888C3(){ note_dtor("S888C3", this);}
void  S888C3 ::v57(){vfunc_called(this, "_ZN6S888C33v57Ev");}
void  S888C3 ::v58(){vfunc_called(this, "_ZN6S888C33v58Ev");}
void  S888C3 ::v59(){vfunc_called(this, "_ZN6S888C33v59Ev");}
void  S888C3 ::v60(){vfunc_called(this, "_ZN6S888C33v60Ev");}
void  S888C3 ::v61(){vfunc_called(this, "_ZN6S888C33v61Ev");}
void  S888C3 ::v62(){vfunc_called(this, "_ZN6S888C33v62Ev");}
void  S888C3 ::v63(){vfunc_called(this, "_ZN6S888C33v63Ev");}
void  S888C3 ::v64(){vfunc_called(this, "_ZN6S888C33v64Ev");}
void  S888C3 ::v65(){vfunc_called(this, "_ZN6S888C33v65Ev");}
void  S888C3 ::v66(){vfunc_called(this, "_ZN6S888C33v66Ev");}
void  S888C3 ::v67(){vfunc_called(this, "_ZN6S888C33v67Ev");}
void  S888C3 ::v68(){vfunc_called(this, "_ZN6S888C33v68Ev");}
void  S888C3 ::v69(){vfunc_called(this, "_ZN6S888C33v69Ev");}
void  S888C3 ::v70(){vfunc_called(this, "_ZN6S888C33v70Ev");}
void  S888C3 ::v71(){vfunc_called(this, "_ZN6S888C33v71Ev");}
void  S888C3 ::v72(){vfunc_called(this, "_ZN6S888C33v72Ev");}
void  S888C3 ::v73(){vfunc_called(this, "_ZN6S888C33v73Ev");}
void  S888C3 ::v74(){vfunc_called(this, "_ZN6S888C33v74Ev");}
void  S888C3 ::v75(){vfunc_called(this, "_ZN6S888C33v75Ev");}
void  S888C3 ::v76(){vfunc_called(this, "_ZN6S888C33v76Ev");}
void  S888C3 ::v77(){vfunc_called(this, "_ZN6S888C33v77Ev");}
void  S888C3 ::v78(){vfunc_called(this, "_ZN6S888C33v78Ev");}
void  S888C3 ::v79(){vfunc_called(this, "_ZN6S888C33v79Ev");}
void  S888C3 ::v80(){vfunc_called(this, "_ZN6S888C33v80Ev");}
void  S888C3 ::v81(){vfunc_called(this, "_ZN6S888C33v81Ev");}
void  S888C3 ::v82(){vfunc_called(this, "_ZN6S888C33v82Ev");}
void  S888C3 ::v83(){vfunc_called(this, "_ZN6S888C33v83Ev");}
void  S888C3 ::v84(){vfunc_called(this, "_ZN6S888C33v84Ev");}
void  S888C3 ::v85(){vfunc_called(this, "_ZN6S888C33v85Ev");}
void  S888C3 ::v86(){vfunc_called(this, "_ZN6S888C33v86Ev");}
void  S888C3 ::v87(){vfunc_called(this, "_ZN6S888C33v87Ev");}
void  S888C3 ::v88(){vfunc_called(this, "_ZN6S888C33v88Ev");}
S888C3 ::S888C3(){ note_ctor("S888C3", this);} // tgen

static void Test_S888C3()
{
  extern Class_Descriptor cd_S888C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,61)];
    init_test(&cd_S888C3, buf);
    S888C3 *dp, &lv = *(dp=new (buf) S888C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,240), "sizeof(S888C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S888C3)");
    check_base_class_offset(lv, (S888C5*)(S888C4*), 0, "S888C3");
    check_base_class_offset(lv, (S888C4*), 0, "S888C3");
    check_base_class_offset(lv, (S888C15_nt*)(S888C14_nt*)(S888C13*), ABISELECT(96,72), "S888C3");
    check_base_class_offset(lv, (S888C14_nt*)(S888C13*), ABISELECT(96,72), "S888C3");
    check_base_class_offset(lv, (S888C13*), ABISELECT(96,72), "S888C3");
    check_base_class_offset(lv, (S888C19_nt*), ABISELECT(168,128), "S888C3");
    check_field_offset(lv, s888c3f0, ABISELECT(176,132), "S888C3.s888c3f0");
    check_field_offset(lv, s888c3f1, ABISELECT(192,144), "S888C3.s888c3f1");
    check_field_offset(lv, s888c3f2, ABISELECT(196,148), "S888C3.s888c3f2");
    check_field_offset(lv, s888c3f3, ABISELECT(200,152), "S888C3.s888c3f3");
    check_field_offset(lv, s888c3f4, ABISELECT(240,172), "S888C3.s888c3f4");
    check_field_offset(lv, s888c3f5, ABISELECT(248,176), "S888C3.s888c3f5");
    check_field_offset(lv, s888c3f6, ABISELECT(256,180), "S888C3.s888c3f6");
    check_field_offset(lv, s888c3f7, ABISELECT(296,216), "S888C3.s888c3f7");
    check_field_offset(lv, s888c3f8, ABISELECT(312,232), "S888C3.s888c3f8");
    test_class_info(&lv, &cd_S888C3);
    dp->~S888C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS888C3(Test_S888C3, "S888C3", ABISELECT(320,240));

#else // __cplusplus

extern void _ZN6S888C3C1Ev();
extern void _ZN6S888C3D1Ev();
Name_Map name_map_S888C3[] = {
  NSPAIR(_ZN6S888C3C1Ev),
  NSPAIR(_ZN6S888C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S888C5;
extern VTBL_ENTRY _ZTI6S888C5[];
extern  VTBL_ENTRY _ZTV6S888C5[];
extern Class_Descriptor cd_S888C4;
extern VTBL_ENTRY _ZTI6S888C4[];
extern  VTBL_ENTRY _ZTV6S888C4[];
extern Class_Descriptor cd_S888C15_nt;
extern VTBL_ENTRY _ZTI10S888C15_nt[];
extern  VTBL_ENTRY _ZTV10S888C15_nt[];
extern Class_Descriptor cd_S888C14_nt;
extern VTBL_ENTRY _ZTI10S888C14_nt[];
extern  VTBL_ENTRY _ZTV10S888C14_nt[];
extern Class_Descriptor cd_S888C13;
extern VTBL_ENTRY _ZTI7S888C13[];
extern  VTBL_ENTRY _ZTV7S888C13[];
extern Class_Descriptor cd_S888C19_nt;
extern VTBL_ENTRY _ZTI10S888C19_nt[];
extern  VTBL_ENTRY _ZTV10S888C19_nt[];
static Base_Class bases_S888C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S888C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S888C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S888C15_nt,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S888C14_nt,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S888C13,    ABISELECT(96,72), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S888C19_nt,    ABISELECT(168,128), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S888C3[];
extern void _ZN6S888C3D1Ev();
extern void _ZN6S888C3D0Ev();
extern void _ZN6S888C52v2Ev();
extern void _ZN6S888C52v3Ev();
extern void _ZN6S888C52v4Ev();
extern void _ZN6S888C52v5Ev();
extern void _ZN6S888C52v6Ev();
extern void _ZN6S888C52v7Ev();
extern void _ZN6S888C52v8Ev();
extern void _ZN6S888C52v9Ev();
extern void _ZN6S888C53v10Ev();
extern void _ZN6S888C53v11Ev();
extern void _ZN6S888C53v12Ev();
extern void _ZN6S888C53v13Ev();
extern void _ZN6S888C43v14Ev();
extern void _ZN6S888C43v15Ev();
extern void _ZN6S888C43v16Ev();
extern void _ZN6S888C43v17Ev();
extern void _ZN6S888C43v18Ev();
extern void _ZN6S888C43v19Ev();
extern void _ZN6S888C43v20Ev();
extern void _ZN6S888C33v57Ev();
extern void _ZN6S888C33v58Ev();
extern void _ZN6S888C33v59Ev();
extern void _ZN6S888C33v60Ev();
extern void _ZN6S888C33v61Ev();
extern void _ZN6S888C33v62Ev();
extern void _ZN6S888C33v63Ev();
extern void _ZN6S888C33v64Ev();
extern void _ZN6S888C33v65Ev();
extern void _ZN6S888C33v66Ev();
extern void _ZN6S888C33v67Ev();
extern void _ZN6S888C33v68Ev();
extern void _ZN6S888C33v69Ev();
extern void _ZN6S888C33v70Ev();
extern void _ZN6S888C33v71Ev();
extern void _ZN6S888C33v72Ev();
extern void _ZN6S888C33v73Ev();
extern void _ZN6S888C33v74Ev();
extern void _ZN6S888C33v75Ev();
extern void _ZN6S888C33v76Ev();
extern void _ZN6S888C33v77Ev();
extern void _ZN6S888C33v78Ev();
extern void _ZN6S888C33v79Ev();
extern void _ZN6S888C33v80Ev();
extern void _ZN6S888C33v81Ev();
extern void _ZN6S888C33v82Ev();
extern void _ZN6S888C33v83Ev();
extern void _ZN6S888C33v84Ev();
extern void _ZN6S888C33v85Ev();
extern void _ZN6S888C33v86Ev();
extern void _ZN6S888C33v87Ev();
extern void _ZN6S888C33v88Ev();
extern void ABISELECT(_ZThn96_N6S888C3D1Ev,_ZThn72_N6S888C3D1Ev)();
extern void ABISELECT(_ZThn96_N6S888C3D0Ev,_ZThn72_N6S888C3D0Ev)();
extern void _ZN10S888C15_nt3v21Ev();
extern void _ZN10S888C15_nt3v22Ev();
extern void _ZN10S888C15_nt3v23Ev();
extern void _ZN10S888C14_nt3v24Ev();
extern void _ZN10S888C14_nt3v25Ev();
extern void _ZN10S888C14_nt3v26Ev();
extern void _ZN10S888C14_nt3v27Ev();
extern void _ZN7S888C133v28Ev();
extern void _ZN7S888C133v29Ev();
extern void _ZN7S888C133v30Ev();
extern void ABISELECT(_ZThn168_N6S888C3D1Ev,_ZThn128_N6S888C3D1Ev)();
extern void ABISELECT(_ZThn168_N6S888C3D0Ev,_ZThn128_N6S888C3D0Ev)();
extern void _ZN10S888C19_nt3v31Ev();
extern void _ZN10S888C19_nt3v32Ev();
extern void _ZN10S888C19_nt3v33Ev();
extern void _ZN10S888C19_nt3v34Ev();
extern void _ZN10S888C19_nt3v35Ev();
extern void _ZN10S888C19_nt3v36Ev();
extern void _ZN10S888C19_nt3v37Ev();
extern void _ZN10S888C19_nt3v38Ev();
extern void _ZN10S888C19_nt3v39Ev();
extern void _ZN10S888C19_nt3v40Ev();
extern void _ZN10S888C19_nt3v41Ev();
extern void _ZN10S888C19_nt3v42Ev();
extern void _ZN10S888C19_nt3v43Ev();
extern void _ZN10S888C19_nt3v44Ev();
extern void _ZN10S888C19_nt3v45Ev();
extern void _ZN10S888C19_nt3v46Ev();
extern void _ZN10S888C19_nt3v47Ev();
extern void _ZN10S888C19_nt3v48Ev();
extern void _ZN10S888C19_nt3v49Ev();
extern void _ZN10S888C19_nt3v50Ev();
extern void _ZN10S888C19_nt3v51Ev();
extern void _ZN10S888C19_nt3v52Ev();
extern void _ZN10S888C19_nt3v53Ev();
extern void _ZN10S888C19_nt3v54Ev();
extern void _ZN10S888C19_nt3v55Ev();
extern void _ZN10S888C19_nt3v56Ev();
static  VTBL_ENTRY vtc_S888C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S888C3[0]),
  (VTBL_ENTRY)&_ZN6S888C3D1Ev,
  (VTBL_ENTRY)&_ZN6S888C3D0Ev,
  (VTBL_ENTRY)&_ZN6S888C52v2Ev,
  (VTBL_ENTRY)&_ZN6S888C52v3Ev,
  (VTBL_ENTRY)&_ZN6S888C52v4Ev,
  (VTBL_ENTRY)&_ZN6S888C52v5Ev,
  (VTBL_ENTRY)&_ZN6S888C52v6Ev,
  (VTBL_ENTRY)&_ZN6S888C52v7Ev,
  (VTBL_ENTRY)&_ZN6S888C52v8Ev,
  (VTBL_ENTRY)&_ZN6S888C52v9Ev,
  (VTBL_ENTRY)&_ZN6S888C53v10Ev,
  (VTBL_ENTRY)&_ZN6S888C53v11Ev,
  (VTBL_ENTRY)&_ZN6S888C53v12Ev,
  (VTBL_ENTRY)&_ZN6S888C53v13Ev,
  (VTBL_ENTRY)&_ZN6S888C43v14Ev,
  (VTBL_ENTRY)&_ZN6S888C43v15Ev,
  (VTBL_ENTRY)&_ZN6S888C43v16Ev,
  (VTBL_ENTRY)&_ZN6S888C43v17Ev,
  (VTBL_ENTRY)&_ZN6S888C43v18Ev,
  (VTBL_ENTRY)&_ZN6S888C43v19Ev,
  (VTBL_ENTRY)&_ZN6S888C43v20Ev,
  (VTBL_ENTRY)&_ZN6S888C33v57Ev,
  (VTBL_ENTRY)&_ZN6S888C33v58Ev,
  (VTBL_ENTRY)&_ZN6S888C33v59Ev,
  (VTBL_ENTRY)&_ZN6S888C33v60Ev,
  (VTBL_ENTRY)&_ZN6S888C33v61Ev,
  (VTBL_ENTRY)&_ZN6S888C33v62Ev,
  (VTBL_ENTRY)&_ZN6S888C33v63Ev,
  (VTBL_ENTRY)&_ZN6S888C33v64Ev,
  (VTBL_ENTRY)&_ZN6S888C33v65Ev,
  (VTBL_ENTRY)&_ZN6S888C33v66Ev,
  (VTBL_ENTRY)&_ZN6S888C33v67Ev,
  (VTBL_ENTRY)&_ZN6S888C33v68Ev,
  (VTBL_ENTRY)&_ZN6S888C33v69Ev,
  (VTBL_ENTRY)&_ZN6S888C33v70Ev,
  (VTBL_ENTRY)&_ZN6S888C33v71Ev,
  (VTBL_ENTRY)&_ZN6S888C33v72Ev,
  (VTBL_ENTRY)&_ZN6S888C33v73Ev,
  (VTBL_ENTRY)&_ZN6S888C33v74Ev,
  (VTBL_ENTRY)&_ZN6S888C33v75Ev,
  (VTBL_ENTRY)&_ZN6S888C33v76Ev,
  (VTBL_ENTRY)&_ZN6S888C33v77Ev,
  (VTBL_ENTRY)&_ZN6S888C33v78Ev,
  (VTBL_ENTRY)&_ZN6S888C33v79Ev,
  (VTBL_ENTRY)&_ZN6S888C33v80Ev,
  (VTBL_ENTRY)&_ZN6S888C33v81Ev,
  (VTBL_ENTRY)&_ZN6S888C33v82Ev,
  (VTBL_ENTRY)&_ZN6S888C33v83Ev,
  (VTBL_ENTRY)&_ZN6S888C33v84Ev,
  (VTBL_ENTRY)&_ZN6S888C33v85Ev,
  (VTBL_ENTRY)&_ZN6S888C33v86Ev,
  (VTBL_ENTRY)&_ZN6S888C33v87Ev,
  (VTBL_ENTRY)&_ZN6S888C33v88Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI6S888C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S888C3D1Ev,_ZThn72_N6S888C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S888C3D0Ev,_ZThn72_N6S888C3D0Ev),
  (VTBL_ENTRY)&_ZN10S888C15_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN7S888C133v28Ev,
  (VTBL_ENTRY)&_ZN7S888C133v29Ev,
  (VTBL_ENTRY)&_ZN7S888C133v30Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI6S888C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N6S888C3D1Ev,_ZThn128_N6S888C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N6S888C3D0Ev,_ZThn128_N6S888C3D0Ev),
  (VTBL_ENTRY)&_ZN10S888C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v56Ev,
};
extern VTBL_ENTRY _ZTI6S888C3[];
extern  VTBL_ENTRY _ZTV6S888C3[];
Class_Descriptor cd_S888C3 = {  "S888C3", // class name
  bases_S888C3, 6,
  &(vtc_S888C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,240), // object size
  NSPAIRA(_ZTI6S888C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S888C3),99, //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  S888C25_nt  {
  int s888c25f0[4];
};
//SIG(-1 S888C25_nt) C1{ Fi[4]}



//skip512 S888C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C24_nt  {
  void *s888c24f0;
  ::S888C25_nt s888c24f1;
  void  mf888c24(); // _ZN10S888C24_nt8mf888c24Ev
};
//SIG(-1 S888C24_nt) C1{ m Fp FC2{ Fi[4]}}


void  S888C24_nt ::mf888c24(){}

//skip512 S888C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C23  {
  void *s888c23f0;
  ::S888C10_nt s888c23f1;
  ::S888C24_nt s888c23f2;
  int s888c23f3;
  char s888c23f4;
  void  mf888c23(); // _ZN7S888C238mf888c23Ev
};
//SIG(-1 S888C23) C1{ m Fp FC2{ m FL[4]} FC3{ m Fp FC4{ Fi[4]}} Fi Fc}


void  S888C23 ::mf888c23(){}

static void Test_S888C23()
{
  {
    init_simple_test("S888C23");
    S888C23 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S888C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S888C23)");
    check_field_offset(lv, s888c23f0, 0, "S888C23.s888c23f0");
    check_field_offset(lv, s888c23f1, ABISELECT(8,4), "S888C23.s888c23f1");
    check_field_offset(lv, s888c23f2, ABISELECT(40,36), "S888C23.s888c23f2");
    check_field_offset(lv, s888c23f3, ABISELECT(64,56), "S888C23.s888c23f3");
    check_field_offset(lv, s888c23f4, ABISELECT(68,60), "S888C23.s888c23f4");
  }
}
static Arrange_To_Call_Me vS888C23(Test_S888C23, "S888C23", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S888C2  : S888C3 {
  ::S888C10_nt s888c2f0;
  ::S888C23 s888c2f1;
  int s888c2f2;
  virtual  ~S888C2(); // _ZN6S888C2D1Ev
  virtual void  v89(); // _ZN6S888C23v89Ev
  virtual void  v90(); // _ZN6S888C23v90Ev
  virtual void  v91(); // _ZN6S888C23v91Ev
  virtual void  v92(); // _ZN6S888C23v92Ev
  virtual void  v93(); // _ZN6S888C23v93Ev
  virtual void  v94(); // _ZN6S888C23v94Ev
  virtual void  v95(); // _ZN6S888C23v95Ev
  virtual void  v96(); // _ZN6S888C23v96Ev
  virtual void  v97(); // _ZN6S888C23v97Ev
  S888C2(); // tgen
};
//SIG(-1 S888C2) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ m FL[4]} Fc} vd v22 v23 v24 v25 v26 v27 v28 FC9{ m Fp Fi[2] FC10{ m}}} BC11{ BC12{ BC13{ vd v29 v30 v31} vd v32 v33 v34 v35} vd v36 v37 v38 FC14{ m Fp Fi[2] FC10} FC8 Fc} BC15{ vd 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} vd 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 FC16{ m Fp Fi FC17{ m}} Fc[2] Fi Fp[5] Fc[2] Fp FC18{ m Fp Fi[4] Fc Fi[3]} FL[2] Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC8 FC19{ m Fp FC8 FC20{ m Fp FC21{ Fi[4]}} Fi Fc} Fi}


 S888C2 ::~S888C2(){ note_dtor("S888C2", this);}
void  S888C2 ::v89(){vfunc_called(this, "_ZN6S888C23v89Ev");}
void  S888C2 ::v90(){vfunc_called(this, "_ZN6S888C23v90Ev");}
void  S888C2 ::v91(){vfunc_called(this, "_ZN6S888C23v91Ev");}
void  S888C2 ::v92(){vfunc_called(this, "_ZN6S888C23v92Ev");}
void  S888C2 ::v93(){vfunc_called(this, "_ZN6S888C23v93Ev");}
void  S888C2 ::v94(){vfunc_called(this, "_ZN6S888C23v94Ev");}
void  S888C2 ::v95(){vfunc_called(this, "_ZN6S888C23v95Ev");}
void  S888C2 ::v96(){vfunc_called(this, "_ZN6S888C23v96Ev");}
void  S888C2 ::v97(){vfunc_called(this, "_ZN6S888C23v97Ev");}
S888C2 ::S888C2(){ note_ctor("S888C2", this);} // tgen

static void Test_S888C2()
{
  extern Class_Descriptor cd_S888C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,86)];
    init_test(&cd_S888C2, buf);
    S888C2 *dp, &lv = *(dp=new (buf) S888C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,340), "sizeof(S888C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S888C2)");
    check_base_class_offset(lv, (S888C5*)(S888C4*)(S888C3*), 0, "S888C2");
    check_base_class_offset(lv, (S888C4*)(S888C3*), 0, "S888C2");
    check_base_class_offset(lv, (S888C15_nt*)(S888C14_nt*)(S888C13*)(S888C3*), ABISELECT(96,72), "S888C2");
    check_base_class_offset(lv, (S888C14_nt*)(S888C13*)(S888C3*), ABISELECT(96,72), "S888C2");
    check_base_class_offset(lv, (S888C13*)(S888C3*), ABISELECT(96,72), "S888C2");
    check_base_class_offset(lv, (S888C19_nt*)(S888C3*), ABISELECT(168,128), "S888C2");
    check_base_class_offset(lv, (S888C3*), 0, "S888C2");
    check_field_offset(lv, s888c2f0, ABISELECT(320,240), "S888C2.s888c2f0");
    check_field_offset(lv, s888c2f1, ABISELECT(352,272), "S888C2.s888c2f1");
    check_field_offset(lv, s888c2f2, ABISELECT(424,336), "S888C2.s888c2f2");
    test_class_info(&lv, &cd_S888C2);
    dp->~S888C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS888C2(Test_S888C2, "S888C2", ABISELECT(432,340));

#else // __cplusplus

extern void _ZN6S888C2C1Ev();
extern void _ZN6S888C2D1Ev();
Name_Map name_map_S888C2[] = {
  NSPAIR(_ZN6S888C2C1Ev),
  NSPAIR(_ZN6S888C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S888C5;
extern VTBL_ENTRY _ZTI6S888C5[];
extern  VTBL_ENTRY _ZTV6S888C5[];
extern Class_Descriptor cd_S888C4;
extern VTBL_ENTRY _ZTI6S888C4[];
extern  VTBL_ENTRY _ZTV6S888C4[];
extern Class_Descriptor cd_S888C15_nt;
extern VTBL_ENTRY _ZTI10S888C15_nt[];
extern  VTBL_ENTRY _ZTV10S888C15_nt[];
extern Class_Descriptor cd_S888C14_nt;
extern VTBL_ENTRY _ZTI10S888C14_nt[];
extern  VTBL_ENTRY _ZTV10S888C14_nt[];
extern Class_Descriptor cd_S888C13;
extern VTBL_ENTRY _ZTI7S888C13[];
extern  VTBL_ENTRY _ZTV7S888C13[];
extern Class_Descriptor cd_S888C19_nt;
extern VTBL_ENTRY _ZTI10S888C19_nt[];
extern  VTBL_ENTRY _ZTV10S888C19_nt[];
extern Class_Descriptor cd_S888C3;
extern VTBL_ENTRY _ZTI6S888C3[];
extern  VTBL_ENTRY _ZTV6S888C3[];
static Base_Class bases_S888C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S888C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S888C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S888C15_nt,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S888C14_nt,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S888C13,    ABISELECT(96,72), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S888C19_nt,    ABISELECT(168,128), //bcp->offset
    78, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S888C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S888C2[];
extern void _ZN6S888C2D1Ev();
extern void _ZN6S888C2D0Ev();
extern void _ZN6S888C52v2Ev();
extern void _ZN6S888C52v3Ev();
extern void _ZN6S888C52v4Ev();
extern void _ZN6S888C52v5Ev();
extern void _ZN6S888C52v6Ev();
extern void _ZN6S888C52v7Ev();
extern void _ZN6S888C52v8Ev();
extern void _ZN6S888C52v9Ev();
extern void _ZN6S888C53v10Ev();
extern void _ZN6S888C53v11Ev();
extern void _ZN6S888C53v12Ev();
extern void _ZN6S888C53v13Ev();
extern void _ZN6S888C43v14Ev();
extern void _ZN6S888C43v15Ev();
extern void _ZN6S888C43v16Ev();
extern void _ZN6S888C43v17Ev();
extern void _ZN6S888C43v18Ev();
extern void _ZN6S888C43v19Ev();
extern void _ZN6S888C43v20Ev();
extern void _ZN6S888C33v57Ev();
extern void _ZN6S888C33v58Ev();
extern void _ZN6S888C33v59Ev();
extern void _ZN6S888C33v60Ev();
extern void _ZN6S888C33v61Ev();
extern void _ZN6S888C33v62Ev();
extern void _ZN6S888C33v63Ev();
extern void _ZN6S888C33v64Ev();
extern void _ZN6S888C33v65Ev();
extern void _ZN6S888C33v66Ev();
extern void _ZN6S888C33v67Ev();
extern void _ZN6S888C33v68Ev();
extern void _ZN6S888C33v69Ev();
extern void _ZN6S888C33v70Ev();
extern void _ZN6S888C33v71Ev();
extern void _ZN6S888C33v72Ev();
extern void _ZN6S888C33v73Ev();
extern void _ZN6S888C33v74Ev();
extern void _ZN6S888C33v75Ev();
extern void _ZN6S888C33v76Ev();
extern void _ZN6S888C33v77Ev();
extern void _ZN6S888C33v78Ev();
extern void _ZN6S888C33v79Ev();
extern void _ZN6S888C33v80Ev();
extern void _ZN6S888C33v81Ev();
extern void _ZN6S888C33v82Ev();
extern void _ZN6S888C33v83Ev();
extern void _ZN6S888C33v84Ev();
extern void _ZN6S888C33v85Ev();
extern void _ZN6S888C33v86Ev();
extern void _ZN6S888C33v87Ev();
extern void _ZN6S888C33v88Ev();
extern void _ZN6S888C23v89Ev();
extern void _ZN6S888C23v90Ev();
extern void _ZN6S888C23v91Ev();
extern void _ZN6S888C23v92Ev();
extern void _ZN6S888C23v93Ev();
extern void _ZN6S888C23v94Ev();
extern void _ZN6S888C23v95Ev();
extern void _ZN6S888C23v96Ev();
extern void _ZN6S888C23v97Ev();
extern void ABISELECT(_ZThn96_N6S888C2D1Ev,_ZThn72_N6S888C2D1Ev)();
extern void ABISELECT(_ZThn96_N6S888C2D0Ev,_ZThn72_N6S888C2D0Ev)();
extern void _ZN10S888C15_nt3v21Ev();
extern void _ZN10S888C15_nt3v22Ev();
extern void _ZN10S888C15_nt3v23Ev();
extern void _ZN10S888C14_nt3v24Ev();
extern void _ZN10S888C14_nt3v25Ev();
extern void _ZN10S888C14_nt3v26Ev();
extern void _ZN10S888C14_nt3v27Ev();
extern void _ZN7S888C133v28Ev();
extern void _ZN7S888C133v29Ev();
extern void _ZN7S888C133v30Ev();
extern void ABISELECT(_ZThn168_N6S888C2D1Ev,_ZThn128_N6S888C2D1Ev)();
extern void ABISELECT(_ZThn168_N6S888C2D0Ev,_ZThn128_N6S888C2D0Ev)();
extern void _ZN10S888C19_nt3v31Ev();
extern void _ZN10S888C19_nt3v32Ev();
extern void _ZN10S888C19_nt3v33Ev();
extern void _ZN10S888C19_nt3v34Ev();
extern void _ZN10S888C19_nt3v35Ev();
extern void _ZN10S888C19_nt3v36Ev();
extern void _ZN10S888C19_nt3v37Ev();
extern void _ZN10S888C19_nt3v38Ev();
extern void _ZN10S888C19_nt3v39Ev();
extern void _ZN10S888C19_nt3v40Ev();
extern void _ZN10S888C19_nt3v41Ev();
extern void _ZN10S888C19_nt3v42Ev();
extern void _ZN10S888C19_nt3v43Ev();
extern void _ZN10S888C19_nt3v44Ev();
extern void _ZN10S888C19_nt3v45Ev();
extern void _ZN10S888C19_nt3v46Ev();
extern void _ZN10S888C19_nt3v47Ev();
extern void _ZN10S888C19_nt3v48Ev();
extern void _ZN10S888C19_nt3v49Ev();
extern void _ZN10S888C19_nt3v50Ev();
extern void _ZN10S888C19_nt3v51Ev();
extern void _ZN10S888C19_nt3v52Ev();
extern void _ZN10S888C19_nt3v53Ev();
extern void _ZN10S888C19_nt3v54Ev();
extern void _ZN10S888C19_nt3v55Ev();
extern void _ZN10S888C19_nt3v56Ev();
static  VTBL_ENTRY vtc_S888C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S888C2[0]),
  (VTBL_ENTRY)&_ZN6S888C2D1Ev,
  (VTBL_ENTRY)&_ZN6S888C2D0Ev,
  (VTBL_ENTRY)&_ZN6S888C52v2Ev,
  (VTBL_ENTRY)&_ZN6S888C52v3Ev,
  (VTBL_ENTRY)&_ZN6S888C52v4Ev,
  (VTBL_ENTRY)&_ZN6S888C52v5Ev,
  (VTBL_ENTRY)&_ZN6S888C52v6Ev,
  (VTBL_ENTRY)&_ZN6S888C52v7Ev,
  (VTBL_ENTRY)&_ZN6S888C52v8Ev,
  (VTBL_ENTRY)&_ZN6S888C52v9Ev,
  (VTBL_ENTRY)&_ZN6S888C53v10Ev,
  (VTBL_ENTRY)&_ZN6S888C53v11Ev,
  (VTBL_ENTRY)&_ZN6S888C53v12Ev,
  (VTBL_ENTRY)&_ZN6S888C53v13Ev,
  (VTBL_ENTRY)&_ZN6S888C43v14Ev,
  (VTBL_ENTRY)&_ZN6S888C43v15Ev,
  (VTBL_ENTRY)&_ZN6S888C43v16Ev,
  (VTBL_ENTRY)&_ZN6S888C43v17Ev,
  (VTBL_ENTRY)&_ZN6S888C43v18Ev,
  (VTBL_ENTRY)&_ZN6S888C43v19Ev,
  (VTBL_ENTRY)&_ZN6S888C43v20Ev,
  (VTBL_ENTRY)&_ZN6S888C33v57Ev,
  (VTBL_ENTRY)&_ZN6S888C33v58Ev,
  (VTBL_ENTRY)&_ZN6S888C33v59Ev,
  (VTBL_ENTRY)&_ZN6S888C33v60Ev,
  (VTBL_ENTRY)&_ZN6S888C33v61Ev,
  (VTBL_ENTRY)&_ZN6S888C33v62Ev,
  (VTBL_ENTRY)&_ZN6S888C33v63Ev,
  (VTBL_ENTRY)&_ZN6S888C33v64Ev,
  (VTBL_ENTRY)&_ZN6S888C33v65Ev,
  (VTBL_ENTRY)&_ZN6S888C33v66Ev,
  (VTBL_ENTRY)&_ZN6S888C33v67Ev,
  (VTBL_ENTRY)&_ZN6S888C33v68Ev,
  (VTBL_ENTRY)&_ZN6S888C33v69Ev,
  (VTBL_ENTRY)&_ZN6S888C33v70Ev,
  (VTBL_ENTRY)&_ZN6S888C33v71Ev,
  (VTBL_ENTRY)&_ZN6S888C33v72Ev,
  (VTBL_ENTRY)&_ZN6S888C33v73Ev,
  (VTBL_ENTRY)&_ZN6S888C33v74Ev,
  (VTBL_ENTRY)&_ZN6S888C33v75Ev,
  (VTBL_ENTRY)&_ZN6S888C33v76Ev,
  (VTBL_ENTRY)&_ZN6S888C33v77Ev,
  (VTBL_ENTRY)&_ZN6S888C33v78Ev,
  (VTBL_ENTRY)&_ZN6S888C33v79Ev,
  (VTBL_ENTRY)&_ZN6S888C33v80Ev,
  (VTBL_ENTRY)&_ZN6S888C33v81Ev,
  (VTBL_ENTRY)&_ZN6S888C33v82Ev,
  (VTBL_ENTRY)&_ZN6S888C33v83Ev,
  (VTBL_ENTRY)&_ZN6S888C33v84Ev,
  (VTBL_ENTRY)&_ZN6S888C33v85Ev,
  (VTBL_ENTRY)&_ZN6S888C33v86Ev,
  (VTBL_ENTRY)&_ZN6S888C33v87Ev,
  (VTBL_ENTRY)&_ZN6S888C33v88Ev,
  (VTBL_ENTRY)&_ZN6S888C23v89Ev,
  (VTBL_ENTRY)&_ZN6S888C23v90Ev,
  (VTBL_ENTRY)&_ZN6S888C23v91Ev,
  (VTBL_ENTRY)&_ZN6S888C23v92Ev,
  (VTBL_ENTRY)&_ZN6S888C23v93Ev,
  (VTBL_ENTRY)&_ZN6S888C23v94Ev,
  (VTBL_ENTRY)&_ZN6S888C23v95Ev,
  (VTBL_ENTRY)&_ZN6S888C23v96Ev,
  (VTBL_ENTRY)&_ZN6S888C23v97Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI6S888C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S888C2D1Ev,_ZThn72_N6S888C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S888C2D0Ev,_ZThn72_N6S888C2D0Ev),
  (VTBL_ENTRY)&_ZN10S888C15_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN7S888C133v28Ev,
  (VTBL_ENTRY)&_ZN7S888C133v29Ev,
  (VTBL_ENTRY)&_ZN7S888C133v30Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI6S888C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N6S888C2D1Ev,_ZThn128_N6S888C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N6S888C2D0Ev,_ZThn128_N6S888C2D0Ev),
  (VTBL_ENTRY)&_ZN10S888C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v56Ev,
};
extern VTBL_ENTRY _ZTI6S888C2[];
extern  VTBL_ENTRY _ZTV6S888C2[];
Class_Descriptor cd_S888C2 = {  "S888C2", // class name
  bases_S888C2, 7,
  &(vtc_S888C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,340), // object size
  NSPAIRA(_ZTI6S888C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S888C2),108, //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  S888C1  : S888C2 {
  virtual  ~S888C1(); // _ZN6S888C1D1Ev
  virtual void  v1(); // _ZN6S888C12v1Ev
  S888C1(); // tgen
};
//SIG(1 S888C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC9{ m FL[4]} Fc} vd v14 v15 v16 v17 v18 v19 v20 FC10{ m Fp Fi[2] FC11{ m}}} BC12{ BC13{ BC14{ vd v21 v22 v23} vd v24 v25 v26 v27} vd v28 v29 v30 FC15{ m Fp Fi[2] FC11} FC9 Fc} BC16{ vd 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} vd 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 FC17{ m Fp Fi FC18{ m}} Fc[2] Fi Fp[5] Fc[2] Fp FC19{ m Fp Fi[4] Fc Fi[3]} FL[2] Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 FC9 FC20{ m Fp FC9 FC21{ m Fp FC22{ Fi[4]}} Fi Fc} Fi} vd v1}


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

static void Test_S888C1()
{
  extern Class_Descriptor cd_S888C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,86)];
    init_test(&cd_S888C1, buf);
    S888C1 *dp, &lv = *(dp=new (buf) S888C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,340), "sizeof(S888C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S888C1)");
    check_base_class_offset(lv, (S888C5*)(S888C4*)(S888C3*)(S888C2*), 0, "S888C1");
    check_base_class_offset(lv, (S888C4*)(S888C3*)(S888C2*), 0, "S888C1");
    check_base_class_offset(lv, (S888C15_nt*)(S888C14_nt*)(S888C13*)(S888C3*)(S888C2*), ABISELECT(96,72), "S888C1");
    check_base_class_offset(lv, (S888C14_nt*)(S888C13*)(S888C3*)(S888C2*), ABISELECT(96,72), "S888C1");
    check_base_class_offset(lv, (S888C13*)(S888C3*)(S888C2*), ABISELECT(96,72), "S888C1");
    check_base_class_offset(lv, (S888C19_nt*)(S888C3*)(S888C2*), ABISELECT(168,128), "S888C1");
    check_base_class_offset(lv, (S888C3*)(S888C2*), 0, "S888C1");
    check_base_class_offset(lv, (S888C2*), 0, "S888C1");
    test_class_info(&lv, &cd_S888C1);
    dp->~S888C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS888C1(Test_S888C1, "S888C1", ABISELECT(432,340));

#else // __cplusplus

extern void _ZN6S888C1C1Ev();
extern void _ZN6S888C1D1Ev();
Name_Map name_map_S888C1[] = {
  NSPAIR(_ZN6S888C1C1Ev),
  NSPAIR(_ZN6S888C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S888C5;
extern VTBL_ENTRY _ZTI6S888C5[];
extern  VTBL_ENTRY _ZTV6S888C5[];
extern Class_Descriptor cd_S888C4;
extern VTBL_ENTRY _ZTI6S888C4[];
extern  VTBL_ENTRY _ZTV6S888C4[];
extern Class_Descriptor cd_S888C15_nt;
extern VTBL_ENTRY _ZTI10S888C15_nt[];
extern  VTBL_ENTRY _ZTV10S888C15_nt[];
extern Class_Descriptor cd_S888C14_nt;
extern VTBL_ENTRY _ZTI10S888C14_nt[];
extern  VTBL_ENTRY _ZTV10S888C14_nt[];
extern Class_Descriptor cd_S888C13;
extern VTBL_ENTRY _ZTI7S888C13[];
extern  VTBL_ENTRY _ZTV7S888C13[];
extern Class_Descriptor cd_S888C19_nt;
extern VTBL_ENTRY _ZTI10S888C19_nt[];
extern  VTBL_ENTRY _ZTV10S888C19_nt[];
extern Class_Descriptor cd_S888C3;
extern VTBL_ENTRY _ZTI6S888C3[];
extern  VTBL_ENTRY _ZTV6S888C3[];
extern Class_Descriptor cd_S888C2;
extern VTBL_ENTRY _ZTI6S888C2[];
extern  VTBL_ENTRY _ZTV6S888C2[];
static Base_Class bases_S888C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S888C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S888C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S888C15_nt,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S888C14_nt,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S888C13,    ABISELECT(96,72), //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S888C19_nt,    ABISELECT(168,128), //bcp->offset
    79, //bcp->virtual_function_table_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_S888C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S888C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S888C1[];
extern void _ZN6S888C1D1Ev();
extern void _ZN6S888C1D0Ev();
extern void _ZN6S888C52v2Ev();
extern void _ZN6S888C52v3Ev();
extern void _ZN6S888C52v4Ev();
extern void _ZN6S888C52v5Ev();
extern void _ZN6S888C52v6Ev();
extern void _ZN6S888C52v7Ev();
extern void _ZN6S888C52v8Ev();
extern void _ZN6S888C52v9Ev();
extern void _ZN6S888C53v10Ev();
extern void _ZN6S888C53v11Ev();
extern void _ZN6S888C53v12Ev();
extern void _ZN6S888C53v13Ev();
extern void _ZN6S888C43v14Ev();
extern void _ZN6S888C43v15Ev();
extern void _ZN6S888C43v16Ev();
extern void _ZN6S888C43v17Ev();
extern void _ZN6S888C43v18Ev();
extern void _ZN6S888C43v19Ev();
extern void _ZN6S888C43v20Ev();
extern void _ZN6S888C33v57Ev();
extern void _ZN6S888C33v58Ev();
extern void _ZN6S888C33v59Ev();
extern void _ZN6S888C33v60Ev();
extern void _ZN6S888C33v61Ev();
extern void _ZN6S888C33v62Ev();
extern void _ZN6S888C33v63Ev();
extern void _ZN6S888C33v64Ev();
extern void _ZN6S888C33v65Ev();
extern void _ZN6S888C33v66Ev();
extern void _ZN6S888C33v67Ev();
extern void _ZN6S888C33v68Ev();
extern void _ZN6S888C33v69Ev();
extern void _ZN6S888C33v70Ev();
extern void _ZN6S888C33v71Ev();
extern void _ZN6S888C33v72Ev();
extern void _ZN6S888C33v73Ev();
extern void _ZN6S888C33v74Ev();
extern void _ZN6S888C33v75Ev();
extern void _ZN6S888C33v76Ev();
extern void _ZN6S888C33v77Ev();
extern void _ZN6S888C33v78Ev();
extern void _ZN6S888C33v79Ev();
extern void _ZN6S888C33v80Ev();
extern void _ZN6S888C33v81Ev();
extern void _ZN6S888C33v82Ev();
extern void _ZN6S888C33v83Ev();
extern void _ZN6S888C33v84Ev();
extern void _ZN6S888C33v85Ev();
extern void _ZN6S888C33v86Ev();
extern void _ZN6S888C33v87Ev();
extern void _ZN6S888C33v88Ev();
extern void _ZN6S888C23v89Ev();
extern void _ZN6S888C23v90Ev();
extern void _ZN6S888C23v91Ev();
extern void _ZN6S888C23v92Ev();
extern void _ZN6S888C23v93Ev();
extern void _ZN6S888C23v94Ev();
extern void _ZN6S888C23v95Ev();
extern void _ZN6S888C23v96Ev();
extern void _ZN6S888C23v97Ev();
extern void _ZN6S888C12v1Ev();
extern void ABISELECT(_ZThn96_N6S888C1D1Ev,_ZThn72_N6S888C1D1Ev)();
extern void ABISELECT(_ZThn96_N6S888C1D0Ev,_ZThn72_N6S888C1D0Ev)();
extern void _ZN10S888C15_nt3v21Ev();
extern void _ZN10S888C15_nt3v22Ev();
extern void _ZN10S888C15_nt3v23Ev();
extern void _ZN10S888C14_nt3v24Ev();
extern void _ZN10S888C14_nt3v25Ev();
extern void _ZN10S888C14_nt3v26Ev();
extern void _ZN10S888C14_nt3v27Ev();
extern void _ZN7S888C133v28Ev();
extern void _ZN7S888C133v29Ev();
extern void _ZN7S888C133v30Ev();
extern void ABISELECT(_ZThn168_N6S888C1D1Ev,_ZThn128_N6S888C1D1Ev)();
extern void ABISELECT(_ZThn168_N6S888C1D0Ev,_ZThn128_N6S888C1D0Ev)();
extern void _ZN10S888C19_nt3v31Ev();
extern void _ZN10S888C19_nt3v32Ev();
extern void _ZN10S888C19_nt3v33Ev();
extern void _ZN10S888C19_nt3v34Ev();
extern void _ZN10S888C19_nt3v35Ev();
extern void _ZN10S888C19_nt3v36Ev();
extern void _ZN10S888C19_nt3v37Ev();
extern void _ZN10S888C19_nt3v38Ev();
extern void _ZN10S888C19_nt3v39Ev();
extern void _ZN10S888C19_nt3v40Ev();
extern void _ZN10S888C19_nt3v41Ev();
extern void _ZN10S888C19_nt3v42Ev();
extern void _ZN10S888C19_nt3v43Ev();
extern void _ZN10S888C19_nt3v44Ev();
extern void _ZN10S888C19_nt3v45Ev();
extern void _ZN10S888C19_nt3v46Ev();
extern void _ZN10S888C19_nt3v47Ev();
extern void _ZN10S888C19_nt3v48Ev();
extern void _ZN10S888C19_nt3v49Ev();
extern void _ZN10S888C19_nt3v50Ev();
extern void _ZN10S888C19_nt3v51Ev();
extern void _ZN10S888C19_nt3v52Ev();
extern void _ZN10S888C19_nt3v53Ev();
extern void _ZN10S888C19_nt3v54Ev();
extern void _ZN10S888C19_nt3v55Ev();
extern void _ZN10S888C19_nt3v56Ev();
static  VTBL_ENTRY vtc_S888C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S888C1[0]),
  (VTBL_ENTRY)&_ZN6S888C1D1Ev,
  (VTBL_ENTRY)&_ZN6S888C1D0Ev,
  (VTBL_ENTRY)&_ZN6S888C52v2Ev,
  (VTBL_ENTRY)&_ZN6S888C52v3Ev,
  (VTBL_ENTRY)&_ZN6S888C52v4Ev,
  (VTBL_ENTRY)&_ZN6S888C52v5Ev,
  (VTBL_ENTRY)&_ZN6S888C52v6Ev,
  (VTBL_ENTRY)&_ZN6S888C52v7Ev,
  (VTBL_ENTRY)&_ZN6S888C52v8Ev,
  (VTBL_ENTRY)&_ZN6S888C52v9Ev,
  (VTBL_ENTRY)&_ZN6S888C53v10Ev,
  (VTBL_ENTRY)&_ZN6S888C53v11Ev,
  (VTBL_ENTRY)&_ZN6S888C53v12Ev,
  (VTBL_ENTRY)&_ZN6S888C53v13Ev,
  (VTBL_ENTRY)&_ZN6S888C43v14Ev,
  (VTBL_ENTRY)&_ZN6S888C43v15Ev,
  (VTBL_ENTRY)&_ZN6S888C43v16Ev,
  (VTBL_ENTRY)&_ZN6S888C43v17Ev,
  (VTBL_ENTRY)&_ZN6S888C43v18Ev,
  (VTBL_ENTRY)&_ZN6S888C43v19Ev,
  (VTBL_ENTRY)&_ZN6S888C43v20Ev,
  (VTBL_ENTRY)&_ZN6S888C33v57Ev,
  (VTBL_ENTRY)&_ZN6S888C33v58Ev,
  (VTBL_ENTRY)&_ZN6S888C33v59Ev,
  (VTBL_ENTRY)&_ZN6S888C33v60Ev,
  (VTBL_ENTRY)&_ZN6S888C33v61Ev,
  (VTBL_ENTRY)&_ZN6S888C33v62Ev,
  (VTBL_ENTRY)&_ZN6S888C33v63Ev,
  (VTBL_ENTRY)&_ZN6S888C33v64Ev,
  (VTBL_ENTRY)&_ZN6S888C33v65Ev,
  (VTBL_ENTRY)&_ZN6S888C33v66Ev,
  (VTBL_ENTRY)&_ZN6S888C33v67Ev,
  (VTBL_ENTRY)&_ZN6S888C33v68Ev,
  (VTBL_ENTRY)&_ZN6S888C33v69Ev,
  (VTBL_ENTRY)&_ZN6S888C33v70Ev,
  (VTBL_ENTRY)&_ZN6S888C33v71Ev,
  (VTBL_ENTRY)&_ZN6S888C33v72Ev,
  (VTBL_ENTRY)&_ZN6S888C33v73Ev,
  (VTBL_ENTRY)&_ZN6S888C33v74Ev,
  (VTBL_ENTRY)&_ZN6S888C33v75Ev,
  (VTBL_ENTRY)&_ZN6S888C33v76Ev,
  (VTBL_ENTRY)&_ZN6S888C33v77Ev,
  (VTBL_ENTRY)&_ZN6S888C33v78Ev,
  (VTBL_ENTRY)&_ZN6S888C33v79Ev,
  (VTBL_ENTRY)&_ZN6S888C33v80Ev,
  (VTBL_ENTRY)&_ZN6S888C33v81Ev,
  (VTBL_ENTRY)&_ZN6S888C33v82Ev,
  (VTBL_ENTRY)&_ZN6S888C33v83Ev,
  (VTBL_ENTRY)&_ZN6S888C33v84Ev,
  (VTBL_ENTRY)&_ZN6S888C33v85Ev,
  (VTBL_ENTRY)&_ZN6S888C33v86Ev,
  (VTBL_ENTRY)&_ZN6S888C33v87Ev,
  (VTBL_ENTRY)&_ZN6S888C33v88Ev,
  (VTBL_ENTRY)&_ZN6S888C23v89Ev,
  (VTBL_ENTRY)&_ZN6S888C23v90Ev,
  (VTBL_ENTRY)&_ZN6S888C23v91Ev,
  (VTBL_ENTRY)&_ZN6S888C23v92Ev,
  (VTBL_ENTRY)&_ZN6S888C23v93Ev,
  (VTBL_ENTRY)&_ZN6S888C23v94Ev,
  (VTBL_ENTRY)&_ZN6S888C23v95Ev,
  (VTBL_ENTRY)&_ZN6S888C23v96Ev,
  (VTBL_ENTRY)&_ZN6S888C23v97Ev,
  (VTBL_ENTRY)&_ZN6S888C12v1Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI6S888C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S888C1D1Ev,_ZThn72_N6S888C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N6S888C1D0Ev,_ZThn72_N6S888C1D0Ev),
  (VTBL_ENTRY)&_ZN10S888C15_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S888C15_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S888C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN7S888C133v28Ev,
  (VTBL_ENTRY)&_ZN7S888C133v29Ev,
  (VTBL_ENTRY)&_ZN7S888C133v30Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI6S888C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N6S888C1D1Ev,_ZThn128_N6S888C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N6S888C1D0Ev,_ZThn128_N6S888C1D0Ev),
  (VTBL_ENTRY)&_ZN10S888C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S888C19_nt3v56Ev,
};
extern VTBL_ENTRY _ZTI6S888C1[];
extern  VTBL_ENTRY _ZTV6S888C1[];
Class_Descriptor cd_S888C1 = {  "S888C1", // class name
  bases_S888C1, 8,
  &(vtc_S888C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,340), // object size
  NSPAIRA(_ZTI6S888C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S888C1),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C4_nt  {
  virtual void  v8(); // _ZN10S3537C4_nt2v8Ev
  virtual void  v9(); // _ZN10S3537C4_nt2v9Ev
  virtual void  v10(); // _ZN10S3537C4_nt3v10Ev
  virtual void  v11(); // _ZN10S3537C4_nt3v11Ev
  virtual void  v12(); // _ZN10S3537C4_nt3v12Ev
  virtual void  v13(); // _ZN10S3537C4_nt3v13Ev
  virtual void  v14(); // _ZN10S3537C4_nt3v14Ev
  ~S3537C4_nt(); // tgen
  S3537C4_nt(); // tgen
};
//SIG(-1 S3537C4_nt) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S3537C4_nt ::v8(){vfunc_called(this, "_ZN10S3537C4_nt2v8Ev");}
void  S3537C4_nt ::v9(){vfunc_called(this, "_ZN10S3537C4_nt2v9Ev");}
void  S3537C4_nt ::v10(){vfunc_called(this, "_ZN10S3537C4_nt3v10Ev");}
void  S3537C4_nt ::v11(){vfunc_called(this, "_ZN10S3537C4_nt3v11Ev");}
void  S3537C4_nt ::v12(){vfunc_called(this, "_ZN10S3537C4_nt3v12Ev");}
void  S3537C4_nt ::v13(){vfunc_called(this, "_ZN10S3537C4_nt3v13Ev");}
void  S3537C4_nt ::v14(){vfunc_called(this, "_ZN10S3537C4_nt3v14Ev");}
S3537C4_nt ::~S3537C4_nt(){ note_dtor("S3537C4_nt", this);} // tgen
S3537C4_nt ::S3537C4_nt(){ note_ctor("S3537C4_nt", this);} // tgen

//skip512 S3537C4_nt

#else // __cplusplus

extern void _ZN10S3537C4_ntC1Ev();
extern void _ZN10S3537C4_ntD1Ev();
Name_Map name_map_S3537C4_nt[] = {
  NSPAIR(_ZN10S3537C4_ntC1Ev),
  NSPAIR(_ZN10S3537C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY vtc_S3537C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3537C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
VTBL_ENTRY *P__ZTI10S3537C4_nt = _ZTI10S3537C4_nt; 
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
Class_Descriptor cd_S3537C4_nt = {  "S3537C4_nt", // class name
  0,0,//no base classes
  &(vtc_S3537C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3537C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3537C4_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C3  : virtual S3537C4_nt {
  long double s3537c3f0[9];
  virtual void  v15(); // _ZN7S3537C33v15Ev
  virtual void  v16(); // _ZN7S3537C33v16Ev
  virtual void  v17(); // _ZN7S3537C33v17Ev
  ~S3537C3(); // tgen
  S3537C3(); // tgen
};
//SIG(-1 S3537C3) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10} v1 v2 v3 FD[9]}


void  S3537C3 ::v15(){vfunc_called(this, "_ZN7S3537C33v15Ev");}
void  S3537C3 ::v16(){vfunc_called(this, "_ZN7S3537C33v16Ev");}
void  S3537C3 ::v17(){vfunc_called(this, "_ZN7S3537C33v17Ev");}
S3537C3 ::~S3537C3(){ note_dtor("S3537C3", this);} // tgen
S3537C3 ::S3537C3(){ note_ctor("S3537C3", this);} // tgen

static void Test_S3537C3()
{
  extern Class_Descriptor cd_S3537C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S3537C3, buf);
    S3537C3 *dp, &lv = *(dp=new (buf) S3537C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S3537C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C3)");
    check_base_class_offset(lv, (S3537C4_nt*), 0, "S3537C3");
    check_field_offset(lv, s3537c3f0, ABISELECT(16,4), "S3537C3.s3537c3f0");
    test_class_info(&lv, &cd_S3537C3);
    dp->~S3537C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C3(Test_S3537C3, "S3537C3", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S3537C3C1Ev();
extern void _ZN7S3537C3D1Ev();
Name_Map name_map_S3537C3[] = {
  NSPAIR(_ZN7S3537C3C1Ev),
  NSPAIR(_ZN7S3537C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
static Base_Class bases_S3537C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C4_nt,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3537C3[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY vtc_S3537C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern VTBL_ENTRY _ZTV7S3537C3[];
static  VTT_ENTRY vtt_S3537C3[] = {
  {&(_ZTV7S3537C3[10]),  10,20},
  {&(_ZTV7S3537C3[10]),  10,20},
};
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
Class_Descriptor cd_S3537C3 = {  "S3537C3", // class name
  bases_S3537C3, 1,
  &(vtc_S3537C3[0]), // expected_vtbl_contents
  &(vtt_S3537C3[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S3537C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3537C3),20, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3537C3),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  S3537C6  {
  int s3537c6f0;
  virtual void  v18(); // _ZN7S3537C63v18Ev
  virtual void  v19(); // _ZN7S3537C63v19Ev
  virtual void  v20(); // _ZN7S3537C63v20Ev
  ~S3537C6(); // tgen
  S3537C6(); // tgen
};
//SIG(-1 S3537C6) C1{ v1 v2 v3 Fi}


void  S3537C6 ::v18(){vfunc_called(this, "_ZN7S3537C63v18Ev");}
void  S3537C6 ::v19(){vfunc_called(this, "_ZN7S3537C63v19Ev");}
void  S3537C6 ::v20(){vfunc_called(this, "_ZN7S3537C63v20Ev");}
S3537C6 ::~S3537C6(){ note_dtor("S3537C6", this);} // tgen
S3537C6 ::S3537C6(){ note_ctor("S3537C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3537C6C1Ev();
extern void _ZN7S3537C6D1Ev();
Name_Map name_map_S3537C6[] = {
  NSPAIR(_ZN7S3537C6C1Ev),
  NSPAIR(_ZN7S3537C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3537C6[];
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY vtc_S3537C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C6[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
Class_Descriptor cd_S3537C6 = {  "S3537C6", // class name
  0,0,//no base classes
  &(vtc_S3537C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3537C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3537C6),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  S3537C8  : S3537C4_nt {
  virtual void  v21(); // _ZN7S3537C83v21Ev
  ~S3537C8(); // tgen
  S3537C8(); // tgen
};
//SIG(-1 S3537C8) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


void  S3537C8 ::v21(){vfunc_called(this, "_ZN7S3537C83v21Ev");}
S3537C8 ::~S3537C8(){ note_dtor("S3537C8", this);} // tgen
S3537C8 ::S3537C8(){ note_ctor("S3537C8", this);} // tgen

static void Test_S3537C8()
{
  extern Class_Descriptor cd_S3537C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3537C8, buf);
    S3537C8 *dp, &lv = *(dp=new (buf) S3537C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3537C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3537C8)");
    check_base_class_offset(lv, (S3537C4_nt*), 0, "S3537C8");
    test_class_info(&lv, &cd_S3537C8);
    dp->~S3537C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C8(Test_S3537C8, "S3537C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3537C8C1Ev();
extern void _ZN7S3537C8D1Ev();
Name_Map name_map_S3537C8[] = {
  NSPAIR(_ZN7S3537C8C1Ev),
  NSPAIR(_ZN7S3537C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
static Base_Class bases_S3537C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3537C8[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY vtc_S3537C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C8[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
Class_Descriptor cd_S3537C8 = {  "S3537C8", // class name
  bases_S3537C8, 1,
  &(vtc_S3537C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3537C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3537C8),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  S3537C7  : virtual S3537C4_nt , S3537C3 , virtual S3537C8 {
  long double s3537c7f0;
  virtual void  v22(); // _ZN7S3537C73v22Ev
  ~S3537C7(); // tgen
  S3537C7(); // tgen
};
//SIG(-1 S3537C7) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8} BC3{ VBC2 v9 v10 v11 FD[9]} VBC4{ BC2 v12} v1 FD}


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

static void Test_S3537C7()
{
  extern Class_Descriptor cd_S3537C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S3537C7, buf);
    S3537C7 *dp, &lv = *(dp=new (buf) S3537C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S3537C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C7)");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*), 0, "S3537C7");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*), 0, "S3537C7");
    check_base_class_offset(lv, (S3537C3*), 0, "S3537C7");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(176,124), "S3537C7");
    check_base_class_offset(lv, (S3537C8*), ABISELECT(176,124), "S3537C7");
    check_field_offset(lv, s3537c7f0, ABISELECT(160,112), "S3537C7.s3537c7f0");
    test_class_info(&lv, &cd_S3537C7);
    dp->~S3537C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C7(Test_S3537C7, "S3537C7", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S3537C7C1Ev();
extern void _ZN7S3537C7D1Ev();
Name_Map name_map_S3537C7[] = {
  NSPAIR(_ZN7S3537C7C1Ev),
  NSPAIR(_ZN7S3537C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
static Base_Class bases_S3537C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C4_nt,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C4_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(176,124), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3537C7[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY vtc_S3537C7[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern VTBL_ENTRY _ZTV7S3537C7[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__7S3537C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
static  VTT_ENTRY vtt_S3537C7[] = {
  {&(_ZTV7S3537C7[11]),  11,40},
  {&(_tg__ZTV7S3537C3__7S3537C7[10]),  10,20},
  {&(_tg__ZTV7S3537C3__7S3537C7[10]),  10,20},
  {&(_ZTV7S3537C7[11]),  11,40},
  {&(_ZTV7S3537C7[32]),  32,40},
};
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
Class_Descriptor cd_S3537C7 = {  "S3537C7", // class name
  bases_S3537C7, 4,
  &(vtc_S3537C7[0]), // expected_vtbl_contents
  &(vtt_S3537C7[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S3537C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3537C7),40, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3537C7),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C5  : virtual S3537C6 , virtual S3537C7 , S3537C3 , S3537C4_nt {
  void *s3537c5f0;
  int s3537c5f1;
  virtual void  v23(); // _ZN7S3537C53v23Ev
  virtual void  v24(); // _ZN7S3537C53v24Ev
  virtual void  v25(); // _ZN7S3537C53v25Ev
  virtual void  v26(); // _ZN7S3537C53v26Ev
  virtual void  v27(); // _ZN7S3537C53v27Ev
  virtual void  v28(); // _ZN7S3537C53v28Ev
  virtual void  v29(); // _ZN7S3537C53v29Ev
  virtual void  v30(); // _ZN7S3537C53v30Ev
  ~S3537C5(); // tgen
  S3537C5(); // tgen
};
//SIG(-1 S3537C5) C1{ VBC2{ v9 v10 v11 Fi} VBC3{ VBC4{ v12 v13 v14 v15 v16 v17 v18} BC5{ VBC4 v19 v20 v21 FD[9]} VBC6{ BC4 v22} v23 FD} BC5 BC4 v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi}


void  S3537C5 ::v23(){vfunc_called(this, "_ZN7S3537C53v23Ev");}
void  S3537C5 ::v24(){vfunc_called(this, "_ZN7S3537C53v24Ev");}
void  S3537C5 ::v25(){vfunc_called(this, "_ZN7S3537C53v25Ev");}
void  S3537C5 ::v26(){vfunc_called(this, "_ZN7S3537C53v26Ev");}
void  S3537C5 ::v27(){vfunc_called(this, "_ZN7S3537C53v27Ev");}
void  S3537C5 ::v28(){vfunc_called(this, "_ZN7S3537C53v28Ev");}
void  S3537C5 ::v29(){vfunc_called(this, "_ZN7S3537C53v29Ev");}
void  S3537C5 ::v30(){vfunc_called(this, "_ZN7S3537C53v30Ev");}
S3537C5 ::~S3537C5(){ note_dtor("S3537C5", this);} // tgen
S3537C5 ::S3537C5(){ note_ctor("S3537C5", this);} // tgen

static void Test_S3537C5()
{
  extern Class_Descriptor cd_S3537C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,66)];
    init_test(&cd_S3537C5, buf);
    S3537C5 *dp, &lv = *(dp=new (buf) S3537C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,260), "sizeof(S3537C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C5)");
    check_base_class_offset(lv, (S3537C6*), ABISELECT(184,124), "S3537C5");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C7*), ABISELECT(208,132), "S3537C5");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C7*), ABISELECT(208,132), "S3537C5");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*), ABISELECT(208,132), "S3537C5");
    check_base_class_offset(lv, (S3537C3*)(S3537C7*), ABISELECT(208,132), "S3537C5");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(384,256), "S3537C5");
    check_base_class_offset(lv, (S3537C8*)(S3537C7*), ABISELECT(384,256), "S3537C5");
    check_base_class_offset(lv, (S3537C7*), ABISELECT(208,132), "S3537C5");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*), 0, "S3537C5");
    /*is_ambiguous_... S3537C5::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*), ABISELECT(160,112), "S3537C5");
    check_field_offset(lv, s3537c5f0, ABISELECT(168,116), "S3537C5.s3537c5f0");
    check_field_offset(lv, s3537c5f1, ABISELECT(176,120), "S3537C5.s3537c5f1");
    test_class_info(&lv, &cd_S3537C5);
    dp->~S3537C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C5(Test_S3537C5, "S3537C5", ABISELECT(400,260));

#else // __cplusplus

extern void _ZN7S3537C5C1Ev();
extern void _ZN7S3537C5D1Ev();
Name_Map name_map_S3537C5[] = {
  NSPAIR(_ZN7S3537C5C1Ev),
  NSPAIR(_ZN7S3537C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C7;
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
static Base_Class bases_S3537C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C6,    ABISELECT(184,124), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C4_nt,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    5, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(384,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(384,256), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3537C7,    ABISELECT(208,132), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C3,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C4_nt,    ABISELECT(160,112), //bcp->offset
    31, //bcp->virtual_function_table_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 _ZTI7S3537C5[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY vtc_S3537C5[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern VTBL_ENTRY _ZTV7S3537C5[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__A1__7S3537C5[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C3__A1__7S3537C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C5[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C7__7S3537C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C7__7S3537C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
static  VTT_ENTRY vtt_S3537C5[] = {
  {&(_ZTV7S3537C5[13]),  13,92},
  {&(_tg__ZTV7S3537C3__A1__7S3537C5[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C3__A1__7S3537C5[9]),  9,16},
  {&(_ZTV7S3537C5[45]),  45,92},
  {&(_ZTV7S3537C5[63]),  63,92},
  {&(_ZTV7S3537C5[63]),  63,92},
  {&(_ZTV7S3537C5[84]),  84,92},
  {&(_tg__ZTV7S3537C7__7S3537C5[11]),  11,22},
  {&(_tg__ZTV7S3537C37S3537C7__7S3537C5[10]),  10,20},
  {&(_tg__ZTV7S3537C37S3537C7__7S3537C5[10]),  10,20},
  {&(_tg__ZTV7S3537C7__7S3537C5[11]),  11,22},
  {&(_tg__ZTV7S3537C8__7S3537C7__7S3537C5[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S3537C5[];
extern  VTBL_ENTRY _ZTV7S3537C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C5[];
Class_Descriptor cd_S3537C5 = {  "S3537C5", // class name
  bases_S3537C5, 8,
  &(vtc_S3537C5[0]), // expected_vtbl_contents
  &(vtt_S3537C5[0]), // expected_vtt_contents
  ABISELECT(400,260), // object size
  NSPAIRA(_ZTI7S3537C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3537C5),92, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3537C5),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C11_nt  {
  virtual void  v31(); // _ZN11S3537C11_nt3v31Ev
  virtual void  v32(); // _ZN11S3537C11_nt3v32Ev
  virtual void  v33(); // _ZN11S3537C11_nt3v33Ev
  ~S3537C11_nt(); // tgen
  S3537C11_nt(); // tgen
};
//SIG(-1 S3537C11_nt) C1{ v1 v2 v3}


void  S3537C11_nt ::v31(){vfunc_called(this, "_ZN11S3537C11_nt3v31Ev");}
void  S3537C11_nt ::v32(){vfunc_called(this, "_ZN11S3537C11_nt3v32Ev");}
void  S3537C11_nt ::v33(){vfunc_called(this, "_ZN11S3537C11_nt3v33Ev");}
S3537C11_nt ::~S3537C11_nt(){ note_dtor("S3537C11_nt", this);} // tgen
S3537C11_nt ::S3537C11_nt(){ note_ctor("S3537C11_nt", this);} // tgen

//skip512 S3537C11_nt

#else // __cplusplus

extern void _ZN11S3537C11_ntC1Ev();
extern void _ZN11S3537C11_ntD1Ev();
Name_Map name_map_S3537C11_nt[] = {
  NSPAIR(_ZN11S3537C11_ntC1Ev),
  NSPAIR(_ZN11S3537C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY vtc_S3537C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3537C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
VTBL_ENTRY *P__ZTI11S3537C11_nt = _ZTI11S3537C11_nt; 
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
Class_Descriptor cd_S3537C11_nt = {  "S3537C11_nt", // class name
  0,0,//no base classes
  &(vtc_S3537C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3537C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3537C11_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  S3537C10  : virtual S3537C7 , S3537C8 , S3537C3 , S3537C11_nt {
  virtual  ~S3537C10(); // _ZN8S3537C10D2Ev
  virtual void  v34(); // _ZN8S3537C103v34Ev
  virtual void  v35(); // _ZN8S3537C103v35Ev
  virtual void  v36(); // _ZN8S3537C103v36Ev
  virtual void  v37(); // _ZN8S3537C103v37Ev
  virtual void  v38(); // _ZN8S3537C103v38Ev
  virtual void  v39(); // _ZN8S3537C103v39Ev
  virtual void  v40(); // _ZN8S3537C103v40Ev
  virtual void  v41(); // _ZN8S3537C103v41Ev
  S3537C10(); // tgen
};
//SIG(-1 S3537C10) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13 v14 v15} BC4{ VBC3 v16 v17 v18 FD[9]} VBC5{ BC3 v19} v20 FD} BC5 BC4 BC6{ v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S3537C10 ::~S3537C10(){ note_dtor("S3537C10", this);}
void  S3537C10 ::v34(){vfunc_called(this, "_ZN8S3537C103v34Ev");}
void  S3537C10 ::v35(){vfunc_called(this, "_ZN8S3537C103v35Ev");}
void  S3537C10 ::v36(){vfunc_called(this, "_ZN8S3537C103v36Ev");}
void  S3537C10 ::v37(){vfunc_called(this, "_ZN8S3537C103v37Ev");}
void  S3537C10 ::v38(){vfunc_called(this, "_ZN8S3537C103v38Ev");}
void  S3537C10 ::v39(){vfunc_called(this, "_ZN8S3537C103v39Ev");}
void  S3537C10 ::v40(){vfunc_called(this, "_ZN8S3537C103v40Ev");}
void  S3537C10 ::v41(){vfunc_called(this, "_ZN8S3537C103v41Ev");}
S3537C10 ::S3537C10(){ note_ctor("S3537C10", this);} // tgen

static void Test_S3537C10()
{
  extern Class_Descriptor cd_S3537C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S3537C10, buf);
    S3537C10 *dp, &lv = *(dp=new (buf) S3537C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S3537C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C10)");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C7*), ABISELECT(192,120), "S3537C10");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C7*), ABISELECT(192,120), "S3537C10");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*), ABISELECT(192,120), "S3537C10");
    check_base_class_offset(lv, (S3537C3*)(S3537C7*), ABISELECT(192,120), "S3537C10");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(368,244), "S3537C10");
    check_base_class_offset(lv, (S3537C8*)(S3537C7*), ABISELECT(368,244), "S3537C10");
    check_base_class_offset(lv, (S3537C7*), ABISELECT(192,120), "S3537C10");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), 0, "S3537C10");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C8*), 0, "S3537C10");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*), ABISELECT(16,4), "S3537C10");
    check_base_class_offset(lv, (S3537C11_nt*), ABISELECT(176,116), "S3537C10");
    test_class_info(&lv, &cd_S3537C10);
    dp->~S3537C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C10(Test_S3537C10, "S3537C10", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN8S3537C10C1Ev();
extern void _ZN8S3537C10D2Ev();
Name_Map name_map_S3537C10[] = {
  NSPAIR(_ZN8S3537C10C1Ev),
  NSPAIR(_ZN8S3537C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C7;
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
static Base_Class bases_S3537C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C4_nt,    ABISELECT(192,120), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(368,244), //bcp->offset
    74, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3537C7,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3537C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C3,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C11_nt,    ABISELECT(176,116), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3537C10[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C10D1Ev();
extern void _ZN8S3537C10D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY vtc_S3537C10[] = {
  ABISELECT(368,244),
  ABISELECT(192,120),
  ABISELECT(192,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern VTBL_ENTRY _ZTV8S3537C10[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__A1__8S3537C10[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C3__A1__8S3537C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C10[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C7__8S3537C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C7__8S3537C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
static  VTT_ENTRY vtt_S3537C10[] = {
  {&(_ZTV8S3537C10[5]),  5,92},
  {&(_tg__ZTV7S3537C3__A1__8S3537C10[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C3__A1__8S3537C10[9]),  9,16},
  {&(_ZTV8S3537C10[63]),  63,92},
  {&(_ZTV8S3537C10[63]),  63,92},
  {&(_ZTV8S3537C10[84]),  84,92},
  {&(_ZTV8S3537C10[33]),  33,92},
  {&(_tg__ZTV7S3537C7__8S3537C10[11]),  11,22},
  {&(_tg__ZTV7S3537C37S3537C7__8S3537C10[10]),  10,20},
  {&(_tg__ZTV7S3537C37S3537C7__8S3537C10[10]),  10,20},
  {&(_tg__ZTV7S3537C7__8S3537C10[11]),  11,22},
  {&(_tg__ZTV7S3537C8__7S3537C7__8S3537C10[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S3537C10[];
extern  VTBL_ENTRY _ZTV8S3537C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C10[];
Class_Descriptor cd_S3537C10 = {  "S3537C10", // class name
  bases_S3537C10, 9,
  &(vtc_S3537C10[0]), // expected_vtbl_contents
  &(vtt_S3537C10[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI8S3537C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3537C10),92, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3537C10),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C9  : virtual S3537C5 , virtual S3537C10 {
  char s3537c9f0;
  virtual  ~S3537C9(); // _ZN7S3537C9D2Ev
  virtual void  v42(); // _ZN7S3537C93v42Ev
  virtual void  v43(); // _ZN7S3537C93v43Ev
  virtual void  v44(); // _ZN7S3537C93v44Ev
  virtual void  v45(); // _ZN7S3537C93v45Ev
  virtual void  v46(); // _ZN7S3537C93v46Ev
  virtual void  v47(); // _ZN7S3537C93v47Ev
  virtual void  v48(); // _ZN7S3537C93v48Ev
  virtual void  v49(); // _ZN7S3537C93v49Ev
  virtual void  v50(); // _ZN7S3537C93v50Ev
  virtual void  v51(); // _ZN7S3537C93v51Ev
  S3537C9(); // tgen
};
//SIG(-1 S3537C9) C1{ VBC2{ VBC3{ v11 v12 v13 Fi} VBC4{ VBC5{ v14 v15 v16 v17 v18 v19 v20} BC6{ VBC5 v21 v22 v23 FD[9]} VBC7{ BC5 v24} v25 FD} BC6 BC5 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi} VBC8{ VBC4 BC7 BC6 BC9{ v34 v35 v36} vd v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc}


 S3537C9 ::~S3537C9(){ note_dtor("S3537C9", this);}
void  S3537C9 ::v42(){vfunc_called(this, "_ZN7S3537C93v42Ev");}
void  S3537C9 ::v43(){vfunc_called(this, "_ZN7S3537C93v43Ev");}
void  S3537C9 ::v44(){vfunc_called(this, "_ZN7S3537C93v44Ev");}
void  S3537C9 ::v45(){vfunc_called(this, "_ZN7S3537C93v45Ev");}
void  S3537C9 ::v46(){vfunc_called(this, "_ZN7S3537C93v46Ev");}
void  S3537C9 ::v47(){vfunc_called(this, "_ZN7S3537C93v47Ev");}
void  S3537C9 ::v48(){vfunc_called(this, "_ZN7S3537C93v48Ev");}
void  S3537C9 ::v49(){vfunc_called(this, "_ZN7S3537C93v49Ev");}
void  S3537C9 ::v50(){vfunc_called(this, "_ZN7S3537C93v50Ev");}
void  S3537C9 ::v51(){vfunc_called(this, "_ZN7S3537C93v51Ev");}
S3537C9 ::S3537C9(){ note_ctor("S3537C9", this);} // tgen

static void Test_S3537C9()
{
  extern Class_Descriptor cd_S3537C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,97)];
    init_test(&cd_S3537C9, buf);
    S3537C9 *dp, &lv = *(dp=new (buf) S3537C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,384), "sizeof(S3537C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C9)");
    check_base_class_offset(lv, (S3537C6*)(S3537C5*), ABISELECT(200,132), "S3537C9");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C7*), ABISELECT(224,140), "S3537C9");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C7*), ABISELECT(224,140), "S3537C9");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C5*), ABISELECT(224,140), "S3537C9");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C10*), ABISELECT(224,140), "S3537C9");
    check_base_class_offset(lv, (S3537C3*)(S3537C7*), ABISELECT(224,140), "S3537C9");
    /*is_ambiguous_... S3537C9::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), 0, "S3537C9");
    check_base_class_offset(lv, (S3537C8*)(S3537C7*), 0, "S3537C9");
    check_base_class_offset(lv, (S3537C7*)(S3537C5*), ABISELECT(224,140), "S3537C9");
    check_base_class_offset(lv, (S3537C7*)(S3537C10*), ABISELECT(224,140), "S3537C9");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C5*), ABISELECT(16,8), "S3537C9");
    /*is_ambiguous_... S3537C5::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C5*), ABISELECT(176,120), "S3537C9");
    check_base_class_offset(lv, (S3537C5*), ABISELECT(16,8), "S3537C9");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*)(S3537C10*), ABISELECT(400,264), "S3537C9");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C8*)(S3537C10*), ABISELECT(400,264), "S3537C9");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C10*), ABISELECT(416,268), "S3537C9");
    check_base_class_offset(lv, (S3537C11_nt*)(S3537C10*), ABISELECT(576,380), "S3537C9");
    check_base_class_offset(lv, (S3537C10*), ABISELECT(400,264), "S3537C9");
    check_field_offset(lv, s3537c9f0, ABISELECT(8,4), "S3537C9.s3537c9f0");
    test_class_info(&lv, &cd_S3537C9);
    dp->~S3537C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C9(Test_S3537C9, "S3537C9", ABISELECT(592,384));

#else // __cplusplus

extern void _ZN7S3537C9C1Ev();
extern void _ZN7S3537C9D2Ev();
Name_Map name_map_S3537C9[] = {
  NSPAIR(_ZN7S3537C9C1Ev),
  NSPAIR(_ZN7S3537C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C7;
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C5;
extern VTBL_ENTRY _ZTI7S3537C5[];
extern  VTBL_ENTRY _ZTV7S3537C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C5[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C10;
extern VTBL_ENTRY _ZTI8S3537C10[];
extern  VTBL_ENTRY _ZTV8S3537C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C10[];
static Base_Class bases_S3537C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C6,    ABISELECT(200,132), //bcp->offset
    87, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3537C4_nt,    ABISELECT(224,140), //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
    2, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    5, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3537C8,    0, //bcp->offset
    -1, //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
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3537C7,    ABISELECT(224,140), //bcp->offset
    95, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(176,120), //bcp->offset
    78, //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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3537C5,    ABISELECT(16,8), //bcp->offset
    36, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C4_nt,    ABISELECT(400,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(400,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3537C3,    ABISELECT(416,268), //bcp->offset
    167, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(576,380), //bcp->offset
    187, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3537C10,    ABISELECT(400,264), //bcp->offset
    121, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3537C9[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN7S3537C9D1Ev();
extern void _ZN7S3537C9D0Ev();
extern void _ZN7S3537C93v42Ev();
extern void _ZN7S3537C93v43Ev();
extern void _ZN7S3537C93v44Ev();
extern void _ZN7S3537C93v45Ev();
extern void _ZN7S3537C93v46Ev();
extern void _ZN7S3537C93v47Ev();
extern void _ZN7S3537C93v48Ev();
extern void _ZN7S3537C93v49Ev();
extern void _ZN7S3537C93v50Ev();
extern void _ZN7S3537C93v51Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev)();
extern void ABISELECT(_ZThn400_N7S3537C9D1Ev,_ZThn264_N7S3537C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev)();
extern void ABISELECT(_ZThn400_N7S3537C9D0Ev,_ZThn264_N7S3537C9D0Ev)() __attribute__((weak));
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY vtc_S3537C9[] = {
  ABISELECT(400,264),
  0,
  ABISELECT(224,140),
  ABISELECT(224,140),
  ABISELECT(200,132),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3537C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3537C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v44Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v45Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v46Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v47Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v48Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v49Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v50Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v51Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  0,
  0,
  0,
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-140),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-264),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-264),
  ABISELECT(-176,-124),
  ABISELECT(-176,-124),
  ABISELECT(-400,-264),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-416,-268),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  ABISELECT(-576,-380),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern VTBL_ENTRY _ZTV7S3537C9[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__7S3537C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C5__A1__7S3537C9[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A1__7S3537C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C5__7S3537C9[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C5__7S3537C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-140),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C5__7S3537C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C9[] = {
  ABISELECT(-224,-140),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C7__7S3537C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C7__7S3537C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,140),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C10D1Ev();
extern void _ZN8S3537C10D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C10__7S3537C9[] = {
  ABISELECT(-400,-264),
  ABISELECT(-176,-124),
  ABISELECT(-176,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A2__7S3537C9[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A2__7S3537C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C10__7S3537C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-140),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C10__7S3537C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(400,264),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__A1__8S3537C10__7S3537C9[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
static  VTT_ENTRY vtt_S3537C9[] = {
  {&(_ZTV7S3537C9[16]),  16,192},
  {&(_ZTV7S3537C9[60]),  60,192},
  {&(_ZTV7S3537C9[92]),  92,192},
  {&(_ZTV7S3537C9[110]),  110,192},
  {&(_ZTV7S3537C9[110]),  110,192},
  {&(_ZTV7S3537C9[16]),  16,192},
  {&(_ZTV7S3537C9[80]),  80,192},
  {&(_ZTV7S3537C9[149]),  149,192},
  {&(_ZTV7S3537C9[177]),  177,192},
  {&(_ZTV7S3537C9[189]),  189,192},
  {&(_tg__ZTV7S3537C5__7S3537C9[13]),  13,31},
  {&(_tg__ZTV7S3537C37S3537C5__A1__7S3537C9[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A1__7S3537C9[9]),  9,16},
  {&(_tg__ZTV7S3537C6__7S3537C5__7S3537C9[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C5__7S3537C9[15]),  15,26},
  {&(_tg__ZTV7S3537C7__7S3537C5__7S3537C9[15]),  15,26},
  {&(_tg__ZTV7S3537C8__7S3537C5__7S3537C9[10]),  10,18},
  {&(_tg__ZTV7S3537C7__7S3537C9[11]),  11,22},
  {&(_tg__ZTV7S3537C37S3537C7__7S3537C9[10]),  10,20},
  {&(_tg__ZTV7S3537C37S3537C7__7S3537C9[10]),  10,20},
  {&(_tg__ZTV7S3537C7__7S3537C9[11]),  11,22},
  {&(_tg__ZTV7S3537C8__7S3537C7__7S3537C9[10]),  10,18},
  {&(_tg__ZTV8S3537C10__7S3537C9[5]),  5,23},
  {&(_tg__ZTV7S3537C38S3537C10__A2__7S3537C9[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A2__7S3537C9[9]),  9,16},
  {&(_tg__ZTV7S3537C7__8S3537C10__7S3537C9[15]),  15,26},
  {&(_tg__ZTV7S3537C7__8S3537C10__7S3537C9[15]),  15,26},
  {&(_tg__ZTV7S3537C8__8S3537C10__7S3537C9[10]),  10,18},
  {&(_tg__ZTV7S3537C3__A1__8S3537C10__7S3537C9[10]),  10,20},
};
extern VTBL_ENTRY _ZTI7S3537C9[];
extern  VTBL_ENTRY _ZTV7S3537C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C9[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3537C9D0Ev,_ZThn264_N7S3537C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3537C9D1Ev,_ZThn264_N7S3537C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3537C9 = {  "S3537C9", // class name
  bases_S3537C9, 14,
  &(vtc_S3537C9[0]), // expected_vtbl_contents
  &(vtt_S3537C9[0]), // expected_vtt_contents
  ABISELECT(592,384), // object size
  NSPAIRA(_ZTI7S3537C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3537C9),192, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3537C9),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C2  : S3537C3 , virtual S3537C5 , S3537C9 , S3537C6 , S3537C8 {
  ::S3537C11_nt s3537c2f0;
  virtual void  v52(); // _ZN7S3537C23v52Ev
  virtual void  v53(); // _ZN7S3537C23v53Ev
  virtual void  v54(); // _ZN7S3537C23v54Ev
  virtual void  v55(); // _ZN7S3537C23v55Ev
  ~S3537C2(); // tgen
  S3537C2(); // tgen
};
//SIG(-1 S3537C2) C1{ BC2{ VBC3{ v5 v6 v7 v8 v9 v10 v11} v12 v13 v14 FD[9]} VBC4{ VBC5{ v15 v16 v17 Fi} VBC6{ VBC3 BC2 VBC7{ BC3 v18} v19 FD} BC2 BC3 v20 v21 v22 v23 v24 v25 v26 v27 Fp Fi} BC8{ VBC4 VBC9{ VBC6 BC7 BC2 BC10{ v28 v29 v30} vd v31 v32 v33 v34 v35 v36 v37 v38} vd v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 Fc} BC5 BC7 v1 v2 v3 v4 FC10}


void  S3537C2 ::v52(){vfunc_called(this, "_ZN7S3537C23v52Ev");}
void  S3537C2 ::v53(){vfunc_called(this, "_ZN7S3537C23v53Ev");}
void  S3537C2 ::v54(){vfunc_called(this, "_ZN7S3537C23v54Ev");}
void  S3537C2 ::v55(){vfunc_called(this, "_ZN7S3537C23v55Ev");}
S3537C2 ::~S3537C2(){ note_dtor("S3537C2", this);} // tgen
S3537C2 ::S3537C2(){ note_ctor("S3537C2", this);} // tgen

static void Test_S3537C2()
{
  extern Class_Descriptor cd_S3537C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,129)];
    init_test(&cd_S3537C2, buf);
    S3537C2 *dp, &lv = *(dp=new (buf) S3537C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,512), "sizeof(S3537C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C2)");
    /*is_ambiguous_... S3537C2::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*), 0, "S3537C2");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C7*), 0, "S3537C2");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C7*), 0, "S3537C2");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C5*), 0, "S3537C2");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C10*), 0, "S3537C2");
    /*is_ambiguous_... S3537C2::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*), 0, "S3537C2");
    check_base_class_offset(lv, (S3537C6*)(S3537C5*), ABISELECT(392,260), "S3537C2");
    check_base_class_offset(lv, (S3537C3*)(S3537C7*), ABISELECT(416,268), "S3537C2");
    /*is_ambiguous_... S3537C2::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(160,112), "S3537C2");
    check_base_class_offset(lv, (S3537C8*)(S3537C7*), ABISELECT(160,112), "S3537C2");
    check_base_class_offset(lv, (S3537C7*)(S3537C5*), ABISELECT(416,268), "S3537C2");
    check_base_class_offset(lv, (S3537C7*)(S3537C10*), ABISELECT(416,268), "S3537C2");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C5*), ABISELECT(208,136), "S3537C2");
    /*is_ambiguous_... S3537C5::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C5*), ABISELECT(368,248), "S3537C2");
    check_base_class_offset(lv, (S3537C5*), ABISELECT(208,136), "S3537C2");
    check_base_class_offset(lv, (S3537C5*)(S3537C9*), ABISELECT(208,136), "S3537C2");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*)(S3537C10*), ABISELECT(592,392), "S3537C2");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C8*)(S3537C10*), ABISELECT(592,392), "S3537C2");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C10*), ABISELECT(608,396), "S3537C2");
    check_base_class_offset(lv, (S3537C11_nt*)(S3537C10*), ABISELECT(768,508), "S3537C2");
    check_base_class_offset(lv, (S3537C10*)(S3537C9*), ABISELECT(592,392), "S3537C2");
    check_base_class_offset(lv, (S3537C9*), ABISELECT(160,112), "S3537C2");
    /*is_ambiguous_... S3537C2::S3537C6 */ AMB_check_base_class_offset(lv, (S3537C6*), ABISELECT(176,120), "S3537C2");
    /*is_ambiguous_... S3537C2::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(192,128), "S3537C2");
    /*is_ambiguous_... S3537C2::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C8*), ABISELECT(192,128), "S3537C2");
    check_field_offset(lv, s3537c2f0, ABISELECT(200,132), "S3537C2.s3537c2f0");
    test_class_info(&lv, &cd_S3537C2);
    dp->~S3537C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C2(Test_S3537C2, "S3537C2", ABISELECT(784,512));

#else // __cplusplus

extern void _ZN7S3537C2C1Ev();
extern void _ZN7S3537C2D1Ev();
Name_Map name_map_S3537C2[] = {
  NSPAIR(_ZN7S3537C2C1Ev),
  NSPAIR(_ZN7S3537C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C7;
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C5;
extern VTBL_ENTRY _ZTI7S3537C5[];
extern  VTBL_ENTRY _ZTV7S3537C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C5[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C10;
extern VTBL_ENTRY _ZTI8S3537C10[];
extern  VTBL_ENTRY _ZTV8S3537C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C10[];
extern Class_Descriptor cd_S3537C9;
extern VTBL_ENTRY _ZTI7S3537C9[];
extern  VTBL_ENTRY _ZTV7S3537C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C9[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
static Base_Class bases_S3537C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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_S3537C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C6,    ABISELECT(392,260), //bcp->offset
    133, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(416,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3537C7,    ABISELECT(416,268), //bcp->offset
    141, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(368,248), //bcp->offset
    124, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C5,    ABISELECT(208,136), //bcp->offset
    82, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C4_nt,    ABISELECT(592,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(592,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3537C3,    ABISELECT(608,396), //bcp->offset
    213, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(768,508), //bcp->offset
    233, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3537C10,    ABISELECT(592,392), //bcp->offset
    167, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3537C9,    ABISELECT(160,112), //bcp->offset
    31, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C6,    ABISELECT(176,120), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C4_nt,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(192,128), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3537C2[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C23v52Ev();
extern void _ZN7S3537C23v53Ev();
extern void _ZN7S3537C23v54Ev();
extern void _ZN7S3537C23v55Ev();
extern void _ZN7S3537C2D1Ev();
extern void _ZN7S3537C2D0Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZThn160_N7S3537C2D1Ev,_ZThn112_N7S3537C2D1Ev)();
extern void ABISELECT(_ZThn160_N7S3537C2D0Ev,_ZThn112_N7S3537C2D0Ev)();
extern void _ZN7S3537C93v42Ev();
extern void _ZN7S3537C93v43Ev();
extern void _ZN7S3537C93v44Ev();
extern void _ZN7S3537C93v45Ev();
extern void _ZN7S3537C93v46Ev();
extern void _ZN7S3537C93v47Ev();
extern void _ZN7S3537C93v48Ev();
extern void _ZN7S3537C93v49Ev();
extern void _ZN7S3537C93v50Ev();
extern void _ZN7S3537C93v51Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZTv0_n112_N7S3537C2D1Ev,_ZTv0_n56_N7S3537C2D1Ev)();
extern void ABISELECT(_ZThn592_N7S3537C2D1Ev,_ZThn392_N7S3537C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S3537C2D0Ev,_ZTv0_n56_N7S3537C2D0Ev)();
extern void ABISELECT(_ZThn592_N7S3537C2D0Ev,_ZThn392_N7S3537C2D0Ev)() __attribute__((weak));
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY vtc_S3537C2[] = {
  ABISELECT(592,392),
  ABISELECT(160,112),
  ABISELECT(416,268),
  ABISELECT(392,260),
  ABISELECT(208,136),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3537C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3537C2D0Ev,
  ABISELECT(432,280),
  0,
  ABISELECT(-160,-112),
  ABISELECT(256,156),
  ABISELECT(232,148),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S3537C2D1Ev,_ZThn112_N7S3537C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S3537C2D0Ev,_ZThn112_N7S3537C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3537C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v44Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v45Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v46Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v47Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v48Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v49Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v50Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v51Ev,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
  ABISELECT(-368,-248),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  0,
  0,
  0,
  ABISELECT(-392,-260),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-592,-392),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-280),
  ABISELECT(-592,-392),
  ABISELECT(-176,-124),
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C2D1Ev,_ZTv0_n56_N7S3537C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C2D0Ev,_ZTv0_n56_N7S3537C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  ABISELECT(-768,-508),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern VTBL_ENTRY _ZTV7S3537C2[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN7S3537C9D1Ev();
extern void _ZN7S3537C9D0Ev();
extern void _ZN7S3537C93v42Ev();
extern void _ZN7S3537C93v43Ev();
extern void _ZN7S3537C93v44Ev();
extern void _ZN7S3537C93v45Ev();
extern void _ZN7S3537C93v46Ev();
extern void _ZN7S3537C93v47Ev();
extern void _ZN7S3537C93v48Ev();
extern void _ZN7S3537C93v49Ev();
extern void _ZN7S3537C93v50Ev();
extern void _ZN7S3537C93v51Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C9__7S3537C2[] = {
  ABISELECT(432,280),
  0,
  ABISELECT(-160,-112),
  ABISELECT(256,156),
  ABISELECT(232,148),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3537C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3537C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v44Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v45Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v46Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v47Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v48Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v49Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v50Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v51Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__7S3537C9__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C9__7S3537C2[] = {
  0,
  0,
  0,
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C9__7S3537C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C9__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(160,112),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt7S3537C5__A2__7S3537C9__7S3537C2[] = {
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev)();
extern void ABISELECT(_ZThn432_N7S3537C9D1Ev,_ZThn280_N7S3537C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev)();
extern void ABISELECT(_ZThn432_N7S3537C9D0Ev,_ZThn280_N7S3537C9D0Ev)() __attribute__((weak));
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C10__7S3537C9__7S3537C2[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-280),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-280),
  ABISELECT(-592,-392),
  ABISELECT(-176,-124),
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A2__7S3537C9__7S3537C2[] = {
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-448,-284),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt8S3537C10__7S3537C9__7S3537C2[] = {
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__7S3537C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C5__A2__7S3537C2[] = {
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A2__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,136),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C5__7S3537C2[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C5__7S3537C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C5__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,136),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C5__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C2[] = {
  ABISELECT(-256,-156),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C7__A1__7S3537C2[] = {
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C37S3537C7__A1__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(416,268),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C7__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(416,268),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C7__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(256,156),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C10D1Ev();
extern void _ZN8S3537C10D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C10__7S3537C2[] = {
  ABISELECT(-432,-280),
  ABISELECT(-592,-392),
  ABISELECT(-176,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A3__7S3537C2[] = {
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A3__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(608,396),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C10__7S3537C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(-416,-268),
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__8S3537C10__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(592,392),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C10__7S3537C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(432,280),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__A1__8S3537C10__7S3537C2[] = {
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
static  VTT_ENTRY vtt_S3537C2[] = {
  {&(_ZTV7S3537C2[15]),  15,238},
  {&(_tg__ZTV7S3537C3__7S3537C2[10]),  10,20},
  {&(_tg__ZTV7S3537C3__7S3537C2[10]),  10,20},
  {&(_tg__ZTV7S3537C9__7S3537C2[16]),  16,36},
  {&(_tg__ZTV7S3537C5__7S3537C9__7S3537C2[24]),  24,42},
  {&(_tg__ZTV7S3537C6__7S3537C9__7S3537C2[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C9__7S3537C2[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__7S3537C9__7S3537C2[9]),  9,16},
  {&(_tg__ZTV7S3537C9__7S3537C2[16]),  16,36},
  {&(_tg__ZTV10S3537C4_nt7S3537C5__A2__7S3537C9__7S3537C2[2]),  2,9},
  {&(_tg__ZTV8S3537C10__7S3537C9__7S3537C2[28]),  28,46},
  {&(_tg__ZTV7S3537C38S3537C10__A2__7S3537C9__7S3537C2[10]),  10,20},
  {&(_tg__ZTV11S3537C11_nt8S3537C10__7S3537C9__7S3537C2[2]),  2,5},
  {&(_ZTV7S3537C2[15]),  15,238},
  {&(_ZTV7S3537C2[106]),  106,238},
  {&(_ZTV7S3537C2[138]),  138,238},
  {&(_ZTV7S3537C2[156]),  156,238},
  {&(_ZTV7S3537C2[47]),  47,238},
  {&(_ZTV7S3537C2[126]),  126,238},
  {&(_ZTV7S3537C2[47]),  47,238},
  {&(_ZTV7S3537C2[195]),  195,238},
  {&(_ZTV7S3537C2[223]),  223,238},
  {&(_ZTV7S3537C2[235]),  235,238},
  {&(_tg__ZTV7S3537C5__7S3537C2[13]),  13,31},
  {&(_tg__ZTV7S3537C37S3537C5__A2__7S3537C2[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A2__7S3537C2[9]),  9,16},
  {&(_tg__ZTV7S3537C6__7S3537C5__7S3537C2[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C5__7S3537C2[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__7S3537C5__7S3537C2[9]),  9,16},
  {&(_tg__ZTV7S3537C8__7S3537C5__7S3537C2[10]),  10,18},
  {&(_tg__ZTV7S3537C7__7S3537C2[11]),  11,22},
  {&(_tg__ZTV7S3537C37S3537C7__A1__7S3537C2[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C37S3537C7__A1__7S3537C2[9]),  9,16},
  {&(_tg__ZTV10S3537C4_nt__7S3537C7__7S3537C2[9]),  9,16},
  {&(_tg__ZTV7S3537C8__7S3537C7__7S3537C2[10]),  10,18},
  {&(_tg__ZTV8S3537C10__7S3537C2[5]),  5,23},
  {&(_tg__ZTV7S3537C38S3537C10__A3__7S3537C2[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A3__7S3537C2[9]),  9,16},
  {&(_tg__ZTV7S3537C7__8S3537C10__7S3537C2[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__8S3537C10__7S3537C2[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C10__7S3537C2[10]),  10,18},
  {&(_tg__ZTV7S3537C3__A1__8S3537C10__7S3537C2[10]),  10,20},
};
extern VTBL_ENTRY _ZTI7S3537C2[];
extern  VTBL_ENTRY _ZTV7S3537C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C2[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3537C9D0Ev,_ZThn280_N7S3537C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3537C9D1Ev,_ZThn280_N7S3537C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C2D0Ev,_ZTv0_n56_N7S3537C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S3537C2D0Ev,_ZThn392_N7S3537C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C2D1Ev,_ZTv0_n56_N7S3537C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S3537C2D1Ev,_ZThn392_N7S3537C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3537C2 = {  "S3537C2", // class name
  bases_S3537C2, 19,
  &(vtc_S3537C2[0]), // expected_vtbl_contents
  &(vtt_S3537C2[0]), // expected_vtt_contents
  ABISELECT(784,512), // object size
  NSPAIRA(_ZTI7S3537C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3537C2),238, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3537C2),42, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C12  {
  virtual void  v56(); // _ZN8S3537C123v56Ev
  virtual void  v57(); // _ZN8S3537C123v57Ev
  virtual void  v58(); // _ZN8S3537C123v58Ev
  ~S3537C12(); // tgen
  S3537C12(); // tgen
};
//SIG(-1 S3537C12) C1{ v1 v2 v3}


void  S3537C12 ::v56(){vfunc_called(this, "_ZN8S3537C123v56Ev");}
void  S3537C12 ::v57(){vfunc_called(this, "_ZN8S3537C123v57Ev");}
void  S3537C12 ::v58(){vfunc_called(this, "_ZN8S3537C123v58Ev");}
S3537C12 ::~S3537C12(){ note_dtor("S3537C12", this);} // tgen
S3537C12 ::S3537C12(){ note_ctor("S3537C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3537C12C1Ev();
extern void _ZN8S3537C12D1Ev();
Name_Map name_map_S3537C12[] = {
  NSPAIR(_ZN8S3537C12C1Ev),
  NSPAIR(_ZN8S3537C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3537C12[];
extern void _ZN8S3537C123v56Ev();
extern void _ZN8S3537C123v57Ev();
extern void _ZN8S3537C123v58Ev();
static  VTBL_ENTRY vtc_S3537C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C12[0]),
  (VTBL_ENTRY)&_ZN8S3537C123v56Ev,
  (VTBL_ENTRY)&_ZN8S3537C123v57Ev,
  (VTBL_ENTRY)&_ZN8S3537C123v58Ev,
};
extern VTBL_ENTRY _ZTI8S3537C12[];
extern  VTBL_ENTRY _ZTV8S3537C12[];
Class_Descriptor cd_S3537C12 = {  "S3537C12", // class name
  0,0,//no base classes
  &(vtc_S3537C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3537C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3537C12),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  S3537C16_nt  {
  virtual  ~S3537C16_nt(); // _ZN11S3537C16_ntD1Ev
  virtual void  v59(); // _ZN11S3537C16_nt3v59Ev
  virtual void  v60(); // _ZN11S3537C16_nt3v60Ev
  virtual void  v61(); // _ZN11S3537C16_nt3v61Ev
  virtual void  v62(); // _ZN11S3537C16_nt3v62Ev
  virtual void  v63(); // _ZN11S3537C16_nt3v63Ev
  S3537C16_nt(); // tgen
};
//SIG(-1 S3537C16_nt) C1{ vd v1 v2 v3 v4 v5}


 S3537C16_nt ::~S3537C16_nt(){ note_dtor("S3537C16_nt", this);}
void  S3537C16_nt ::v59(){vfunc_called(this, "_ZN11S3537C16_nt3v59Ev");}
void  S3537C16_nt ::v60(){vfunc_called(this, "_ZN11S3537C16_nt3v60Ev");}
void  S3537C16_nt ::v61(){vfunc_called(this, "_ZN11S3537C16_nt3v61Ev");}
void  S3537C16_nt ::v62(){vfunc_called(this, "_ZN11S3537C16_nt3v62Ev");}
void  S3537C16_nt ::v63(){vfunc_called(this, "_ZN11S3537C16_nt3v63Ev");}
S3537C16_nt ::S3537C16_nt(){ note_ctor("S3537C16_nt", this);} // tgen

//skip512 S3537C16_nt

#else // __cplusplus

extern void _ZN11S3537C16_ntC1Ev();
extern void _ZN11S3537C16_ntD1Ev();
Name_Map name_map_S3537C16_nt[] = {
  NSPAIR(_ZN11S3537C16_ntC1Ev),
  NSPAIR(_ZN11S3537C16_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3537C16_nt[];
extern void _ZN11S3537C16_ntD1Ev();
extern void _ZN11S3537C16_ntD0Ev();
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
static  VTBL_ENTRY vtc_S3537C16_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3537C16_nt[0]),
  (VTBL_ENTRY)&_ZN11S3537C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
};
extern VTBL_ENTRY _ZTI11S3537C16_nt[];
VTBL_ENTRY *P__ZTI11S3537C16_nt = _ZTI11S3537C16_nt; 
extern  VTBL_ENTRY _ZTV11S3537C16_nt[];
Class_Descriptor cd_S3537C16_nt = {  "S3537C16_nt", // class name
  0,0,//no base classes
  &(vtc_S3537C16_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3537C16_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3537C16_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C15  : virtual S3537C8 , virtual S3537C16_nt , S3537C3 , virtual S3537C11_nt {
  virtual  ~S3537C15(); // _ZN8S3537C15D2Ev
  virtual void  v64(); // _ZN8S3537C153v64Ev
  S3537C15(); // tgen
};
//SIG(-1 S3537C15) C1{ VBC2{ BC3{ v2 v3 v4 v5 v6 v7 v8} v9} VBC4{ vd v10 v11 v12 v13 v14} BC5{ VBC3 v15 v16 v17 FD[9]} VBC6{ v18 v19 v20} vd v1}


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

static void Test_S3537C15()
{
  extern Class_Descriptor cd_S3537C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S3537C15, buf);
    S3537C15 *dp, &lv = *(dp=new (buf) S3537C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S3537C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C15)");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(160,112), "S3537C15");
    check_base_class_offset(lv, (S3537C8*), ABISELECT(160,112), "S3537C15");
    check_base_class_offset(lv, (S3537C16_nt*), ABISELECT(168,116), "S3537C15");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*), 0, "S3537C15");
    check_base_class_offset(lv, (S3537C3*), 0, "S3537C15");
    check_base_class_offset(lv, (S3537C11_nt*), ABISELECT(176,120), "S3537C15");
    test_class_info(&lv, &cd_S3537C15);
    dp->~S3537C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C15(Test_S3537C15, "S3537C15", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN8S3537C15C1Ev();
extern void _ZN8S3537C15D2Ev();
Name_Map name_map_S3537C15[] = {
  NSPAIR(_ZN8S3537C15C1Ev),
  NSPAIR(_ZN8S3537C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C16_nt;
extern VTBL_ENTRY _ZTI11S3537C16_nt[];
extern  VTBL_ENTRY _ZTV11S3537C16_nt[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
static Base_Class bases_S3537C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C4_nt,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(160,112), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C16_nt,    ABISELECT(168,116), //bcp->offset
    44, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3537C3,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C11_nt,    ABISELECT(176,120), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3537C15[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN8S3537C15D1Ev();
extern void _ZN8S3537C15D0Ev();
extern void _ZN8S3537C153v64Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev)();
extern void ABISELECT(_ZThn168_N8S3537C15D1Ev,_ZThn116_N8S3537C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev)();
extern void ABISELECT(_ZThn168_N8S3537C15D0Ev,_ZThn116_N8S3537C15D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY vtc_S3537C15[] = {
  ABISELECT(176,120),
  ABISELECT(168,116),
  ABISELECT(160,112),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern VTBL_ENTRY _ZTV8S3537C15[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__8S3537C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
static  VTT_ENTRY vtt_S3537C15[] = {
  {&(_ZTV8S3537C15[13]),  13,67},
  {&(_tg__ZTV7S3537C3__8S3537C15[10]),  10,20},
  {&(_tg__ZTV7S3537C3__8S3537C15[10]),  10,20},
  {&(_ZTV8S3537C15[36]),  36,67},
  {&(_ZTV8S3537C15[52]),  52,67},
  {&(_ZTV8S3537C15[13]),  13,67},
  {&(_ZTV8S3537C15[64]),  64,67},
};
extern VTBL_ENTRY _ZTI8S3537C15[];
extern  VTBL_ENTRY _ZTV8S3537C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C15[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S3537C15D0Ev,_ZThn116_N8S3537C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S3537C15D1Ev,_ZThn116_N8S3537C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3537C15 = {  "S3537C15", // class name
  bases_S3537C15, 6,
  &(vtc_S3537C15[0]), // expected_vtbl_contents
  &(vtt_S3537C15[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI8S3537C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3537C15),67, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3537C15),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C14  : S3537C11_nt , virtual S3537C5 , virtual S3537C15 {
  ::S3537C15 s3537c14f0;
  int s3537c14f1;
  virtual void  v65(); // _ZN8S3537C143v65Ev
  virtual void  v66(); // _ZN8S3537C143v66Ev
  virtual void  v67(); // _ZN8S3537C143v67Ev
  virtual void  v68(); // _ZN8S3537C143v68Ev
  virtual void  v69(); // _ZN8S3537C143v69Ev
  virtual void  v70(); // _ZN8S3537C143v70Ev
  virtual void  v71(); // _ZN8S3537C143v71Ev
  ~S3537C14(); // tgen
  S3537C14(); // tgen
};
//SIG(-1 S3537C14) C1{ BC2{ v8 v9 v10} VBC3{ VBC4{ v11 v12 v13 Fi} VBC5{ VBC6{ v14 v15 v16 v17 v18 v19 v20} BC7{ VBC6 v21 v22 v23 FD[9]} VBC8{ BC6 v24} v25 FD} BC7 BC6 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi} VBC9{ VBC8 VBC10{ vd v34 v35 v36 v37 v38} BC7 VBC2 vd v39} v1 v2 v3 v4 v5 v6 v7 FC9 Fi}


void  S3537C14 ::v65(){vfunc_called(this, "_ZN8S3537C143v65Ev");}
void  S3537C14 ::v66(){vfunc_called(this, "_ZN8S3537C143v66Ev");}
void  S3537C14 ::v67(){vfunc_called(this, "_ZN8S3537C143v67Ev");}
void  S3537C14 ::v68(){vfunc_called(this, "_ZN8S3537C143v68Ev");}
void  S3537C14 ::v69(){vfunc_called(this, "_ZN8S3537C143v69Ev");}
void  S3537C14 ::v70(){vfunc_called(this, "_ZN8S3537C143v70Ev");}
void  S3537C14 ::v71(){vfunc_called(this, "_ZN8S3537C143v71Ev");}
S3537C14 ::~S3537C14(){ note_dtor("S3537C14", this);} // tgen
S3537C14 ::S3537C14(){ note_ctor("S3537C14", this);} // tgen

static void Test_S3537C14()
{
  extern Class_Descriptor cd_S3537C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,129)];
    init_test(&cd_S3537C14, buf);
    S3537C14 *dp, &lv = *(dp=new (buf) S3537C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,512), "sizeof(S3537C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C14)");
    /*is_ambiguous_... S3537C14::S3537C11_nt */ AMB_check_base_class_offset(lv, (S3537C11_nt*), 0, "S3537C14");
    check_base_class_offset(lv, (S3537C6*)(S3537C5*), ABISELECT(408,256), "S3537C14");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C7*), ABISELECT(432,264), "S3537C14");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C7*), ABISELECT(432,264), "S3537C14");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C5*), ABISELECT(432,264), "S3537C14");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C15*), ABISELECT(432,264), "S3537C14");
    check_base_class_offset(lv, (S3537C3*)(S3537C7*), ABISELECT(432,264), "S3537C14");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(608,388), "S3537C14");
    check_base_class_offset(lv, (S3537C8*)(S3537C7*), ABISELECT(608,388), "S3537C14");
    check_base_class_offset(lv, (S3537C8*)(S3537C15*), ABISELECT(608,388), "S3537C14");
    check_base_class_offset(lv, (S3537C7*)(S3537C5*), ABISELECT(432,264), "S3537C14");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C5*), ABISELECT(224,132), "S3537C14");
    /*is_ambiguous_... S3537C5::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C5*), ABISELECT(384,244), "S3537C14");
    check_base_class_offset(lv, (S3537C5*), ABISELECT(224,132), "S3537C14");
    check_base_class_offset(lv, (S3537C16_nt*)(S3537C15*), ABISELECT(784,504), "S3537C14");
    check_base_class_offset(lv, (S3537C3*)(S3537C15*), ABISELECT(624,392), "S3537C14");
    check_base_class_offset(lv, (S3537C11_nt*)(S3537C15*), ABISELECT(792,508), "S3537C14");
    check_base_class_offset(lv, (S3537C15*), ABISELECT(624,392), "S3537C14");
    check_field_offset(lv, s3537c14f0, ABISELECT(16,4), "S3537C14.s3537c14f0");
    check_field_offset(lv, s3537c14f1, ABISELECT(208,128), "S3537C14.s3537c14f1");
    test_class_info(&lv, &cd_S3537C14);
    dp->~S3537C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C14(Test_S3537C14, "S3537C14", ABISELECT(800,512));

#else // __cplusplus

extern void _ZN8S3537C14C1Ev();
extern void _ZN8S3537C14D1Ev();
Name_Map name_map_S3537C14[] = {
  NSPAIR(_ZN8S3537C14C1Ev),
  NSPAIR(_ZN8S3537C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C7;
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C5;
extern VTBL_ENTRY _ZTI7S3537C5[];
extern  VTBL_ENTRY _ZTV7S3537C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C5[];
extern Class_Descriptor cd_S3537C16_nt;
extern VTBL_ENTRY _ZTI11S3537C16_nt[];
extern  VTBL_ENTRY _ZTV11S3537C16_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C15;
extern VTBL_ENTRY _ZTI8S3537C15[];
extern  VTBL_ENTRY _ZTV8S3537C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C15[];
static Base_Class bases_S3537C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3537C6,    ABISELECT(408,256), //bcp->offset
    73, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C4_nt,    ABISELECT(432,264), //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_S3537C3,    ABISELECT(432,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S3537C4_nt,    ABISELECT(608,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(608,388), //bcp->offset
    107, //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
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3537C7,    ABISELECT(432,264), //bcp->offset
    81, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(384,244), //bcp->offset
    64, //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C5,    ABISELECT(224,132), //bcp->offset
    22, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C16_nt,    ABISELECT(784,504), //bcp->offset
    156, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(624,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(792,508), //bcp->offset
    171, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3537C15,    ABISELECT(624,392), //bcp->offset
    125, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3537C14[];
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C143v65Ev();
extern void _ZN8S3537C143v66Ev();
extern void _ZN8S3537C143v67Ev();
extern void _ZN8S3537C143v68Ev();
extern void _ZN8S3537C143v69Ev();
extern void _ZN8S3537C143v70Ev();
extern void _ZN8S3537C143v71Ev();
extern void _ZN8S3537C14D1Ev();
extern void _ZN8S3537C14D0Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev)();
extern void ABISELECT(_ZThn624_N8S3537C14D1Ev,_ZThn392_N8S3537C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev)();
extern void ABISELECT(_ZThn624_N8S3537C14D0Ev,_ZThn392_N8S3537C14D0Ev)() __attribute__((weak));
extern void _ZN8S3537C153v64Ev();
extern void ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev)();
extern void ABISELECT(_ZThn784_N8S3537C14D1Ev,_ZThn504_N8S3537C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev)();
extern void ABISELECT(_ZThn784_N8S3537C14D0Ev,_ZThn504_N8S3537C14D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY vtc_S3537C14[] = {
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v65Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v66Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v67Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v68Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v69Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v70Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v71Ev,
  (VTBL_ENTRY)&_ZN8S3537C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C14D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  0,
  0,
  0,
  ABISELECT(-408,-256),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-388),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  0,
  ABISELECT(-624,-392),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-624,-392),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-504),
  ABISELECT(-784,-504),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
  0,
  0,
  0,
  ABISELECT(-792,-508),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern VTBL_ENTRY _ZTV8S3537C14[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__8S3537C14[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C5__A1__8S3537C14[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A1__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C5__8S3537C14[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C5__8S3537C14[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C5__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C14[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C7__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C7__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN8S3537C15D1Ev();
extern void _ZN8S3537C15D0Ev();
extern void _ZN8S3537C153v64Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C15__8S3537C14[] = {
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C15__A2__8S3537C14[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C15__A2__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C15__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev)();
extern void ABISELECT(_ZThn160_N8S3537C15D1Ev,_ZThn112_N8S3537C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev)();
extern void ABISELECT(_ZThn160_N8S3537C15D0Ev,_ZThn112_N8S3537C15D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C16_nt__8S3537C15__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__A1__8S3537C15__8S3537C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt__8S3537C15__8S3537C14[] = {
  0,
  0,
  0,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
static  VTT_ENTRY vtt_S3537C14[] = {
  {&(_ZTV8S3537C14[10]),  10,179},
  {&(_ZTV8S3537C14[46]),  46,179},
  {&(_ZTV8S3537C14[78]),  78,179},
  {&(_ZTV8S3537C14[96]),  96,179},
  {&(_ZTV8S3537C14[96]),  96,179},
  {&(_ZTV8S3537C14[117]),  117,179},
  {&(_ZTV8S3537C14[66]),  66,179},
  {&(_ZTV8S3537C14[143]),  143,179},
  {&(_ZTV8S3537C14[164]),  164,179},
  {&(_ZTV8S3537C14[176]),  176,179},
  {&(_tg__ZTV7S3537C5__8S3537C14[13]),  13,31},
  {&(_tg__ZTV7S3537C37S3537C5__A1__8S3537C14[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A1__8S3537C14[9]),  9,16},
  {&(_tg__ZTV7S3537C6__7S3537C5__8S3537C14[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C5__8S3537C14[15]),  15,26},
  {&(_tg__ZTV7S3537C7__7S3537C5__8S3537C14[15]),  15,26},
  {&(_tg__ZTV7S3537C8__7S3537C5__8S3537C14[10]),  10,18},
  {&(_tg__ZTV7S3537C7__8S3537C14[11]),  11,22},
  {&(_tg__ZTV7S3537C37S3537C7__8S3537C14[10]),  10,20},
  {&(_tg__ZTV7S3537C37S3537C7__8S3537C14[10]),  10,20},
  {&(_tg__ZTV7S3537C7__8S3537C14[11]),  11,22},
  {&(_tg__ZTV7S3537C8__7S3537C7__8S3537C14[10]),  10,18},
  {&(_tg__ZTV8S3537C15__8S3537C14[13]),  13,26},
  {&(_tg__ZTV7S3537C38S3537C15__A2__8S3537C14[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C15__A2__8S3537C14[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C15__8S3537C14[10]),  10,18},
  {&(_tg__ZTV11S3537C16_nt__8S3537C15__8S3537C14[8]),  8,15},
  {&(_tg__ZTV10S3537C4_nt__A1__8S3537C15__8S3537C14[9]),  9,16},
  {&(_tg__ZTV11S3537C11_nt__8S3537C15__8S3537C14[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S3537C14[];
extern  VTBL_ENTRY _ZTV8S3537C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C14[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3537C15D0Ev,_ZThn112_N8S3537C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3537C15D1Ev,_ZThn112_N8S3537C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3537C14D0Ev,_ZThn504_N8S3537C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3537C14D1Ev,_ZThn504_N8S3537C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3537C14D0Ev,_ZThn392_N8S3537C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3537C14D1Ev,_ZThn392_N8S3537C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3537C14 = {  "S3537C14", // class name
  bases_S3537C14, 14,
  &(vtc_S3537C14[0]), // expected_vtbl_contents
  &(vtt_S3537C14[0]), // expected_vtt_contents
  ABISELECT(800,512), // object size
  NSPAIRA(_ZTI8S3537C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3537C14),179, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3537C14),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C17  {
  ::S3537C4_nt s3537c17f0;
  virtual void  v72(); // _ZN8S3537C173v72Ev
  ~S3537C17(); // tgen
  S3537C17(); // tgen
};
//SIG(-1 S3537C17) C1{ v1 FC2{ v2 v3 v4 v5 v6 v7 v8}}


void  S3537C17 ::v72(){vfunc_called(this, "_ZN8S3537C173v72Ev");}
S3537C17 ::~S3537C17(){ note_dtor("S3537C17", this);} // tgen
S3537C17 ::S3537C17(){ note_ctor("S3537C17", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3537C17C1Ev();
extern void _ZN8S3537C17D1Ev();
Name_Map name_map_S3537C17[] = {
  NSPAIR(_ZN8S3537C17C1Ev),
  NSPAIR(_ZN8S3537C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3537C17[];
extern void _ZN8S3537C173v72Ev();
static  VTBL_ENTRY vtc_S3537C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C17[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
};
extern VTBL_ENTRY _ZTI8S3537C17[];
extern  VTBL_ENTRY _ZTV8S3537C17[];
Class_Descriptor cd_S3537C17 = {  "S3537C17", // class name
  0,0,//no base classes
  &(vtc_S3537C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S3537C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3537C17),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C13  : virtual S3537C14 , virtual S3537C17 , S3537C10 {
  virtual void  v73(); // _ZN8S3537C133v73Ev
  virtual void  v74(); // _ZN8S3537C133v74Ev
  virtual void  v75(); // _ZN8S3537C133v75Ev
  ~S3537C13(); // tgen
  S3537C13(); // tgen
};
//SIG(-1 S3537C13) C1{ VBC2{ BC3{ v4 v5 v6} VBC4{ VBC5{ v7 v8 v9 Fi} VBC6{ VBC7{ v10 v11 v12 v13 v14 v15 v16} BC8{ VBC7 v17 v18 v19 FD[9]} VBC9{ BC7 v20} v21 FD} BC8 BC7 v22 v23 v24 v25 v26 v27 v28 v29 Fp Fi} VBC10{ VBC9 VBC11{ vd v30 v31 v32 v33 v34} BC8 VBC3 vd v35} v36 v37 v38 v39 v40 v41 v42 FC10 Fi} VBC12{ v43 FC7} BC13{ VBC6 BC9 BC8 BC3 vd v44 v45 v46 v47 v48 v49 v50 v51} v1 v2 v3}


void  S3537C13 ::v73(){vfunc_called(this, "_ZN8S3537C133v73Ev");}
void  S3537C13 ::v74(){vfunc_called(this, "_ZN8S3537C133v74Ev");}
void  S3537C13 ::v75(){vfunc_called(this, "_ZN8S3537C133v75Ev");}
S3537C13 ::~S3537C13(){ note_dtor("S3537C13", this);} // tgen
S3537C13 ::S3537C13(){ note_ctor("S3537C13", this);} // tgen

static void Test_S3537C13()
{
  extern Class_Descriptor cd_S3537C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(64,161)];
    init_test(&cd_S3537C13, buf);
    S3537C13 *dp, &lv = *(dp=new (buf) S3537C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1008,640), "sizeof(S3537C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C13)");
    /*is_ambiguous_... S3537C14::S3537C11_nt */ AMB_check_base_class_offset(lv, (S3537C11_nt*)(S3537C14*), ABISELECT(192,120), "S3537C13");
    check_base_class_offset(lv, (S3537C6*)(S3537C5*), ABISELECT(600,376), "S3537C13");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C7*), ABISELECT(624,384), "S3537C13");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C7*), ABISELECT(624,384), "S3537C13");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C5*), ABISELECT(624,384), "S3537C13");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C15*), ABISELECT(624,384), "S3537C13");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C10*), ABISELECT(624,384), "S3537C13");
    check_base_class_offset(lv, (S3537C3*)(S3537C7*), ABISELECT(624,384), "S3537C13");
    /*is_ambiguous_... S3537C13::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(800,508), "S3537C13");
    check_base_class_offset(lv, (S3537C8*)(S3537C7*), ABISELECT(800,508), "S3537C13");
    check_base_class_offset(lv, (S3537C8*)(S3537C15*), ABISELECT(800,508), "S3537C13");
    check_base_class_offset(lv, (S3537C7*)(S3537C5*), ABISELECT(624,384), "S3537C13");
    check_base_class_offset(lv, (S3537C7*)(S3537C10*), ABISELECT(624,384), "S3537C13");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C5*), ABISELECT(416,252), "S3537C13");
    /*is_ambiguous_... S3537C5::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C5*), ABISELECT(576,364), "S3537C13");
    check_base_class_offset(lv, (S3537C5*)(S3537C14*), ABISELECT(416,252), "S3537C13");
    check_base_class_offset(lv, (S3537C16_nt*)(S3537C15*), ABISELECT(976,624), "S3537C13");
    check_base_class_offset(lv, (S3537C3*)(S3537C15*), ABISELECT(816,512), "S3537C13");
    check_base_class_offset(lv, (S3537C11_nt*)(S3537C15*), ABISELECT(984,628), "S3537C13");
    check_base_class_offset(lv, (S3537C15*)(S3537C14*), ABISELECT(816,512), "S3537C13");
    check_base_class_offset(lv, (S3537C14*), ABISELECT(192,120), "S3537C13");
    check_base_class_offset(lv, (S3537C17*), ABISELECT(992,632), "S3537C13");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*)(S3537C10*), 0, "S3537C13");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C8*)(S3537C10*), 0, "S3537C13");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C10*), ABISELECT(16,4), "S3537C13");
    check_base_class_offset(lv, (S3537C11_nt*)(S3537C10*), ABISELECT(176,116), "S3537C13");
    check_base_class_offset(lv, (S3537C10*), 0, "S3537C13");
    test_class_info(&lv, &cd_S3537C13);
    dp->~S3537C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C13(Test_S3537C13, "S3537C13", ABISELECT(1008,640));

#else // __cplusplus

extern void _ZN8S3537C13C1Ev();
extern void _ZN8S3537C13D1Ev();
Name_Map name_map_S3537C13[] = {
  NSPAIR(_ZN8S3537C13C1Ev),
  NSPAIR(_ZN8S3537C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C7;
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C5;
extern VTBL_ENTRY _ZTI7S3537C5[];
extern  VTBL_ENTRY _ZTV7S3537C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C5[];
extern Class_Descriptor cd_S3537C16_nt;
extern VTBL_ENTRY _ZTI11S3537C16_nt[];
extern  VTBL_ENTRY _ZTV11S3537C16_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C15;
extern VTBL_ENTRY _ZTI8S3537C15[];
extern  VTBL_ENTRY _ZTV8S3537C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C15[];
extern Class_Descriptor cd_S3537C14;
extern VTBL_ENTRY _ZTI8S3537C14[];
extern  VTBL_ENTRY _ZTV8S3537C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C14[];
extern Class_Descriptor cd_S3537C17;
extern VTBL_ENTRY _ZTI8S3537C17[];
extern  VTBL_ENTRY _ZTV8S3537C17[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C10;
extern VTBL_ENTRY _ZTI8S3537C10[];
extern  VTBL_ENTRY _ZTV8S3537C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C10[];
static Base_Class bases_S3537C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C11_nt,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3537C6,    ABISELECT(600,376), //bcp->offset
    142, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C4_nt,    ABISELECT(624,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(624,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(800,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(800,508), //bcp->offset
    176, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3537C7,    ABISELECT(624,384), //bcp->offset
    150, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(416,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(576,364), //bcp->offset
    133, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C5,    ABISELECT(416,252), //bcp->offset
    91, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3537C16_nt,    ABISELECT(976,624), //bcp->offset
    225, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(816,512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(984,628), //bcp->offset
    240, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3537C15,    ABISELECT(816,512), //bcp->offset
    194, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3537C14,    ABISELECT(192,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    21, //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_S3537C17,    ABISELECT(992,632), //bcp->offset
    248, //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
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3537C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3537C3,    ABISELECT(16,4), //bcp->offset
    33, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(176,116), //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
    20, //immediately_derived
  0, 0},
  {&cd_S3537C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3537C13[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C13D1Ev();
extern void _ZN8S3537C13D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
extern void _ZN8S3537C133v73Ev();
extern void _ZN8S3537C133v74Ev();
extern void _ZN8S3537C133v75Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C143v65Ev();
extern void _ZN8S3537C143v66Ev();
extern void _ZN8S3537C143v67Ev();
extern void _ZN8S3537C143v68Ev();
extern void _ZN8S3537C143v69Ev();
extern void _ZN8S3537C143v70Ev();
extern void _ZN8S3537C143v71Ev();
extern void ABISELECT(_ZTv0_n168_N8S3537C13D1Ev,_ZTv0_n84_N8S3537C13D1Ev)();
extern void ABISELECT(_ZThn192_N8S3537C13D1Ev,_ZThn120_N8S3537C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n168_N8S3537C13D0Ev,_ZTv0_n84_N8S3537C13D0Ev)();
extern void ABISELECT(_ZThn192_N8S3537C13D0Ev,_ZThn120_N8S3537C13D0Ev)() __attribute__((weak));
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void ABISELECT(_ZTv0_n136_N8S3537C13D1Ev,_ZTv0_n68_N8S3537C13D1Ev)();
extern void ABISELECT(_ZThn816_N8S3537C13D1Ev,_ZThn512_N8S3537C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N8S3537C13D0Ev,_ZTv0_n68_N8S3537C13D0Ev)();
extern void ABISELECT(_ZThn816_N8S3537C13D0Ev,_ZThn512_N8S3537C13D0Ev)() __attribute__((weak));
extern void _ZN8S3537C153v64Ev();
extern void ABISELECT(_ZTv0_n24_N8S3537C13D1Ev,_ZTv0_n12_N8S3537C13D1Ev)();
extern void ABISELECT(_ZThn976_N8S3537C13D1Ev,_ZThn624_N8S3537C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C13D0Ev,_ZTv0_n12_N8S3537C13D0Ev)();
extern void ABISELECT(_ZThn976_N8S3537C13D0Ev,_ZThn624_N8S3537C13D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C173v72Ev();
static  VTBL_ENTRY vtc_S3537C13[] = {
  ABISELECT(992,632),
  ABISELECT(984,628),
  ABISELECT(976,624),
  ABISELECT(816,512),
  ABISELECT(600,376),
  ABISELECT(416,252),
  ABISELECT(192,120),
  ABISELECT(800,508),
  ABISELECT(624,384),
  ABISELECT(624,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v73Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v74Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v75Ev,
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  ABISELECT(-192,-120),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v65Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v66Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v67Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v68Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v69Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v70Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v71Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N8S3537C13D1Ev,_ZTv0_n84_N8S3537C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N8S3537C13D0Ev,_ZTv0_n84_N8S3537C13D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  0,
  0,
  0,
  ABISELECT(-600,-376),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-384),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-800,-508),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  0,
  ABISELECT(-816,-512),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-816,-512),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C13D1Ev,_ZTv0_n68_N8S3537C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C13D0Ev,_ZTv0_n68_N8S3537C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-976,-624),
  ABISELECT(-976,-624),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C13D1Ev,_ZTv0_n12_N8S3537C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C13D0Ev,_ZTv0_n12_N8S3537C13D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
  0,
  0,
  0,
  ABISELECT(-984,-628),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  0,
  ABISELECT(-992,-632),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
};
extern VTBL_ENTRY _ZTV8S3537C13[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C10D1Ev();
extern void _ZN8S3537C10D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C10__8S3537C13[] = {
  ABISELECT(800,508),
  ABISELECT(624,384),
  ABISELECT(624,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A3__8S3537C13[] = {
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A3__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-380),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C10__8S3537C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-384),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C10__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-800,-508),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__A1__8S3537C10__8S3537C13[] = {
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C143v65Ev();
extern void _ZN8S3537C143v66Ev();
extern void _ZN8S3537C143v67Ev();
extern void _ZN8S3537C143v68Ev();
extern void _ZN8S3537C143v69Ev();
extern void _ZN8S3537C143v70Ev();
extern void _ZN8S3537C143v71Ev();
extern void _ZN8S3537C14D1Ev();
extern void _ZN8S3537C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C14__8S3537C13[] = {
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v65Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v66Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v67Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v68Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v69Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v70Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v71Ev,
  (VTBL_ENTRY)&_ZN8S3537C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C14D0Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__8S3537C14__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__8S3537C14__8S3537C13[] = {
  0,
  0,
  0,
  ABISELECT(-408,-256),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C14__8S3537C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C14__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-388),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt7S3537C5__A2__8S3537C14__8S3537C13[] = {
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev)();
extern void ABISELECT(_ZThn624_N8S3537C14D1Ev,_ZThn392_N8S3537C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev)();
extern void ABISELECT(_ZThn624_N8S3537C14D0Ev,_ZThn392_N8S3537C14D0Ev)() __attribute__((weak));
extern void _ZN8S3537C153v64Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C15__8S3537C14__8S3537C13[] = {
  0,
  ABISELECT(-624,-392),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-624,-392),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev)();
extern void ABISELECT(_ZThn784_N8S3537C14D1Ev,_ZThn504_N8S3537C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev)();
extern void ABISELECT(_ZThn784_N8S3537C14D0Ev,_ZThn504_N8S3537C14D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C16_nt__8S3537C14__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-504),
  ABISELECT(-784,-504),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt__A1__8S3537C14__8S3537C13[] = {
  0,
  0,
  0,
  ABISELECT(-792,-508),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__8S3537C13[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C5__A1__8S3537C13[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A1__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C5__8S3537C13[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C5__8S3537C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C5__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C13[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C7__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C7__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN8S3537C15D1Ev();
extern void _ZN8S3537C15D0Ev();
extern void _ZN8S3537C153v64Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C15__8S3537C13[] = {
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C15__A2__8S3537C13[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C15__A2__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C15__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev)();
extern void ABISELECT(_ZThn160_N8S3537C15D1Ev,_ZThn112_N8S3537C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev)();
extern void ABISELECT(_ZThn160_N8S3537C15D0Ev,_ZThn112_N8S3537C15D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C16_nt__8S3537C15__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__A1__8S3537C15__8S3537C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt__8S3537C15__8S3537C13[] = {
  0,
  0,
  0,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
static  VTT_ENTRY vtt_S3537C13[] = {
  {&(_ZTV8S3537C13[12]),  12,252},
  {&(_tg__ZTV8S3537C10__8S3537C13[5]),  5,23},
  {&(_tg__ZTV7S3537C38S3537C10__A3__8S3537C13[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A3__8S3537C13[9]),  9,16},
  {&(_tg__ZTV7S3537C7__8S3537C10__8S3537C13[15]),  15,26},
  {&(_tg__ZTV7S3537C7__8S3537C10__8S3537C13[15]),  15,26},
  {&(_tg__ZTV7S3537C8__8S3537C10__8S3537C13[10]),  10,18},
  {&(_tg__ZTV7S3537C3__A1__8S3537C10__8S3537C13[10]),  10,20},
  {&(_ZTV8S3537C13[79]),  79,252},
  {&(_ZTV8S3537C13[115]),  115,252},
  {&(_ZTV8S3537C13[147]),  147,252},
  {&(_ZTV8S3537C13[165]),  165,252},
  {&(_ZTV8S3537C13[165]),  165,252},
  {&(_ZTV8S3537C13[186]),  186,252},
  {&(_ZTV8S3537C13[135]),  135,252},
  {&(_ZTV8S3537C13[212]),  212,252},
  {&(_ZTV8S3537C13[233]),  233,252},
  {&(_ZTV8S3537C13[245]),  245,252},
  {&(_ZTV8S3537C13[251]),  251,252},
  {&(_ZTV8S3537C13[43]),  43,252},
  {&(_tg__ZTV8S3537C14__8S3537C13[10]),  10,22},
  {&(_tg__ZTV7S3537C5__8S3537C14__8S3537C13[24]),  24,42},
  {&(_tg__ZTV7S3537C6__8S3537C14__8S3537C13[5]),  5,8},
  {&(_tg__ZTV7S3537C7__8S3537C14__8S3537C13[15]),  15,26},
  {&(_tg__ZTV7S3537C7__8S3537C14__8S3537C13[15]),  15,26},
  {&(_tg__ZTV7S3537C8__8S3537C14__8S3537C13[10]),  10,18},
  {&(_tg__ZTV10S3537C4_nt7S3537C5__A2__8S3537C14__8S3537C13[2]),  2,9},
  {&(_tg__ZTV8S3537C15__8S3537C14__8S3537C13[18]),  18,31},
  {&(_tg__ZTV11S3537C16_nt__8S3537C14__8S3537C13[8]),  8,15},
  {&(_tg__ZTV11S3537C11_nt__A1__8S3537C14__8S3537C13[5]),  5,8},
  {&(_tg__ZTV7S3537C5__8S3537C13[13]),  13,31},
  {&(_tg__ZTV7S3537C37S3537C5__A1__8S3537C13[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A1__8S3537C13[9]),  9,16},
  {&(_tg__ZTV7S3537C6__7S3537C5__8S3537C13[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C5__8S3537C13[15]),  15,26},
  {&(_tg__ZTV7S3537C7__7S3537C5__8S3537C13[15]),  15,26},
  {&(_tg__ZTV7S3537C8__7S3537C5__8S3537C13[10]),  10,18},
  {&(_tg__ZTV7S3537C7__8S3537C13[11]),  11,22},
  {&(_tg__ZTV7S3537C37S3537C7__8S3537C13[10]),  10,20},
  {&(_tg__ZTV7S3537C37S3537C7__8S3537C13[10]),  10,20},
  {&(_tg__ZTV7S3537C7__8S3537C13[11]),  11,22},
  {&(_tg__ZTV7S3537C8__7S3537C7__8S3537C13[10]),  10,18},
  {&(_tg__ZTV8S3537C15__8S3537C13[13]),  13,26},
  {&(_tg__ZTV7S3537C38S3537C15__A2__8S3537C13[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C15__A2__8S3537C13[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C15__8S3537C13[10]),  10,18},
  {&(_tg__ZTV11S3537C16_nt__8S3537C15__8S3537C13[8]),  8,15},
  {&(_tg__ZTV10S3537C4_nt__A1__8S3537C15__8S3537C13[9]),  9,16},
  {&(_tg__ZTV11S3537C11_nt__8S3537C15__8S3537C13[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S3537C13[];
extern  VTBL_ENTRY _ZTV8S3537C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C13[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3537C15D0Ev,_ZThn112_N8S3537C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3537C15D1Ev,_ZThn112_N8S3537C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3537C14D0Ev,_ZThn504_N8S3537C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3537C14D1Ev,_ZThn504_N8S3537C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3537C14D0Ev,_ZThn392_N8S3537C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3537C14D1Ev,_ZThn392_N8S3537C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C13D0Ev,_ZTv0_n12_N8S3537C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S3537C13D0Ev,_ZThn624_N8S3537C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C13D1Ev,_ZTv0_n12_N8S3537C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S3537C13D1Ev,_ZThn624_N8S3537C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C13D0Ev,_ZTv0_n68_N8S3537C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S3537C13D0Ev,_ZThn512_N8S3537C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C13D1Ev,_ZTv0_n68_N8S3537C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S3537C13D1Ev,_ZThn512_N8S3537C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N8S3537C13D0Ev,_ZTv0_n84_N8S3537C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3537C13D0Ev,_ZThn120_N8S3537C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N8S3537C13D1Ev,_ZTv0_n84_N8S3537C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3537C13D1Ev,_ZThn120_N8S3537C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3537C13 = {  "S3537C13", // class name
  bases_S3537C13, 21,
  &(vtc_S3537C13[0]), // expected_vtbl_contents
  &(vtt_S3537C13[0]), // expected_vtt_contents
  ABISELECT(1008,640), // object size
  NSPAIRA(_ZTI8S3537C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3537C13),252, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3537C13),49, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C19  : S3537C6 {
  virtual void  v76(); // _ZN8S3537C193v76Ev
  virtual void  v77(); // _ZN8S3537C193v77Ev
  virtual void  v78(); // _ZN8S3537C193v78Ev
  virtual void  v79(); // _ZN8S3537C193v79Ev
  virtual void  v80(); // _ZN8S3537C193v80Ev
  ~S3537C19(); // tgen
  S3537C19(); // tgen
};
//SIG(-1 S3537C19) C1{ BC2{ v6 v7 v8 Fi} v1 v2 v3 v4 v5}


void  S3537C19 ::v76(){vfunc_called(this, "_ZN8S3537C193v76Ev");}
void  S3537C19 ::v77(){vfunc_called(this, "_ZN8S3537C193v77Ev");}
void  S3537C19 ::v78(){vfunc_called(this, "_ZN8S3537C193v78Ev");}
void  S3537C19 ::v79(){vfunc_called(this, "_ZN8S3537C193v79Ev");}
void  S3537C19 ::v80(){vfunc_called(this, "_ZN8S3537C193v80Ev");}
S3537C19 ::~S3537C19(){ note_dtor("S3537C19", this);} // tgen
S3537C19 ::S3537C19(){ note_ctor("S3537C19", this);} // tgen

static void Test_S3537C19()
{
  extern Class_Descriptor cd_S3537C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3537C19, buf);
    S3537C19 *dp, &lv = *(dp=new (buf) S3537C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3537C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3537C19)");
    check_base_class_offset(lv, (S3537C6*), 0, "S3537C19");
    test_class_info(&lv, &cd_S3537C19);
    dp->~S3537C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C19(Test_S3537C19, "S3537C19", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S3537C19C1Ev();
extern void _ZN8S3537C19D1Ev();
Name_Map name_map_S3537C19[] = {
  NSPAIR(_ZN8S3537C19C1Ev),
  NSPAIR(_ZN8S3537C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
static Base_Class bases_S3537C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3537C19[];
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
static  VTBL_ENTRY vtc_S3537C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C19[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
};
extern VTBL_ENTRY _ZTI8S3537C19[];
extern  VTBL_ENTRY _ZTV8S3537C19[];
Class_Descriptor cd_S3537C19 = {  "S3537C19", // class name
  bases_S3537C19, 1,
  &(vtc_S3537C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S3537C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3537C19),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  S3537C20  {
  __tsi64 s3537c20f0;
  virtual void  v81(); // _ZN8S3537C203v81Ev
  ~S3537C20(); // tgen
  S3537C20(); // tgen
};
//SIG(-1 S3537C20) C1{ v1 FL}


void  S3537C20 ::v81(){vfunc_called(this, "_ZN8S3537C203v81Ev");}
S3537C20 ::~S3537C20(){ note_dtor("S3537C20", this);} // tgen
S3537C20 ::S3537C20(){ note_ctor("S3537C20", this);} // tgen

static void Test_S3537C20()
{
  extern Class_Descriptor cd_S3537C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3537C20, buf);
    S3537C20 *dp, &lv = *(dp=new (buf) S3537C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3537C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3537C20)");
    check_field_offset(lv, s3537c20f0, ABISELECT(8,4), "S3537C20.s3537c20f0");
    test_class_info(&lv, &cd_S3537C20);
    dp->~S3537C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C20(Test_S3537C20, "S3537C20", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S3537C20C1Ev();
extern void _ZN8S3537C20D1Ev();
Name_Map name_map_S3537C20[] = {
  NSPAIR(_ZN8S3537C20C1Ev),
  NSPAIR(_ZN8S3537C20D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3537C20[];
extern void _ZN8S3537C203v81Ev();
static  VTBL_ENTRY vtc_S3537C20[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C20[0]),
  (VTBL_ENTRY)&_ZN8S3537C203v81Ev,
};
extern VTBL_ENTRY _ZTI8S3537C20[];
extern  VTBL_ENTRY _ZTV8S3537C20[];
Class_Descriptor cd_S3537C20 = {  "S3537C20", // class name
  0,0,//no base classes
  &(vtc_S3537C20[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S3537C20),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3537C20),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  S3537C21  : S3537C19 , S3537C17 {
  ::S3537C16_nt s3537c21f0;
  virtual  ~S3537C21(); // _ZN8S3537C21D1Ev
  S3537C21(); // tgen
};
//SIG(-1 S3537C21) C1{ BC2{ BC3{ v1 v2 v3 Fi} v4 v5 v6 v7 v8} BC4{ v9 FC5{ v10 v11 v12 v13 v14 v15 v16}} vd FC6{ vd v17 v18 v19 v20 v21}}


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

static void Test_S3537C21()
{
  extern Class_Descriptor cd_S3537C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3537C21, buf);
    S3537C21 *dp, &lv = *(dp=new (buf) S3537C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3537C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3537C21)");
    check_base_class_offset(lv, (S3537C6*)(S3537C19*), 0, "S3537C21");
    check_base_class_offset(lv, (S3537C19*), 0, "S3537C21");
    check_base_class_offset(lv, (S3537C17*), ABISELECT(16,8), "S3537C21");
    check_field_offset(lv, s3537c21f0, ABISELECT(32,16), "S3537C21.s3537c21f0");
    test_class_info(&lv, &cd_S3537C21);
    dp->~S3537C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C21(Test_S3537C21, "S3537C21", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S3537C21C1Ev();
extern void _ZN8S3537C21D1Ev();
Name_Map name_map_S3537C21[] = {
  NSPAIR(_ZN8S3537C21C1Ev),
  NSPAIR(_ZN8S3537C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C19;
extern VTBL_ENTRY _ZTI8S3537C19[];
extern  VTBL_ENTRY _ZTV8S3537C19[];
extern Class_Descriptor cd_S3537C17;
extern VTBL_ENTRY _ZTI8S3537C17[];
extern  VTBL_ENTRY _ZTV8S3537C17[];
static Base_Class bases_S3537C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3537C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3537C17,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3537C21[];
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
extern void _ZN8S3537C21D1Ev();
extern void _ZN8S3537C21D0Ev();
extern void _ZN8S3537C173v72Ev();
static  VTBL_ENTRY vtc_S3537C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C21[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
  (VTBL_ENTRY)&_ZN8S3537C21D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C21D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3537C21[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
};
extern VTBL_ENTRY _ZTI8S3537C21[];
extern  VTBL_ENTRY _ZTV8S3537C21[];
Class_Descriptor cd_S3537C21 = {  "S3537C21", // class name
  bases_S3537C21, 3,
  &(vtc_S3537C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S3537C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3537C21),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C22_nt  {
  int s3537c22f0;
  virtual void  v82(); // _ZN11S3537C22_nt3v82Ev
  virtual void  v83(); // _ZN11S3537C22_nt3v83Ev
  virtual void  v84(); // _ZN11S3537C22_nt3v84Ev
  virtual void  v85(); // _ZN11S3537C22_nt3v85Ev
  virtual void  v86(); // _ZN11S3537C22_nt3v86Ev
  ~S3537C22_nt(); // tgen
  S3537C22_nt(); // tgen
};
//SIG(-1 S3537C22_nt) C1{ v1 v2 v3 v4 v5 Fi}


void  S3537C22_nt ::v82(){vfunc_called(this, "_ZN11S3537C22_nt3v82Ev");}
void  S3537C22_nt ::v83(){vfunc_called(this, "_ZN11S3537C22_nt3v83Ev");}
void  S3537C22_nt ::v84(){vfunc_called(this, "_ZN11S3537C22_nt3v84Ev");}
void  S3537C22_nt ::v85(){vfunc_called(this, "_ZN11S3537C22_nt3v85Ev");}
void  S3537C22_nt ::v86(){vfunc_called(this, "_ZN11S3537C22_nt3v86Ev");}
S3537C22_nt ::~S3537C22_nt(){ note_dtor("S3537C22_nt", this);} // tgen
S3537C22_nt ::S3537C22_nt(){ note_ctor("S3537C22_nt", this);} // tgen

//skip512 S3537C22_nt

#else // __cplusplus

extern void _ZN11S3537C22_ntC1Ev();
extern void _ZN11S3537C22_ntD1Ev();
Name_Map name_map_S3537C22_nt[] = {
  NSPAIR(_ZN11S3537C22_ntC1Ev),
  NSPAIR(_ZN11S3537C22_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3537C22_nt[];
extern void _ZN11S3537C22_nt3v82Ev();
extern void _ZN11S3537C22_nt3v83Ev();
extern void _ZN11S3537C22_nt3v84Ev();
extern void _ZN11S3537C22_nt3v85Ev();
extern void _ZN11S3537C22_nt3v86Ev();
static  VTBL_ENTRY vtc_S3537C22_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3537C22_nt[0]),
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v86Ev,
};
extern VTBL_ENTRY _ZTI11S3537C22_nt[];
VTBL_ENTRY *P__ZTI11S3537C22_nt = _ZTI11S3537C22_nt; 
extern  VTBL_ENTRY _ZTV11S3537C22_nt[];
Class_Descriptor cd_S3537C22_nt = {  "S3537C22_nt", // class name
  0,0,//no base classes
  &(vtc_S3537C22_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S3537C22_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3537C22_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  S3537C18  : S3537C19 , S3537C20 , S3537C4_nt , virtual S3537C21 , S3537C22_nt {
  virtual  ~S3537C18(); // _ZN8S3537C18D2Ev
  virtual void  v87(); // _ZN8S3537C183v87Ev
  virtual void  v88(); // _ZN8S3537C183v88Ev
  virtual void  v89(); // _ZN8S3537C183v89Ev
  virtual void  v90(); // _ZN8S3537C183v90Ev
  virtual void  v91(); // _ZN8S3537C183v91Ev
  S3537C18(); // tgen
};
//SIG(-1 S3537C18) C1{ BC2{ BC3{ v6 v7 v8 Fi} v9 v10 v11 v12 v13} BC4{ v14 FL} BC5{ v15 v16 v17 v18 v19 v20 v21} VBC6{ BC2 BC7{ v22 FC5} vd FC8{ vd v28 v29 v30 v31 v32}} BC9{ v23 v24 v25 v26 v27 Fi} vd v1 v2 v3 v4 v5}


 S3537C18 ::~S3537C18(){ note_dtor("S3537C18", this);}
void  S3537C18 ::v87(){vfunc_called(this, "_ZN8S3537C183v87Ev");}
void  S3537C18 ::v88(){vfunc_called(this, "_ZN8S3537C183v88Ev");}
void  S3537C18 ::v89(){vfunc_called(this, "_ZN8S3537C183v89Ev");}
void  S3537C18 ::v90(){vfunc_called(this, "_ZN8S3537C183v90Ev");}
void  S3537C18 ::v91(){vfunc_called(this, "_ZN8S3537C183v91Ev");}
S3537C18 ::S3537C18(){ note_ctor("S3537C18", this);} // tgen

static void Test_S3537C18()
{
  extern Class_Descriptor cd_S3537C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S3537C18, buf);
    S3537C18 *dp, &lv = *(dp=new (buf) S3537C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S3537C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3537C18)");
    /*is_ambiguous_... S3537C18::S3537C19 */ AMB_check_base_class_offset(lv, (S3537C6*)(S3537C19*), 0, "S3537C18");
    /*is_ambiguous_... S3537C18::S3537C19 */ AMB_check_base_class_offset(lv, (S3537C19*), 0, "S3537C18");
    check_base_class_offset(lv, (S3537C20*), ABISELECT(16,8), "S3537C18");
    check_base_class_offset(lv, (S3537C4_nt*), ABISELECT(32,20), "S3537C18");
    check_base_class_offset(lv, (S3537C6*)(S3537C19*)(S3537C21*), ABISELECT(56,32), "S3537C18");
    check_base_class_offset(lv, (S3537C19*)(S3537C21*), ABISELECT(56,32), "S3537C18");
    check_base_class_offset(lv, (S3537C17*)(S3537C21*), ABISELECT(72,40), "S3537C18");
    check_base_class_offset(lv, (S3537C21*), ABISELECT(56,32), "S3537C18");
    check_base_class_offset(lv, (S3537C22_nt*), ABISELECT(40,24), "S3537C18");
    test_class_info(&lv, &cd_S3537C18);
    dp->~S3537C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C18(Test_S3537C18, "S3537C18", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S3537C18C1Ev();
extern void _ZN8S3537C18D2Ev();
Name_Map name_map_S3537C18[] = {
  NSPAIR(_ZN8S3537C18C1Ev),
  NSPAIR(_ZN8S3537C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C19;
extern VTBL_ENTRY _ZTI8S3537C19[];
extern  VTBL_ENTRY _ZTV8S3537C19[];
extern Class_Descriptor cd_S3537C20;
extern VTBL_ENTRY _ZTI8S3537C20[];
extern  VTBL_ENTRY _ZTV8S3537C20[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C19;
extern VTBL_ENTRY _ZTI8S3537C19[];
extern  VTBL_ENTRY _ZTV8S3537C19[];
extern Class_Descriptor cd_S3537C17;
extern VTBL_ENTRY _ZTI8S3537C17[];
extern  VTBL_ENTRY _ZTV8S3537C17[];
extern Class_Descriptor cd_S3537C21;
extern VTBL_ENTRY _ZTI8S3537C21[];
extern  VTBL_ENTRY _ZTV8S3537C21[];
extern Class_Descriptor cd_S3537C22_nt;
extern VTBL_ENTRY _ZTI11S3537C22_nt[];
extern  VTBL_ENTRY _ZTV11S3537C22_nt[];
static Base_Class bases_S3537C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3537C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3537C20,    ABISELECT(16,8), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C4_nt,    ABISELECT(32,20), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C6,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3537C19,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3537C17,    ABISELECT(72,40), //bcp->offset
    59, //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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3537C21,    ABISELECT(56,32), //bcp->offset
    37, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C22_nt,    ABISELECT(40,24), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3537C18[];
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
extern void _ZN8S3537C18D1Ev();
extern void _ZN8S3537C18D0Ev();
extern void _ZN8S3537C183v87Ev();
extern void _ZN8S3537C183v88Ev();
extern void _ZN8S3537C183v89Ev();
extern void _ZN8S3537C183v90Ev();
extern void _ZN8S3537C183v91Ev();
extern void _ZN8S3537C203v81Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN11S3537C22_nt3v82Ev();
extern void _ZN11S3537C22_nt3v83Ev();
extern void _ZN11S3537C22_nt3v84Ev();
extern void _ZN11S3537C22_nt3v85Ev();
extern void _ZN11S3537C22_nt3v86Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
extern void ABISELECT(_ZTv0_n88_N8S3537C18D1Ev,_ZTv0_n44_N8S3537C18D1Ev)();
extern void ABISELECT(_ZThn56_N8S3537C18D1Ev,_ZThn32_N8S3537C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S3537C18D0Ev,_ZTv0_n44_N8S3537C18D0Ev)();
extern void ABISELECT(_ZThn56_N8S3537C18D0Ev,_ZThn32_N8S3537C18D0Ev)() __attribute__((weak));
extern void _ZN8S3537C173v72Ev();
static  VTBL_ENTRY vtc_S3537C18[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
  (VTBL_ENTRY)&_ZN8S3537C18D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C18D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v87Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v88Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v89Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v90Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v91Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN8S3537C203v81Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v86Ev,
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3537C18D1Ev,_ZTv0_n44_N8S3537C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3537C18D0Ev,_ZTv0_n44_N8S3537C18D0Ev),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
};
extern VTBL_ENTRY _ZTV8S3537C18[];
static  VTT_ENTRY vtt_S3537C18[] = {
  {&(_ZTV8S3537C18[3]),  3,62},
  {&(_ZTV8S3537C18[49]),  49,62},
  {&(_ZTV8S3537C18[61]),  61,62},
};
extern VTBL_ENTRY _ZTI8S3537C18[];
extern  VTBL_ENTRY _ZTV8S3537C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C18[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3537C18D0Ev,_ZTv0_n44_N8S3537C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3537C18D0Ev,_ZThn32_N8S3537C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3537C18D1Ev,_ZTv0_n44_N8S3537C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3537C18D1Ev,_ZThn32_N8S3537C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3537C18 = {  "S3537C18", // class name
  bases_S3537C18, 9,
  &(vtc_S3537C18[0]), // expected_vtbl_contents
  &(vtt_S3537C18[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S3537C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3537C18),62, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3537C18),3, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3537C1  : S3537C2 , virtual S3537C12 , S3537C13 , S3537C18 {
  char s3537c1f0;
  __tsi64 s3537c1f1;
  ::S7511C9_nt s3537c1f2;
  __tsi64 s3537c1f3;
  virtual  ~S3537C1(); // _ZN7S3537C1D2Ev
  virtual void  v1(); // _ZN7S3537C12v1Ev
  virtual void  v2(); // _ZN7S3537C12v2Ev
  virtual void  v3(); // _ZN7S3537C12v3Ev
  virtual void  v4(); // _ZN7S3537C12v4Ev
  virtual void  v5(); // _ZN7S3537C12v5Ev
  virtual void  v6(); // _ZN7S3537C12v6Ev
  virtual void  v7(); // _ZN7S3537C12v7Ev
  S3537C1(); // tgen
};
//SIG(1 S3537C1) C1{ BC2{ BC3{ VBC4{ v8 v9 v10 v11 v12 v13 v14} v15 v16 v17 FD[9]} VBC5{ VBC6{ v18 v19 v20 Fi} VBC7{ VBC4 BC3 VBC8{ BC4 v21} v22 FD} BC3 BC4 v23 v24 v25 v26 v27 v28 v29 v30 Fp Fi} BC9{ VBC5 VBC10{ VBC7 BC8 BC3 BC11{ v31 v32 v33} vd v34 v35 v36 v37 v38 v39 v40 v41} vd v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 Fc} BC6 BC8 v52 v53 v54 v55 FC11} VBC12{ v56 v57 v58} BC13{ VBC14{ BC11 VBC5 VBC15{ VBC8 VBC16{ vd v59 v60 v61 v62 v63} BC3 VBC11 vd v64} v65 v66 v67 v68 v69 v70 v71 FC15 Fi} VBC17{ v72 FC4} BC10 v73 v74 v75} BC18{ BC19{ BC6 v76 v77 v78 v79 v80} BC20{ v81 FL} BC4 VBC21{ BC19 BC17 vd FC16} BC22{ v82 v83 v84 v85 v86 Fi} vd v87 v88 v89 v90 v91} vd v1 v2 v3 v4 v5 v6 v7 Fc FL FC23{} FL}


 S3537C1 ::~S3537C1(){ note_dtor("S3537C1", this);}
void  S3537C1 ::v1(){vfunc_called(this, "_ZN7S3537C12v1Ev");}
void  S3537C1 ::v2(){vfunc_called(this, "_ZN7S3537C12v2Ev");}
void  S3537C1 ::v3(){vfunc_called(this, "_ZN7S3537C12v3Ev");}
void  S3537C1 ::v4(){vfunc_called(this, "_ZN7S3537C12v4Ev");}
void  S3537C1 ::v5(){vfunc_called(this, "_ZN7S3537C12v5Ev");}
void  S3537C1 ::v6(){vfunc_called(this, "_ZN7S3537C12v6Ev");}
void  S3537C1 ::v7(){vfunc_called(this, "_ZN7S3537C12v7Ev");}
S3537C1 ::S3537C1(){ note_ctor("S3537C1", this);} // tgen

static void Test_S3537C1()
{
  extern Class_Descriptor cd_S3537C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,244)];
    init_test(&cd_S3537C1, buf);
    S3537C1 *dp, &lv = *(dp=new (buf) S3537C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,972), "sizeof(S3537C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3537C1)");
    /*is_ambiguous_... S3537C2::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C2*), 0, "S3537C1");
    /*is_ambiguous_... S3537C7::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C7*), 0, "S3537C1");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C7*), 0, "S3537C1");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C5*), 0, "S3537C1");
    /*is_ambiguous_... S3537C1::S3537C10 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C10*), 0, "S3537C1");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C15*), 0, "S3537C1");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C3*)(S3537C10*)(S3537C13*), 0, "S3537C1");
    /*is_ambiguous_... S3537C2::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C2*), 0, "S3537C1");
    check_base_class_offset(lv, (S3537C6*)(S3537C5*), ABISELECT(664,436), "S3537C1");
    check_base_class_offset(lv, (S3537C3*)(S3537C7*), ABISELECT(688,444), "S3537C1");
    /*is_ambiguous_... S3537C1::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*), ABISELECT(160,112), "S3537C1");
    check_base_class_offset(lv, (S3537C8*)(S3537C7*), ABISELECT(160,112), "S3537C1");
    check_base_class_offset(lv, (S3537C8*)(S3537C15*), ABISELECT(160,112), "S3537C1");
    check_base_class_offset(lv, (S3537C7*)(S3537C5*), ABISELECT(688,444), "S3537C1");
    /*is_ambiguous_... S3537C1::S3537C10 */ AMB_check_base_class_offset(lv, (S3537C7*)(S3537C10*), ABISELECT(688,444), "S3537C1");
    check_base_class_offset(lv, (S3537C7*)(S3537C10*)(S3537C13*), ABISELECT(688,444), "S3537C1");
    /*is_ambiguous_... S3537C5::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C5*), ABISELECT(480,312), "S3537C1");
    /*is_ambiguous_... S3537C5::S3537C4_nt */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C5*), ABISELECT(640,424), "S3537C1");
    check_base_class_offset(lv, (S3537C5*)(S3537C2*), ABISELECT(480,312), "S3537C1");
    check_base_class_offset(lv, (S3537C5*)(S3537C9*)(S3537C2*), ABISELECT(480,312), "S3537C1");
    check_base_class_offset(lv, (S3537C5*)(S3537C14*), ABISELECT(480,312), "S3537C1");
    /*is_ambiguous_... S3537C1::S3537C10 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*)(S3537C10*), ABISELECT(864,568), "S3537C1");
    /*is_ambiguous_... S3537C1::S3537C10 */ AMB_check_base_class_offset(lv, (S3537C8*)(S3537C10*), ABISELECT(864,568), "S3537C1");
    /*is_ambiguous_... S3537C1::S3537C10 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C10*), ABISELECT(880,572), "S3537C1");
    /*is_ambiguous_... S3537C1::S3537C10 */ AMB_check_base_class_offset(lv, (S3537C11_nt*)(S3537C10*), ABISELECT(1040,684), "S3537C1");
    check_base_class_offset(lv, (S3537C10*)(S3537C9*)(S3537C2*), ABISELECT(864,568), "S3537C1");
    check_base_class_offset(lv, (S3537C9*)(S3537C2*), ABISELECT(160,112), "S3537C1");
    /*is_ambiguous_... S3537C2::S3537C6 */ AMB_check_base_class_offset(lv, (S3537C6*)(S3537C2*), ABISELECT(176,120), "S3537C1");
    /*is_ambiguous_... S3537C2::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*)(S3537C2*), ABISELECT(192,128), "S3537C1");
    /*is_ambiguous_... S3537C2::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C8*)(S3537C2*), ABISELECT(192,128), "S3537C1");
    check_base_class_offset(lv, (S3537C2*), 0, "S3537C1");
    check_base_class_offset(lv, (S3537C12*), ABISELECT(1048,688), "S3537C1");
    /*is_ambiguous_... S3537C14::S3537C11_nt */ AMB_check_base_class_offset(lv, (S3537C11_nt*)(S3537C14*), ABISELECT(1056,692), "S3537C1");
    check_base_class_offset(lv, (S3537C16_nt*)(S3537C15*), ABISELECT(1440,936), "S3537C1");
    check_base_class_offset(lv, (S3537C3*)(S3537C15*), ABISELECT(1280,824), "S3537C1");
    check_base_class_offset(lv, (S3537C11_nt*)(S3537C15*), ABISELECT(1448,940), "S3537C1");
    check_base_class_offset(lv, (S3537C15*)(S3537C14*), ABISELECT(1280,824), "S3537C1");
    check_base_class_offset(lv, (S3537C14*)(S3537C13*), ABISELECT(1056,692), "S3537C1");
    check_base_class_offset(lv, (S3537C17*)(S3537C13*), ABISELECT(1456,944), "S3537C1");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C4_nt*)(S3537C8*)(S3537C10*)(S3537C13*), ABISELECT(208,136), "S3537C1");
    /*is_ambiguous_... S3537C10::S3537C8 */ AMB_check_base_class_offset(lv, (S3537C8*)(S3537C10*)(S3537C13*), ABISELECT(208,136), "S3537C1");
    /*is_ambiguous_... S3537C10::S3537C3 */ AMB_check_base_class_offset(lv, (S3537C3*)(S3537C10*)(S3537C13*), ABISELECT(224,140), "S3537C1");
    check_base_class_offset(lv, (S3537C11_nt*)(S3537C10*)(S3537C13*), ABISELECT(384,252), "S3537C1");
    check_base_class_offset(lv, (S3537C10*)(S3537C13*), ABISELECT(208,136), "S3537C1");
    check_base_class_offset(lv, (S3537C13*), ABISELECT(208,136), "S3537C1");
    /*is_ambiguous_... S3537C18::S3537C19 */ AMB_check_base_class_offset(lv, (S3537C6*)(S3537C19*)(S3537C18*), ABISELECT(392,256), "S3537C1");
    /*is_ambiguous_... S3537C18::S3537C19 */ AMB_check_base_class_offset(lv, (S3537C19*)(S3537C18*), ABISELECT(392,256), "S3537C1");
    check_base_class_offset(lv, (S3537C20*)(S3537C18*), ABISELECT(408,264), "S3537C1");
    check_base_class_offset(lv, (S3537C4_nt*)(S3537C18*), ABISELECT(424,276), "S3537C1");
    check_base_class_offset(lv, (S3537C6*)(S3537C19*)(S3537C21*), ABISELECT(1472,952), "S3537C1");
    check_base_class_offset(lv, (S3537C19*)(S3537C21*), ABISELECT(1472,952), "S3537C1");
    check_base_class_offset(lv, (S3537C17*)(S3537C21*), ABISELECT(1488,960), "S3537C1");
    check_base_class_offset(lv, (S3537C21*)(S3537C18*), ABISELECT(1472,952), "S3537C1");
    check_base_class_offset(lv, (S3537C22_nt*)(S3537C18*), ABISELECT(432,280), "S3537C1");
    check_base_class_offset(lv, (S3537C18*), ABISELECT(392,256), "S3537C1");
    check_field_offset(lv, s3537c1f0, ABISELECT(444,288), "S3537C1.s3537c1f0");
    check_field_offset(lv, s3537c1f1, ABISELECT(448,292), "S3537C1.s3537c1f1");
    check_field_offset(lv, s3537c1f2, ABISELECT(456,300), "S3537C1.s3537c1f2");
    check_field_offset(lv, s3537c1f3, ABISELECT(464,304), "S3537C1.s3537c1f3");
    test_class_info(&lv, &cd_S3537C1);
    dp->~S3537C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3537C1(Test_S3537C1, "S3537C1", ABISELECT(1520,972));

#else // __cplusplus

extern void _ZN7S3537C1C1Ev();
extern void _ZN7S3537C1D2Ev();
Name_Map name_map_S3537C1[] = {
  NSPAIR(_ZN7S3537C1C1Ev),
  NSPAIR(_ZN7S3537C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C7;
extern VTBL_ENTRY _ZTI7S3537C7[];
extern  VTBL_ENTRY _ZTV7S3537C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C7[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C5;
extern VTBL_ENTRY _ZTI7S3537C5[];
extern  VTBL_ENTRY _ZTV7S3537C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C5[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C10;
extern VTBL_ENTRY _ZTI8S3537C10[];
extern  VTBL_ENTRY _ZTV8S3537C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C10[];
extern Class_Descriptor cd_S3537C9;
extern VTBL_ENTRY _ZTI7S3537C9[];
extern  VTBL_ENTRY _ZTV7S3537C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C9[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C2;
extern VTBL_ENTRY _ZTI7S3537C2[];
extern  VTBL_ENTRY _ZTV7S3537C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C2[];
extern Class_Descriptor cd_S3537C12;
extern VTBL_ENTRY _ZTI8S3537C12[];
extern  VTBL_ENTRY _ZTV8S3537C12[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C16_nt;
extern VTBL_ENTRY _ZTI11S3537C16_nt[];
extern  VTBL_ENTRY _ZTV11S3537C16_nt[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C15;
extern VTBL_ENTRY _ZTI8S3537C15[];
extern  VTBL_ENTRY _ZTV8S3537C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C15[];
extern Class_Descriptor cd_S3537C14;
extern VTBL_ENTRY _ZTI8S3537C14[];
extern  VTBL_ENTRY _ZTV8S3537C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C14[];
extern Class_Descriptor cd_S3537C17;
extern VTBL_ENTRY _ZTI8S3537C17[];
extern  VTBL_ENTRY _ZTV8S3537C17[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C8;
extern VTBL_ENTRY _ZTI7S3537C8[];
extern  VTBL_ENTRY _ZTV7S3537C8[];
extern Class_Descriptor cd_S3537C3;
extern VTBL_ENTRY _ZTI7S3537C3[];
extern  VTBL_ENTRY _ZTV7S3537C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C3[];
extern Class_Descriptor cd_S3537C11_nt;
extern VTBL_ENTRY _ZTI11S3537C11_nt[];
extern  VTBL_ENTRY _ZTV11S3537C11_nt[];
extern Class_Descriptor cd_S3537C10;
extern VTBL_ENTRY _ZTI8S3537C10[];
extern  VTBL_ENTRY _ZTV8S3537C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C10[];
extern Class_Descriptor cd_S3537C13;
extern VTBL_ENTRY _ZTI8S3537C13[];
extern  VTBL_ENTRY _ZTV8S3537C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C13[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C19;
extern VTBL_ENTRY _ZTI8S3537C19[];
extern  VTBL_ENTRY _ZTV8S3537C19[];
extern Class_Descriptor cd_S3537C20;
extern VTBL_ENTRY _ZTI8S3537C20[];
extern  VTBL_ENTRY _ZTV8S3537C20[];
extern Class_Descriptor cd_S3537C4_nt;
extern VTBL_ENTRY _ZTI10S3537C4_nt[];
extern  VTBL_ENTRY _ZTV10S3537C4_nt[];
extern Class_Descriptor cd_S3537C6;
extern VTBL_ENTRY _ZTI7S3537C6[];
extern  VTBL_ENTRY _ZTV7S3537C6[];
extern Class_Descriptor cd_S3537C19;
extern VTBL_ENTRY _ZTI8S3537C19[];
extern  VTBL_ENTRY _ZTV8S3537C19[];
extern Class_Descriptor cd_S3537C17;
extern VTBL_ENTRY _ZTI8S3537C17[];
extern  VTBL_ENTRY _ZTV8S3537C17[];
extern Class_Descriptor cd_S3537C21;
extern VTBL_ENTRY _ZTI8S3537C21[];
extern  VTBL_ENTRY _ZTV8S3537C21[];
extern Class_Descriptor cd_S3537C22_nt;
extern VTBL_ENTRY _ZTI11S3537C22_nt[];
extern  VTBL_ENTRY _ZTV11S3537C22_nt[];
extern Class_Descriptor cd_S3537C18;
extern VTBL_ENTRY _ZTI8S3537C18[];
extern  VTBL_ENTRY _ZTV8S3537C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3537C18[];
static Base_Class bases_S3537C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3537C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3537C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3537C6,    ABISELECT(664,436), //bcp->offset
    242, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(688,444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3537C7,    ABISELECT(688,444), //bcp->offset
    250, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(480,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(640,424), //bcp->offset
    233, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3537C5,    ABISELECT(480,312), //bcp->offset
    191, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3537C4_nt,    ABISELECT(864,568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(864,568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3537C3,    ABISELECT(880,572), //bcp->offset
    322, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(1040,684), //bcp->offset
    342, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3537C10,    ABISELECT(864,568), //bcp->offset
    276, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3537C9,    ABISELECT(160,112), //bcp->offset
    45, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3537C6,    ABISELECT(176,120), //bcp->offset
    81, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(192,128), //bcp->offset
    86, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S3537C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C12,    ABISELECT(1048,688), //bcp->offset
    347, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3537C11_nt,    ABISELECT(1056,692), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S3537C16_nt,    ABISELECT(1440,936), //bcp->offset
    419, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S3537C3,    ABISELECT(1280,824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(1448,940), //bcp->offset
    434, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S3537C15,    ABISELECT(1280,824), //bcp->offset
    388, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    98, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3537C14,    ABISELECT(1056,692), //bcp->offset
    355, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S3537C17,    ABISELECT(1456,944), //bcp->offset
    442, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S3537C4_nt,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_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
    29, //immediately_derived
  0, 0},
  {&cd_S3537C8,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3537C3,    ABISELECT(224,140), //bcp->offset
    129, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3537C11_nt,    ABISELECT(384,252), //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
    36, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3537C10,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3537C13,    ABISELECT(208,136), //bcp->offset
    96, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3537C6,    ABISELECT(392,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3537C19,    ABISELECT(392,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3537C20,    ABISELECT(408,264), //bcp->offset
    172, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3537C4_nt,    ABISELECT(424,276), //bcp->offset
    175, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3537C6,    ABISELECT(1472,952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    39, //immediately_derived
  0, 0},
  {&cd_S3537C19,    ABISELECT(1472,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3537C17,    ABISELECT(1488,960), //bcp->offset
    468, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3537C21,    ABISELECT(1472,952), //bcp->offset
    446, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    43, //immediately_derived
  0, 1},
  {&cd_S3537C22_nt,    ABISELECT(432,280), //bcp->offset
    184, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3537C18,    ABISELECT(392,256), //bcp->offset
    154, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3537C1[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C23v52Ev();
extern void _ZN7S3537C23v53Ev();
extern void _ZN7S3537C23v54Ev();
extern void _ZN7S3537C23v55Ev();
extern void _ZN7S3537C1D1Ev();
extern void _ZN7S3537C1D0Ev();
extern void _ZN7S3537C12v1Ev();
extern void _ZN7S3537C12v2Ev();
extern void _ZN7S3537C12v3Ev();
extern void _ZN7S3537C12v4Ev();
extern void _ZN7S3537C12v5Ev();
extern void _ZN7S3537C12v6Ev();
extern void _ZN7S3537C12v7Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZThn160_N7S3537C1D1Ev,_ZThn112_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S3537C1D0Ev,_ZThn112_N7S3537C1D0Ev)();
extern void _ZN7S3537C93v42Ev();
extern void _ZN7S3537C93v43Ev();
extern void _ZN7S3537C93v44Ev();
extern void _ZN7S3537C93v45Ev();
extern void _ZN7S3537C93v46Ev();
extern void _ZN7S3537C93v47Ev();
extern void _ZN7S3537C93v48Ev();
extern void _ZN7S3537C93v49Ev();
extern void _ZN7S3537C93v50Ev();
extern void _ZN7S3537C93v51Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZThn208_N7S3537C1D1Ev,_ZThn136_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S3537C1D0Ev,_ZThn136_N7S3537C1D0Ev)();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
extern void _ZN8S3537C133v73Ev();
extern void _ZN8S3537C133v74Ev();
extern void _ZN8S3537C133v75Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
extern void ABISELECT(_ZThn392_N7S3537C1D1Ev,_ZThn256_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn392_N7S3537C1D0Ev,_ZThn256_N7S3537C1D0Ev)();
extern void _ZN8S3537C183v87Ev();
extern void _ZN8S3537C183v88Ev();
extern void _ZN8S3537C183v89Ev();
extern void _ZN8S3537C183v90Ev();
extern void _ZN8S3537C183v91Ev();
extern void _ZN8S3537C203v81Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN11S3537C22_nt3v82Ev();
extern void _ZN11S3537C22_nt3v83Ev();
extern void _ZN11S3537C22_nt3v84Ev();
extern void _ZN11S3537C22_nt3v85Ev();
extern void _ZN11S3537C22_nt3v86Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZTv0_n112_N7S3537C1D1Ev,_ZTv0_n56_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn864_N7S3537C1D1Ev,_ZThn568_N7S3537C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S3537C1D0Ev,_ZTv0_n56_N7S3537C1D0Ev)();
extern void ABISELECT(_ZThn864_N7S3537C1D0Ev,_ZThn568_N7S3537C1D0Ev)() __attribute__((weak));
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C123v56Ev();
extern void _ZN8S3537C123v57Ev();
extern void _ZN8S3537C123v58Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C143v65Ev();
extern void _ZN8S3537C143v66Ev();
extern void _ZN8S3537C143v67Ev();
extern void _ZN8S3537C143v68Ev();
extern void _ZN8S3537C143v69Ev();
extern void _ZN8S3537C143v70Ev();
extern void _ZN8S3537C143v71Ev();
extern void ABISELECT(_ZTv0_n168_N7S3537C1D1Ev,_ZTv0_n84_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn1056_N7S3537C1D1Ev,_ZThn692_N7S3537C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n168_N7S3537C1D0Ev,_ZTv0_n84_N7S3537C1D0Ev)();
extern void ABISELECT(_ZThn1056_N7S3537C1D0Ev,_ZThn692_N7S3537C1D0Ev)() __attribute__((weak));
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void ABISELECT(_ZTv0_n136_N7S3537C1D1Ev,_ZTv0_n68_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn1280_N7S3537C1D1Ev,_ZThn824_N7S3537C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N7S3537C1D0Ev,_ZTv0_n68_N7S3537C1D0Ev)();
extern void ABISELECT(_ZThn1280_N7S3537C1D0Ev,_ZThn824_N7S3537C1D0Ev)() __attribute__((weak));
extern void _ZN8S3537C153v64Ev();
extern void ABISELECT(_ZTv0_n24_N7S3537C1D1Ev,_ZTv0_n12_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn1440_N7S3537C1D1Ev,_ZThn936_N7S3537C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3537C1D0Ev,_ZTv0_n12_N7S3537C1D0Ev)();
extern void ABISELECT(_ZThn1440_N7S3537C1D0Ev,_ZThn936_N7S3537C1D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C173v72Ev();
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
extern void ABISELECT(_ZTv0_n88_N7S3537C1D1Ev,_ZTv0_n44_N7S3537C1D1Ev)();
extern void ABISELECT(_ZThn1472_N7S3537C1D1Ev,_ZThn952_N7S3537C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3537C1D0Ev,_ZTv0_n44_N7S3537C1D0Ev)();
extern void ABISELECT(_ZThn1472_N7S3537C1D0Ev,_ZThn952_N7S3537C1D0Ev)() __attribute__((weak));
extern void _ZN8S3537C173v72Ev();
static  VTBL_ENTRY vtc_S3537C1[] = {
  ABISELECT(1472,952),
  ABISELECT(1456,944),
  ABISELECT(1448,940),
  ABISELECT(1440,936),
  ABISELECT(1280,824),
  ABISELECT(1056,692),
  ABISELECT(1048,688),
  ABISELECT(864,568),
  ABISELECT(160,112),
  ABISELECT(688,444),
  ABISELECT(664,436),
  ABISELECT(480,312),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3537C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3537C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3537C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3537C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3537C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3537C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3537C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3537C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3537C12v7Ev,
  ABISELECT(704,456),
  0,
  ABISELECT(-160,-112),
  ABISELECT(528,332),
  ABISELECT(504,324),
  ABISELECT(320,200),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S3537C1D1Ev,_ZThn112_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S3537C1D0Ev,_ZThn112_N7S3537C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3537C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v44Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v45Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v46Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v47Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v48Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v49Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v50Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v51Ev,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  ABISELECT(1248,808),
  ABISELECT(1240,804),
  ABISELECT(1232,800),
  ABISELECT(1072,688),
  ABISELECT(456,300),
  ABISELECT(272,176),
  ABISELECT(848,556),
  ABISELECT(-48,-24),
  ABISELECT(-208,-136),
  ABISELECT(480,308),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S3537C1D1Ev,_ZThn136_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S3537C1D0Ev,_ZThn136_N7S3537C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v73Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v74Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v75Ev,
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  ABISELECT(-384,-252),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  ABISELECT(1080,696),
  ABISELECT(-392,-256),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn392_N7S3537C1D1Ev,_ZThn256_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn392_N7S3537C1D0Ev,_ZThn256_N7S3537C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C183v87Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v88Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v89Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v90Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v91Ev,
  ABISELECT(-408,-264),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN8S3537C203v81Ev,
  ABISELECT(-424,-276),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S3537C22_nt3v86Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-200),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
  ABISELECT(-640,-424),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  0,
  0,
  0,
  ABISELECT(-664,-436),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-864,-568),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-704,-456),
  ABISELECT(-864,-568),
  ABISELECT(-176,-124),
  ABISELECT(-864,-568),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C1D1Ev,_ZTv0_n56_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C1D0Ev,_ZTv0_n56_N7S3537C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  ABISELECT(-1040,-684),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  0,
  0,
  0,
  ABISELECT(-1048,-688),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN8S3537C123v56Ev,
  (VTBL_ENTRY)&_ZN8S3537C123v57Ev,
  (VTBL_ENTRY)&_ZN8S3537C123v58Ev,
  ABISELECT(-1056,-692),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(392,248),
  ABISELECT(384,244),
  ABISELECT(224,132),
  ABISELECT(-896,-580),
  ABISELECT(-1056,-692),
  ABISELECT(-368,-248),
  ABISELECT(-392,-256),
  ABISELECT(-576,-380),
  ABISELECT(-1056,-692),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v65Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v66Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v67Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v68Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v69Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v70Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v71Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N7S3537C1D1Ev,_ZTv0_n84_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N7S3537C1D0Ev,_ZTv0_n84_N7S3537C1D0Ev),
  0,
  ABISELECT(-1280,-824),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-1120,-712),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N7S3537C1D1Ev,_ZTv0_n68_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N7S3537C1D0Ev,_ZTv0_n68_N7S3537C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1440,-936),
  ABISELECT(-1440,-936),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3537C1D1Ev,_ZTv0_n12_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3537C1D0Ev,_ZTv0_n12_N7S3537C1D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
  0,
  0,
  0,
  ABISELECT(-1448,-940),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  0,
  ABISELECT(-1456,-944),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
  ABISELECT(16,8),
  ABISELECT(-1472,-952),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1472,-952),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3537C1D1Ev,_ZTv0_n44_N7S3537C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3537C1D0Ev,_ZTv0_n44_N7S3537C1D0Ev),
  ABISELECT(-1488,-960),
  (VTBL_ENTRY)&(_ZTI7S3537C1[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
};
extern VTBL_ENTRY _ZTV7S3537C1[];
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C23v52Ev();
extern void _ZN7S3537C23v53Ev();
extern void _ZN7S3537C23v54Ev();
extern void _ZN7S3537C23v55Ev();
extern void _ZN7S3537C2D1Ev();
extern void _ZN7S3537C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C2__7S3537C1[] = {
  ABISELECT(864,568),
  ABISELECT(160,112),
  ABISELECT(688,444),
  ABISELECT(664,436),
  ABISELECT(480,312),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3537C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3537C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3537C2D0Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN7S3537C9D1Ev();
extern void _ZN7S3537C9D0Ev();
extern void _ZN7S3537C93v42Ev();
extern void _ZN7S3537C93v43Ev();
extern void _ZN7S3537C93v44Ev();
extern void _ZN7S3537C93v45Ev();
extern void _ZN7S3537C93v46Ev();
extern void _ZN7S3537C93v47Ev();
extern void _ZN7S3537C93v48Ev();
extern void _ZN7S3537C93v49Ev();
extern void _ZN7S3537C93v50Ev();
extern void _ZN7S3537C93v51Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C97S3537C2__7S3537C1[] = {
  ABISELECT(704,456),
  0,
  ABISELECT(-160,-112),
  ABISELECT(528,332),
  ABISELECT(504,324),
  ABISELECT(320,200),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3537C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3537C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v44Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v45Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v46Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v47Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v48Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v49Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v50Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v51Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__7S3537C97S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-200),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-320,-200),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C97S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(-504,-324),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C97S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-528,-332),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C97S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(160,112),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt7S3537C5__A2__7S3537C97S3537C2__7S3537C1[] = {
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev)();
extern void ABISELECT(_ZThn704_N7S3537C9D1Ev,_ZThn456_N7S3537C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev)();
extern void ABISELECT(_ZThn704_N7S3537C9D0Ev,_ZThn456_N7S3537C9D0Ev)() __attribute__((weak));
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C10__7S3537C97S3537C2__7S3537C1[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-704,-456),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-704,-456),
  ABISELECT(-864,-568),
  ABISELECT(-176,-124),
  ABISELECT(-704,-456),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A2__7S3537C97S3537C2__7S3537C1[] = {
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-720,-460),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt8S3537C10__7S3537C97S3537C2__7S3537C1[] = {
  ABISELECT(-880,-572),
  (VTBL_ENTRY)&(_ZTI7S3537C9[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__7S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-200),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(-664,-436),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C2__7S3537C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZThn160_N7S3537C2D1Ev,_ZThn112_N7S3537C2D1Ev)();
extern void ABISELECT(_ZThn160_N7S3537C2D0Ev,_ZThn112_N7S3537C2D0Ev)();
extern void _ZN7S3537C93v42Ev();
extern void _ZN7S3537C93v43Ev();
extern void _ZN7S3537C93v44Ev();
extern void _ZN7S3537C93v45Ev();
extern void _ZN7S3537C93v46Ev();
extern void _ZN7S3537C93v47Ev();
extern void _ZN7S3537C93v48Ev();
extern void _ZN7S3537C93v49Ev();
extern void _ZN7S3537C93v50Ev();
extern void _ZN7S3537C93v51Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C9__7S3537C2__7S3537C1[] = {
  ABISELECT(704,456),
  0,
  ABISELECT(-160,-112),
  ABISELECT(528,332),
  ABISELECT(504,324),
  ABISELECT(320,200),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S3537C2D1Ev,_ZThn112_N7S3537C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S3537C2D0Ev,_ZThn112_N7S3537C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3537C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v44Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v45Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v46Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v47Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v48Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v49Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v50Ev,
  (VTBL_ENTRY)&_ZN7S3537C93v51Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt7S3537C5__A2__7S3537C2__7S3537C1[] = {
  ABISELECT(-640,-424),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void ABISELECT(_ZTv0_n112_N7S3537C2D1Ev,_ZTv0_n56_N7S3537C2D1Ev)();
extern void ABISELECT(_ZThn864_N7S3537C2D1Ev,_ZThn568_N7S3537C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S3537C2D0Ev,_ZTv0_n56_N7S3537C2D0Ev)();
extern void ABISELECT(_ZThn864_N7S3537C2D0Ev,_ZThn568_N7S3537C2D0Ev)() __attribute__((weak));
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C10__7S3537C2__7S3537C1[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-864,-568),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-704,-456),
  ABISELECT(-864,-568),
  ABISELECT(-176,-124),
  ABISELECT(-864,-568),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C2D1Ev,_ZTv0_n56_N7S3537C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S3537C2D0Ev,_ZTv0_n56_N7S3537C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A3__7S3537C2__7S3537C1[] = {
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt8S3537C10__7S3537C2__7S3537C1[] = {
  ABISELECT(-1040,-684),
  (VTBL_ENTRY)&(_ZTI7S3537C2[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C13D1Ev();
extern void _ZN8S3537C13D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
extern void _ZN8S3537C133v73Ev();
extern void _ZN8S3537C133v74Ev();
extern void _ZN8S3537C133v75Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C13__7S3537C1[] = {
  ABISELECT(1248,808),
  ABISELECT(1240,804),
  ABISELECT(1232,800),
  ABISELECT(1072,688),
  ABISELECT(456,300),
  ABISELECT(272,176),
  ABISELECT(848,556),
  ABISELECT(-48,-24),
  ABISELECT(-208,-136),
  ABISELECT(480,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v73Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v74Ev,
  (VTBL_ENTRY)&_ZN8S3537C133v75Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C10D1Ev();
extern void _ZN8S3537C10D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C108S3537C13__A1__7S3537C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-208,-136),
  ABISELECT(480,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C108S3537C13__A5__7S3537C1[] = {
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C108S3537C13__A5__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,140),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C108S3537C13__A1__7S3537C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-480,-308),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__8S3537C108S3537C13__A1__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,136),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C108S3537C13__A1__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__A1__8S3537C108S3537C13__A1__7S3537C1[] = {
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C143v65Ev();
extern void _ZN8S3537C143v66Ev();
extern void _ZN8S3537C143v67Ev();
extern void _ZN8S3537C143v68Ev();
extern void _ZN8S3537C143v69Ev();
extern void _ZN8S3537C143v70Ev();
extern void _ZN8S3537C143v71Ev();
extern void ABISELECT(_ZTv0_n168_N8S3537C13D1Ev,_ZTv0_n84_N8S3537C13D1Ev)();
extern void ABISELECT(_ZThn848_N8S3537C13D1Ev,_ZThn556_N8S3537C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n168_N8S3537C13D0Ev,_ZTv0_n84_N8S3537C13D0Ev)();
extern void ABISELECT(_ZThn848_N8S3537C13D0Ev,_ZThn556_N8S3537C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3537C14__8S3537C13__7S3537C1[] = {
  ABISELECT(-848,-556),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(392,248),
  ABISELECT(384,244),
  ABISELECT(224,132),
  ABISELECT(-896,-580),
  ABISELECT(-1056,-692),
  ABISELECT(-368,-248),
  ABISELECT(-392,-256),
  ABISELECT(-576,-380),
  ABISELECT(-848,-556),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v65Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v66Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v67Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v68Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v69Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v70Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v71Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N8S3537C13D1Ev,_ZTv0_n84_N8S3537C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N8S3537C13D0Ev,_ZTv0_n84_N8S3537C13D0Ev),
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__8S3537C13__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-200),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-272,-176),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__8S3537C13__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(-456,-300),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C13__7S3537C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-480,-308),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__8S3537C13__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,136),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C13__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt7S3537C5__A2__8S3537C13__7S3537C1[] = {
  ABISELECT(-432,-288),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void ABISELECT(_ZTv0_n136_N8S3537C13D1Ev,_ZTv0_n68_N8S3537C13D1Ev)();
extern void ABISELECT(_ZThn1072_N8S3537C13D1Ev,_ZThn688_N8S3537C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N8S3537C13D0Ev,_ZTv0_n68_N8S3537C13D0Ev)();
extern void ABISELECT(_ZThn1072_N8S3537C13D0Ev,_ZThn688_N8S3537C13D0Ev)() __attribute__((weak));
extern void _ZN8S3537C153v64Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C15__8S3537C13__7S3537C1[] = {
  0,
  ABISELECT(-1072,-688),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-1120,-712),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1072,-688),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C13D1Ev,_ZTv0_n68_N8S3537C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C13D0Ev,_ZTv0_n68_N8S3537C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3537C13D1Ev,_ZTv0_n12_N8S3537C13D1Ev)();
extern void ABISELECT(_ZThn1232_N8S3537C13D1Ev,_ZThn800_N8S3537C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C13D0Ev,_ZTv0_n12_N8S3537C13D0Ev)();
extern void ABISELECT(_ZThn1232_N8S3537C13D0Ev,_ZThn800_N8S3537C13D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C16_nt__8S3537C13__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1232,-800),
  ABISELECT(-1232,-800),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C13D1Ev,_ZTv0_n12_N8S3537C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C13D0Ev,_ZTv0_n12_N8S3537C13D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt__A1__8S3537C13__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(-1240,-804),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern void _ZN8S3537C173v72Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C17__8S3537C13__7S3537C1[] = {
  0,
  ABISELECT(-1248,-808),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A3__8S3537C13__7S3537C1[] = {
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C13[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
extern void _ZN8S3537C18D1Ev();
extern void _ZN8S3537C18D0Ev();
extern void _ZN8S3537C183v87Ev();
extern void _ZN8S3537C183v88Ev();
extern void _ZN8S3537C183v89Ev();
extern void _ZN8S3537C183v90Ev();
extern void _ZN8S3537C183v91Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C18__7S3537C1[] = {
  ABISELECT(1080,696),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
  (VTBL_ENTRY)&_ZN8S3537C18D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C18D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v87Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v88Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v89Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v90Ev,
  (VTBL_ENTRY)&_ZN8S3537C183v91Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
extern void _ZN8S3537C193v76Ev();
extern void _ZN8S3537C193v77Ev();
extern void _ZN8S3537C193v78Ev();
extern void _ZN8S3537C193v79Ev();
extern void _ZN8S3537C193v80Ev();
extern void ABISELECT(_ZTv0_n88_N8S3537C18D1Ev,_ZTv0_n44_N8S3537C18D1Ev)();
extern void ABISELECT(_ZThn1080_N8S3537C18D1Ev,_ZThn696_N8S3537C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S3537C18D0Ev,_ZTv0_n44_N8S3537C18D0Ev)();
extern void ABISELECT(_ZThn1080_N8S3537C18D0Ev,_ZThn696_N8S3537C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3537C21__8S3537C18__7S3537C1[] = {
  ABISELECT(16,8),
  ABISELECT(-1080,-696),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1080,-696),
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v76Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v77Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v78Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v79Ev,
  (VTBL_ENTRY)&_ZN8S3537C193v80Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3537C18D1Ev,_ZTv0_n44_N8S3537C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3537C18D0Ev,_ZTv0_n44_N8S3537C18D0Ev),
};
extern void _ZN8S3537C173v72Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C178S3537C21__8S3537C18__7S3537C1[] = {
  ABISELECT(-1096,-704),
  (VTBL_ENTRY)&(_ZTI8S3537C18[0]),
  (VTBL_ENTRY)&_ZN8S3537C173v72Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__7S3537C1[] = {
  ABISELECT(-320,-200),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C5__A2__7S3537C1[] = {
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A2__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__7S3537C5__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C5__7S3537C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C5__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,312),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C5__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,200),
  (VTBL_ENTRY)&(_ZTI7S3537C5[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__7S3537C1[] = {
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C37S3537C7__A1__7S3537C1[] = {
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C37S3537C7__A1__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(688,444),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C7__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(688,444),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__7S3537C7__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(528,332),
  (VTBL_ENTRY)&(_ZTI7S3537C7[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
extern void _ZN8S3537C10D1Ev();
extern void _ZN8S3537C10D0Ev();
extern void _ZN8S3537C103v34Ev();
extern void _ZN8S3537C103v35Ev();
extern void _ZN8S3537C103v36Ev();
extern void _ZN8S3537C103v37Ev();
extern void _ZN8S3537C103v38Ev();
extern void _ZN8S3537C103v39Ev();
extern void _ZN8S3537C103v40Ev();
extern void _ZN8S3537C103v41Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C10__7S3537C1[] = {
  ABISELECT(-704,-456),
  ABISELECT(-864,-568),
  ABISELECT(-176,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v34Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v35Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v36Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v37Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v38Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v40Ev,
  (VTBL_ENTRY)&_ZN8S3537C103v41Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C10__A3__7S3537C1[] = {
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A3__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(880,572),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C10__7S3537C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__8S3537C10__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(864,568),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C10__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(704,456),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C3__A1__8S3537C10__7S3537C1[] = {
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-880,-572),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S3537C10[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
extern void _ZN8S3537C143v65Ev();
extern void _ZN8S3537C143v66Ev();
extern void _ZN8S3537C143v67Ev();
extern void _ZN8S3537C143v68Ev();
extern void _ZN8S3537C143v69Ev();
extern void _ZN8S3537C143v70Ev();
extern void _ZN8S3537C143v71Ev();
extern void _ZN8S3537C14D1Ev();
extern void _ZN8S3537C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C14__7S3537C1[] = {
  ABISELECT(392,248),
  ABISELECT(384,244),
  ABISELECT(224,132),
  ABISELECT(-896,-580),
  ABISELECT(-1056,-692),
  ABISELECT(-368,-248),
  ABISELECT(-392,-256),
  ABISELECT(-576,-380),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v65Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v66Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v67Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v68Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v69Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v70Ev,
  (VTBL_ENTRY)&_ZN8S3537C143v71Ev,
  (VTBL_ENTRY)&_ZN8S3537C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C14D0Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C53v23Ev();
extern void _ZN7S3537C53v24Ev();
extern void _ZN7S3537C53v25Ev();
extern void _ZN7S3537C53v26Ev();
extern void _ZN7S3537C53v27Ev();
extern void _ZN7S3537C53v28Ev();
extern void _ZN7S3537C53v29Ev();
extern void _ZN7S3537C53v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C5__8S3537C14__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-200),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(-480,-312),
  ABISELECT(576,380),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v29Ev,
  (VTBL_ENTRY)&_ZN7S3537C53v30Ev,
};
extern void _ZN7S3537C63v18Ev();
extern void _ZN7S3537C63v19Ev();
extern void _ZN7S3537C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C6__8S3537C14__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(392,256),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN7S3537C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3537C63v20Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN7S3537C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C7__8S3537C14__7S3537C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-528,-332),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(-688,-444),
  ABISELECT(368,248),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3537C73v22Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__8S3537C14__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1056,692),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C14__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(896,580),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt7S3537C5__A2__8S3537C14__7S3537C1[] = {
  ABISELECT(416,268),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev)();
extern void ABISELECT(_ZThn224_N8S3537C14D1Ev,_ZThn132_N8S3537C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev)();
extern void ABISELECT(_ZThn224_N8S3537C14D0Ev,_ZThn132_N8S3537C14D0Ev)() __attribute__((weak));
extern void _ZN8S3537C153v64Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C15__8S3537C14__7S3537C1[] = {
  0,
  ABISELECT(-224,-132),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-1120,-712),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev)();
extern void ABISELECT(_ZThn384_N8S3537C14D1Ev,_ZThn244_N8S3537C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev)();
extern void ABISELECT(_ZThn384_N8S3537C14D0Ev,_ZThn244_N8S3537C14D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C16_nt__8S3537C14__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-244),
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt__A1__8S3537C14__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(-392,-248),
  (VTBL_ENTRY)&(_ZTI8S3537C14[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
extern void _ZN8S3537C15D1Ev();
extern void _ZN8S3537C15D0Ev();
extern void _ZN8S3537C153v64Ev();
static  VTBL_ENTRY _tg__ZTV8S3537C15__7S3537C1[] = {
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-1120,-712),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  0,
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3537C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3537C153v64Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C33v15Ev();
extern void _ZN7S3537C33v16Ev();
extern void _ZN7S3537C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C38S3537C15__A4__7S3537C1[] = {
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  ABISELECT(-1280,-824),
  0,
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3537C33v17Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__7S3537C38S3537C15__A4__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1280,824),
  (VTBL_ENTRY)&(_ZTI7S3537C3[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
extern void _ZN7S3537C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3537C8__8S3537C15__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1120,712),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S3537C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev)();
extern void ABISELECT(_ZThn160_N8S3537C15D1Ev,_ZThn112_N8S3537C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev)();
extern void ABISELECT(_ZThn160_N8S3537C15D0Ev,_ZThn112_N8S3537C15D0Ev)() __attribute__((weak));
extern void _ZN11S3537C16_nt3v59Ev();
extern void _ZN11S3537C16_nt3v60Ev();
extern void _ZN11S3537C16_nt3v61Ev();
extern void _ZN11S3537C16_nt3v62Ev();
extern void _ZN11S3537C16_nt3v63Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C16_nt__8S3537C15__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev),
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v59Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v60Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v61Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v62Ev,
  (VTBL_ENTRY)&_ZN11S3537C16_nt3v63Ev,
};
extern void _ZN10S3537C4_nt2v8Ev();
extern void _ZN10S3537C4_nt2v9Ev();
extern void _ZN10S3537C4_nt3v10Ev();
extern void _ZN10S3537C4_nt3v11Ev();
extern void _ZN10S3537C4_nt3v12Ev();
extern void _ZN10S3537C4_nt3v13Ev();
extern void _ZN10S3537C4_nt3v14Ev();
static  VTBL_ENTRY _tg__ZTV10S3537C4_nt__A1__8S3537C15__7S3537C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1280,824),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3537C4_nt3v14Ev,
};
extern void _ZN11S3537C11_nt3v31Ev();
extern void _ZN11S3537C11_nt3v32Ev();
extern void _ZN11S3537C11_nt3v33Ev();
static  VTBL_ENTRY _tg__ZTV11S3537C11_nt__8S3537C15__7S3537C1[] = {
  0,
  0,
  0,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S3537C15[0]),
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S3537C11_nt3v33Ev,
};
static  VTT_ENTRY vtt_S3537C1[] = {
  {&(_ZTV7S3537C1[22]),  22,471},
  {&(_tg__ZTV7S3537C2__7S3537C1[15]),  15,31},
  {&(_tg__ZTV7S3537C37S3537C2__7S3537C1[10]),  10,20},
  {&(_tg__ZTV7S3537C37S3537C2__7S3537C1[10]),  10,20},
  {&(_tg__ZTV7S3537C97S3537C2__7S3537C1[16]),  16,36},
  {&(_tg__ZTV7S3537C5__7S3537C97S3537C2__7S3537C1[24]),  24,42},
  {&(_tg__ZTV7S3537C6__7S3537C97S3537C2__7S3537C1[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C97S3537C2__7S3537C1[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__7S3537C97S3537C2__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C97S3537C2__7S3537C1[16]),  16,36},
  {&(_tg__ZTV10S3537C4_nt7S3537C5__A2__7S3537C97S3537C2__7S3537C1[2]),  2,9},
  {&(_tg__ZTV8S3537C10__7S3537C97S3537C2__7S3537C1[28]),  28,46},
  {&(_tg__ZTV7S3537C38S3537C10__A2__7S3537C97S3537C2__7S3537C1[10]),  10,20},
  {&(_tg__ZTV11S3537C11_nt8S3537C10__7S3537C97S3537C2__7S3537C1[2]),  2,5},
  {&(_tg__ZTV7S3537C2__7S3537C1[15]),  15,31},
  {&(_tg__ZTV7S3537C5__7S3537C2__7S3537C1[24]),  24,42},
  {&(_tg__ZTV7S3537C6__7S3537C2__7S3537C1[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C2__7S3537C1[15]),  15,26},
  {&(_tg__ZTV7S3537C9__7S3537C2__7S3537C1[16]),  16,36},
  {&(_tg__ZTV10S3537C4_nt7S3537C5__A2__7S3537C2__7S3537C1[2]),  2,9},
  {&(_tg__ZTV7S3537C9__7S3537C2__7S3537C1[16]),  16,36},
  {&(_tg__ZTV8S3537C10__7S3537C2__7S3537C1[28]),  28,46},
  {&(_tg__ZTV7S3537C38S3537C10__A3__7S3537C2__7S3537C1[10]),  10,20},
  {&(_tg__ZTV11S3537C11_nt8S3537C10__7S3537C2__7S3537C1[2]),  2,5},
  {&(_tg__ZTV8S3537C13__7S3537C1[12]),  12,33},
  {&(_tg__ZTV8S3537C108S3537C13__A1__7S3537C1[5]),  5,23},
  {&(_tg__ZTV7S3537C38S3537C108S3537C13__A5__7S3537C1[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C108S3537C13__A5__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C7__8S3537C108S3537C13__A1__7S3537C1[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__8S3537C108S3537C13__A1__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C108S3537C13__A1__7S3537C1[10]),  10,18},
  {&(_tg__ZTV7S3537C3__A1__8S3537C108S3537C13__A1__7S3537C1[10]),  10,20},
  {&(_tg__ZTV8S3537C14__8S3537C13__7S3537C1[21]),  21,33},
  {&(_tg__ZTV7S3537C5__8S3537C13__7S3537C1[24]),  24,42},
  {&(_tg__ZTV7S3537C6__8S3537C13__7S3537C1[5]),  5,8},
  {&(_tg__ZTV7S3537C7__8S3537C13__7S3537C1[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__8S3537C13__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C13__7S3537C1[10]),  10,18},
  {&(_tg__ZTV10S3537C4_nt7S3537C5__A2__8S3537C13__7S3537C1[2]),  2,9},
  {&(_tg__ZTV8S3537C15__8S3537C13__7S3537C1[18]),  18,31},
  {&(_tg__ZTV11S3537C16_nt__8S3537C13__7S3537C1[8]),  8,15},
  {&(_tg__ZTV11S3537C11_nt__A1__8S3537C13__7S3537C1[5]),  5,8},
  {&(_tg__ZTV8S3537C17__8S3537C13__7S3537C1[3]),  3,4},
  {&(_tg__ZTV7S3537C38S3537C10__A3__8S3537C13__7S3537C1[10]),  10,20},
  {&(_tg__ZTV8S3537C18__7S3537C1[3]),  3,18},
  {&(_tg__ZTV8S3537C21__8S3537C18__7S3537C1[12]),  12,22},
  {&(_tg__ZTV8S3537C178S3537C21__8S3537C18__7S3537C1[2]),  2,3},
  {&(_ZTV7S3537C1[22]),  22,471},
  {&(_ZTV7S3537C1[215]),  215,471},
  {&(_ZTV7S3537C1[247]),  247,471},
  {&(_ZTV7S3537C1[265]),  265,471},
  {&(_ZTV7S3537C1[61]),  61,471},
  {&(_ZTV7S3537C1[235]),  235,471},
  {&(_ZTV7S3537C1[61]),  61,471},
  {&(_ZTV7S3537C1[304]),  304,471},
  {&(_ZTV7S3537C1[332]),  332,471},
  {&(_ZTV7S3537C1[344]),  344,471},
  {&(_ZTV7S3537C1[352]),  352,471},
  {&(_ZTV7S3537C1[108]),  108,471},
  {&(_ZTV7S3537C1[376]),  376,471},
  {&(_ZTV7S3537C1[406]),  406,471},
  {&(_ZTV7S3537C1[427]),  427,471},
  {&(_ZTV7S3537C1[439]),  439,471},
  {&(_ZTV7S3537C1[445]),  445,471},
  {&(_ZTV7S3537C1[139]),  139,471},
  {&(_ZTV7S3537C1[157]),  157,471},
  {&(_ZTV7S3537C1[458]),  458,471},
  {&(_ZTV7S3537C1[470]),  470,471},
  {&(_tg__ZTV7S3537C5__7S3537C1[13]),  13,31},
  {&(_tg__ZTV7S3537C37S3537C5__A2__7S3537C1[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C37S3537C5__A2__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C6__7S3537C5__7S3537C1[5]),  5,8},
  {&(_tg__ZTV7S3537C7__7S3537C5__7S3537C1[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__7S3537C5__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C8__7S3537C5__7S3537C1[10]),  10,18},
  {&(_tg__ZTV7S3537C7__7S3537C1[11]),  11,22},
  {&(_tg__ZTV7S3537C37S3537C7__A1__7S3537C1[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C37S3537C7__A1__7S3537C1[9]),  9,16},
  {&(_tg__ZTV10S3537C4_nt__7S3537C7__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C8__7S3537C7__7S3537C1[10]),  10,18},
  {&(_tg__ZTV8S3537C10__7S3537C1[5]),  5,23},
  {&(_tg__ZTV7S3537C38S3537C10__A3__7S3537C1[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C10__A3__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C7__8S3537C10__7S3537C1[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__8S3537C10__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C10__7S3537C1[10]),  10,18},
  {&(_tg__ZTV7S3537C3__A1__8S3537C10__7S3537C1[10]),  10,20},
  {&(_tg__ZTV8S3537C14__7S3537C1[10]),  10,22},
  {&(_tg__ZTV7S3537C5__8S3537C14__7S3537C1[24]),  24,42},
  {&(_tg__ZTV7S3537C6__8S3537C14__7S3537C1[5]),  5,8},
  {&(_tg__ZTV7S3537C7__8S3537C14__7S3537C1[15]),  15,26},
  {&(_tg__ZTV10S3537C4_nt__8S3537C14__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C14__7S3537C1[10]),  10,18},
  {&(_tg__ZTV10S3537C4_nt7S3537C5__A2__8S3537C14__7S3537C1[2]),  2,9},
  {&(_tg__ZTV8S3537C15__8S3537C14__7S3537C1[18]),  18,31},
  {&(_tg__ZTV11S3537C16_nt__8S3537C14__7S3537C1[8]),  8,15},
  {&(_tg__ZTV11S3537C11_nt__A1__8S3537C14__7S3537C1[5]),  5,8},
  {&(_tg__ZTV8S3537C15__7S3537C1[13]),  13,26},
  {&(_tg__ZTV7S3537C38S3537C15__A4__7S3537C1[10]),  10,20},
  {&(_tg__ZTV10S3537C4_nt__7S3537C38S3537C15__A4__7S3537C1[9]),  9,16},
  {&(_tg__ZTV7S3537C8__8S3537C15__7S3537C1[10]),  10,18},
  {&(_tg__ZTV11S3537C16_nt__8S3537C15__7S3537C1[8]),  8,15},
  {&(_tg__ZTV10S3537C4_nt__A1__8S3537C15__7S3537C1[9]),  9,16},
  {&(_tg__ZTV11S3537C11_nt__8S3537C15__7S3537C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S3537C1[];
extern  VTBL_ENTRY _ZTV7S3537C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3537C1[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D0Ev,_ZTv0_n12_N8S3537C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3537C15D0Ev,_ZThn112_N8S3537C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C15D1Ev,_ZTv0_n12_N8S3537C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S3537C15D1Ev,_ZThn112_N8S3537C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C14D0Ev,_ZTv0_n12_N8S3537C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S3537C14D0Ev,_ZThn244_N8S3537C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C14D1Ev,_ZTv0_n12_N8S3537C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S3537C14D1Ev,_ZThn244_N8S3537C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C14D0Ev,_ZTv0_n68_N8S3537C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3537C14D0Ev,_ZThn132_N8S3537C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C14D1Ev,_ZTv0_n68_N8S3537C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3537C14D1Ev,_ZThn132_N8S3537C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3537C18D0Ev,_ZTv0_n44_N8S3537C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1080_N8S3537C18D0Ev,_ZThn696_N8S3537C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3537C18D1Ev,_ZTv0_n44_N8S3537C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1080_N8S3537C18D1Ev,_ZThn696_N8S3537C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C13D0Ev,_ZTv0_n12_N8S3537C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N8S3537C13D0Ev,_ZThn800_N8S3537C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3537C13D1Ev,_ZTv0_n12_N8S3537C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N8S3537C13D1Ev,_ZThn800_N8S3537C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C13D0Ev,_ZTv0_n68_N8S3537C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S3537C13D0Ev,_ZThn688_N8S3537C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S3537C13D1Ev,_ZTv0_n68_N8S3537C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S3537C13D1Ev,_ZThn688_N8S3537C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N8S3537C13D0Ev,_ZTv0_n84_N8S3537C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S3537C13D0Ev,_ZThn556_N8S3537C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N8S3537C13D1Ev,_ZTv0_n84_N8S3537C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S3537C13D1Ev,_ZThn556_N8S3537C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C2D0Ev,_ZTv0_n56_N7S3537C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S3537C2D0Ev,_ZThn568_N7S3537C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C2D1Ev,_ZTv0_n56_N7S3537C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S3537C2D1Ev,_ZThn568_N7S3537C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C9D0Ev,_ZTv0_n56_N7S3537C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S3537C9D0Ev,_ZThn456_N7S3537C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C9D1Ev,_ZTv0_n56_N7S3537C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S3537C9D1Ev,_ZThn456_N7S3537C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3537C1D0Ev,_ZTv0_n44_N7S3537C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N7S3537C1D0Ev,_ZThn952_N7S3537C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3537C1D1Ev,_ZTv0_n44_N7S3537C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N7S3537C1D1Ev,_ZThn952_N7S3537C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3537C1D0Ev,_ZTv0_n12_N7S3537C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3537C1D0Ev,_ZThn936_N7S3537C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3537C1D1Ev,_ZTv0_n12_N7S3537C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3537C1D1Ev,_ZThn936_N7S3537C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N7S3537C1D0Ev,_ZTv0_n68_N7S3537C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1280_N7S3537C1D0Ev,_ZThn824_N7S3537C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N7S3537C1D1Ev,_ZTv0_n68_N7S3537C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1280_N7S3537C1D1Ev,_ZThn824_N7S3537C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N7S3537C1D0Ev,_ZTv0_n84_N7S3537C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S3537C1D0Ev,_ZThn692_N7S3537C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N7S3537C1D1Ev,_ZTv0_n84_N7S3537C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S3537C1D1Ev,_ZThn692_N7S3537C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C1D0Ev,_ZTv0_n56_N7S3537C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S3537C1D0Ev,_ZThn568_N7S3537C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S3537C1D1Ev,_ZTv0_n56_N7S3537C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S3537C1D1Ev,_ZThn568_N7S3537C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3537C1 = {  "S3537C1", // class name
  bases_S3537C1, 44,
  &(vtc_S3537C1[0]), // expected_vtbl_contents
  &(vtt_S3537C1[0]), // expected_vtt_contents
  ABISELECT(1520,972), // object size
  NSPAIRA(_ZTI7S3537C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3537C1),471, //virtual function table var
  22, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3537C1),104, //virtual table table var
  44, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2524C5  : virtual S7511C5 {
  ::S7511C5 s2524c5f0;
  ::S7511C5 s2524c5f1;
  void *s2524c5f2;
  int s2524c5f3;
  void *s2524c5f4[7];
  int s2524c5f5[2];
  ::S7511C5 s2524c5f6;
  ::S7511C5 s2524c5f7[6];
  __tsi64 s2524c5f8[2];
  void *s2524c5f9;
  int s2524c5f10;
  void *s2524c5f11;
  ~S2524C5(); // tgen
  S2524C5(); // tgen
};
//SIG(-1 S2524C5) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}


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

static void Test_S2524C5()
{
  extern Class_Descriptor cd_S2524C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,210)];
    init_test(&cd_S2524C5, buf);
    S2524C5 *dp, &lv = *(dp=new (buf) S2524C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,836), "sizeof(S2524C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C5)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1296,760), "S2524C5");
    check_field_offset(lv, s2524c5f0, ABISELECT(16,4), "S2524C5.s2524c5f0");
    check_field_offset(lv, s2524c5f1, ABISELECT(144,80), "S2524C5.s2524c5f1");
    check_field_offset(lv, s2524c5f2, ABISELECT(272,156), "S2524C5.s2524c5f2");
    check_field_offset(lv, s2524c5f3, ABISELECT(280,160), "S2524C5.s2524c5f3");
    check_field_offset(lv, s2524c5f4, ABISELECT(288,164), "S2524C5.s2524c5f4");
    check_field_offset(lv, s2524c5f5, ABISELECT(344,192), "S2524C5.s2524c5f5");
    check_field_offset(lv, s2524c5f6, ABISELECT(352,200), "S2524C5.s2524c5f6");
    check_field_offset(lv, s2524c5f7, ABISELECT(480,276), "S2524C5.s2524c5f7");
    check_field_offset(lv, s2524c5f8, ABISELECT(1248,732), "S2524C5.s2524c5f8");
    check_field_offset(lv, s2524c5f9, ABISELECT(1264,748), "S2524C5.s2524c5f9");
    check_field_offset(lv, s2524c5f10, ABISELECT(1272,752), "S2524C5.s2524c5f10");
    check_field_offset(lv, s2524c5f11, ABISELECT(1280,756), "S2524C5.s2524c5f11");
    test_class_info(&lv, &cd_S2524C5);
    dp->~S2524C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C5(Test_S2524C5, "S2524C5", ABISELECT(1424,836));

#else // __cplusplus

extern void _ZN7S2524C5C1Ev();
extern void _ZN7S2524C5D1Ev();
Name_Map name_map_S2524C5[] = {
  NSPAIR(_ZN7S2524C5C1Ev),
  NSPAIR(_ZN7S2524C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
static Base_Class bases_S2524C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1296,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2524C5[];
static  VTBL_ENTRY vtc_S2524C5[] = {
  ABISELECT(1296,760),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
extern VTBL_ENTRY _ZTV7S2524C5[];
static  VTT_ENTRY vtt_S2524C5[] = {
  {&(_ZTV7S2524C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
Class_Descriptor cd_S2524C5 = {  "S2524C5", // class name
  bases_S2524C5, 1,
  &(vtc_S2524C5[0]), // expected_vtbl_contents
  &(vtt_S2524C5[0]), // expected_vtt_contents
  ABISELECT(1424,836), // object size
  NSPAIRA(_ZTI7S2524C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2524C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2524C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2524C6  {
  int s2524c6f0[2];
  char s2524c6f1:3;
  int s2524c6f2[5];
  int s2524c6f3:4;
  int s2524c6f4;
  ::S2524C5 s2524c6f5;
  virtual void  v1(); // _ZN7S2524C62v1Ev
  virtual void  v2(); // _ZN7S2524C62v2Ev
  ~S2524C6(); // tgen
  S2524C6(); // tgen
};
//SIG(-1 S2524C6) C1{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp}}


void  S2524C6 ::v1(){vfunc_called(this, "_ZN7S2524C62v1Ev");}
void  S2524C6 ::v2(){vfunc_called(this, "_ZN7S2524C62v2Ev");}
S2524C6 ::~S2524C6(){ note_dtor("S2524C6", this);} // tgen
S2524C6 ::S2524C6(){ note_ctor("S2524C6", this);} // tgen

static void Test_S2524C6()
{
  extern Class_Descriptor cd_S2524C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,221)];
    init_test(&cd_S2524C6, buf);
    S2524C6 *dp, &lv = *(dp=new (buf) S2524C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,880), "sizeof(S2524C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C6)");
    check_field_offset(lv, s2524c6f0, ABISELECT(8,4), "S2524C6.s2524c6f0");
    set_bf_and_test(lv, s2524c6f1, ABISELECT(16,12), 0, 3, 1, "S2524C6");
    set_bf_and_test(lv, s2524c6f1, ABISELECT(16,12), 0, 3, hide_sll(1LL<<2), "S2524C6");
    check_field_offset(lv, s2524c6f2, ABISELECT(20,16), "S2524C6.s2524c6f2");
    set_bf_and_test(lv, s2524c6f3, ABISELECT(40,36), 0, 4, 1, "S2524C6");
    set_bf_and_test(lv, s2524c6f3, ABISELECT(40,36), 0, 4, hide_sll(1LL<<3), "S2524C6");
    check_field_offset(lv, s2524c6f4, ABISELECT(44,40), "S2524C6.s2524c6f4");
    check_field_offset(lv, s2524c6f5, ABISELECT(48,44), "S2524C6.s2524c6f5");
    test_class_info(&lv, &cd_S2524C6);
    dp->~S2524C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C6(Test_S2524C6, "S2524C6", ABISELECT(1472,880));

#else // __cplusplus

extern void _ZN7S2524C6C1Ev();
extern void _ZN7S2524C6D1Ev();
Name_Map name_map_S2524C6[] = {
  NSPAIR(_ZN7S2524C6C1Ev),
  NSPAIR(_ZN7S2524C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2524C6[];
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY vtc_S2524C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C6[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
extern VTBL_ENTRY _ZTI7S2524C6[];
extern  VTBL_ENTRY _ZTV7S2524C6[];
Class_Descriptor cd_S2524C6 = {  "S2524C6", // class name
  0,0,//no base classes
  &(vtc_S2524C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,880), // object size
  NSPAIRA(_ZTI7S2524C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2524C6),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  S2524C7  {
  int s2524c7f0[2];
  __tsi64 s2524c7f1;
  void *s2524c7f2[6];
  void  mf2524c7(); // _ZN7S2524C78mf2524c7Ev
};
//SIG(-1 S2524C7) C1{ m Fi[2] FL Fp[6]}


void  S2524C7 ::mf2524c7(){}

static void Test_S2524C7()
{
  {
    init_simple_test("S2524C7");
    S2524C7 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2524C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2524C7)");
    check_field_offset(lv, s2524c7f0, 0, "S2524C7.s2524c7f0");
    check_field_offset(lv, s2524c7f1, 8, "S2524C7.s2524c7f1");
    check_field_offset(lv, s2524c7f2, 16, "S2524C7.s2524c7f2");
  }
}
static Arrange_To_Call_Me vS2524C7(Test_S2524C7, "S2524C7", ABISELECT(64,40));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S2524C7[];
VTBL_ENTRY *P__ZTI7S2524C7 = _ZTI7S2524C7; 
Class_Descriptor cd_S2524C7 = {  "S2524C7", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2524C7),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  S2524C2  : S7511C10 , virtual S7511C5 , S2524C5 , virtual S2524C6 , S2524C7 {
  short s2524c2f0;
  ::S2524C7 s2524c2f1;
  int s2524c2f2[2];
  ~S2524C2(); // tgen
  S2524C2(); // tgen
};
//SIG(-1 S2524C2) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} VBC5{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} BC6{ m Fi[2] FL Fp[6]} Fs FC6 Fi[2]}


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

static void Test_S2524C2()
{
  extern Class_Descriptor cd_S2524C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,458)];
    init_test(&cd_S2524C2, buf);
    S2524C2 *dp, &lv = *(dp=new (buf) S2524C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1828), "sizeof(S2524C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C2)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S2524C2");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1456,872), "S2524C2");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*), ABISELECT(1456,872), "S2524C2");
    check_base_class_offset(lv, (S2524C5*), 0, "S2524C2");
    check_base_class_offset(lv, (S2524C6*), ABISELECT(1584,948), "S2524C2");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(1312,780), "S2524C2");
    check_field_offset(lv, s2524c2f0, ABISELECT(1376,820), "S2524C2.s2524c2f0");
    check_field_offset(lv, s2524c2f1, ABISELECT(1384,824), "S2524C2.s2524c2f1");
    check_field_offset(lv, s2524c2f2, ABISELECT(1448,864), "S2524C2.s2524c2f2");
    test_class_info(&lv, &cd_S2524C2);
    dp->~S2524C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C2(Test_S2524C2, "S2524C2", ABISELECT(3056,1828));

#else // __cplusplus

extern void _ZN7S2524C2C1Ev();
extern void _ZN7S2524C2D1Ev();
Name_Map name_map_S2524C2[] = {
  NSPAIR(_ZN7S2524C2C1Ev),
  NSPAIR(_ZN7S2524C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C6;
extern VTBL_ENTRY _ZTI7S2524C6[];
extern  VTBL_ENTRY _ZTV7S2524C6[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
static Base_Class bases_S2524C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7511C5,    ABISELECT(1456,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2524C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2524C6,    ABISELECT(1584,948), //bcp->offset
    4, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2524C7,    ABISELECT(1312,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2524C2[];
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY vtc_S2524C2[] = {
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C2[0]),
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI7S2524C2[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2524C2[];
static  VTBL_ENTRY _tg__ZTV7S2524C5__7S2524C2[] = {
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTT_ENTRY vtt_S2524C2[] = {
  {&(_ZTV7S2524C2[4]),  4,10},
  {&(_tg__ZTV7S2524C5__7S2524C2[3]),  3,3},
  {&(_ZTV7S2524C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S2524C2[];
extern  VTBL_ENTRY _ZTV7S2524C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C2[];
Class_Descriptor cd_S2524C2 = {  "S2524C2", // class name
  bases_S2524C2, 5,
  &(vtc_S2524C2[0]), // expected_vtbl_contents
  &(vtt_S2524C2[0]), // expected_vtt_contents
  ABISELECT(3056,1828), // object size
  NSPAIRA(_ZTI7S2524C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2524C2),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2524C2),3, //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  S2524C12  {
  void *s2524c12f0;
  int s2524c12f1:7;
  void *s2524c12f2;
  int s2524c12f3;
  void *s2524c12f4[8];
  short s2524c12f5;
  int s2524c12f6[2];
  void *s2524c12f7;
  virtual void  v4(); // _ZN8S2524C122v4Ev
  ~S2524C12(); // tgen
  S2524C12(); // tgen
};
//SIG(-1 S2524C12) C1{ v1 Fp Fi:7 Fp Fi Fp[8] Fs Fi[2] Fp}


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

static void Test_S2524C12()
{
  extern Class_Descriptor cd_S2524C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S2524C12, buf);
    S2524C12 *dp, &lv = *(dp=new (buf) S2524C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S2524C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2524C12)");
    check_field_offset(lv, s2524c12f0, ABISELECT(8,4), "S2524C12.s2524c12f0");
    set_bf_and_test(lv, s2524c12f1, ABISELECT(16,8), 0, 7, 1, "S2524C12");
    set_bf_and_test(lv, s2524c12f1, ABISELECT(16,8), 0, 7, hide_sll(1LL<<6), "S2524C12");
    check_field_offset(lv, s2524c12f2, ABISELECT(24,12), "S2524C12.s2524c12f2");
    check_field_offset(lv, s2524c12f3, ABISELECT(32,16), "S2524C12.s2524c12f3");
    check_field_offset(lv, s2524c12f4, ABISELECT(40,20), "S2524C12.s2524c12f4");
    check_field_offset(lv, s2524c12f5, ABISELECT(104,52), "S2524C12.s2524c12f5");
    check_field_offset(lv, s2524c12f6, ABISELECT(108,56), "S2524C12.s2524c12f6");
    check_field_offset(lv, s2524c12f7, ABISELECT(120,64), "S2524C12.s2524c12f7");
    test_class_info(&lv, &cd_S2524C12);
    dp->~S2524C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C12(Test_S2524C12, "S2524C12", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S2524C12C1Ev();
extern void _ZN8S2524C12D1Ev();
Name_Map name_map_S2524C12[] = {
  NSPAIR(_ZN8S2524C12C1Ev),
  NSPAIR(_ZN8S2524C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2524C12[];
extern void _ZN8S2524C122v4Ev();
static  VTBL_ENTRY vtc_S2524C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C12[0]),
  (VTBL_ENTRY)&_ZN8S2524C122v4Ev,
};
extern VTBL_ENTRY _ZTI8S2524C12[];
extern  VTBL_ENTRY _ZTV8S2524C12[];
Class_Descriptor cd_S2524C12 = {  "S2524C12", // class name
  0,0,//no base classes
  &(vtc_S2524C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S2524C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2524C12),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  S2524C14  : S7511C10 , virtual S2524C7 , S2524C5 {
  short s2524c14f0;
  int s2524c14f1;
  long double s2524c14f2;
  char s2524c14f3;
  int s2524c14f4;
  long s2524c14f5;
  void *s2524c14f6;
  ::S2524C6 s2524c14f7;
  int s2524c14f8;
  void *s2524c14f9;
  virtual void  v12(); // _ZN8S2524C143v12Ev
  ~S2524C14(); // tgen
  S2524C14(); // tgen
};
//SIG(-1 S2524C14) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fi[2] FL Fp[6]} BC4{ VBC5{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC5 FC5 Fp Fi Fp[7] Fi[2] FC5 FC5[6] FL[2] Fp Fi Fp} v1 Fs Fi FD Fc Fi Fl Fp FC6{ v2 v3 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} Fi Fp}


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

static void Test_S2524C14()
{
  extern Class_Descriptor cd_S2524C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,456)];
    init_test(&cd_S2524C14, buf);
    S2524C14 *dp, &lv = *(dp=new (buf) S2524C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1820), "sizeof(S2524C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C14)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S2524C14");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(2864,1704), "S2524C14");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*), ABISELECT(2928,1744), "S2524C14");
    check_base_class_offset(lv, (S2524C5*), 0, "S2524C14");
    check_field_offset(lv, s2524c14f0, ABISELECT(1312,780), "S2524C14.s2524c14f0");
    check_field_offset(lv, s2524c14f1, ABISELECT(1316,784), "S2524C14.s2524c14f1");
    check_field_offset(lv, s2524c14f2, ABISELECT(1328,788), "S2524C14.s2524c14f2");
    check_field_offset(lv, s2524c14f3, ABISELECT(1344,800), "S2524C14.s2524c14f3");
    check_field_offset(lv, s2524c14f4, ABISELECT(1348,804), "S2524C14.s2524c14f4");
    check_field_offset(lv, s2524c14f5, ABISELECT(1352,808), "S2524C14.s2524c14f5");
    check_field_offset(lv, s2524c14f6, ABISELECT(1360,812), "S2524C14.s2524c14f6");
    check_field_offset(lv, s2524c14f7, ABISELECT(1376,816), "S2524C14.s2524c14f7");
    check_field_offset(lv, s2524c14f8, ABISELECT(2848,1696), "S2524C14.s2524c14f8");
    check_field_offset(lv, s2524c14f9, ABISELECT(2856,1700), "S2524C14.s2524c14f9");
    test_class_info(&lv, &cd_S2524C14);
    dp->~S2524C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C14(Test_S2524C14, "S2524C14", ABISELECT(3056,1820));

#else // __cplusplus

extern void _ZN8S2524C14C1Ev();
extern void _ZN8S2524C14D1Ev();
Name_Map name_map_S2524C14[] = {
  NSPAIR(_ZN8S2524C14C1Ev),
  NSPAIR(_ZN8S2524C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
static Base_Class bases_S2524C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2524C7,    ABISELECT(2864,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C5,    ABISELECT(2928,1744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2524C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2524C14[];
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY vtc_S2524C14[] = {
  ABISELECT(2864,1704),
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C14[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
extern VTBL_ENTRY _ZTV8S2524C14[];
static  VTBL_ENTRY _tg__ZTV7S2524C5__8S2524C14[] = {
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTT_ENTRY vtt_S2524C14[] = {
  {&(_ZTV8S2524C14[4]),  4,5},
  {&(_tg__ZTV7S2524C5__8S2524C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2524C14[];
extern  VTBL_ENTRY _ZTV8S2524C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C14[];
Class_Descriptor cd_S2524C14 = {  "S2524C14", // class name
  bases_S2524C14, 4,
  &(vtc_S2524C14[0]), // expected_vtbl_contents
  &(vtt_S2524C14[0]), // expected_vtt_contents
  ABISELECT(3056,1820), // object size
  NSPAIRA(_ZTI8S2524C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2524C14),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2524C14),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  S2524C13  {
  int s2524c13f0;
  ::S2524C14 s2524c13f1;
  ::S7511C5 s2524c13f2;
  void *s2524c13f3[11];
  virtual void  v5(); // _ZN8S2524C132v5Ev
  virtual void  v6(); // _ZN8S2524C132v6Ev
  ~S2524C13(); // tgen
  S2524C13(); // tgen
};
//SIG(-1 S2524C13) C1{ v1 v2 Fi FC2{ BC3{ m Fi Fs FL Fp} VBC4{ m Fi[2] FL Fp[6]} BC5{ VBC6{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC6 FC6 Fp Fi Fp[7] Fi[2] FC6 FC6[6] FL[2] Fp Fi Fp} v3 Fs Fi FD Fc Fi Fl Fp FC7{ v4 v5 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} Fi Fp} FC6 Fp[11]}


void  S2524C13 ::v5(){vfunc_called(this, "_ZN8S2524C132v5Ev");}
void  S2524C13 ::v6(){vfunc_called(this, "_ZN8S2524C132v6Ev");}
S2524C13 ::~S2524C13(){ note_dtor("S2524C13", this);} // tgen
S2524C13 ::S2524C13(){ note_ctor("S2524C13", this);} // tgen

static void Test_S2524C13()
{
  extern Class_Descriptor cd_S2524C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,488)];
    init_test(&cd_S2524C13, buf);
    S2524C13 *dp, &lv = *(dp=new (buf) S2524C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1948), "sizeof(S2524C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C13)");
    check_field_offset(lv, s2524c13f0, ABISELECT(8,4), "S2524C13.s2524c13f0");
    check_field_offset(lv, s2524c13f1, ABISELECT(16,8), "S2524C13.s2524c13f1");
    check_field_offset(lv, s2524c13f2, ABISELECT(3072,1828), "S2524C13.s2524c13f2");
    check_field_offset(lv, s2524c13f3, ABISELECT(3200,1904), "S2524C13.s2524c13f3");
    test_class_info(&lv, &cd_S2524C13);
    dp->~S2524C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C13(Test_S2524C13, "S2524C13", ABISELECT(3296,1948));

#else // __cplusplus

extern void _ZN8S2524C13C1Ev();
extern void _ZN8S2524C13D1Ev();
Name_Map name_map_S2524C13[] = {
  NSPAIR(_ZN8S2524C13C1Ev),
  NSPAIR(_ZN8S2524C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2524C13[];
extern void _ZN8S2524C132v5Ev();
extern void _ZN8S2524C132v6Ev();
static  VTBL_ENTRY vtc_S2524C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C13[0]),
  (VTBL_ENTRY)&_ZN8S2524C132v5Ev,
  (VTBL_ENTRY)&_ZN8S2524C132v6Ev,
};
extern VTBL_ENTRY _ZTI8S2524C13[];
extern  VTBL_ENTRY _ZTV8S2524C13[];
Class_Descriptor cd_S2524C13 = {  "S2524C13", // class name
  0,0,//no base classes
  &(vtc_S2524C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3296,1948), // object size
  NSPAIRA(_ZTI8S2524C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2524C13),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  S2524C10  : virtual S7511C25_nt , virtual S2524C12 , S2524C13 {
  ::S7511C9_nt s2524c10f0;
  int s2524c10f1[2];
  char s2524c10f2;
  void *s2524c10f3;
  virtual void  v7(); // _ZN8S2524C102v7Ev
  virtual void  v8(); // _ZN8S2524C102v8Ev
  virtual void  v9(); // _ZN8S2524C102v9Ev
  ~S2524C10(); // tgen
  S2524C10(); // tgen
};
//SIG(-1 S2524C10) C1{ VBC2{ m Fi} VBC3{ v4 Fp Fi:7 Fp Fi Fp[8] Fs Fi[2] Fp} BC4{ v5 v6 Fi FC5{ BC6{ m Fi Fs FL Fp} VBC7{ m Fi[2] FL Fp[6]} BC8{ VBC9{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC9 FC9 Fp Fi Fp[7] Fi[2] FC9 FC9[6] FL[2] Fp Fi Fp} v7 Fs Fi FD Fc Fi Fl Fp FC10{ v8 v9 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC8} Fi Fp} FC9 Fp[11]} v1 v2 v3 FC11{} Fi[2] Fc Fp}


void  S2524C10 ::v7(){vfunc_called(this, "_ZN8S2524C102v7Ev");}
void  S2524C10 ::v8(){vfunc_called(this, "_ZN8S2524C102v8Ev");}
void  S2524C10 ::v9(){vfunc_called(this, "_ZN8S2524C102v9Ev");}
S2524C10 ::~S2524C10(){ note_dtor("S2524C10", this);} // tgen
S2524C10 ::S2524C10(){ note_ctor("S2524C10", this);} // tgen

static void Test_S2524C10()
{
  extern Class_Descriptor cd_S2524C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(217,511)];
    init_test(&cd_S2524C10, buf);
    S2524C10 *dp, &lv = *(dp=new (buf) S2524C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3456,2040), "sizeof(S2524C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C10)");
    check_base_class_offset(lv, (S7511C25_nt*), ABISELECT(3312,1968), "S2524C10");
    check_base_class_offset(lv, (S2524C12*), ABISELECT(3320,1972), "S2524C10");
    check_base_class_offset(lv, (S2524C13*), 0, "S2524C10");
    check_field_offset(lv, s2524c10f0, ABISELECT(3288,1948), "S2524C10.s2524c10f0");
    check_field_offset(lv, s2524c10f1, ABISELECT(3292,1952), "S2524C10.s2524c10f1");
    check_field_offset(lv, s2524c10f2, ABISELECT(3300,1960), "S2524C10.s2524c10f2");
    check_field_offset(lv, s2524c10f3, ABISELECT(3304,1964), "S2524C10.s2524c10f3");
    test_class_info(&lv, &cd_S2524C10);
    dp->~S2524C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C10(Test_S2524C10, "S2524C10", ABISELECT(3456,2040));

#else // __cplusplus

extern void _ZN8S2524C10C1Ev();
extern void _ZN8S2524C10D1Ev();
Name_Map name_map_S2524C10[] = {
  NSPAIR(_ZN8S2524C10C1Ev),
  NSPAIR(_ZN8S2524C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C25_nt;
extern VTBL_ENTRY _ZTI11S7511C25_nt[];
extern Class_Descriptor cd_S2524C12;
extern VTBL_ENTRY _ZTI8S2524C12[];
extern  VTBL_ENTRY _ZTV8S2524C12[];
extern Class_Descriptor cd_S2524C13;
extern VTBL_ENTRY _ZTI8S2524C13[];
extern  VTBL_ENTRY _ZTV8S2524C13[];
static Base_Class bases_S2524C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C25_nt,    ABISELECT(3312,1968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2524C12,    ABISELECT(3320,1972), //bcp->offset
    9, //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_S2524C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2524C10[];
extern void _ZN8S2524C132v5Ev();
extern void _ZN8S2524C132v6Ev();
extern void _ZN8S2524C102v7Ev();
extern void _ZN8S2524C102v8Ev();
extern void _ZN8S2524C102v9Ev();
extern void _ZN8S2524C122v4Ev();
static  VTBL_ENTRY vtc_S2524C10[] = {
  ABISELECT(3320,1972),
  ABISELECT(3312,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C10[0]),
  (VTBL_ENTRY)&_ZN8S2524C132v5Ev,
  (VTBL_ENTRY)&_ZN8S2524C132v6Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v7Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v8Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v9Ev,
  0,
  ABISELECT(-3320,-1972),
  (VTBL_ENTRY)&(_ZTI8S2524C10[0]),
  (VTBL_ENTRY)&_ZN8S2524C122v4Ev,
};
extern VTBL_ENTRY _ZTV8S2524C10[];
static  VTT_ENTRY vtt_S2524C10[] = {
  {&(_ZTV8S2524C10[4]),  4,13},
  {&(_ZTV8S2524C10[12]),  12,13},
};
extern VTBL_ENTRY _ZTI8S2524C10[];
extern  VTBL_ENTRY _ZTV8S2524C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C10[];
Class_Descriptor cd_S2524C10 = {  "S2524C10", // class name
  bases_S2524C10, 3,
  &(vtc_S2524C10[0]), // expected_vtbl_contents
  &(vtt_S2524C10[0]), // expected_vtt_contents
  ABISELECT(3456,2040), // object size
  NSPAIRA(_ZTI8S2524C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2524C10),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2524C10),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  S2524C17  : virtual S7511C5 , S2524C5 {
  int s2524c17f0;
  void *s2524c17f1[3];
  int s2524c17f2;
  ::S7511C8 s2524c17f3;
  ::S7511C9_nt s2524c17f4;
  ::S7511C9_nt s2524c17f5;
  ::S2524C5 s2524c17f6;
  ::S7511C8 s2524c17f7;
  void *s2524c17f8[3];
  virtual  ~S2524C17(); // _ZN8S2524C17D2Ev
  S2524C17(); // tgen
};
//SIG(-1 S2524C17) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC3{ VBC2 FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU4{ m Fs:0 Fi FL Fp} FC5{} FC5 FC3 FU4 Fp[3]}


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

static void Test_S2524C17()
{
  extern Class_Descriptor cd_S2524C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(184,432)];
    init_test(&cd_S2524C17, buf);
    S2524C17 *dp, &lv = *(dp=new (buf) S2524C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2928,1724), "sizeof(S2524C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C17)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(2800,1648), "S2524C17");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*), ABISELECT(2800,1648), "S2524C17");
    check_base_class_offset(lv, (S2524C5*), 0, "S2524C17");
    check_field_offset(lv, s2524c17f0, ABISELECT(1288,760), "S2524C17.s2524c17f0");
    check_field_offset(lv, s2524c17f1, ABISELECT(1296,764), "S2524C17.s2524c17f1");
    check_field_offset(lv, s2524c17f2, ABISELECT(1320,776), "S2524C17.s2524c17f2");
    check_field_offset(lv, s2524c17f3, ABISELECT(1328,780), "S2524C17.s2524c17f3");
    check_field_offset(lv, s2524c17f4, ABISELECT(1336,788), "S2524C17.s2524c17f4");
    check_field_offset(lv, s2524c17f5, ABISELECT(1337,789), "S2524C17.s2524c17f5");
    check_field_offset(lv, s2524c17f6, ABISELECT(1344,792), "S2524C17.s2524c17f6");
    check_field_offset(lv, s2524c17f7, ABISELECT(2768,1628), "S2524C17.s2524c17f7");
    check_field_offset(lv, s2524c17f8, ABISELECT(2776,1636), "S2524C17.s2524c17f8");
    test_class_info(&lv, &cd_S2524C17);
    dp->~S2524C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C17(Test_S2524C17, "S2524C17", ABISELECT(2928,1724));

#else // __cplusplus

extern void _ZN8S2524C17C1Ev();
extern void _ZN8S2524C17D2Ev();
Name_Map name_map_S2524C17[] = {
  NSPAIR(_ZN8S2524C17C1Ev),
  NSPAIR(_ZN8S2524C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
static Base_Class bases_S2524C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(2800,1648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2524C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2524C17[];
extern void _ZN8S2524C17D1Ev();
extern void _ZN8S2524C17D0Ev();
static  VTBL_ENTRY vtc_S2524C17[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C17[0]),
  (VTBL_ENTRY)&_ZN8S2524C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C17D0Ev,
};
extern VTBL_ENTRY _ZTV8S2524C17[];
static  VTBL_ENTRY _tg__ZTV7S2524C5__8S2524C17[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTT_ENTRY vtt_S2524C17[] = {
  {&(_ZTV8S2524C17[3]),  3,5},
  {&(_tg__ZTV7S2524C5__8S2524C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2524C17[];
extern  VTBL_ENTRY _ZTV8S2524C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C17[];
Class_Descriptor cd_S2524C17 = {  "S2524C17", // class name
  bases_S2524C17, 2,
  &(vtc_S2524C17[0]), // expected_vtbl_contents
  &(vtt_S2524C17[0]), // expected_vtt_contents
  ABISELECT(2928,1724), // object size
  NSPAIRA(_ZTI8S2524C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2524C17),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2524C17),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  S2524C19  : virtual S7511C5 , virtual S2524C6 , virtual S2524C5 {
  __tsi64 s2524c19f0;
  int s2524c19f1;
  __tsi64 s2524c19f2[5];
  int s2524c19f3[9];
  int s2524c19f4;
  int s2524c19f5;
  ::S2524C5 s2524c19f6;
  void *s2524c19f7;
  char s2524c19f8;
  void *s2524c19f9;
  ::S7511C10 s2524c19f10;
  void *s2524c19f11[8];
  virtual void  v10(); // _ZN8S2524C193v10Ev
  virtual void  v11(); // _ZN8S2524C193v11Ev
  ~S2524C19(); // tgen
  S2524C19(); // tgen
};
//SIG(-1 S2524C19) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} VBC3{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4{ VBC2 FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}} VBC4 v1 v2 FL Fi FL[5] Fi[11] FC4 Fp Fc Fp FC5{ m Fi Fs FL Fp} Fp[8]}


void  S2524C19 ::v10(){vfunc_called(this, "_ZN8S2524C193v10Ev");}
void  S2524C19 ::v11(){vfunc_called(this, "_ZN8S2524C193v11Ev");}
S2524C19 ::~S2524C19(){ note_dtor("S2524C19", this);} // tgen
S2524C19 ::S2524C19(){ note_ctor("S2524C19", this);} // tgen

static void Test_S2524C19()
{
  extern Class_Descriptor cd_S2524C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,680)];
    init_test(&cd_S2524C19, buf);
    S2524C19 *dp, &lv = *(dp=new (buf) S2524C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,2716), "sizeof(S2524C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C19)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1648,1000), "S2524C19");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*), ABISELECT(1648,1000), "S2524C19");
    check_base_class_offset(lv, (S2524C6*), ABISELECT(1776,1076), "S2524C19");
    check_base_class_offset(lv, (S2524C5*), ABISELECT(3248,1956), "S2524C19");
    check_field_offset(lv, s2524c19f0, ABISELECT(8,4), "S2524C19.s2524c19f0");
    check_field_offset(lv, s2524c19f1, ABISELECT(16,12), "S2524C19.s2524c19f1");
    check_field_offset(lv, s2524c19f2, ABISELECT(24,16), "S2524C19.s2524c19f2");
    check_field_offset(lv, s2524c19f3, ABISELECT(64,56), "S2524C19.s2524c19f3");
    check_field_offset(lv, s2524c19f4, ABISELECT(100,92), "S2524C19.s2524c19f4");
    check_field_offset(lv, s2524c19f5, ABISELECT(104,96), "S2524C19.s2524c19f5");
    check_field_offset(lv, s2524c19f6, ABISELECT(112,100), "S2524C19.s2524c19f6");
    check_field_offset(lv, s2524c19f7, ABISELECT(1536,936), "S2524C19.s2524c19f7");
    check_field_offset(lv, s2524c19f8, ABISELECT(1544,940), "S2524C19.s2524c19f8");
    check_field_offset(lv, s2524c19f9, ABISELECT(1552,944), "S2524C19.s2524c19f9");
    check_field_offset(lv, s2524c19f10, ABISELECT(1560,948), "S2524C19.s2524c19f10");
    check_field_offset(lv, s2524c19f11, ABISELECT(1584,968), "S2524C19.s2524c19f11");
    test_class_info(&lv, &cd_S2524C19);
    dp->~S2524C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C19(Test_S2524C19, "S2524C19", ABISELECT(4544,2716));

#else // __cplusplus

extern void _ZN8S2524C19C1Ev();
extern void _ZN8S2524C19D1Ev();
Name_Map name_map_S2524C19[] = {
  NSPAIR(_ZN8S2524C19C1Ev),
  NSPAIR(_ZN8S2524C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C6;
extern VTBL_ENTRY _ZTI7S2524C6[];
extern  VTBL_ENTRY _ZTV7S2524C6[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
static Base_Class bases_S2524C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1648,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2524C6,    ABISELECT(1776,1076), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2524C5,    ABISELECT(3248,1956), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S2524C19[];
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY vtc_S2524C19[] = {
  ABISELECT(3248,1956),
  ABISELECT(1776,1076),
  ABISELECT(1648,1000),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
  0,
  0,
  ABISELECT(-1776,-1076),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
  ABISELECT(-1600,-956),
  ABISELECT(-3248,-1956),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
};
extern VTBL_ENTRY _ZTV8S2524C19[];
static  VTBL_ENTRY _tg__ZTV7S2524C5__8S2524C19[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTT_ENTRY vtt_S2524C19[] = {
  {&(_ZTV8S2524C19[5]),  5,16},
  {&(_ZTV8S2524C19[11]),  11,16},
  {&(_ZTV8S2524C19[16]),  16,16},
  {&(_tg__ZTV7S2524C5__8S2524C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2524C19[];
extern  VTBL_ENTRY _ZTV8S2524C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C19[];
Class_Descriptor cd_S2524C19 = {  "S2524C19", // class name
  bases_S2524C19, 3,
  &(vtc_S2524C19[0]), // expected_vtbl_contents
  &(vtt_S2524C19[0]), // expected_vtt_contents
  ABISELECT(4544,2716), // object size
  NSPAIRA(_ZTI8S2524C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2524C19),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2524C19),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  S2524C16  : virtual S2524C17 , S7511C10 , virtual S2524C5 , virtual S2524C19 , virtual S2524C14 {
  int s2524c16f0;
  int s2524c16f1;
  void *s2524c16f2[7];
  int s2524c16f3;
  ::S2524C2 s2524c16f4;
  virtual  ~S2524C16(); // _ZN8S2524C16D2Ev
  S2524C16(); // tgen
};
//SIG(-1 S2524C16) C1{ VBC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU5{ m Fs:0 Fi FL Fp} FC6{} FC6 FC4 FU5 Fp[3]} BC7{ m Fi Fs FL Fp} VBC4 VBC8{ VBC3 VBC9{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} VBC4 v3 v4 FL Fi FL[5] Fi[9] Fi Fi FC4 Fp Fc Fp FC7 Fp[8]} VBC10{ BC7 VBC11{ m Fi[2] FL Fp[6]} BC4 v5 Fs Fi FD Fc Fi Fl Fp FC9 Fi Fp} vd Fi Fi Fp[7] Fi FC12{ BC7 VBC3 BC4 VBC9 BC11 Fs FC11 Fi[2]}}


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

static void Test_S2524C16()
{
  extern Class_Descriptor cd_S2524C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(841,2001)];
    init_test(&cd_S2524C16, buf);
    S2524C16 *dp, &lv = *(dp=new (buf) S2524C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13440,8000), "sizeof(S2524C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C16)");
    check_base_class_offset(lv, (S7511C5*)(S2524C17*), ABISELECT(5968,3540), "S2524C16");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C17*), ABISELECT(5968,3540), "S2524C16");
    /*is_ambiguous_... S2524C16::S2524C5 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C5*), ABISELECT(5968,3540), "S2524C16");
    check_base_class_offset(lv, (S7511C5*)(S2524C19*), ABISELECT(5968,3540), "S2524C16");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C14*), ABISELECT(5968,3540), "S2524C16");
    check_base_class_offset(lv, (S2524C5*)(S2524C17*), ABISELECT(3168,1892), "S2524C16");
    check_base_class_offset(lv, (S2524C17*), ABISELECT(3168,1892), "S2524C16");
    /*is_ambiguous_... S2524C16::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*), ABISELECT(8,4), "S2524C16");
    /*is_ambiguous_... S2524C16::S2524C5 */ AMB_check_base_class_offset(lv, (S2524C5*), ABISELECT(6096,3616), "S2524C16");
    check_base_class_offset(lv, (S2524C5*)(S2524C19*), ABISELECT(6096,3616), "S2524C16");
    check_base_class_offset(lv, (S2524C6*)(S2524C19*), ABISELECT(9040,5376), "S2524C16");
    check_base_class_offset(lv, (S2524C19*), ABISELECT(7392,4376), "S2524C16");
    check_base_class_offset(lv, (S7511C10*)(S2524C14*), ABISELECT(11800,7016), "S2524C16");
    check_base_class_offset(lv, (S2524C7*)(S2524C14*), ABISELECT(13376,7960), "S2524C16");
    check_base_class_offset(lv, (S2524C5*)(S2524C14*), ABISELECT(10512,6256), "S2524C16");
    check_base_class_offset(lv, (S2524C14*), ABISELECT(10512,6256), "S2524C16");
    check_field_offset(lv, s2524c16f0, ABISELECT(32,24), "S2524C16.s2524c16f0");
    check_field_offset(lv, s2524c16f1, ABISELECT(36,28), "S2524C16.s2524c16f1");
    check_field_offset(lv, s2524c16f2, ABISELECT(40,32), "S2524C16.s2524c16f2");
    check_field_offset(lv, s2524c16f3, ABISELECT(96,60), "S2524C16.s2524c16f3");
    check_field_offset(lv, s2524c16f4, ABISELECT(112,64), "S2524C16.s2524c16f4");
    test_class_info(&lv, &cd_S2524C16);
    dp->~S2524C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C16(Test_S2524C16, "S2524C16", ABISELECT(13440,8000));

#else // __cplusplus

extern void _ZN8S2524C16C1Ev();
extern void _ZN8S2524C16D2Ev();
Name_Map name_map_S2524C16[] = {
  NSPAIR(_ZN8S2524C16C1Ev),
  NSPAIR(_ZN8S2524C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C17;
extern VTBL_ENTRY _ZTI8S2524C17[];
extern  VTBL_ENTRY _ZTV8S2524C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C17[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C6;
extern VTBL_ENTRY _ZTI7S2524C6[];
extern  VTBL_ENTRY _ZTV7S2524C6[];
extern Class_Descriptor cd_S2524C19;
extern VTBL_ENTRY _ZTI8S2524C19[];
extern  VTBL_ENTRY _ZTV8S2524C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C19[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C14;
extern VTBL_ENTRY _ZTI8S2524C14[];
extern  VTBL_ENTRY _ZTV8S2524C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C14[];
static Base_Class bases_S2524C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(5968,3540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S2524C5,    ABISELECT(3168,1892), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2524C17,    ABISELECT(3168,1892), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    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_S2524C5,    ABISELECT(6096,3616), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2524C6,    ABISELECT(9040,5376), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2524C19,    ABISELECT(7392,4376), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    ABISELECT(11800,7016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2524C7,    ABISELECT(13376,7960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2524C5,    ABISELECT(10512,6256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2524C14,    ABISELECT(10512,6256), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2524C16[];
extern void _ZN8S2524C16D1Ev();
extern void _ZN8S2524C16D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev)();
extern void ABISELECT(_ZThn3168_N8S2524C16D1Ev,_ZThn1892_N8S2524C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev)();
extern void ABISELECT(_ZThn3168_N8S2524C16D0Ev,_ZThn1892_N8S2524C16D0Ev)() __attribute__((weak));
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY vtc_S2524C16[] = {
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C16D0Ev,
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
  0,
  0,
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-10512,-6256),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
extern VTBL_ENTRY _ZTV8S2524C16[];
extern void _ZN8S2524C17D1Ev();
extern void _ZN8S2524C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C17__8S2524C16[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C17[0]),
  (VTBL_ENTRY)&_ZN8S2524C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C17__8S2524C16[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__A1__8S2524C16[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C19__8S2524C16[] = {
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
};
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2524C6__8S2524C19__8S2524C16[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__8S2524C19__8S2524C16[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
};
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C14__8S2524C16[] = {
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C14[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C14__A2__8S2524C16[] = {
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTT_ENTRY vtt_S2524C16[] = {
  {&(_ZTV8S2524C16[9]),  9,41},
  {&(_ZTV8S2524C16[15]),  15,41},
  {&(_ZTV8S2524C16[20]),  20,41},
  {&(_ZTV8S2524C16[27]),  27,41},
  {&(_ZTV8S2524C16[33]),  33,41},
  {&(_ZTV8S2524C16[40]),  40,41},
  {&(_tg__ZTV8S2524C17__8S2524C16[3]),  3,5},
  {&(_tg__ZTV7S2524C58S2524C17__8S2524C16[3]),  3,3},
  {&(_tg__ZTV7S2524C5__A1__8S2524C16[3]),  3,3},
  {&(_tg__ZTV8S2524C19__8S2524C16[5]),  5,7},
  {&(_tg__ZTV7S2524C6__8S2524C19__8S2524C16[4]),  4,6},
  {&(_tg__ZTV7S2524C5__8S2524C19__8S2524C16[3]),  3,3},
  {&(_tg__ZTV8S2524C14__8S2524C16[4]),  4,5},
  {&(_tg__ZTV7S2524C58S2524C14__A2__8S2524C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2524C16[];
extern  VTBL_ENTRY _ZTV8S2524C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C16[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S2524C16D0Ev,_ZThn1892_N8S2524C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S2524C16D1Ev,_ZThn1892_N8S2524C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2524C16 = {  "S2524C16", // class name
  bases_S2524C16, 11,
  &(vtc_S2524C16[0]), // expected_vtbl_contents
  &(vtt_S2524C16[0]), // expected_vtt_contents
  ABISELECT(13440,8000), // object size
  NSPAIRA(_ZTI8S2524C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2524C16),41, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2524C16),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2524C15  : virtual S2524C16 , S2524C13 , S2524C17 {
  int s2524c15f0;
  void *s2524c15f1;
  long double s2524c15f2[5];
  ~S2524C15(); // tgen
  S2524C15(); // tgen
};
//SIG(-1 S2524C15) C1{ VBC2{ VBC3{ VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC5{ VBC4 FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU6{ m Fs:0 Fi FL Fp} FC7{} FC7 FC5 FU6 Fp[3]} BC8{ m Fi Fs FL Fp} VBC5 VBC9{ VBC4 VBC10{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} VBC5 v3 v4 FL Fi FL[5] Fi[9] Fi Fi FC5 Fp Fc Fp FC8 Fp[8]} VBC11{ BC8 VBC12{ m Fi[2] FL Fp[6]} BC5 v5 Fs Fi FD Fc Fi Fl Fp FC10 Fi Fp} vd Fi Fi Fp[7] Fi FC13{ BC8 VBC4 BC5 VBC10 BC12 Fs FC12 Fi[2]}} BC14{ v6 v7 Fi FC11 FC4 Fp[11]} BC3 Fi Fp FD[5]}


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

static void Test_S2524C15()
{
  extern Class_Descriptor cd_S2524C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1228,2917)];
    init_test(&cd_S2524C15, buf);
    S2524C15 *dp, &lv = *(dp=new (buf) S2524C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19632,11664), "sizeof(S2524C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C15)");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C17*), ABISELECT(12160,7204), "S2524C15");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C17*), ABISELECT(12160,7204), "S2524C15");
    /*is_ambiguous_... S2524C15::S2524C5 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C5*), ABISELECT(12160,7204), "S2524C15");
    check_base_class_offset(lv, (S7511C5*)(S2524C19*), ABISELECT(12160,7204), "S2524C15");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C14*), ABISELECT(12160,7204), "S2524C15");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C17*), ABISELECT(12160,7204), "S2524C15");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C17*), ABISELECT(12160,7204), "S2524C15");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S2524C5*)(S2524C17*), ABISELECT(9360,5556), "S2524C15");
    check_base_class_offset(lv, (S2524C17*)(S2524C16*), ABISELECT(9360,5556), "S2524C15");
    /*is_ambiguous_... S2524C16::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S2524C16*), ABISELECT(6200,3668), "S2524C15");
    /*is_ambiguous_... S2524C16::S2524C5 */ AMB_check_base_class_offset(lv, (S2524C5*)(S2524C16*), ABISELECT(12288,7280), "S2524C15");
    check_base_class_offset(lv, (S2524C5*)(S2524C19*), ABISELECT(12288,7280), "S2524C15");
    check_base_class_offset(lv, (S2524C6*)(S2524C19*), ABISELECT(15232,9040), "S2524C15");
    check_base_class_offset(lv, (S2524C19*)(S2524C16*), ABISELECT(13584,8040), "S2524C15");
    check_base_class_offset(lv, (S7511C10*)(S2524C14*), ABISELECT(17992,10680), "S2524C15");
    check_base_class_offset(lv, (S2524C7*)(S2524C14*), ABISELECT(19568,11624), "S2524C15");
    check_base_class_offset(lv, (S2524C5*)(S2524C14*), ABISELECT(16704,9920), "S2524C15");
    check_base_class_offset(lv, (S2524C14*)(S2524C16*), ABISELECT(16704,9920), "S2524C15");
    check_base_class_offset(lv, (S2524C16*), ABISELECT(6192,3664), "S2524C15");
    check_base_class_offset(lv, (S2524C13*), 0, "S2524C15");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S2524C5*)(S2524C17*), ABISELECT(3296,1948), "S2524C15");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S2524C17*), ABISELECT(3296,1948), "S2524C15");
    check_field_offset(lv, s2524c15f0, ABISELECT(6096,3596), "S2524C15.s2524c15f0");
    check_field_offset(lv, s2524c15f1, ABISELECT(6104,3600), "S2524C15.s2524c15f1");
    check_field_offset(lv, s2524c15f2, ABISELECT(6112,3604), "S2524C15.s2524c15f2");
    test_class_info(&lv, &cd_S2524C15);
    dp->~S2524C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C15(Test_S2524C15, "S2524C15", ABISELECT(19632,11664));

#else // __cplusplus

extern void _ZN8S2524C15C1Ev();
extern void _ZN8S2524C15D1Ev();
Name_Map name_map_S2524C15[] = {
  NSPAIR(_ZN8S2524C15C1Ev),
  NSPAIR(_ZN8S2524C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C17;
extern VTBL_ENTRY _ZTI8S2524C17[];
extern  VTBL_ENTRY _ZTV8S2524C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C17[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C6;
extern VTBL_ENTRY _ZTI7S2524C6[];
extern  VTBL_ENTRY _ZTV7S2524C6[];
extern Class_Descriptor cd_S2524C19;
extern VTBL_ENTRY _ZTI8S2524C19[];
extern  VTBL_ENTRY _ZTV8S2524C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C19[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C14;
extern VTBL_ENTRY _ZTI8S2524C14[];
extern  VTBL_ENTRY _ZTV8S2524C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C14[];
extern Class_Descriptor cd_S2524C16;
extern VTBL_ENTRY _ZTI8S2524C16[];
extern  VTBL_ENTRY _ZTV8S2524C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C16[];
extern Class_Descriptor cd_S2524C13;
extern VTBL_ENTRY _ZTI8S2524C13[];
extern  VTBL_ENTRY _ZTV8S2524C13[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C17;
extern VTBL_ENTRY _ZTI8S2524C17[];
extern  VTBL_ENTRY _ZTV8S2524C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C17[];
static Base_Class bases_S2524C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(12160,7204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S2524C5,    ABISELECT(9360,5556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2524C17,    ABISELECT(9360,5556), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(6200,3668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2524C5,    ABISELECT(12288,7280), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2524C6,    ABISELECT(15232,9040), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2524C19,    ABISELECT(13584,8040), //bcp->offset
    40, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(17992,10680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2524C7,    ABISELECT(19568,11624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2524C5,    ABISELECT(16704,9920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2524C14,    ABISELECT(16704,9920), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2524C16,    ABISELECT(6192,3664), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2524C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2524C5,    ABISELECT(3296,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2524C17,    ABISELECT(3296,1948), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //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 _ZTI8S2524C15[];
extern void _ZN8S2524C132v5Ev();
extern void _ZN8S2524C132v6Ev();
extern void _ZN8S2524C15D1Ev();
extern void _ZN8S2524C15D0Ev();
extern void ABISELECT(_ZThn3296_N8S2524C15D1Ev,_ZThn1948_N8S2524C15D1Ev)();
extern void ABISELECT(_ZThn3296_N8S2524C15D0Ev,_ZThn1948_N8S2524C15D0Ev)();
extern void ABISELECT(_ZTv0_n80_N8S2524C15D1Ev,_ZTv0_n40_N8S2524C15D1Ev)();
extern void ABISELECT(_ZThn6192_N8S2524C15D1Ev,_ZThn3664_N8S2524C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2524C15D0Ev,_ZTv0_n40_N8S2524C15D0Ev)();
extern void ABISELECT(_ZThn6192_N8S2524C15D0Ev,_ZThn3664_N8S2524C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2524C15D1Ev,_ZTv0_n16_N8S2524C15D1Ev)();
extern void ABISELECT(_ZThn9360_N8S2524C15D1Ev,_ZThn5556_N8S2524C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2524C15D0Ev,_ZTv0_n16_N8S2524C15D0Ev)();
extern void ABISELECT(_ZThn9360_N8S2524C15D0Ev,_ZThn5556_N8S2524C15D0Ev)() __attribute__((weak));
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY vtc_S2524C15[] = {
  ABISELECT(19568,11624),
  ABISELECT(16704,9920),
  ABISELECT(15232,9040),
  ABISELECT(13584,8040),
  ABISELECT(12288,7280),
  ABISELECT(12160,7204),
  ABISELECT(9360,5556),
  ABISELECT(6192,3664),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN8S2524C132v5Ev,
  (VTBL_ENTRY)&_ZN8S2524C132v6Ev,
  (VTBL_ENTRY)&_ZN8S2524C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C15D0Ev,
  ABISELECT(8864,5256),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S2524C15D1Ev,_ZThn1948_N8S2524C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S2524C15D0Ev,_ZThn1948_N8S2524C15D0Ev),
  ABISELECT(-6192,-3664),
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-6192,-3664),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2524C15D1Ev,_ZTv0_n40_N8S2524C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2524C15D0Ev,_ZTv0_n40_N8S2524C15D0Ev),
  ABISELECT(-9360,-5556),
  ABISELECT(2800,1648),
  ABISELECT(-9360,-5556),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C15D1Ev,_ZTv0_n16_N8S2524C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C15D0Ev,_ZTv0_n16_N8S2524C15D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-12288,-7280),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-13584,-8040),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
  0,
  0,
  ABISELECT(-15232,-9040),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-16704,-9920),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
extern VTBL_ENTRY _ZTV8S2524C15[];
extern void _ZN8S2524C17D1Ev();
extern void _ZN8S2524C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C17__A__8S2524C15[] = {
  ABISELECT(8864,5256),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C17[0]),
  (VTBL_ENTRY)&_ZN8S2524C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C17__A3__8S2524C15[] = {
  ABISELECT(8864,5256),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
extern void _ZN8S2524C16D1Ev();
extern void _ZN8S2524C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C16__8S2524C15[] = {
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev)();
extern void ABISELECT(_ZThn3168_N8S2524C16D1Ev,_ZThn1892_N8S2524C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev)();
extern void ABISELECT(_ZThn3168_N8S2524C16D0Ev,_ZThn1892_N8S2524C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2524C17__8S2524C16__8S2524C15[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__A1__8S2524C16__8S2524C15[] = {
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
};
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C19__8S2524C16__8S2524C15[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
};
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2524C6__8S2524C16__8S2524C15[] = {
  0,
  0,
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C14__8S2524C16__8S2524C15[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-10512,-6256),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
extern void _ZN8S2524C17D1Ev();
extern void _ZN8S2524C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C17__8S2524C15[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C17[0]),
  (VTBL_ENTRY)&_ZN8S2524C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C17__8S2524C15[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__A1__8S2524C15[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C19__8S2524C15[] = {
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
};
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2524C6__8S2524C19__8S2524C15[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__8S2524C19__8S2524C15[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
};
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C14__8S2524C15[] = {
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C14[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C14__A2__8S2524C15[] = {
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTT_ENTRY vtt_S2524C15[] = {
  {&(_ZTV8S2524C15[10]),  10,61},
  {&(_tg__ZTV8S2524C17__A__8S2524C15[3]),  3,5},
  {&(_tg__ZTV7S2524C58S2524C17__A3__8S2524C15[3]),  3,3},
  {&(_ZTV8S2524C15[29]),  29,61},
  {&(_ZTV8S2524C15[35]),  35,61},
  {&(_ZTV8S2524C15[40]),  40,61},
  {&(_ZTV8S2524C15[47]),  47,61},
  {&(_ZTV8S2524C15[53]),  53,61},
  {&(_ZTV8S2524C15[60]),  60,61},
  {&(_ZTV8S2524C15[17]),  17,61},
  {&(_tg__ZTV8S2524C16__8S2524C15[9]),  9,11},
  {&(_tg__ZTV8S2524C17__8S2524C16__8S2524C15[4]),  4,6},
  {&(_tg__ZTV7S2524C5__A1__8S2524C16__8S2524C15[3]),  3,3},
  {&(_tg__ZTV8S2524C19__8S2524C16__8S2524C15[7]),  7,9},
  {&(_tg__ZTV7S2524C6__8S2524C16__8S2524C15[4]),  4,6},
  {&(_tg__ZTV8S2524C14__8S2524C16__8S2524C15[5]),  5,6},
  {&(_tg__ZTV8S2524C17__8S2524C15[3]),  3,5},
  {&(_tg__ZTV7S2524C58S2524C17__8S2524C15[3]),  3,3},
  {&(_tg__ZTV7S2524C5__A1__8S2524C15[3]),  3,3},
  {&(_tg__ZTV8S2524C19__8S2524C15[5]),  5,7},
  {&(_tg__ZTV7S2524C6__8S2524C19__8S2524C15[4]),  4,6},
  {&(_tg__ZTV7S2524C5__8S2524C19__8S2524C15[3]),  3,3},
  {&(_tg__ZTV8S2524C14__8S2524C15[4]),  4,5},
  {&(_tg__ZTV7S2524C58S2524C14__A2__8S2524C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2524C15[];
extern  VTBL_ENTRY _ZTV8S2524C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C15[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S2524C16D0Ev,_ZThn1892_N8S2524C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S2524C16D1Ev,_ZThn1892_N8S2524C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C15D0Ev,_ZTv0_n16_N8S2524C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9360_N8S2524C15D0Ev,_ZThn5556_N8S2524C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C15D1Ev,_ZTv0_n16_N8S2524C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9360_N8S2524C15D1Ev,_ZThn5556_N8S2524C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2524C15D0Ev,_ZTv0_n40_N8S2524C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S2524C15D0Ev,_ZThn3664_N8S2524C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2524C15D1Ev,_ZTv0_n40_N8S2524C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S2524C15D1Ev,_ZThn3664_N8S2524C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2524C15 = {  "S2524C15", // class name
  bases_S2524C15, 15,
  &(vtc_S2524C15[0]), // expected_vtbl_contents
  &(vtt_S2524C15[0]), // expected_vtt_contents
  ABISELECT(19632,11664), // object size
  NSPAIRA(_ZTI8S2524C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2524C15),61, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2524C15),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2524C9  : S7511C10 , virtual S2524C10 , S2524C15 {
  void *s2524c9f0;
  void *s2524c9f1;
  int s2524c9f2;
  void *s2524c9f3;
  virtual  ~S2524C9(); // _ZN7S2524C9D2Ev
  virtual void  v3(); // _ZN7S2524C92v3Ev
  S2524C9(); // tgen
};
//SIG(-1 S2524C9) C1{ BC2{ m Fi Fs FL Fp} VBC3{ VBC4{ m Fi} VBC5{ v2 Fp Fi:7 Fp Fi Fp[8] Fs Fi[2] Fp} BC6{ v3 v4 Fi FC7{ BC2 VBC8{ m Fi[2] FL Fp[6]} BC9{ VBC10{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC10 FC10 Fp Fi Fp[7] Fi[2] FC10 FC10[6] FL[2] Fp Fi Fp} v12 Fs Fi FD Fc Fi Fl Fp FC11{ v8 v9 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC9} Fi Fp} FC10 Fp[11]} v5 v6 v7 FC12{} Fi[2] Fc Fp} BC13{ VBC14{ VBC15{ VBC10 BC9 vd Fi Fp[3] Fi FU16{ m Fs:0 Fi FL Fp} FC12 FC12 FC9 FU16 Fp[3]} BC2 VBC9 VBC17{ VBC10 VBC11 VBC9 v10 v11 FL Fi FL[5] Fi[9] Fi Fi FC9 Fp Fc Fp FC2 Fp[8]} VBC7 vd Fi Fi Fp[7] Fi FC18{ BC2 VBC10 BC9 VBC11 BC8 Fs FC8 Fi[2]}} BC6 BC15 Fi Fp FD[5]} vd v1 Fp Fp Fi Fp}


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

static void Test_S2524C9()
{
  extern Class_Descriptor cd_S2524C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1448,3436)];
    init_test(&cd_S2524C9, buf);
    S2524C9 *dp, &lv = *(dp=new (buf) S2524C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23152,13740), "sizeof(S2524C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C9)");
    /*is_ambiguous_... S2524C9::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*), ABISELECT(6192,3664), "S2524C9");
    check_base_class_offset(lv, (S7511C25_nt*)(S2524C10*), ABISELECT(9568,5668), "S2524C9");
    check_base_class_offset(lv, (S2524C12*)(S2524C10*), ABISELECT(9576,5672), "S2524C9");
    check_base_class_offset(lv, (S2524C13*)(S2524C10*), ABISELECT(6256,3700), "S2524C9");
    check_base_class_offset(lv, (S2524C10*), ABISELECT(6256,3700), "S2524C9");
    /*is_ambiguous_... S2524C9::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C17*), ABISELECT(15680,9280), "S2524C9");
    /*is_ambiguous_... S2524C9::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C17*), ABISELECT(15680,9280), "S2524C9");
    /*is_ambiguous_... S2524C9::S2524C5 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C5*), ABISELECT(15680,9280), "S2524C9");
    check_base_class_offset(lv, (S7511C5*)(S2524C19*), ABISELECT(15680,9280), "S2524C9");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C14*), ABISELECT(15680,9280), "S2524C9");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C17*)(S2524C15*), ABISELECT(15680,9280), "S2524C9");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C17*)(S2524C15*), ABISELECT(15680,9280), "S2524C9");
    /*is_ambiguous_... S2524C9::S2524C17 */ AMB_check_base_class_offset(lv, (S2524C5*)(S2524C17*), ABISELECT(12880,7632), "S2524C9");
    check_base_class_offset(lv, (S2524C17*)(S2524C16*), ABISELECT(12880,7632), "S2524C9");
    /*is_ambiguous_... S2524C16::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S2524C16*), ABISELECT(9720,5744), "S2524C9");
    /*is_ambiguous_... S2524C16::S2524C5 */ AMB_check_base_class_offset(lv, (S2524C5*)(S2524C16*), ABISELECT(15808,9356), "S2524C9");
    check_base_class_offset(lv, (S2524C5*)(S2524C19*), ABISELECT(15808,9356), "S2524C9");
    check_base_class_offset(lv, (S2524C6*)(S2524C19*), ABISELECT(18752,11116), "S2524C9");
    check_base_class_offset(lv, (S2524C19*)(S2524C16*), ABISELECT(17104,10116), "S2524C9");
    check_base_class_offset(lv, (S7511C10*)(S2524C14*), ABISELECT(21512,12756), "S2524C9");
    check_base_class_offset(lv, (S2524C7*)(S2524C14*), ABISELECT(23088,13700), "S2524C9");
    check_base_class_offset(lv, (S2524C5*)(S2524C14*), ABISELECT(20224,11996), "S2524C9");
    check_base_class_offset(lv, (S2524C14*)(S2524C16*), ABISELECT(20224,11996), "S2524C9");
    check_base_class_offset(lv, (S2524C16*)(S2524C15*), ABISELECT(9712,5740), "S2524C9");
    check_base_class_offset(lv, (S2524C13*)(S2524C15*), 0, "S2524C9");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S2524C5*)(S2524C17*)(S2524C15*), ABISELECT(3296,1948), "S2524C9");
    /*is_ambiguous_... S2524C15::S2524C17 */ AMB_check_base_class_offset(lv, (S2524C17*)(S2524C15*), ABISELECT(3296,1948), "S2524C9");
    check_base_class_offset(lv, (S2524C15*), 0, "S2524C9");
    check_field_offset(lv, s2524c9f0, ABISELECT(6216,3684), "S2524C9.s2524c9f0");
    check_field_offset(lv, s2524c9f1, ABISELECT(6224,3688), "S2524C9.s2524c9f1");
    check_field_offset(lv, s2524c9f2, ABISELECT(6232,3692), "S2524C9.s2524c9f2");
    check_field_offset(lv, s2524c9f3, ABISELECT(6240,3696), "S2524C9.s2524c9f3");
    test_class_info(&lv, &cd_S2524C9);
    dp->~S2524C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C9(Test_S2524C9, "S2524C9", ABISELECT(23152,13740));

#else // __cplusplus

extern void _ZN7S2524C9C1Ev();
extern void _ZN7S2524C9D2Ev();
Name_Map name_map_S2524C9[] = {
  NSPAIR(_ZN7S2524C9C1Ev),
  NSPAIR(_ZN7S2524C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C25_nt;
extern VTBL_ENTRY _ZTI11S7511C25_nt[];
extern Class_Descriptor cd_S2524C12;
extern VTBL_ENTRY _ZTI8S2524C12[];
extern  VTBL_ENTRY _ZTV8S2524C12[];
extern Class_Descriptor cd_S2524C13;
extern VTBL_ENTRY _ZTI8S2524C13[];
extern  VTBL_ENTRY _ZTV8S2524C13[];
extern Class_Descriptor cd_S2524C10;
extern VTBL_ENTRY _ZTI8S2524C10[];
extern  VTBL_ENTRY _ZTV8S2524C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C17;
extern VTBL_ENTRY _ZTI8S2524C17[];
extern  VTBL_ENTRY _ZTV8S2524C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C17[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C6;
extern VTBL_ENTRY _ZTI7S2524C6[];
extern  VTBL_ENTRY _ZTV7S2524C6[];
extern Class_Descriptor cd_S2524C19;
extern VTBL_ENTRY _ZTI8S2524C19[];
extern  VTBL_ENTRY _ZTV8S2524C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C19[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C14;
extern VTBL_ENTRY _ZTI8S2524C14[];
extern  VTBL_ENTRY _ZTV8S2524C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C14[];
extern Class_Descriptor cd_S2524C16;
extern VTBL_ENTRY _ZTI8S2524C16[];
extern  VTBL_ENTRY _ZTV8S2524C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C16[];
extern Class_Descriptor cd_S2524C13;
extern VTBL_ENTRY _ZTI8S2524C13[];
extern  VTBL_ENTRY _ZTV8S2524C13[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C17;
extern VTBL_ENTRY _ZTI8S2524C17[];
extern  VTBL_ENTRY _ZTV8S2524C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C17[];
extern Class_Descriptor cd_S2524C15;
extern VTBL_ENTRY _ZTI8S2524C15[];
extern  VTBL_ENTRY _ZTV8S2524C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2524C15[];
static Base_Class bases_S2524C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(6192,3664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C25_nt,    ABISELECT(9568,5668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2524C12,    ABISELECT(9576,5672), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2524C13,    ABISELECT(6256,3700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2524C10,    ABISELECT(6256,3700), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C5,    ABISELECT(15680,9280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2524C5,    ABISELECT(12880,7632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2524C17,    ABISELECT(12880,7632), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(9720,5744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2524C5,    ABISELECT(15808,9356), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2524C6,    ABISELECT(18752,11116), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2524C19,    ABISELECT(17104,10116), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(21512,12756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2524C7,    ABISELECT(23088,13700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2524C5,    ABISELECT(20224,11996), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2524C14,    ABISELECT(20224,11996), //bcp->offset
    77, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2524C16,    ABISELECT(9712,5740), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2524C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S2524C5,    ABISELECT(3296,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2524C17,    ABISELECT(3296,1948), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2524C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2524C9[];
extern void _ZN8S2524C132v5Ev();
extern void _ZN8S2524C132v6Ev();
extern void _ZN7S2524C9D1Ev();
extern void _ZN7S2524C9D0Ev();
extern void _ZN7S2524C92v3Ev();
extern void ABISELECT(_ZThn3296_N7S2524C9D1Ev,_ZThn1948_N7S2524C9D1Ev)();
extern void ABISELECT(_ZThn3296_N7S2524C9D0Ev,_ZThn1948_N7S2524C9D0Ev)();
extern void _ZN8S2524C132v5Ev();
extern void _ZN8S2524C132v6Ev();
extern void _ZN8S2524C102v7Ev();
extern void _ZN8S2524C102v8Ev();
extern void _ZN8S2524C102v9Ev();
extern void _ZN8S2524C122v4Ev();
extern void ABISELECT(_ZTv0_n80_N7S2524C9D1Ev,_ZTv0_n40_N7S2524C9D1Ev)();
extern void ABISELECT(_ZThn9712_N7S2524C9D1Ev,_ZThn5740_N7S2524C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2524C9D0Ev,_ZTv0_n40_N7S2524C9D0Ev)();
extern void ABISELECT(_ZThn9712_N7S2524C9D0Ev,_ZThn5740_N7S2524C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2524C9D1Ev,_ZTv0_n16_N7S2524C9D1Ev)();
extern void ABISELECT(_ZThn12880_N7S2524C9D1Ev,_ZThn7632_N7S2524C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2524C9D0Ev,_ZTv0_n16_N7S2524C9D0Ev)();
extern void ABISELECT(_ZThn12880_N7S2524C9D0Ev,_ZThn7632_N7S2524C9D0Ev)() __attribute__((weak));
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY vtc_S2524C9[] = {
  ABISELECT(9576,5672),
  ABISELECT(9568,5668),
  ABISELECT(6256,3700),
  ABISELECT(23088,13700),
  ABISELECT(20224,11996),
  ABISELECT(18752,11116),
  ABISELECT(17104,10116),
  ABISELECT(15808,9356),
  ABISELECT(15680,9280),
  ABISELECT(12880,7632),
  ABISELECT(9712,5740),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&_ZN8S2524C132v5Ev,
  (VTBL_ENTRY)&_ZN8S2524C132v6Ev,
  (VTBL_ENTRY)&_ZN7S2524C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2524C9D0Ev,
  (VTBL_ENTRY)&_ZN7S2524C92v3Ev,
  ABISELECT(12384,7332),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N7S2524C9D1Ev,_ZThn1948_N7S2524C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N7S2524C9D0Ev,_ZThn1948_N7S2524C9D0Ev),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(3320,1972),
  ABISELECT(3312,1968),
  ABISELECT(-6256,-3700),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&_ZN8S2524C132v5Ev,
  (VTBL_ENTRY)&_ZN8S2524C132v6Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v7Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v8Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v9Ev,
  0,
  ABISELECT(-9576,-5672),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&_ZN8S2524C122v4Ev,
  ABISELECT(-9712,-5740),
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-9712,-5740),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2524C9D1Ev,_ZTv0_n40_N7S2524C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2524C9D0Ev,_ZTv0_n40_N7S2524C9D0Ev),
  ABISELECT(-12880,-7632),
  ABISELECT(2800,1648),
  ABISELECT(-12880,-7632),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2524C9D1Ev,_ZTv0_n16_N7S2524C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2524C9D0Ev,_ZTv0_n16_N7S2524C9D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-15808,-9356),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-17104,-10116),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
  0,
  0,
  ABISELECT(-18752,-11116),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-20224,-11996),
  (VTBL_ENTRY)&(_ZTI7S2524C9[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
extern VTBL_ENTRY _ZTV7S2524C9[];
extern void _ZN8S2524C132v5Ev();
extern void _ZN8S2524C132v6Ev();
extern void _ZN8S2524C15D1Ev();
extern void _ZN8S2524C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C15__7S2524C9[] = {
  ABISELECT(23088,13700),
  ABISELECT(20224,11996),
  ABISELECT(18752,11116),
  ABISELECT(17104,10116),
  ABISELECT(15808,9356),
  ABISELECT(15680,9280),
  ABISELECT(12880,7632),
  ABISELECT(9712,5740),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN8S2524C132v5Ev,
  (VTBL_ENTRY)&_ZN8S2524C132v6Ev,
  (VTBL_ENTRY)&_ZN8S2524C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C15D0Ev,
};
extern void _ZN8S2524C17D1Ev();
extern void _ZN8S2524C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C178S2524C15__A1__7S2524C9[] = {
  ABISELECT(12384,7332),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C17[0]),
  (VTBL_ENTRY)&_ZN8S2524C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C178S2524C15__A3__7S2524C9[] = {
  ABISELECT(12384,7332),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
extern void ABISELECT(_ZTv0_n80_N8S2524C15D1Ev,_ZTv0_n40_N8S2524C15D1Ev)();
extern void ABISELECT(_ZThn9712_N8S2524C15D1Ev,_ZThn5740_N8S2524C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2524C15D0Ev,_ZTv0_n40_N8S2524C15D0Ev)();
extern void ABISELECT(_ZThn9712_N8S2524C15D0Ev,_ZThn5740_N8S2524C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2524C16__8S2524C15__7S2524C9[] = {
  ABISELECT(-9712,-5740),
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-9712,-5740),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2524C15D1Ev,_ZTv0_n40_N8S2524C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2524C15D0Ev,_ZTv0_n40_N8S2524C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S2524C15D1Ev,_ZTv0_n16_N8S2524C15D1Ev)();
extern void ABISELECT(_ZThn12880_N8S2524C15D1Ev,_ZThn7632_N8S2524C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2524C15D0Ev,_ZTv0_n16_N8S2524C15D0Ev)();
extern void ABISELECT(_ZThn12880_N8S2524C15D0Ev,_ZThn7632_N8S2524C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2524C17__8S2524C15__7S2524C9[] = {
  ABISELECT(-12880,-7632),
  ABISELECT(2800,1648),
  ABISELECT(-12880,-7632),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C15D1Ev,_ZTv0_n16_N8S2524C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C15D0Ev,_ZTv0_n16_N8S2524C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__A1__8S2524C15__7S2524C9[] = {
  ABISELECT(-128,-76),
  ABISELECT(-15808,-9356),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
};
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C19__8S2524C15__7S2524C9[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-17104,-10116),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
};
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2524C6__8S2524C15__7S2524C9[] = {
  0,
  0,
  ABISELECT(-18752,-11116),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C14__8S2524C15__7S2524C9[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-20224,-11996),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
extern void ABISELECT(_ZThn3296_N8S2524C15D1Ev,_ZThn1948_N8S2524C15D1Ev)();
extern void ABISELECT(_ZThn3296_N8S2524C15D0Ev,_ZThn1948_N8S2524C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2524C17__A__8S2524C15__7S2524C9[] = {
  ABISELECT(12384,7332),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S2524C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S2524C15D1Ev,_ZThn1948_N8S2524C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S2524C15D0Ev,_ZThn1948_N8S2524C15D0Ev),
};
extern void _ZN8S2524C132v5Ev();
extern void _ZN8S2524C132v6Ev();
extern void _ZN8S2524C102v7Ev();
extern void _ZN8S2524C102v8Ev();
extern void _ZN8S2524C102v9Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C10__7S2524C9[] = {
  ABISELECT(3320,1972),
  ABISELECT(3312,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C10[0]),
  (VTBL_ENTRY)&_ZN8S2524C132v5Ev,
  (VTBL_ENTRY)&_ZN8S2524C132v6Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v7Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v8Ev,
  (VTBL_ENTRY)&_ZN8S2524C102v9Ev,
};
extern void _ZN8S2524C122v4Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C12__8S2524C10__7S2524C9[] = {
  0,
  ABISELECT(-3320,-1972),
  (VTBL_ENTRY)&(_ZTI8S2524C10[0]),
  (VTBL_ENTRY)&_ZN8S2524C122v4Ev,
};
extern void _ZN8S2524C16D1Ev();
extern void _ZN8S2524C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C16__7S2524C9[] = {
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev)();
extern void ABISELECT(_ZThn3168_N8S2524C16D1Ev,_ZThn1892_N8S2524C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev)();
extern void ABISELECT(_ZThn3168_N8S2524C16D0Ev,_ZThn1892_N8S2524C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2524C17__8S2524C16__7S2524C9[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__A1__8S2524C16__7S2524C9[] = {
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
};
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C19__8S2524C16__7S2524C9[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
};
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2524C6__8S2524C16__7S2524C9[] = {
  0,
  0,
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C14__8S2524C16__7S2524C9[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-10512,-6256),
  (VTBL_ENTRY)&(_ZTI8S2524C16[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
extern void _ZN8S2524C17D1Ev();
extern void _ZN8S2524C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C17__7S2524C9[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C17[0]),
  (VTBL_ENTRY)&_ZN8S2524C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2524C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C17__7S2524C9[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__A1__7S2524C9[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
extern void _ZN8S2524C193v10Ev();
extern void _ZN8S2524C193v11Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C19__7S2524C9[] = {
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN8S2524C193v10Ev,
  (VTBL_ENTRY)&_ZN8S2524C193v11Ev,
};
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2524C6__8S2524C19__7S2524C9[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C5__8S2524C19__7S2524C9[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI8S2524C19[0]),
};
extern void _ZN8S2524C143v12Ev();
static  VTBL_ENTRY _tg__ZTV8S2524C14__7S2524C9[] = {
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI8S2524C14[0]),
  (VTBL_ENTRY)&_ZN8S2524C143v12Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2524C58S2524C14__A2__7S2524C9[] = {
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
static  VTT_ENTRY vtt_S2524C9[] = {
  {&(_ZTV7S2524C9[13]),  13,83},
  {&(_tg__ZTV8S2524C15__7S2524C9[10]),  10,14},
  {&(_tg__ZTV8S2524C178S2524C15__A1__7S2524C9[3]),  3,5},
  {&(_tg__ZTV7S2524C58S2524C178S2524C15__A3__7S2524C9[3]),  3,3},
  {&(_tg__ZTV8S2524C16__8S2524C15__7S2524C9[10]),  10,12},
  {&(_tg__ZTV8S2524C17__8S2524C15__7S2524C9[4]),  4,6},
  {&(_tg__ZTV7S2524C5__A1__8S2524C15__7S2524C9[3]),  3,3},
  {&(_tg__ZTV8S2524C19__8S2524C15__7S2524C9[7]),  7,9},
  {&(_tg__ZTV7S2524C6__8S2524C15__7S2524C9[4]),  4,6},
  {&(_tg__ZTV8S2524C14__8S2524C15__7S2524C9[5]),  5,6},
  {&(_tg__ZTV8S2524C17__A__8S2524C15__7S2524C9[3]),  3,5},
  {&(_ZTV7S2524C9[32]),  32,83},
  {&(_ZTV7S2524C9[40]),  40,83},
  {&(_ZTV7S2524C9[51]),  51,83},
  {&(_ZTV7S2524C9[57]),  57,83},
  {&(_ZTV7S2524C9[62]),  62,83},
  {&(_ZTV7S2524C9[69]),  69,83},
  {&(_ZTV7S2524C9[75]),  75,83},
  {&(_ZTV7S2524C9[82]),  82,83},
  {&(_ZTV7S2524C9[21]),  21,83},
  {&(_tg__ZTV8S2524C10__7S2524C9[4]),  4,9},
  {&(_tg__ZTV8S2524C12__8S2524C10__7S2524C9[3]),  3,4},
  {&(_tg__ZTV8S2524C16__7S2524C9[9]),  9,11},
  {&(_tg__ZTV8S2524C17__8S2524C16__7S2524C9[4]),  4,6},
  {&(_tg__ZTV7S2524C5__A1__8S2524C16__7S2524C9[3]),  3,3},
  {&(_tg__ZTV8S2524C19__8S2524C16__7S2524C9[7]),  7,9},
  {&(_tg__ZTV7S2524C6__8S2524C16__7S2524C9[4]),  4,6},
  {&(_tg__ZTV8S2524C14__8S2524C16__7S2524C9[5]),  5,6},
  {&(_tg__ZTV8S2524C17__7S2524C9[3]),  3,5},
  {&(_tg__ZTV7S2524C58S2524C17__7S2524C9[3]),  3,3},
  {&(_tg__ZTV7S2524C5__A1__7S2524C9[3]),  3,3},
  {&(_tg__ZTV8S2524C19__7S2524C9[5]),  5,7},
  {&(_tg__ZTV7S2524C6__8S2524C19__7S2524C9[4]),  4,6},
  {&(_tg__ZTV7S2524C5__8S2524C19__7S2524C9[3]),  3,3},
  {&(_tg__ZTV8S2524C14__7S2524C9[4]),  4,5},
  {&(_tg__ZTV7S2524C58S2524C14__A2__7S2524C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2524C9[];
extern  VTBL_ENTRY _ZTV7S2524C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C9[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C16D0Ev,_ZTv0_n16_N8S2524C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S2524C16D0Ev,_ZThn1892_N8S2524C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C16D1Ev,_ZTv0_n16_N8S2524C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S2524C16D1Ev,_ZThn1892_N8S2524C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C15D0Ev,_ZTv0_n16_N8S2524C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12880_N8S2524C15D0Ev,_ZThn7632_N8S2524C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2524C15D1Ev,_ZTv0_n16_N8S2524C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12880_N8S2524C15D1Ev,_ZThn7632_N8S2524C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2524C15D0Ev,_ZTv0_n40_N8S2524C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9712_N8S2524C15D0Ev,_ZThn5740_N8S2524C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2524C15D1Ev,_ZTv0_n40_N8S2524C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9712_N8S2524C15D1Ev,_ZThn5740_N8S2524C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2524C9D0Ev,_ZTv0_n16_N7S2524C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12880_N7S2524C9D0Ev,_ZThn7632_N7S2524C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2524C9D1Ev,_ZTv0_n16_N7S2524C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12880_N7S2524C9D1Ev,_ZThn7632_N7S2524C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2524C9D0Ev,_ZTv0_n40_N7S2524C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9712_N7S2524C9D0Ev,_ZThn5740_N7S2524C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2524C9D1Ev,_ZTv0_n40_N7S2524C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9712_N7S2524C9D1Ev,_ZThn5740_N7S2524C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2524C9 = {  "S2524C9", // class name
  bases_S2524C9, 21,
  &(vtc_S2524C9[0]), // expected_vtbl_contents
  &(vtt_S2524C9[0]), // expected_vtt_contents
  ABISELECT(23152,13740), // object size
  NSPAIRA(_ZTI7S2524C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2524C9),83, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2524C9),36, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2524C1  : S2524C2 {
  char s2524c1f0;
  __tsi64 s2524c1f1;
  int s2524c1f2;
  char s2524c1f3;
  ::S7511C9_nt s2524c1f4;
  ::S2524C9 s2524c1f5;
  char s2524c1f6;
  ~S2524C1(); // tgen
  S2524C1(); // tgen
};
//SIG(1 S2524C1) C1{ BC2{ BC3{ m Fi Fs FL Fp} VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC5{ VBC4 FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp} VBC6{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} BC7{ m Fi[2] FL Fp[6]} Fs FC7 Fi[2]} Fc FL Fi Fc FC8{} FC9{ BC3 VBC10{ VBC11{ m Fi} VBC12{ v4 Fp Fi:7 Fp Fi Fp[8] Fs Fi[2] Fp} BC13{ v5 v6 Fi FC14{ BC3 VBC7 BC5 v12 Fs Fi FD Fc Fi Fl Fp FC6 Fi Fp} FC4 Fp[11]} v7 v8 v9 FC8 Fi[2] Fc Fp} BC15{ VBC16{ VBC17{ VBC4 BC5 vd Fi Fp[3] Fi FU18{ m Fs:0 Fi FL Fp} FC8 FC8 FC5 FU18 Fp[3]} BC3 VBC5 VBC19{ VBC4 VBC6 VBC5 v10 v11 FL Fi FL[5] Fi[9] Fi Fi FC5 Fp Fc Fp FC3 Fp[8]} VBC14 vd Fi Fi Fp[7] Fi FC2} BC13 BC17 Fi Fp FD[5]} vd v3 Fp Fp Fi Fp} Fc}


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

static void Test_S2524C1()
{
  extern Class_Descriptor cd_S2524C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1642,3899)];
    init_test(&cd_S2524C1, buf);
    S2524C1 *dp, &lv = *(dp=new (buf) S2524C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(26256,15592), "sizeof(S2524C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2524C1)");
    check_base_class_offset(lv, (S7511C10*)(S2524C2*), ABISELECT(1288,760), "S2524C1");
    check_base_class_offset(lv, (S7511C5*)(S2524C2*), ABISELECT(24656,14636), "S2524C1");
    check_base_class_offset(lv, (S7511C5*)(S2524C5*)(S2524C2*), ABISELECT(24656,14636), "S2524C1");
    check_base_class_offset(lv, (S2524C5*)(S2524C2*), 0, "S2524C1");
    check_base_class_offset(lv, (S2524C6*)(S2524C2*), ABISELECT(24784,14712), "S2524C1");
    check_base_class_offset(lv, (S2524C7*)(S2524C2*), ABISELECT(1312,780), "S2524C1");
    check_base_class_offset(lv, (S2524C2*), 0, "S2524C1");
    check_field_offset(lv, s2524c1f0, ABISELECT(1456,872), "S2524C1.s2524c1f0");
    check_field_offset(lv, s2524c1f1, ABISELECT(1464,876), "S2524C1.s2524c1f1");
    check_field_offset(lv, s2524c1f2, ABISELECT(1472,884), "S2524C1.s2524c1f2");
    check_field_offset(lv, s2524c1f3, ABISELECT(1476,888), "S2524C1.s2524c1f3");
    check_field_offset(lv, s2524c1f4, ABISELECT(1477,889), "S2524C1.s2524c1f4");
    check_field_offset(lv, s2524c1f5, ABISELECT(1488,892), "S2524C1.s2524c1f5");
    check_field_offset(lv, s2524c1f6, ABISELECT(24640,14632), "S2524C1.s2524c1f6");
    test_class_info(&lv, &cd_S2524C1);
    dp->~S2524C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2524C1(Test_S2524C1, "S2524C1", ABISELECT(26256,15592));

#else // __cplusplus

extern void _ZN7S2524C1C1Ev();
extern void _ZN7S2524C1D1Ev();
Name_Map name_map_S2524C1[] = {
  NSPAIR(_ZN7S2524C1C1Ev),
  NSPAIR(_ZN7S2524C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S2524C5;
extern VTBL_ENTRY _ZTI7S2524C5[];
extern  VTBL_ENTRY _ZTV7S2524C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C5[];
extern Class_Descriptor cd_S2524C6;
extern VTBL_ENTRY _ZTI7S2524C6[];
extern  VTBL_ENTRY _ZTV7S2524C6[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S2524C2;
extern VTBL_ENTRY _ZTI7S2524C2[];
extern  VTBL_ENTRY _ZTV7S2524C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C2[];
static Base_Class bases_S2524C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7511C5,    ABISELECT(24656,14636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2524C5,    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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2524C6,    ABISELECT(24784,14712), //bcp->offset
    4, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2524C7,    ABISELECT(1312,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2524C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2524C1[];
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY vtc_S2524C1[] = {
  ABISELECT(24784,14712),
  ABISELECT(24656,14636),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C1[0]),
  0,
  0,
  ABISELECT(-24784,-14712),
  (VTBL_ENTRY)&(_ZTI7S2524C1[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2524C1[];
static  VTBL_ENTRY _tg__ZTV7S2524C2__7S2524C1[] = {
  ABISELECT(24784,14712),
  ABISELECT(24656,14636),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2524C57S2524C2__7S2524C1[] = {
  ABISELECT(24656,14636),
  0,
  (VTBL_ENTRY)&(_ZTI7S2524C5[0]),
};
extern void _ZN7S2524C62v1Ev();
extern void _ZN7S2524C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2524C6__7S2524C2__7S2524C1[] = {
  0,
  0,
  ABISELECT(-24784,-14712),
  (VTBL_ENTRY)&(_ZTI7S2524C2[0]),
  (VTBL_ENTRY)&_ZN7S2524C62v1Ev,
  (VTBL_ENTRY)&_ZN7S2524C62v2Ev,
};
static  VTT_ENTRY vtt_S2524C1[] = {
  {&(_ZTV7S2524C1[4]),  4,10},
  {&(_tg__ZTV7S2524C2__7S2524C1[4]),  4,4},
  {&(_tg__ZTV7S2524C57S2524C2__7S2524C1[3]),  3,3},
  {&(_tg__ZTV7S2524C6__7S2524C2__7S2524C1[4]),  4,6},
  {&(_ZTV7S2524C1[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S2524C1[];
extern  VTBL_ENTRY _ZTV7S2524C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2524C1[];
Class_Descriptor cd_S2524C1 = {  "S2524C1", // class name
  bases_S2524C1, 6,
  &(vtc_S2524C1[0]), // expected_vtbl_contents
  &(vtt_S2524C1[0]), // expected_vtt_contents
  ABISELECT(26256,15592), // object size
  NSPAIRA(_ZTI7S2524C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2524C1),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2524C1),5, //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  S2403C4  {
  void *s2403c4f0;
  ::S2382C25 s2403c4f1;
  ::S888C10_nt s2403c4f2;
  char s2403c4f3;
  virtual  ~S2403C4(); // _ZN7S2403C4D1Ev
  virtual void  v6(); // _ZN7S2403C42v6Ev
  virtual void  v7(); // _ZN7S2403C42v7Ev
  virtual void  v8(); // _ZN7S2403C42v8Ev
  virtual void  v9(); // _ZN7S2403C42v9Ev
  virtual void  v10(); // _ZN7S2403C43v10Ev
  virtual void  v11(); // _ZN7S2403C43v11Ev
  virtual void  v12(); // _ZN7S2403C43v12Ev
  virtual void  v13(); // _ZN7S2403C43v13Ev
  virtual void  v14(); // _ZN7S2403C43v14Ev
  virtual void  v15(); // _ZN7S2403C43v15Ev
  virtual void  v16(); // _ZN7S2403C43v16Ev
  virtual void  v17(); // _ZN7S2403C43v17Ev
  S2403C4(); // tgen
};
//SIG(-1 S2403C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S2403C4 ::~S2403C4(){ note_dtor("S2403C4", this);}
void  S2403C4 ::v6(){vfunc_called(this, "_ZN7S2403C42v6Ev");}
void  S2403C4 ::v7(){vfunc_called(this, "_ZN7S2403C42v7Ev");}
void  S2403C4 ::v8(){vfunc_called(this, "_ZN7S2403C42v8Ev");}
void  S2403C4 ::v9(){vfunc_called(this, "_ZN7S2403C42v9Ev");}
void  S2403C4 ::v10(){vfunc_called(this, "_ZN7S2403C43v10Ev");}
void  S2403C4 ::v11(){vfunc_called(this, "_ZN7S2403C43v11Ev");}
void  S2403C4 ::v12(){vfunc_called(this, "_ZN7S2403C43v12Ev");}
void  S2403C4 ::v13(){vfunc_called(this, "_ZN7S2403C43v13Ev");}
void  S2403C4 ::v14(){vfunc_called(this, "_ZN7S2403C43v14Ev");}
void  S2403C4 ::v15(){vfunc_called(this, "_ZN7S2403C43v15Ev");}
void  S2403C4 ::v16(){vfunc_called(this, "_ZN7S2403C43v16Ev");}
void  S2403C4 ::v17(){vfunc_called(this, "_ZN7S2403C43v17Ev");}
S2403C4 ::S2403C4(){ note_ctor("S2403C4", this);} // tgen

static void Test_S2403C4()
{
  extern Class_Descriptor cd_S2403C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2403C4, buf);
    S2403C4 *dp, &lv = *(dp=new (buf) S2403C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2403C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2403C4)");
    check_field_offset(lv, s2403c4f0, ABISELECT(8,4), "S2403C4.s2403c4f0");
    check_field_offset(lv, s2403c4f1, ABISELECT(16,8), "S2403C4.s2403c4f1");
    check_field_offset(lv, s2403c4f2, ABISELECT(32,20), "S2403C4.s2403c4f2");
    check_field_offset(lv, s2403c4f3, ABISELECT(64,52), "S2403C4.s2403c4f3");
    test_class_info(&lv, &cd_S2403C4);
    dp->~S2403C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2403C4(Test_S2403C4, "S2403C4", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2403C4C1Ev();
extern void _ZN7S2403C4D1Ev();
Name_Map name_map_S2403C4[] = {
  NSPAIR(_ZN7S2403C4C1Ev),
  NSPAIR(_ZN7S2403C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2403C4[];
extern void _ZN7S2403C4D1Ev();
extern void _ZN7S2403C4D0Ev();
extern void _ZN7S2403C42v6Ev();
extern void _ZN7S2403C42v7Ev();
extern void _ZN7S2403C42v8Ev();
extern void _ZN7S2403C42v9Ev();
extern void _ZN7S2403C43v10Ev();
extern void _ZN7S2403C43v11Ev();
extern void _ZN7S2403C43v12Ev();
extern void _ZN7S2403C43v13Ev();
extern void _ZN7S2403C43v14Ev();
extern void _ZN7S2403C43v15Ev();
extern void _ZN7S2403C43v16Ev();
extern void _ZN7S2403C43v17Ev();
static  VTBL_ENTRY vtc_S2403C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2403C4[0]),
  (VTBL_ENTRY)&_ZN7S2403C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2403C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v17Ev,
};
extern VTBL_ENTRY _ZTI7S2403C4[];
extern  VTBL_ENTRY _ZTV7S2403C4[];
Class_Descriptor cd_S2403C4 = {  "S2403C4", // class name
  0,0,//no base classes
  &(vtc_S2403C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2403C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2403C4),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2403C3  : S2403C4 {
  ::S2382C37 s2403c3f0;
  virtual  ~S2403C3(); // _ZN7S2403C3D1Ev
  virtual void  v18(); // _ZN7S2403C33v18Ev
  virtual void  v19(); // _ZN7S2403C33v19Ev
  virtual void  v20(); // _ZN7S2403C33v20Ev
  virtual void  v21(); // _ZN7S2403C33v21Ev
  virtual void  v22(); // _ZN7S2403C33v22Ev
  virtual void  v23(); // _ZN7S2403C33v23Ev
  virtual void  v24(); // _ZN7S2403C33v24Ev
  S2403C3(); // tgen
};
//SIG(-1 S2403C3) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S2403C3 ::~S2403C3(){ note_dtor("S2403C3", this);}
void  S2403C3 ::v18(){vfunc_called(this, "_ZN7S2403C33v18Ev");}
void  S2403C3 ::v19(){vfunc_called(this, "_ZN7S2403C33v19Ev");}
void  S2403C3 ::v20(){vfunc_called(this, "_ZN7S2403C33v20Ev");}
void  S2403C3 ::v21(){vfunc_called(this, "_ZN7S2403C33v21Ev");}
void  S2403C3 ::v22(){vfunc_called(this, "_ZN7S2403C33v22Ev");}
void  S2403C3 ::v23(){vfunc_called(this, "_ZN7S2403C33v23Ev");}
void  S2403C3 ::v24(){vfunc_called(this, "_ZN7S2403C33v24Ev");}
S2403C3 ::S2403C3(){ note_ctor("S2403C3", this);} // tgen

static void Test_S2403C3()
{
  extern Class_Descriptor cd_S2403C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S2403C3, buf);
    S2403C3 *dp, &lv = *(dp=new (buf) S2403C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S2403C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2403C3)");
    check_base_class_offset(lv, (S2403C4*), 0, "S2403C3");
    check_field_offset(lv, s2403c3f0, ABISELECT(72,56), "S2403C3.s2403c3f0");
    test_class_info(&lv, &cd_S2403C3);
    dp->~S2403C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2403C3(Test_S2403C3, "S2403C3", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S2403C3C1Ev();
extern void _ZN7S2403C3D1Ev();
Name_Map name_map_S2403C3[] = {
  NSPAIR(_ZN7S2403C3C1Ev),
  NSPAIR(_ZN7S2403C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2403C4;
extern VTBL_ENTRY _ZTI7S2403C4[];
extern  VTBL_ENTRY _ZTV7S2403C4[];
static Base_Class bases_S2403C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2403C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2403C3[];
extern void _ZN7S2403C3D1Ev();
extern void _ZN7S2403C3D0Ev();
extern void _ZN7S2403C42v6Ev();
extern void _ZN7S2403C42v7Ev();
extern void _ZN7S2403C42v8Ev();
extern void _ZN7S2403C42v9Ev();
extern void _ZN7S2403C43v10Ev();
extern void _ZN7S2403C43v11Ev();
extern void _ZN7S2403C43v12Ev();
extern void _ZN7S2403C43v13Ev();
extern void _ZN7S2403C43v14Ev();
extern void _ZN7S2403C43v15Ev();
extern void _ZN7S2403C43v16Ev();
extern void _ZN7S2403C43v17Ev();
extern void _ZN7S2403C33v18Ev();
extern void _ZN7S2403C33v19Ev();
extern void _ZN7S2403C33v20Ev();
extern void _ZN7S2403C33v21Ev();
extern void _ZN7S2403C33v22Ev();
extern void _ZN7S2403C33v23Ev();
extern void _ZN7S2403C33v24Ev();
static  VTBL_ENTRY vtc_S2403C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2403C3[0]),
  (VTBL_ENTRY)&_ZN7S2403C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2403C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v22Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v23Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v24Ev,
};
extern VTBL_ENTRY _ZTI7S2403C3[];
extern  VTBL_ENTRY _ZTV7S2403C3[];
Class_Descriptor cd_S2403C3 = {  "S2403C3", // class name
  bases_S2403C3, 1,
  &(vtc_S2403C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S2403C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2403C3),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  S2403C14  {
  virtual  ~S2403C14(); // _ZN8S2403C14D1Ev
  virtual void  v25(); // _ZN8S2403C143v25Ev
  virtual void  v26(); // _ZN8S2403C143v26Ev
  virtual void  v27(); // _ZN8S2403C143v27Ev
  S2403C14(); // tgen
};
//SIG(-1 S2403C14) C1{ vd v1 v2 v3}


 S2403C14 ::~S2403C14(){ note_dtor("S2403C14", this);}
void  S2403C14 ::v25(){vfunc_called(this, "_ZN8S2403C143v25Ev");}
void  S2403C14 ::v26(){vfunc_called(this, "_ZN8S2403C143v26Ev");}
void  S2403C14 ::v27(){vfunc_called(this, "_ZN8S2403C143v27Ev");}
S2403C14 ::S2403C14(){ note_ctor("S2403C14", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2403C14C1Ev();
extern void _ZN8S2403C14D1Ev();
Name_Map name_map_S2403C14[] = {
  NSPAIR(_ZN8S2403C14C1Ev),
  NSPAIR(_ZN8S2403C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2403C14[];
extern void _ZN8S2403C14D1Ev();
extern void _ZN8S2403C14D0Ev();
extern void _ZN8S2403C143v25Ev();
extern void _ZN8S2403C143v26Ev();
extern void _ZN8S2403C143v27Ev();
static  VTBL_ENTRY vtc_S2403C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2403C14[0]),
  (VTBL_ENTRY)&_ZN8S2403C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2403C14D0Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v25Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v26Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v27Ev,
};
extern VTBL_ENTRY _ZTI8S2403C14[];
extern  VTBL_ENTRY _ZTV8S2403C14[];
Class_Descriptor cd_S2403C14 = {  "S2403C14", // class name
  0,0,//no base classes
  &(vtc_S2403C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2403C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2403C14),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  S2403C13  : S2403C14 {
  virtual  ~S2403C13(); // _ZN8S2403C13D1Ev
  virtual void  v28(); // _ZN8S2403C133v28Ev
  virtual void  v29(); // _ZN8S2403C133v29Ev
  virtual void  v30(); // _ZN8S2403C133v30Ev
  virtual void  v31(); // _ZN8S2403C133v31Ev
  S2403C13(); // tgen
};
//SIG(-1 S2403C13) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S2403C13 ::~S2403C13(){ note_dtor("S2403C13", this);}
void  S2403C13 ::v28(){vfunc_called(this, "_ZN8S2403C133v28Ev");}
void  S2403C13 ::v29(){vfunc_called(this, "_ZN8S2403C133v29Ev");}
void  S2403C13 ::v30(){vfunc_called(this, "_ZN8S2403C133v30Ev");}
void  S2403C13 ::v31(){vfunc_called(this, "_ZN8S2403C133v31Ev");}
S2403C13 ::S2403C13(){ note_ctor("S2403C13", this);} // tgen

static void Test_S2403C13()
{
  extern Class_Descriptor cd_S2403C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2403C13, buf);
    S2403C13 *dp, &lv = *(dp=new (buf) S2403C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2403C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2403C13)");
    check_base_class_offset(lv, (S2403C14*), 0, "S2403C13");
    test_class_info(&lv, &cd_S2403C13);
    dp->~S2403C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2403C13(Test_S2403C13, "S2403C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S2403C13C1Ev();
extern void _ZN8S2403C13D1Ev();
Name_Map name_map_S2403C13[] = {
  NSPAIR(_ZN8S2403C13C1Ev),
  NSPAIR(_ZN8S2403C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2403C14;
extern VTBL_ENTRY _ZTI8S2403C14[];
extern  VTBL_ENTRY _ZTV8S2403C14[];
static Base_Class bases_S2403C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2403C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2403C13[];
extern void _ZN8S2403C13D1Ev();
extern void _ZN8S2403C13D0Ev();
extern void _ZN8S2403C143v25Ev();
extern void _ZN8S2403C143v26Ev();
extern void _ZN8S2403C143v27Ev();
extern void _ZN8S2403C133v28Ev();
extern void _ZN8S2403C133v29Ev();
extern void _ZN8S2403C133v30Ev();
extern void _ZN8S2403C133v31Ev();
static  VTBL_ENTRY vtc_S2403C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2403C13[0]),
  (VTBL_ENTRY)&_ZN8S2403C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2403C13D0Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v25Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v26Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v27Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v28Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v29Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v30Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v31Ev,
};
extern VTBL_ENTRY _ZTI8S2403C13[];
extern  VTBL_ENTRY _ZTV8S2403C13[];
Class_Descriptor cd_S2403C13 = {  "S2403C13", // class name
  bases_S2403C13, 1,
  &(vtc_S2403C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2403C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2403C13),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2403C17_nt  {
  __tsi64 s2403c17f0[4];
  void  mf2403c17(); // _ZN11S2403C17_nt9mf2403c17Ev
};
//SIG(-1 S2403C17_nt) C1{ m FL[4]}


void  S2403C17_nt ::mf2403c17(){}

//skip512 S2403C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2403C12  : S2403C13 {
  ::S2382C29_nt s2403c12f0;
  ::S2403C17_nt s2403c12f1;
  char s2403c12f2;
  virtual  ~S2403C12(); // _ZN8S2403C12D1Ev
  virtual void  v32(); // _ZN8S2403C123v32Ev
  virtual void  v33(); // _ZN8S2403C123v33Ev
  virtual void  v34(); // _ZN8S2403C123v34Ev
  S2403C12(); // tgen
};
//SIG(-1 S2403C12) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S2403C12 ::~S2403C12(){ note_dtor("S2403C12", this);}
void  S2403C12 ::v32(){vfunc_called(this, "_ZN8S2403C123v32Ev");}
void  S2403C12 ::v33(){vfunc_called(this, "_ZN8S2403C123v33Ev");}
void  S2403C12 ::v34(){vfunc_called(this, "_ZN8S2403C123v34Ev");}
S2403C12 ::S2403C12(){ note_ctor("S2403C12", this);} // tgen

static void Test_S2403C12()
{
  extern Class_Descriptor cd_S2403C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2403C12, buf);
    S2403C12 *dp, &lv = *(dp=new (buf) S2403C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2403C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2403C12)");
    check_base_class_offset(lv, (S2403C14*)(S2403C13*), 0, "S2403C12");
    check_base_class_offset(lv, (S2403C13*), 0, "S2403C12");
    check_field_offset(lv, s2403c12f0, ABISELECT(8,4), "S2403C12.s2403c12f0");
    check_field_offset(lv, s2403c12f1, ABISELECT(32,20), "S2403C12.s2403c12f1");
    check_field_offset(lv, s2403c12f2, ABISELECT(64,52), "S2403C12.s2403c12f2");
    test_class_info(&lv, &cd_S2403C12);
    dp->~S2403C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2403C12(Test_S2403C12, "S2403C12", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S2403C12C1Ev();
extern void _ZN8S2403C12D1Ev();
Name_Map name_map_S2403C12[] = {
  NSPAIR(_ZN8S2403C12C1Ev),
  NSPAIR(_ZN8S2403C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2403C14;
extern VTBL_ENTRY _ZTI8S2403C14[];
extern  VTBL_ENTRY _ZTV8S2403C14[];
extern Class_Descriptor cd_S2403C13;
extern VTBL_ENTRY _ZTI8S2403C13[];
extern  VTBL_ENTRY _ZTV8S2403C13[];
static Base_Class bases_S2403C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2403C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2403C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2403C12[];
extern void _ZN8S2403C12D1Ev();
extern void _ZN8S2403C12D0Ev();
extern void _ZN8S2403C143v25Ev();
extern void _ZN8S2403C143v26Ev();
extern void _ZN8S2403C143v27Ev();
extern void _ZN8S2403C133v28Ev();
extern void _ZN8S2403C133v29Ev();
extern void _ZN8S2403C133v30Ev();
extern void _ZN8S2403C133v31Ev();
extern void _ZN8S2403C123v32Ev();
extern void _ZN8S2403C123v33Ev();
extern void _ZN8S2403C123v34Ev();
static  VTBL_ENTRY vtc_S2403C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2403C12[0]),
  (VTBL_ENTRY)&_ZN8S2403C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2403C12D0Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v25Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v26Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v27Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v28Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v29Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v30Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v31Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v32Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v33Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v34Ev,
};
extern VTBL_ENTRY _ZTI8S2403C12[];
extern  VTBL_ENTRY _ZTV8S2403C12[];
Class_Descriptor cd_S2403C12 = {  "S2403C12", // class name
  bases_S2403C12, 2,
  &(vtc_S2403C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S2403C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2403C12),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  S2403C18  {
  virtual  ~S2403C18(); // _ZN8S2403C18D1Ev
  virtual void  v35(); // _ZN8S2403C183v35Ev
  virtual void  v36(); // _ZN8S2403C183v36Ev
  virtual void  v37(); // _ZN8S2403C183v37Ev
  virtual void  v38(); // _ZN8S2403C183v38Ev
  virtual void  v39(); // _ZN8S2403C183v39Ev
  virtual void  v40(); // _ZN8S2403C183v40Ev
  virtual void  v41(); // _ZN8S2403C183v41Ev
  virtual void  v42(); // _ZN8S2403C183v42Ev
  virtual void  v43(); // _ZN8S2403C183v43Ev
  virtual void  v44(); // _ZN8S2403C183v44Ev
  virtual void  v45(); // _ZN8S2403C183v45Ev
  virtual void  v46(); // _ZN8S2403C183v46Ev
  virtual void  v47(); // _ZN8S2403C183v47Ev
  virtual void  v48(); // _ZN8S2403C183v48Ev
  virtual void  v49(); // _ZN8S2403C183v49Ev
  virtual void  v50(); // _ZN8S2403C183v50Ev
  virtual void  v51(); // _ZN8S2403C183v51Ev
  virtual void  v52(); // _ZN8S2403C183v52Ev
  virtual void  v53(); // _ZN8S2403C183v53Ev
  virtual void  v54(); // _ZN8S2403C183v54Ev
  virtual void  v55(); // _ZN8S2403C183v55Ev
  virtual void  v56(); // _ZN8S2403C183v56Ev
  virtual void  v57(); // _ZN8S2403C183v57Ev
  virtual void  v58(); // _ZN8S2403C183v58Ev
  virtual void  v59(); // _ZN8S2403C183v59Ev
  virtual void  v60(); // _ZN8S2403C183v60Ev
  S2403C18(); // tgen
};
//SIG(-1 S2403C18) 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}


 S2403C18 ::~S2403C18(){ note_dtor("S2403C18", this);}
void  S2403C18 ::v35(){vfunc_called(this, "_ZN8S2403C183v35Ev");}
void  S2403C18 ::v36(){vfunc_called(this, "_ZN8S2403C183v36Ev");}
void  S2403C18 ::v37(){vfunc_called(this, "_ZN8S2403C183v37Ev");}
void  S2403C18 ::v38(){vfunc_called(this, "_ZN8S2403C183v38Ev");}
void  S2403C18 ::v39(){vfunc_called(this, "_ZN8S2403C183v39Ev");}
void  S2403C18 ::v40(){vfunc_called(this, "_ZN8S2403C183v40Ev");}
void  S2403C18 ::v41(){vfunc_called(this, "_ZN8S2403C183v41Ev");}
void  S2403C18 ::v42(){vfunc_called(this, "_ZN8S2403C183v42Ev");}
void  S2403C18 ::v43(){vfunc_called(this, "_ZN8S2403C183v43Ev");}
void  S2403C18 ::v44(){vfunc_called(this, "_ZN8S2403C183v44Ev");}
void  S2403C18 ::v45(){vfunc_called(this, "_ZN8S2403C183v45Ev");}
void  S2403C18 ::v46(){vfunc_called(this, "_ZN8S2403C183v46Ev");}
void  S2403C18 ::v47(){vfunc_called(this, "_ZN8S2403C183v47Ev");}
void  S2403C18 ::v48(){vfunc_called(this, "_ZN8S2403C183v48Ev");}
void  S2403C18 ::v49(){vfunc_called(this, "_ZN8S2403C183v49Ev");}
void  S2403C18 ::v50(){vfunc_called(this, "_ZN8S2403C183v50Ev");}
void  S2403C18 ::v51(){vfunc_called(this, "_ZN8S2403C183v51Ev");}
void  S2403C18 ::v52(){vfunc_called(this, "_ZN8S2403C183v52Ev");}
void  S2403C18 ::v53(){vfunc_called(this, "_ZN8S2403C183v53Ev");}
void  S2403C18 ::v54(){vfunc_called(this, "_ZN8S2403C183v54Ev");}
void  S2403C18 ::v55(){vfunc_called(this, "_ZN8S2403C183v55Ev");}
void  S2403C18 ::v56(){vfunc_called(this, "_ZN8S2403C183v56Ev");}
void  S2403C18 ::v57(){vfunc_called(this, "_ZN8S2403C183v57Ev");}
void  S2403C18 ::v58(){vfunc_called(this, "_ZN8S2403C183v58Ev");}
void  S2403C18 ::v59(){vfunc_called(this, "_ZN8S2403C183v59Ev");}
void  S2403C18 ::v60(){vfunc_called(this, "_ZN8S2403C183v60Ev");}
S2403C18 ::S2403C18(){ note_ctor("S2403C18", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2403C18C1Ev();
extern void _ZN8S2403C18D1Ev();
Name_Map name_map_S2403C18[] = {
  NSPAIR(_ZN8S2403C18C1Ev),
  NSPAIR(_ZN8S2403C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2403C18[];
extern void _ZN8S2403C18D1Ev();
extern void _ZN8S2403C18D0Ev();
extern void _ZN8S2403C183v35Ev();
extern void _ZN8S2403C183v36Ev();
extern void _ZN8S2403C183v37Ev();
extern void _ZN8S2403C183v38Ev();
extern void _ZN8S2403C183v39Ev();
extern void _ZN8S2403C183v40Ev();
extern void _ZN8S2403C183v41Ev();
extern void _ZN8S2403C183v42Ev();
extern void _ZN8S2403C183v43Ev();
extern void _ZN8S2403C183v44Ev();
extern void _ZN8S2403C183v45Ev();
extern void _ZN8S2403C183v46Ev();
extern void _ZN8S2403C183v47Ev();
extern void _ZN8S2403C183v48Ev();
extern void _ZN8S2403C183v49Ev();
extern void _ZN8S2403C183v50Ev();
extern void _ZN8S2403C183v51Ev();
extern void _ZN8S2403C183v52Ev();
extern void _ZN8S2403C183v53Ev();
extern void _ZN8S2403C183v54Ev();
extern void _ZN8S2403C183v55Ev();
extern void _ZN8S2403C183v56Ev();
extern void _ZN8S2403C183v57Ev();
extern void _ZN8S2403C183v58Ev();
extern void _ZN8S2403C183v59Ev();
extern void _ZN8S2403C183v60Ev();
static  VTBL_ENTRY vtc_S2403C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2403C18[0]),
  (VTBL_ENTRY)&_ZN8S2403C18D1Ev,
  (VTBL_ENTRY)&_ZN8S2403C18D0Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v35Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v36Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v37Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v38Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v39Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v40Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v41Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v42Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v43Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v44Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v45Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v46Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v47Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v48Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v49Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v50Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v51Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v52Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v53Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v54Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v55Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v56Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v57Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v58Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v59Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v60Ev,
};
extern VTBL_ENTRY _ZTI8S2403C18[];
extern  VTBL_ENTRY _ZTV8S2403C18[];
Class_Descriptor cd_S2403C18 = {  "S2403C18", // class name
  0,0,//no base classes
  &(vtc_S2403C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2403C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2403C18),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2403C2  : S2403C3 , S2403C12 , S2403C18 {
  ::S2382C20_nt s2403c2f0;
  char s2403c2f1[2];
  int s2403c2f2;
  void *s2403c2f3[5];
  char s2403c2f4[2];
  void *s2403c2f5;
  ::S888C22_nt s2403c2f6;
  __tsi64 s2403c2f7[2];
  int s2403c2f8[2];
  virtual  ~S2403C2(); // _ZN7S2403C2D1Ev
  virtual void  v61(); // _ZN7S2403C23v61Ev
  virtual void  v62(); // _ZN7S2403C23v62Ev
  virtual void  v63(); // _ZN7S2403C23v63Ev
  virtual void  v64(); // _ZN7S2403C23v64Ev
  virtual void  v65(); // _ZN7S2403C23v65Ev
  virtual void  v66(); // _ZN7S2403C23v66Ev
  virtual void  v67(); // _ZN7S2403C23v67Ev
  virtual void  v68(); // _ZN7S2403C23v68Ev
  virtual void  v69(); // _ZN7S2403C23v69Ev
  virtual void  v70(); // _ZN7S2403C23v70Ev
  virtual void  v71(); // _ZN7S2403C23v71Ev
  virtual void  v72(); // _ZN7S2403C23v72Ev
  virtual void  v73(); // _ZN7S2403C23v73Ev
  virtual void  v74(); // _ZN7S2403C23v74Ev
  virtual void  v75(); // _ZN7S2403C23v75Ev
  virtual void  v76(); // _ZN7S2403C23v76Ev
  virtual void  v77(); // _ZN7S2403C23v77Ev
  virtual void  v78(); // _ZN7S2403C23v78Ev
  virtual void  v79(); // _ZN7S2403C23v79Ev
  virtual void  v80(); // _ZN7S2403C23v80Ev
  virtual void  v81(); // _ZN7S2403C23v81Ev
  virtual void  v82(); // _ZN7S2403C23v82Ev
  virtual void  v83(); // _ZN7S2403C23v83Ev
  virtual void  v84(); // _ZN7S2403C23v84Ev
  virtual void  v85(); // _ZN7S2403C23v85Ev
  virtual void  v86(); // _ZN7S2403C23v86Ev
  virtual void  v87(); // _ZN7S2403C23v87Ev
  virtual void  v88(); // _ZN7S2403C23v88Ev
  virtual void  v89(); // _ZN7S2403C23v89Ev
  virtual void  v90(); // _ZN7S2403C23v90Ev
  virtual void  v91(); // _ZN7S2403C23v91Ev
  virtual void  v92(); // _ZN7S2403C23v92Ev
  S2403C2(); // tgen
};
//SIG(-1 S2403C2) C1{ BC2{ BC3{ vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m FL[4]} Fc} vd v45 v46 v47 v48 v49 v50 v51 FC8{ m Fp Fi[2] FC9{ m}}} BC10{ BC11{ BC12{ vd v52 v53 v54} vd v55 v56 v57 v58} vd v59 v60 v61 FC13{ m Fp Fi[2] FC9} FC14{ m FL[4]} Fc} BC15{ vd 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} 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 FC16{ m Fp Fi FC17{ m}} Fc[2] Fi Fp[5] Fc[2] Fp FC18{ m Fp Fi[4] Fc Fi[3]} FL[2] Fi[2]}


 S2403C2 ::~S2403C2(){ note_dtor("S2403C2", this);}
void  S2403C2 ::v61(){vfunc_called(this, "_ZN7S2403C23v61Ev");}
void  S2403C2 ::v62(){vfunc_called(this, "_ZN7S2403C23v62Ev");}
void  S2403C2 ::v63(){vfunc_called(this, "_ZN7S2403C23v63Ev");}
void  S2403C2 ::v64(){vfunc_called(this, "_ZN7S2403C23v64Ev");}
void  S2403C2 ::v65(){vfunc_called(this, "_ZN7S2403C23v65Ev");}
void  S2403C2 ::v66(){vfunc_called(this, "_ZN7S2403C23v66Ev");}
void  S2403C2 ::v67(){vfunc_called(this, "_ZN7S2403C23v67Ev");}
void  S2403C2 ::v68(){vfunc_called(this, "_ZN7S2403C23v68Ev");}
void  S2403C2 ::v69(){vfunc_called(this, "_ZN7S2403C23v69Ev");}
void  S2403C2 ::v70(){vfunc_called(this, "_ZN7S2403C23v70Ev");}
void  S2403C2 ::v71(){vfunc_called(this, "_ZN7S2403C23v71Ev");}
void  S2403C2 ::v72(){vfunc_called(this, "_ZN7S2403C23v72Ev");}
void  S2403C2 ::v73(){vfunc_called(this, "_ZN7S2403C23v73Ev");}
void  S2403C2 ::v74(){vfunc_called(this, "_ZN7S2403C23v74Ev");}
void  S2403C2 ::v75(){vfunc_called(this, "_ZN7S2403C23v75Ev");}
void  S2403C2 ::v76(){vfunc_called(this, "_ZN7S2403C23v76Ev");}
void  S2403C2 ::v77(){vfunc_called(this, "_ZN7S2403C23v77Ev");}
void  S2403C2 ::v78(){vfunc_called(this, "_ZN7S2403C23v78Ev");}
void  S2403C2 ::v79(){vfunc_called(this, "_ZN7S2403C23v79Ev");}
void  S2403C2 ::v80(){vfunc_called(this, "_ZN7S2403C23v80Ev");}
void  S2403C2 ::v81(){vfunc_called(this, "_ZN7S2403C23v81Ev");}
void  S2403C2 ::v82(){vfunc_called(this, "_ZN7S2403C23v82Ev");}
void  S2403C2 ::v83(){vfunc_called(this, "_ZN7S2403C23v83Ev");}
void  S2403C2 ::v84(){vfunc_called(this, "_ZN7S2403C23v84Ev");}
void  S2403C2 ::v85(){vfunc_called(this, "_ZN7S2403C23v85Ev");}
void  S2403C2 ::v86(){vfunc_called(this, "_ZN7S2403C23v86Ev");}
void  S2403C2 ::v87(){vfunc_called(this, "_ZN7S2403C23v87Ev");}
void  S2403C2 ::v88(){vfunc_called(this, "_ZN7S2403C23v88Ev");}
void  S2403C2 ::v89(){vfunc_called(this, "_ZN7S2403C23v89Ev");}
void  S2403C2 ::v90(){vfunc_called(this, "_ZN7S2403C23v90Ev");}
void  S2403C2 ::v91(){vfunc_called(this, "_ZN7S2403C23v91Ev");}
void  S2403C2 ::v92(){vfunc_called(this, "_ZN7S2403C23v92Ev");}
S2403C2 ::S2403C2(){ note_ctor("S2403C2", this);} // tgen

static void Test_S2403C2()
{
  extern Class_Descriptor cd_S2403C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,61)];
    init_test(&cd_S2403C2, buf);
    S2403C2 *dp, &lv = *(dp=new (buf) S2403C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,240), "sizeof(S2403C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2403C2)");
    check_base_class_offset(lv, (S2403C4*)(S2403C3*), 0, "S2403C2");
    check_base_class_offset(lv, (S2403C3*), 0, "S2403C2");
    check_base_class_offset(lv, (S2403C14*)(S2403C13*)(S2403C12*), ABISELECT(96,72), "S2403C2");
    check_base_class_offset(lv, (S2403C13*)(S2403C12*), ABISELECT(96,72), "S2403C2");
    check_base_class_offset(lv, (S2403C12*), ABISELECT(96,72), "S2403C2");
    check_base_class_offset(lv, (S2403C18*), ABISELECT(168,128), "S2403C2");
    check_field_offset(lv, s2403c2f0, ABISELECT(176,132), "S2403C2.s2403c2f0");
    check_field_offset(lv, s2403c2f1, ABISELECT(192,144), "S2403C2.s2403c2f1");
    check_field_offset(lv, s2403c2f2, ABISELECT(196,148), "S2403C2.s2403c2f2");
    check_field_offset(lv, s2403c2f3, ABISELECT(200,152), "S2403C2.s2403c2f3");
    check_field_offset(lv, s2403c2f4, ABISELECT(240,172), "S2403C2.s2403c2f4");
    check_field_offset(lv, s2403c2f5, ABISELECT(248,176), "S2403C2.s2403c2f5");
    check_field_offset(lv, s2403c2f6, ABISELECT(256,180), "S2403C2.s2403c2f6");
    check_field_offset(lv, s2403c2f7, ABISELECT(296,216), "S2403C2.s2403c2f7");
    check_field_offset(lv, s2403c2f8, ABISELECT(312,232), "S2403C2.s2403c2f8");
    test_class_info(&lv, &cd_S2403C2);
    dp->~S2403C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2403C2(Test_S2403C2, "S2403C2", ABISELECT(320,240));

#else // __cplusplus

extern void _ZN7S2403C2C1Ev();
extern void _ZN7S2403C2D1Ev();
Name_Map name_map_S2403C2[] = {
  NSPAIR(_ZN7S2403C2C1Ev),
  NSPAIR(_ZN7S2403C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2403C4;
extern VTBL_ENTRY _ZTI7S2403C4[];
extern  VTBL_ENTRY _ZTV7S2403C4[];
extern Class_Descriptor cd_S2403C3;
extern VTBL_ENTRY _ZTI7S2403C3[];
extern  VTBL_ENTRY _ZTV7S2403C3[];
extern Class_Descriptor cd_S2403C14;
extern VTBL_ENTRY _ZTI8S2403C14[];
extern  VTBL_ENTRY _ZTV8S2403C14[];
extern Class_Descriptor cd_S2403C13;
extern VTBL_ENTRY _ZTI8S2403C13[];
extern  VTBL_ENTRY _ZTV8S2403C13[];
extern Class_Descriptor cd_S2403C12;
extern VTBL_ENTRY _ZTI8S2403C12[];
extern  VTBL_ENTRY _ZTV8S2403C12[];
extern Class_Descriptor cd_S2403C18;
extern VTBL_ENTRY _ZTI8S2403C18[];
extern  VTBL_ENTRY _ZTV8S2403C18[];
static Base_Class bases_S2403C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2403C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2403C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2403C14,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2403C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2403C12,    ABISELECT(96,72), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2403C18,    ABISELECT(168,128), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2403C2[];
extern void _ZN7S2403C2D1Ev();
extern void _ZN7S2403C2D0Ev();
extern void _ZN7S2403C42v6Ev();
extern void _ZN7S2403C42v7Ev();
extern void _ZN7S2403C42v8Ev();
extern void _ZN7S2403C42v9Ev();
extern void _ZN7S2403C43v10Ev();
extern void _ZN7S2403C43v11Ev();
extern void _ZN7S2403C43v12Ev();
extern void _ZN7S2403C43v13Ev();
extern void _ZN7S2403C43v14Ev();
extern void _ZN7S2403C43v15Ev();
extern void _ZN7S2403C43v16Ev();
extern void _ZN7S2403C43v17Ev();
extern void _ZN7S2403C33v18Ev();
extern void _ZN7S2403C33v19Ev();
extern void _ZN7S2403C33v20Ev();
extern void _ZN7S2403C33v21Ev();
extern void _ZN7S2403C33v22Ev();
extern void _ZN7S2403C33v23Ev();
extern void _ZN7S2403C33v24Ev();
extern void _ZN7S2403C23v61Ev();
extern void _ZN7S2403C23v62Ev();
extern void _ZN7S2403C23v63Ev();
extern void _ZN7S2403C23v64Ev();
extern void _ZN7S2403C23v65Ev();
extern void _ZN7S2403C23v66Ev();
extern void _ZN7S2403C23v67Ev();
extern void _ZN7S2403C23v68Ev();
extern void _ZN7S2403C23v69Ev();
extern void _ZN7S2403C23v70Ev();
extern void _ZN7S2403C23v71Ev();
extern void _ZN7S2403C23v72Ev();
extern void _ZN7S2403C23v73Ev();
extern void _ZN7S2403C23v74Ev();
extern void _ZN7S2403C23v75Ev();
extern void _ZN7S2403C23v76Ev();
extern void _ZN7S2403C23v77Ev();
extern void _ZN7S2403C23v78Ev();
extern void _ZN7S2403C23v79Ev();
extern void _ZN7S2403C23v80Ev();
extern void _ZN7S2403C23v81Ev();
extern void _ZN7S2403C23v82Ev();
extern void _ZN7S2403C23v83Ev();
extern void _ZN7S2403C23v84Ev();
extern void _ZN7S2403C23v85Ev();
extern void _ZN7S2403C23v86Ev();
extern void _ZN7S2403C23v87Ev();
extern void _ZN7S2403C23v88Ev();
extern void _ZN7S2403C23v89Ev();
extern void _ZN7S2403C23v90Ev();
extern void _ZN7S2403C23v91Ev();
extern void _ZN7S2403C23v92Ev();
extern void ABISELECT(_ZThn96_N7S2403C2D1Ev,_ZThn72_N7S2403C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S2403C2D0Ev,_ZThn72_N7S2403C2D0Ev)();
extern void _ZN8S2403C143v25Ev();
extern void _ZN8S2403C143v26Ev();
extern void _ZN8S2403C143v27Ev();
extern void _ZN8S2403C133v28Ev();
extern void _ZN8S2403C133v29Ev();
extern void _ZN8S2403C133v30Ev();
extern void _ZN8S2403C133v31Ev();
extern void _ZN8S2403C123v32Ev();
extern void _ZN8S2403C123v33Ev();
extern void _ZN8S2403C123v34Ev();
extern void ABISELECT(_ZThn168_N7S2403C2D1Ev,_ZThn128_N7S2403C2D1Ev)();
extern void ABISELECT(_ZThn168_N7S2403C2D0Ev,_ZThn128_N7S2403C2D0Ev)();
extern void _ZN8S2403C183v35Ev();
extern void _ZN8S2403C183v36Ev();
extern void _ZN8S2403C183v37Ev();
extern void _ZN8S2403C183v38Ev();
extern void _ZN8S2403C183v39Ev();
extern void _ZN8S2403C183v40Ev();
extern void _ZN8S2403C183v41Ev();
extern void _ZN8S2403C183v42Ev();
extern void _ZN8S2403C183v43Ev();
extern void _ZN8S2403C183v44Ev();
extern void _ZN8S2403C183v45Ev();
extern void _ZN8S2403C183v46Ev();
extern void _ZN8S2403C183v47Ev();
extern void _ZN8S2403C183v48Ev();
extern void _ZN8S2403C183v49Ev();
extern void _ZN8S2403C183v50Ev();
extern void _ZN8S2403C183v51Ev();
extern void _ZN8S2403C183v52Ev();
extern void _ZN8S2403C183v53Ev();
extern void _ZN8S2403C183v54Ev();
extern void _ZN8S2403C183v55Ev();
extern void _ZN8S2403C183v56Ev();
extern void _ZN8S2403C183v57Ev();
extern void _ZN8S2403C183v58Ev();
extern void _ZN8S2403C183v59Ev();
extern void _ZN8S2403C183v60Ev();
static  VTBL_ENTRY vtc_S2403C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2403C2[0]),
  (VTBL_ENTRY)&_ZN7S2403C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2403C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v22Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v23Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v24Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v73Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v74Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v75Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v76Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v77Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v78Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v79Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v80Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v81Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v82Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v83Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v84Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v85Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v86Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v87Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v88Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v89Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v90Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v91Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v92Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S2403C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2403C2D1Ev,_ZThn72_N7S2403C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2403C2D0Ev,_ZThn72_N7S2403C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2403C143v25Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v26Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v27Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v28Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v29Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v30Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v31Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v32Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v33Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v34Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S2403C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2403C2D1Ev,_ZThn128_N7S2403C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2403C2D0Ev,_ZThn128_N7S2403C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2403C183v35Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v36Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v37Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v38Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v39Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v40Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v41Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v42Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v43Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v44Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v45Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v46Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v47Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v48Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v49Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v50Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v51Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v52Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v53Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v54Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v55Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v56Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v57Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v58Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v59Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v60Ev,
};
extern VTBL_ENTRY _ZTI7S2403C2[];
extern  VTBL_ENTRY _ZTV7S2403C2[];
Class_Descriptor cd_S2403C2 = {  "S2403C2", // class name
  bases_S2403C2, 6,
  &(vtc_S2403C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,240), // object size
  NSPAIRA(_ZTI7S2403C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2403C2),99, //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  S2403C22_nt  {
  virtual  ~S2403C22_nt(); // _ZN11S2403C22_ntD1Ev
  virtual void  v93(); // _ZN11S2403C22_nt3v93Ev
  S2403C22_nt(); // tgen
};
//SIG(-1 S2403C22_nt) C1{ vd v1}


 S2403C22_nt ::~S2403C22_nt(){ note_dtor("S2403C22_nt", this);}
void  S2403C22_nt ::v93(){vfunc_called(this, "_ZN11S2403C22_nt3v93Ev");}
S2403C22_nt ::S2403C22_nt(){ note_ctor("S2403C22_nt", this);} // tgen

//skip512 S2403C22_nt

#else // __cplusplus

extern void _ZN11S2403C22_ntC1Ev();
extern void _ZN11S2403C22_ntD1Ev();
Name_Map name_map_S2403C22_nt[] = {
  NSPAIR(_ZN11S2403C22_ntC1Ev),
  NSPAIR(_ZN11S2403C22_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2403C22_nt[];
extern void _ZN11S2403C22_ntD1Ev();
extern void _ZN11S2403C22_ntD0Ev();
extern void _ZN11S2403C22_nt3v93Ev();
static  VTBL_ENTRY vtc_S2403C22_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2403C22_nt[0]),
  (VTBL_ENTRY)&_ZN11S2403C22_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2403C22_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2403C22_nt3v93Ev,
};
extern VTBL_ENTRY _ZTI11S2403C22_nt[];
VTBL_ENTRY *P__ZTI11S2403C22_nt = _ZTI11S2403C22_nt; 
extern  VTBL_ENTRY _ZTV11S2403C22_nt[];
Class_Descriptor cd_S2403C22_nt = {  "S2403C22_nt", // class name
  0,0,//no base classes
  &(vtc_S2403C22_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S2403C22_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2403C22_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  S2403C1  : S2403C2 , S2403C22_nt {
  int s2403c1f0;
  char s2403c1f1;
  virtual  ~S2403C1(); // _ZN7S2403C1D1Ev
  virtual void  v1(); // _ZN7S2403C12v1Ev
  virtual void  v2(); // _ZN7S2403C12v2Ev
  virtual void  v3(); // _ZN7S2403C12v3Ev
  virtual void  v4(); // _ZN7S2403C12v4Ev
  virtual void  v5(); // _ZN7S2403C12v5Ev
  S2403C1(); // tgen
};
//SIG(1 S2403C1) C1{ BC2{ BC3{ BC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ m FL[4]} Fc} vd v18 v19 v20 v21 v22 v23 v24 FC9{ m Fp Fi[2] FC10{ m}}} BC11{ BC12{ BC13{ vd v25 v26 v27} vd v28 v29 v30 v31} vd v32 v33 v34 FC14{ m Fp Fi[2] FC10} FC15{ m FL[4]} Fc} BC16{ vd 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} vd 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 FC17{ m Fp Fi FC18{ m}} Fc[2] Fi Fp[5] Fc[2] Fp FC19{ m Fp Fi[4] Fc Fi[3]} FL[2] Fi[2]} BC20{ vd v93} vd v1 v2 v3 v4 v5 Fi Fc}


 S2403C1 ::~S2403C1(){ note_dtor("S2403C1", this);}
void  S2403C1 ::v1(){vfunc_called(this, "_ZN7S2403C12v1Ev");}
void  S2403C1 ::v2(){vfunc_called(this, "_ZN7S2403C12v2Ev");}
void  S2403C1 ::v3(){vfunc_called(this, "_ZN7S2403C12v3Ev");}
void  S2403C1 ::v4(){vfunc_called(this, "_ZN7S2403C12v4Ev");}
void  S2403C1 ::v5(){vfunc_called(this, "_ZN7S2403C12v5Ev");}
S2403C1 ::S2403C1(){ note_ctor("S2403C1", this);} // tgen

static void Test_S2403C1()
{
  extern Class_Descriptor cd_S2403C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,64)];
    init_test(&cd_S2403C1, buf);
    S2403C1 *dp, &lv = *(dp=new (buf) S2403C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,252), "sizeof(S2403C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2403C1)");
    check_base_class_offset(lv, (S2403C4*)(S2403C3*)(S2403C2*), 0, "S2403C1");
    check_base_class_offset(lv, (S2403C3*)(S2403C2*), 0, "S2403C1");
    check_base_class_offset(lv, (S2403C14*)(S2403C13*)(S2403C12*)(S2403C2*), ABISELECT(96,72), "S2403C1");
    check_base_class_offset(lv, (S2403C13*)(S2403C12*)(S2403C2*), ABISELECT(96,72), "S2403C1");
    check_base_class_offset(lv, (S2403C12*)(S2403C2*), ABISELECT(96,72), "S2403C1");
    check_base_class_offset(lv, (S2403C18*)(S2403C2*), ABISELECT(168,128), "S2403C1");
    check_base_class_offset(lv, (S2403C2*), 0, "S2403C1");
    check_base_class_offset(lv, (S2403C22_nt*), ABISELECT(320,240), "S2403C1");
    check_field_offset(lv, s2403c1f0, ABISELECT(328,244), "S2403C1.s2403c1f0");
    check_field_offset(lv, s2403c1f1, ABISELECT(332,248), "S2403C1.s2403c1f1");
    test_class_info(&lv, &cd_S2403C1);
    dp->~S2403C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2403C1(Test_S2403C1, "S2403C1", ABISELECT(336,252));

#else // __cplusplus

extern void _ZN7S2403C1C1Ev();
extern void _ZN7S2403C1D1Ev();
Name_Map name_map_S2403C1[] = {
  NSPAIR(_ZN7S2403C1C1Ev),
  NSPAIR(_ZN7S2403C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2403C4;
extern VTBL_ENTRY _ZTI7S2403C4[];
extern  VTBL_ENTRY _ZTV7S2403C4[];
extern Class_Descriptor cd_S2403C3;
extern VTBL_ENTRY _ZTI7S2403C3[];
extern  VTBL_ENTRY _ZTV7S2403C3[];
extern Class_Descriptor cd_S2403C14;
extern VTBL_ENTRY _ZTI8S2403C14[];
extern  VTBL_ENTRY _ZTV8S2403C14[];
extern Class_Descriptor cd_S2403C13;
extern VTBL_ENTRY _ZTI8S2403C13[];
extern  VTBL_ENTRY _ZTV8S2403C13[];
extern Class_Descriptor cd_S2403C12;
extern VTBL_ENTRY _ZTI8S2403C12[];
extern  VTBL_ENTRY _ZTV8S2403C12[];
extern Class_Descriptor cd_S2403C18;
extern VTBL_ENTRY _ZTI8S2403C18[];
extern  VTBL_ENTRY _ZTV8S2403C18[];
extern Class_Descriptor cd_S2403C2;
extern VTBL_ENTRY _ZTI7S2403C2[];
extern  VTBL_ENTRY _ZTV7S2403C2[];
extern Class_Descriptor cd_S2403C22_nt;
extern VTBL_ENTRY _ZTI11S2403C22_nt[];
extern  VTBL_ENTRY _ZTV11S2403C22_nt[];
static Base_Class bases_S2403C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2403C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2403C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2403C14,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2403C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2403C12,    ABISELECT(96,72), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2403C18,    ABISELECT(168,128), //bcp->offset
    74, //bcp->virtual_function_table_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_S2403C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2403C22_nt,    ABISELECT(320,240), //bcp->offset
    104, //bcp->virtual_function_table_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 _ZTI7S2403C1[];
extern void _ZN7S2403C1D1Ev();
extern void _ZN7S2403C1D0Ev();
extern void _ZN7S2403C42v6Ev();
extern void _ZN7S2403C42v7Ev();
extern void _ZN7S2403C42v8Ev();
extern void _ZN7S2403C42v9Ev();
extern void _ZN7S2403C43v10Ev();
extern void _ZN7S2403C43v11Ev();
extern void _ZN7S2403C43v12Ev();
extern void _ZN7S2403C43v13Ev();
extern void _ZN7S2403C43v14Ev();
extern void _ZN7S2403C43v15Ev();
extern void _ZN7S2403C43v16Ev();
extern void _ZN7S2403C43v17Ev();
extern void _ZN7S2403C33v18Ev();
extern void _ZN7S2403C33v19Ev();
extern void _ZN7S2403C33v20Ev();
extern void _ZN7S2403C33v21Ev();
extern void _ZN7S2403C33v22Ev();
extern void _ZN7S2403C33v23Ev();
extern void _ZN7S2403C33v24Ev();
extern void _ZN7S2403C23v61Ev();
extern void _ZN7S2403C23v62Ev();
extern void _ZN7S2403C23v63Ev();
extern void _ZN7S2403C23v64Ev();
extern void _ZN7S2403C23v65Ev();
extern void _ZN7S2403C23v66Ev();
extern void _ZN7S2403C23v67Ev();
extern void _ZN7S2403C23v68Ev();
extern void _ZN7S2403C23v69Ev();
extern void _ZN7S2403C23v70Ev();
extern void _ZN7S2403C23v71Ev();
extern void _ZN7S2403C23v72Ev();
extern void _ZN7S2403C23v73Ev();
extern void _ZN7S2403C23v74Ev();
extern void _ZN7S2403C23v75Ev();
extern void _ZN7S2403C23v76Ev();
extern void _ZN7S2403C23v77Ev();
extern void _ZN7S2403C23v78Ev();
extern void _ZN7S2403C23v79Ev();
extern void _ZN7S2403C23v80Ev();
extern void _ZN7S2403C23v81Ev();
extern void _ZN7S2403C23v82Ev();
extern void _ZN7S2403C23v83Ev();
extern void _ZN7S2403C23v84Ev();
extern void _ZN7S2403C23v85Ev();
extern void _ZN7S2403C23v86Ev();
extern void _ZN7S2403C23v87Ev();
extern void _ZN7S2403C23v88Ev();
extern void _ZN7S2403C23v89Ev();
extern void _ZN7S2403C23v90Ev();
extern void _ZN7S2403C23v91Ev();
extern void _ZN7S2403C23v92Ev();
extern void _ZN7S2403C12v1Ev();
extern void _ZN7S2403C12v2Ev();
extern void _ZN7S2403C12v3Ev();
extern void _ZN7S2403C12v4Ev();
extern void _ZN7S2403C12v5Ev();
extern void ABISELECT(_ZThn96_N7S2403C1D1Ev,_ZThn72_N7S2403C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S2403C1D0Ev,_ZThn72_N7S2403C1D0Ev)();
extern void _ZN8S2403C143v25Ev();
extern void _ZN8S2403C143v26Ev();
extern void _ZN8S2403C143v27Ev();
extern void _ZN8S2403C133v28Ev();
extern void _ZN8S2403C133v29Ev();
extern void _ZN8S2403C133v30Ev();
extern void _ZN8S2403C133v31Ev();
extern void _ZN8S2403C123v32Ev();
extern void _ZN8S2403C123v33Ev();
extern void _ZN8S2403C123v34Ev();
extern void ABISELECT(_ZThn168_N7S2403C1D1Ev,_ZThn128_N7S2403C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S2403C1D0Ev,_ZThn128_N7S2403C1D0Ev)();
extern void _ZN8S2403C183v35Ev();
extern void _ZN8S2403C183v36Ev();
extern void _ZN8S2403C183v37Ev();
extern void _ZN8S2403C183v38Ev();
extern void _ZN8S2403C183v39Ev();
extern void _ZN8S2403C183v40Ev();
extern void _ZN8S2403C183v41Ev();
extern void _ZN8S2403C183v42Ev();
extern void _ZN8S2403C183v43Ev();
extern void _ZN8S2403C183v44Ev();
extern void _ZN8S2403C183v45Ev();
extern void _ZN8S2403C183v46Ev();
extern void _ZN8S2403C183v47Ev();
extern void _ZN8S2403C183v48Ev();
extern void _ZN8S2403C183v49Ev();
extern void _ZN8S2403C183v50Ev();
extern void _ZN8S2403C183v51Ev();
extern void _ZN8S2403C183v52Ev();
extern void _ZN8S2403C183v53Ev();
extern void _ZN8S2403C183v54Ev();
extern void _ZN8S2403C183v55Ev();
extern void _ZN8S2403C183v56Ev();
extern void _ZN8S2403C183v57Ev();
extern void _ZN8S2403C183v58Ev();
extern void _ZN8S2403C183v59Ev();
extern void _ZN8S2403C183v60Ev();
extern void ABISELECT(_ZThn320_N7S2403C1D1Ev,_ZThn240_N7S2403C1D1Ev)();
extern void ABISELECT(_ZThn320_N7S2403C1D0Ev,_ZThn240_N7S2403C1D0Ev)();
extern void _ZN11S2403C22_nt3v93Ev();
static  VTBL_ENTRY vtc_S2403C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2403C1[0]),
  (VTBL_ENTRY)&_ZN7S2403C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2403C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2403C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2403C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v22Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v23Ev,
  (VTBL_ENTRY)&_ZN7S2403C33v24Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v73Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v74Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v75Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v76Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v77Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v78Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v79Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v80Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v81Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v82Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v83Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v84Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v85Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v86Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v87Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v88Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v89Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v90Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v91Ev,
  (VTBL_ENTRY)&_ZN7S2403C23v92Ev,
  (VTBL_ENTRY)&_ZN7S2403C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2403C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2403C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2403C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2403C12v5Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S2403C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2403C1D1Ev,_ZThn72_N7S2403C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2403C1D0Ev,_ZThn72_N7S2403C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2403C143v25Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v26Ev,
  (VTBL_ENTRY)&_ZN8S2403C143v27Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v28Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v29Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v30Ev,
  (VTBL_ENTRY)&_ZN8S2403C133v31Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v32Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v33Ev,
  (VTBL_ENTRY)&_ZN8S2403C123v34Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S2403C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2403C1D1Ev,_ZThn128_N7S2403C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2403C1D0Ev,_ZThn128_N7S2403C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2403C183v35Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v36Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v37Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v38Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v39Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v40Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v41Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v42Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v43Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v44Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v45Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v46Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v47Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v48Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v49Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v50Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v51Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v52Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v53Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v54Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v55Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v56Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v57Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v58Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v59Ev,
  (VTBL_ENTRY)&_ZN8S2403C183v60Ev,
  ABISELECT(-320,-240),
  (VTBL_ENTRY)&(_ZTI7S2403C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S2403C1D1Ev,_ZThn240_N7S2403C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S2403C1D0Ev,_ZThn240_N7S2403C1D0Ev),
  (VTBL_ENTRY)&_ZN11S2403C22_nt3v93Ev,
};
extern VTBL_ENTRY _ZTI7S2403C1[];
extern  VTBL_ENTRY _ZTV7S2403C1[];
Class_Descriptor cd_S2403C1 = {  "S2403C1", // class name
  bases_S2403C1, 8,
  &(vtc_S2403C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,252), // object size
  NSPAIRA(_ZTI7S2403C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2403C1),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2210C4  {
  void *s2210c4f0;
  ::S2382C25 s2210c4f1;
  ::S2403C17_nt s2210c4f2;
  char s2210c4f3;
  virtual  ~S2210C4(); // _ZN7S2210C4D1Ev
  virtual void  v3(); // _ZN7S2210C42v3Ev
  virtual void  v4(); // _ZN7S2210C42v4Ev
  virtual void  v5(); // _ZN7S2210C42v5Ev
  virtual void  v6(); // _ZN7S2210C42v6Ev
  virtual void  v7(); // _ZN7S2210C42v7Ev
  virtual void  v8(); // _ZN7S2210C42v8Ev
  virtual void  v9(); // _ZN7S2210C42v9Ev
  virtual void  v10(); // _ZN7S2210C43v10Ev
  virtual void  v11(); // _ZN7S2210C43v11Ev
  virtual void  v12(); // _ZN7S2210C43v12Ev
  virtual void  v13(); // _ZN7S2210C43v13Ev
  virtual void  v14(); // _ZN7S2210C43v14Ev
  S2210C4(); // tgen
};
//SIG(-1 S2210C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S2210C4 ::~S2210C4(){ note_dtor("S2210C4", this);}
void  S2210C4 ::v3(){vfunc_called(this, "_ZN7S2210C42v3Ev");}
void  S2210C4 ::v4(){vfunc_called(this, "_ZN7S2210C42v4Ev");}
void  S2210C4 ::v5(){vfunc_called(this, "_ZN7S2210C42v5Ev");}
void  S2210C4 ::v6(){vfunc_called(this, "_ZN7S2210C42v6Ev");}
void  S2210C4 ::v7(){vfunc_called(this, "_ZN7S2210C42v7Ev");}
void  S2210C4 ::v8(){vfunc_called(this, "_ZN7S2210C42v8Ev");}
void  S2210C4 ::v9(){vfunc_called(this, "_ZN7S2210C42v9Ev");}
void  S2210C4 ::v10(){vfunc_called(this, "_ZN7S2210C43v10Ev");}
void  S2210C4 ::v11(){vfunc_called(this, "_ZN7S2210C43v11Ev");}
void  S2210C4 ::v12(){vfunc_called(this, "_ZN7S2210C43v12Ev");}
void  S2210C4 ::v13(){vfunc_called(this, "_ZN7S2210C43v13Ev");}
void  S2210C4 ::v14(){vfunc_called(this, "_ZN7S2210C43v14Ev");}
S2210C4 ::S2210C4(){ note_ctor("S2210C4", this);} // tgen

static void Test_S2210C4()
{
  extern Class_Descriptor cd_S2210C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2210C4, buf);
    S2210C4 *dp, &lv = *(dp=new (buf) S2210C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2210C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2210C4)");
    check_field_offset(lv, s2210c4f0, ABISELECT(8,4), "S2210C4.s2210c4f0");
    check_field_offset(lv, s2210c4f1, ABISELECT(16,8), "S2210C4.s2210c4f1");
    check_field_offset(lv, s2210c4f2, ABISELECT(32,20), "S2210C4.s2210c4f2");
    check_field_offset(lv, s2210c4f3, ABISELECT(64,52), "S2210C4.s2210c4f3");
    test_class_info(&lv, &cd_S2210C4);
    dp->~S2210C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2210C4(Test_S2210C4, "S2210C4", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2210C4C1Ev();
extern void _ZN7S2210C4D1Ev();
Name_Map name_map_S2210C4[] = {
  NSPAIR(_ZN7S2210C4C1Ev),
  NSPAIR(_ZN7S2210C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2210C4[];
extern void _ZN7S2210C4D1Ev();
extern void _ZN7S2210C4D0Ev();
extern void _ZN7S2210C42v3Ev();
extern void _ZN7S2210C42v4Ev();
extern void _ZN7S2210C42v5Ev();
extern void _ZN7S2210C42v6Ev();
extern void _ZN7S2210C42v7Ev();
extern void _ZN7S2210C42v8Ev();
extern void _ZN7S2210C42v9Ev();
extern void _ZN7S2210C43v10Ev();
extern void _ZN7S2210C43v11Ev();
extern void _ZN7S2210C43v12Ev();
extern void _ZN7S2210C43v13Ev();
extern void _ZN7S2210C43v14Ev();
static  VTBL_ENTRY vtc_S2210C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2210C4[0]),
  (VTBL_ENTRY)&_ZN7S2210C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2210C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S2210C4[];
extern  VTBL_ENTRY _ZTV7S2210C4[];
Class_Descriptor cd_S2210C4 = {  "S2210C4", // class name
  0,0,//no base classes
  &(vtc_S2210C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2210C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2210C4),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2210C3  : S2210C4 {
  ::S2382C37 s2210c3f0;
  virtual  ~S2210C3(); // _ZN7S2210C3D1Ev
  virtual void  v15(); // _ZN7S2210C33v15Ev
  virtual void  v16(); // _ZN7S2210C33v16Ev
  virtual void  v17(); // _ZN7S2210C33v17Ev
  virtual void  v18(); // _ZN7S2210C33v18Ev
  virtual void  v19(); // _ZN7S2210C33v19Ev
  virtual void  v20(); // _ZN7S2210C33v20Ev
  virtual void  v21(); // _ZN7S2210C33v21Ev
  S2210C3(); // tgen
};
//SIG(-1 S2210C3) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S2210C3 ::~S2210C3(){ note_dtor("S2210C3", this);}
void  S2210C3 ::v15(){vfunc_called(this, "_ZN7S2210C33v15Ev");}
void  S2210C3 ::v16(){vfunc_called(this, "_ZN7S2210C33v16Ev");}
void  S2210C3 ::v17(){vfunc_called(this, "_ZN7S2210C33v17Ev");}
void  S2210C3 ::v18(){vfunc_called(this, "_ZN7S2210C33v18Ev");}
void  S2210C3 ::v19(){vfunc_called(this, "_ZN7S2210C33v19Ev");}
void  S2210C3 ::v20(){vfunc_called(this, "_ZN7S2210C33v20Ev");}
void  S2210C3 ::v21(){vfunc_called(this, "_ZN7S2210C33v21Ev");}
S2210C3 ::S2210C3(){ note_ctor("S2210C3", this);} // tgen

static void Test_S2210C3()
{
  extern Class_Descriptor cd_S2210C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S2210C3, buf);
    S2210C3 *dp, &lv = *(dp=new (buf) S2210C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S2210C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2210C3)");
    check_base_class_offset(lv, (S2210C4*), 0, "S2210C3");
    check_field_offset(lv, s2210c3f0, ABISELECT(72,56), "S2210C3.s2210c3f0");
    test_class_info(&lv, &cd_S2210C3);
    dp->~S2210C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2210C3(Test_S2210C3, "S2210C3", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S2210C3C1Ev();
extern void _ZN7S2210C3D1Ev();
Name_Map name_map_S2210C3[] = {
  NSPAIR(_ZN7S2210C3C1Ev),
  NSPAIR(_ZN7S2210C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2210C4;
extern VTBL_ENTRY _ZTI7S2210C4[];
extern  VTBL_ENTRY _ZTV7S2210C4[];
static Base_Class bases_S2210C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2210C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2210C3[];
extern void _ZN7S2210C3D1Ev();
extern void _ZN7S2210C3D0Ev();
extern void _ZN7S2210C42v3Ev();
extern void _ZN7S2210C42v4Ev();
extern void _ZN7S2210C42v5Ev();
extern void _ZN7S2210C42v6Ev();
extern void _ZN7S2210C42v7Ev();
extern void _ZN7S2210C42v8Ev();
extern void _ZN7S2210C42v9Ev();
extern void _ZN7S2210C43v10Ev();
extern void _ZN7S2210C43v11Ev();
extern void _ZN7S2210C43v12Ev();
extern void _ZN7S2210C43v13Ev();
extern void _ZN7S2210C43v14Ev();
extern void _ZN7S2210C33v15Ev();
extern void _ZN7S2210C33v16Ev();
extern void _ZN7S2210C33v17Ev();
extern void _ZN7S2210C33v18Ev();
extern void _ZN7S2210C33v19Ev();
extern void _ZN7S2210C33v20Ev();
extern void _ZN7S2210C33v21Ev();
static  VTBL_ENTRY vtc_S2210C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2210C3[0]),
  (VTBL_ENTRY)&_ZN7S2210C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2210C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v21Ev,
};
extern VTBL_ENTRY _ZTI7S2210C3[];
extern  VTBL_ENTRY _ZTV7S2210C3[];
Class_Descriptor cd_S2210C3 = {  "S2210C3", // class name
  bases_S2210C3, 1,
  &(vtc_S2210C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S2210C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2210C3),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  S2210C14  {
  virtual  ~S2210C14(); // _ZN8S2210C14D1Ev
  virtual void  v22(); // _ZN8S2210C143v22Ev
  virtual void  v23(); // _ZN8S2210C143v23Ev
  virtual void  v24(); // _ZN8S2210C143v24Ev
  S2210C14(); // tgen
};
//SIG(-1 S2210C14) C1{ vd v1 v2 v3}


 S2210C14 ::~S2210C14(){ note_dtor("S2210C14", this);}
void  S2210C14 ::v22(){vfunc_called(this, "_ZN8S2210C143v22Ev");}
void  S2210C14 ::v23(){vfunc_called(this, "_ZN8S2210C143v23Ev");}
void  S2210C14 ::v24(){vfunc_called(this, "_ZN8S2210C143v24Ev");}
S2210C14 ::S2210C14(){ note_ctor("S2210C14", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2210C14C1Ev();
extern void _ZN8S2210C14D1Ev();
Name_Map name_map_S2210C14[] = {
  NSPAIR(_ZN8S2210C14C1Ev),
  NSPAIR(_ZN8S2210C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2210C14[];
extern void _ZN8S2210C14D1Ev();
extern void _ZN8S2210C14D0Ev();
extern void _ZN8S2210C143v22Ev();
extern void _ZN8S2210C143v23Ev();
extern void _ZN8S2210C143v24Ev();
static  VTBL_ENTRY vtc_S2210C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2210C14[0]),
  (VTBL_ENTRY)&_ZN8S2210C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2210C14D0Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v22Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v23Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v24Ev,
};
extern VTBL_ENTRY _ZTI8S2210C14[];
extern  VTBL_ENTRY _ZTV8S2210C14[];
Class_Descriptor cd_S2210C14 = {  "S2210C14", // class name
  0,0,//no base classes
  &(vtc_S2210C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2210C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2210C14),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  S2210C13  : S2210C14 {
  virtual  ~S2210C13(); // _ZN8S2210C13D1Ev
  virtual void  v25(); // _ZN8S2210C133v25Ev
  virtual void  v26(); // _ZN8S2210C133v26Ev
  virtual void  v27(); // _ZN8S2210C133v27Ev
  virtual void  v28(); // _ZN8S2210C133v28Ev
  S2210C13(); // tgen
};
//SIG(-1 S2210C13) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S2210C13 ::~S2210C13(){ note_dtor("S2210C13", this);}
void  S2210C13 ::v25(){vfunc_called(this, "_ZN8S2210C133v25Ev");}
void  S2210C13 ::v26(){vfunc_called(this, "_ZN8S2210C133v26Ev");}
void  S2210C13 ::v27(){vfunc_called(this, "_ZN8S2210C133v27Ev");}
void  S2210C13 ::v28(){vfunc_called(this, "_ZN8S2210C133v28Ev");}
S2210C13 ::S2210C13(){ note_ctor("S2210C13", this);} // tgen

static void Test_S2210C13()
{
  extern Class_Descriptor cd_S2210C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2210C13, buf);
    S2210C13 *dp, &lv = *(dp=new (buf) S2210C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2210C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2210C13)");
    check_base_class_offset(lv, (S2210C14*), 0, "S2210C13");
    test_class_info(&lv, &cd_S2210C13);
    dp->~S2210C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2210C13(Test_S2210C13, "S2210C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S2210C13C1Ev();
extern void _ZN8S2210C13D1Ev();
Name_Map name_map_S2210C13[] = {
  NSPAIR(_ZN8S2210C13C1Ev),
  NSPAIR(_ZN8S2210C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2210C14;
extern VTBL_ENTRY _ZTI8S2210C14[];
extern  VTBL_ENTRY _ZTV8S2210C14[];
static Base_Class bases_S2210C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2210C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2210C13[];
extern void _ZN8S2210C13D1Ev();
extern void _ZN8S2210C13D0Ev();
extern void _ZN8S2210C143v22Ev();
extern void _ZN8S2210C143v23Ev();
extern void _ZN8S2210C143v24Ev();
extern void _ZN8S2210C133v25Ev();
extern void _ZN8S2210C133v26Ev();
extern void _ZN8S2210C133v27Ev();
extern void _ZN8S2210C133v28Ev();
static  VTBL_ENTRY vtc_S2210C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2210C13[0]),
  (VTBL_ENTRY)&_ZN8S2210C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2210C13D0Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v22Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v23Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v24Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v25Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v26Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v27Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v28Ev,
};
extern VTBL_ENTRY _ZTI8S2210C13[];
extern  VTBL_ENTRY _ZTV8S2210C13[];
Class_Descriptor cd_S2210C13 = {  "S2210C13", // class name
  bases_S2210C13, 1,
  &(vtc_S2210C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2210C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2210C13),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2210C12  : S2210C13 {
  ::S2382C29_nt s2210c12f0;
  ::S888C10_nt s2210c12f1;
  char s2210c12f2;
  virtual  ~S2210C12(); // _ZN8S2210C12D1Ev
  virtual void  v29(); // _ZN8S2210C123v29Ev
  virtual void  v30(); // _ZN8S2210C123v30Ev
  virtual void  v31(); // _ZN8S2210C123v31Ev
  S2210C12(); // tgen
};
//SIG(-1 S2210C12) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S2210C12 ::~S2210C12(){ note_dtor("S2210C12", this);}
void  S2210C12 ::v29(){vfunc_called(this, "_ZN8S2210C123v29Ev");}
void  S2210C12 ::v30(){vfunc_called(this, "_ZN8S2210C123v30Ev");}
void  S2210C12 ::v31(){vfunc_called(this, "_ZN8S2210C123v31Ev");}
S2210C12 ::S2210C12(){ note_ctor("S2210C12", this);} // tgen

static void Test_S2210C12()
{
  extern Class_Descriptor cd_S2210C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2210C12, buf);
    S2210C12 *dp, &lv = *(dp=new (buf) S2210C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2210C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2210C12)");
    check_base_class_offset(lv, (S2210C14*)(S2210C13*), 0, "S2210C12");
    check_base_class_offset(lv, (S2210C13*), 0, "S2210C12");
    check_field_offset(lv, s2210c12f0, ABISELECT(8,4), "S2210C12.s2210c12f0");
    check_field_offset(lv, s2210c12f1, ABISELECT(32,20), "S2210C12.s2210c12f1");
    check_field_offset(lv, s2210c12f2, ABISELECT(64,52), "S2210C12.s2210c12f2");
    test_class_info(&lv, &cd_S2210C12);
    dp->~S2210C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2210C12(Test_S2210C12, "S2210C12", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S2210C12C1Ev();
extern void _ZN8S2210C12D1Ev();
Name_Map name_map_S2210C12[] = {
  NSPAIR(_ZN8S2210C12C1Ev),
  NSPAIR(_ZN8S2210C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2210C14;
extern VTBL_ENTRY _ZTI8S2210C14[];
extern  VTBL_ENTRY _ZTV8S2210C14[];
extern Class_Descriptor cd_S2210C13;
extern VTBL_ENTRY _ZTI8S2210C13[];
extern  VTBL_ENTRY _ZTV8S2210C13[];
static Base_Class bases_S2210C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2210C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2210C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2210C12[];
extern void _ZN8S2210C12D1Ev();
extern void _ZN8S2210C12D0Ev();
extern void _ZN8S2210C143v22Ev();
extern void _ZN8S2210C143v23Ev();
extern void _ZN8S2210C143v24Ev();
extern void _ZN8S2210C133v25Ev();
extern void _ZN8S2210C133v26Ev();
extern void _ZN8S2210C133v27Ev();
extern void _ZN8S2210C133v28Ev();
extern void _ZN8S2210C123v29Ev();
extern void _ZN8S2210C123v30Ev();
extern void _ZN8S2210C123v31Ev();
static  VTBL_ENTRY vtc_S2210C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2210C12[0]),
  (VTBL_ENTRY)&_ZN8S2210C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2210C12D0Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v22Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v23Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v24Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v25Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v26Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v27Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v28Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v29Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v30Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v31Ev,
};
extern VTBL_ENTRY _ZTI8S2210C12[];
extern  VTBL_ENTRY _ZTV8S2210C12[];
Class_Descriptor cd_S2210C12 = {  "S2210C12", // class name
  bases_S2210C12, 2,
  &(vtc_S2210C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S2210C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2210C12),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  S2210C18  {
  virtual  ~S2210C18(); // _ZN8S2210C18D1Ev
  virtual void  v32(); // _ZN8S2210C183v32Ev
  virtual void  v33(); // _ZN8S2210C183v33Ev
  virtual void  v34(); // _ZN8S2210C183v34Ev
  virtual void  v35(); // _ZN8S2210C183v35Ev
  virtual void  v36(); // _ZN8S2210C183v36Ev
  virtual void  v37(); // _ZN8S2210C183v37Ev
  virtual void  v38(); // _ZN8S2210C183v38Ev
  virtual void  v39(); // _ZN8S2210C183v39Ev
  virtual void  v40(); // _ZN8S2210C183v40Ev
  virtual void  v41(); // _ZN8S2210C183v41Ev
  virtual void  v42(); // _ZN8S2210C183v42Ev
  virtual void  v43(); // _ZN8S2210C183v43Ev
  virtual void  v44(); // _ZN8S2210C183v44Ev
  virtual void  v45(); // _ZN8S2210C183v45Ev
  virtual void  v46(); // _ZN8S2210C183v46Ev
  virtual void  v47(); // _ZN8S2210C183v47Ev
  virtual void  v48(); // _ZN8S2210C183v48Ev
  virtual void  v49(); // _ZN8S2210C183v49Ev
  virtual void  v50(); // _ZN8S2210C183v50Ev
  virtual void  v51(); // _ZN8S2210C183v51Ev
  virtual void  v52(); // _ZN8S2210C183v52Ev
  virtual void  v53(); // _ZN8S2210C183v53Ev
  virtual void  v54(); // _ZN8S2210C183v54Ev
  virtual void  v55(); // _ZN8S2210C183v55Ev
  virtual void  v56(); // _ZN8S2210C183v56Ev
  virtual void  v57(); // _ZN8S2210C183v57Ev
  S2210C18(); // tgen
};
//SIG(-1 S2210C18) 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}


 S2210C18 ::~S2210C18(){ note_dtor("S2210C18", this);}
void  S2210C18 ::v32(){vfunc_called(this, "_ZN8S2210C183v32Ev");}
void  S2210C18 ::v33(){vfunc_called(this, "_ZN8S2210C183v33Ev");}
void  S2210C18 ::v34(){vfunc_called(this, "_ZN8S2210C183v34Ev");}
void  S2210C18 ::v35(){vfunc_called(this, "_ZN8S2210C183v35Ev");}
void  S2210C18 ::v36(){vfunc_called(this, "_ZN8S2210C183v36Ev");}
void  S2210C18 ::v37(){vfunc_called(this, "_ZN8S2210C183v37Ev");}
void  S2210C18 ::v38(){vfunc_called(this, "_ZN8S2210C183v38Ev");}
void  S2210C18 ::v39(){vfunc_called(this, "_ZN8S2210C183v39Ev");}
void  S2210C18 ::v40(){vfunc_called(this, "_ZN8S2210C183v40Ev");}
void  S2210C18 ::v41(){vfunc_called(this, "_ZN8S2210C183v41Ev");}
void  S2210C18 ::v42(){vfunc_called(this, "_ZN8S2210C183v42Ev");}
void  S2210C18 ::v43(){vfunc_called(this, "_ZN8S2210C183v43Ev");}
void  S2210C18 ::v44(){vfunc_called(this, "_ZN8S2210C183v44Ev");}
void  S2210C18 ::v45(){vfunc_called(this, "_ZN8S2210C183v45Ev");}
void  S2210C18 ::v46(){vfunc_called(this, "_ZN8S2210C183v46Ev");}
void  S2210C18 ::v47(){vfunc_called(this, "_ZN8S2210C183v47Ev");}
void  S2210C18 ::v48(){vfunc_called(this, "_ZN8S2210C183v48Ev");}
void  S2210C18 ::v49(){vfunc_called(this, "_ZN8S2210C183v49Ev");}
void  S2210C18 ::v50(){vfunc_called(this, "_ZN8S2210C183v50Ev");}
void  S2210C18 ::v51(){vfunc_called(this, "_ZN8S2210C183v51Ev");}
void  S2210C18 ::v52(){vfunc_called(this, "_ZN8S2210C183v52Ev");}
void  S2210C18 ::v53(){vfunc_called(this, "_ZN8S2210C183v53Ev");}
void  S2210C18 ::v54(){vfunc_called(this, "_ZN8S2210C183v54Ev");}
void  S2210C18 ::v55(){vfunc_called(this, "_ZN8S2210C183v55Ev");}
void  S2210C18 ::v56(){vfunc_called(this, "_ZN8S2210C183v56Ev");}
void  S2210C18 ::v57(){vfunc_called(this, "_ZN8S2210C183v57Ev");}
S2210C18 ::S2210C18(){ note_ctor("S2210C18", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2210C18C1Ev();
extern void _ZN8S2210C18D1Ev();
Name_Map name_map_S2210C18[] = {
  NSPAIR(_ZN8S2210C18C1Ev),
  NSPAIR(_ZN8S2210C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2210C18[];
extern void _ZN8S2210C18D1Ev();
extern void _ZN8S2210C18D0Ev();
extern void _ZN8S2210C183v32Ev();
extern void _ZN8S2210C183v33Ev();
extern void _ZN8S2210C183v34Ev();
extern void _ZN8S2210C183v35Ev();
extern void _ZN8S2210C183v36Ev();
extern void _ZN8S2210C183v37Ev();
extern void _ZN8S2210C183v38Ev();
extern void _ZN8S2210C183v39Ev();
extern void _ZN8S2210C183v40Ev();
extern void _ZN8S2210C183v41Ev();
extern void _ZN8S2210C183v42Ev();
extern void _ZN8S2210C183v43Ev();
extern void _ZN8S2210C183v44Ev();
extern void _ZN8S2210C183v45Ev();
extern void _ZN8S2210C183v46Ev();
extern void _ZN8S2210C183v47Ev();
extern void _ZN8S2210C183v48Ev();
extern void _ZN8S2210C183v49Ev();
extern void _ZN8S2210C183v50Ev();
extern void _ZN8S2210C183v51Ev();
extern void _ZN8S2210C183v52Ev();
extern void _ZN8S2210C183v53Ev();
extern void _ZN8S2210C183v54Ev();
extern void _ZN8S2210C183v55Ev();
extern void _ZN8S2210C183v56Ev();
extern void _ZN8S2210C183v57Ev();
static  VTBL_ENTRY vtc_S2210C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2210C18[0]),
  (VTBL_ENTRY)&_ZN8S2210C18D1Ev,
  (VTBL_ENTRY)&_ZN8S2210C18D0Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v32Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v33Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v34Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v35Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v36Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v37Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v38Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v39Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v40Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v41Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v42Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v43Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v44Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v45Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v46Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v47Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v48Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v49Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v50Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v51Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v52Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v53Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v54Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v55Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v56Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v57Ev,
};
extern VTBL_ENTRY _ZTI8S2210C18[];
extern  VTBL_ENTRY _ZTV8S2210C18[];
Class_Descriptor cd_S2210C18 = {  "S2210C18", // class name
  0,0,//no base classes
  &(vtc_S2210C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2210C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2210C18),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2210C2  : S2210C3 , S2210C12 , S2210C18 {
  ::S2382C20_nt s2210c2f0;
  char s2210c2f1[2];
  int s2210c2f2;
  void *s2210c2f3[5];
  char s2210c2f4[2];
  void *s2210c2f5;
  ::S888C22_nt s2210c2f6;
  __tsi64 s2210c2f7[2];
  int s2210c2f8[2];
  virtual  ~S2210C2(); // _ZN7S2210C2D1Ev
  virtual void  v58(); // _ZN7S2210C23v58Ev
  virtual void  v59(); // _ZN7S2210C23v59Ev
  virtual void  v60(); // _ZN7S2210C23v60Ev
  virtual void  v61(); // _ZN7S2210C23v61Ev
  virtual void  v62(); // _ZN7S2210C23v62Ev
  virtual void  v63(); // _ZN7S2210C23v63Ev
  virtual void  v64(); // _ZN7S2210C23v64Ev
  virtual void  v65(); // _ZN7S2210C23v65Ev
  virtual void  v66(); // _ZN7S2210C23v66Ev
  virtual void  v67(); // _ZN7S2210C23v67Ev
  virtual void  v68(); // _ZN7S2210C23v68Ev
  virtual void  v69(); // _ZN7S2210C23v69Ev
  virtual void  v70(); // _ZN7S2210C23v70Ev
  virtual void  v71(); // _ZN7S2210C23v71Ev
  virtual void  v72(); // _ZN7S2210C23v72Ev
  virtual void  v73(); // _ZN7S2210C23v73Ev
  virtual void  v74(); // _ZN7S2210C23v74Ev
  virtual void  v75(); // _ZN7S2210C23v75Ev
  virtual void  v76(); // _ZN7S2210C23v76Ev
  virtual void  v77(); // _ZN7S2210C23v77Ev
  virtual void  v78(); // _ZN7S2210C23v78Ev
  virtual void  v79(); // _ZN7S2210C23v79Ev
  virtual void  v80(); // _ZN7S2210C23v80Ev
  virtual void  v81(); // _ZN7S2210C23v81Ev
  virtual void  v82(); // _ZN7S2210C23v82Ev
  virtual void  v83(); // _ZN7S2210C23v83Ev
  virtual void  v84(); // _ZN7S2210C23v84Ev
  virtual void  v85(); // _ZN7S2210C23v85Ev
  virtual void  v86(); // _ZN7S2210C23v86Ev
  virtual void  v87(); // _ZN7S2210C23v87Ev
  virtual void  v88(); // _ZN7S2210C23v88Ev
  virtual void  v89(); // _ZN7S2210C23v89Ev
  S2210C2(); // tgen
};
//SIG(-1 S2210C2) C1{ BC2{ BC3{ vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m FL[4]} Fc} vd v45 v46 v47 v48 v49 v50 v51 FC8{ m Fp Fi[2] FC9{ m}}} BC10{ BC11{ BC12{ vd v52 v53 v54} vd v55 v56 v57 v58} vd v59 v60 v61 FC13{ m Fp Fi[2] FC9} FC14{ m FL[4]} Fc} BC15{ vd 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} 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 FC16{ m Fp Fi FC17{ m}} Fc[2] Fi Fp[5] Fc[2] Fp FC18{ m Fp Fi[4] Fc Fi[3]} FL[2] Fi[2]}


 S2210C2 ::~S2210C2(){ note_dtor("S2210C2", this);}
void  S2210C2 ::v58(){vfunc_called(this, "_ZN7S2210C23v58Ev");}
void  S2210C2 ::v59(){vfunc_called(this, "_ZN7S2210C23v59Ev");}
void  S2210C2 ::v60(){vfunc_called(this, "_ZN7S2210C23v60Ev");}
void  S2210C2 ::v61(){vfunc_called(this, "_ZN7S2210C23v61Ev");}
void  S2210C2 ::v62(){vfunc_called(this, "_ZN7S2210C23v62Ev");}
void  S2210C2 ::v63(){vfunc_called(this, "_ZN7S2210C23v63Ev");}
void  S2210C2 ::v64(){vfunc_called(this, "_ZN7S2210C23v64Ev");}
void  S2210C2 ::v65(){vfunc_called(this, "_ZN7S2210C23v65Ev");}
void  S2210C2 ::v66(){vfunc_called(this, "_ZN7S2210C23v66Ev");}
void  S2210C2 ::v67(){vfunc_called(this, "_ZN7S2210C23v67Ev");}
void  S2210C2 ::v68(){vfunc_called(this, "_ZN7S2210C23v68Ev");}
void  S2210C2 ::v69(){vfunc_called(this, "_ZN7S2210C23v69Ev");}
void  S2210C2 ::v70(){vfunc_called(this, "_ZN7S2210C23v70Ev");}
void  S2210C2 ::v71(){vfunc_called(this, "_ZN7S2210C23v71Ev");}
void  S2210C2 ::v72(){vfunc_called(this, "_ZN7S2210C23v72Ev");}
void  S2210C2 ::v73(){vfunc_called(this, "_ZN7S2210C23v73Ev");}
void  S2210C2 ::v74(){vfunc_called(this, "_ZN7S2210C23v74Ev");}
void  S2210C2 ::v75(){vfunc_called(this, "_ZN7S2210C23v75Ev");}
void  S2210C2 ::v76(){vfunc_called(this, "_ZN7S2210C23v76Ev");}
void  S2210C2 ::v77(){vfunc_called(this, "_ZN7S2210C23v77Ev");}
void  S2210C2 ::v78(){vfunc_called(this, "_ZN7S2210C23v78Ev");}
void  S2210C2 ::v79(){vfunc_called(this, "_ZN7S2210C23v79Ev");}
void  S2210C2 ::v80(){vfunc_called(this, "_ZN7S2210C23v80Ev");}
void  S2210C2 ::v81(){vfunc_called(this, "_ZN7S2210C23v81Ev");}
void  S2210C2 ::v82(){vfunc_called(this, "_ZN7S2210C23v82Ev");}
void  S2210C2 ::v83(){vfunc_called(this, "_ZN7S2210C23v83Ev");}
void  S2210C2 ::v84(){vfunc_called(this, "_ZN7S2210C23v84Ev");}
void  S2210C2 ::v85(){vfunc_called(this, "_ZN7S2210C23v85Ev");}
void  S2210C2 ::v86(){vfunc_called(this, "_ZN7S2210C23v86Ev");}
void  S2210C2 ::v87(){vfunc_called(this, "_ZN7S2210C23v87Ev");}
void  S2210C2 ::v88(){vfunc_called(this, "_ZN7S2210C23v88Ev");}
void  S2210C2 ::v89(){vfunc_called(this, "_ZN7S2210C23v89Ev");}
S2210C2 ::S2210C2(){ note_ctor("S2210C2", this);} // tgen

static void Test_S2210C2()
{
  extern Class_Descriptor cd_S2210C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,61)];
    init_test(&cd_S2210C2, buf);
    S2210C2 *dp, &lv = *(dp=new (buf) S2210C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,240), "sizeof(S2210C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2210C2)");
    check_base_class_offset(lv, (S2210C4*)(S2210C3*), 0, "S2210C2");
    check_base_class_offset(lv, (S2210C3*), 0, "S2210C2");
    check_base_class_offset(lv, (S2210C14*)(S2210C13*)(S2210C12*), ABISELECT(96,72), "S2210C2");
    check_base_class_offset(lv, (S2210C13*)(S2210C12*), ABISELECT(96,72), "S2210C2");
    check_base_class_offset(lv, (S2210C12*), ABISELECT(96,72), "S2210C2");
    check_base_class_offset(lv, (S2210C18*), ABISELECT(168,128), "S2210C2");
    check_field_offset(lv, s2210c2f0, ABISELECT(176,132), "S2210C2.s2210c2f0");
    check_field_offset(lv, s2210c2f1, ABISELECT(192,144), "S2210C2.s2210c2f1");
    check_field_offset(lv, s2210c2f2, ABISELECT(196,148), "S2210C2.s2210c2f2");
    check_field_offset(lv, s2210c2f3, ABISELECT(200,152), "S2210C2.s2210c2f3");
    check_field_offset(lv, s2210c2f4, ABISELECT(240,172), "S2210C2.s2210c2f4");
    check_field_offset(lv, s2210c2f5, ABISELECT(248,176), "S2210C2.s2210c2f5");
    check_field_offset(lv, s2210c2f6, ABISELECT(256,180), "S2210C2.s2210c2f6");
    check_field_offset(lv, s2210c2f7, ABISELECT(296,216), "S2210C2.s2210c2f7");
    check_field_offset(lv, s2210c2f8, ABISELECT(312,232), "S2210C2.s2210c2f8");
    test_class_info(&lv, &cd_S2210C2);
    dp->~S2210C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2210C2(Test_S2210C2, "S2210C2", ABISELECT(320,240));

#else // __cplusplus

extern void _ZN7S2210C2C1Ev();
extern void _ZN7S2210C2D1Ev();
Name_Map name_map_S2210C2[] = {
  NSPAIR(_ZN7S2210C2C1Ev),
  NSPAIR(_ZN7S2210C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2210C4;
extern VTBL_ENTRY _ZTI7S2210C4[];
extern  VTBL_ENTRY _ZTV7S2210C4[];
extern Class_Descriptor cd_S2210C3;
extern VTBL_ENTRY _ZTI7S2210C3[];
extern  VTBL_ENTRY _ZTV7S2210C3[];
extern Class_Descriptor cd_S2210C14;
extern VTBL_ENTRY _ZTI8S2210C14[];
extern  VTBL_ENTRY _ZTV8S2210C14[];
extern Class_Descriptor cd_S2210C13;
extern VTBL_ENTRY _ZTI8S2210C13[];
extern  VTBL_ENTRY _ZTV8S2210C13[];
extern Class_Descriptor cd_S2210C12;
extern VTBL_ENTRY _ZTI8S2210C12[];
extern  VTBL_ENTRY _ZTV8S2210C12[];
extern Class_Descriptor cd_S2210C18;
extern VTBL_ENTRY _ZTI8S2210C18[];
extern  VTBL_ENTRY _ZTV8S2210C18[];
static Base_Class bases_S2210C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2210C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2210C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2210C14,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2210C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2210C12,    ABISELECT(96,72), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2210C18,    ABISELECT(168,128), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2210C2[];
extern void _ZN7S2210C2D1Ev();
extern void _ZN7S2210C2D0Ev();
extern void _ZN7S2210C42v3Ev();
extern void _ZN7S2210C42v4Ev();
extern void _ZN7S2210C42v5Ev();
extern void _ZN7S2210C42v6Ev();
extern void _ZN7S2210C42v7Ev();
extern void _ZN7S2210C42v8Ev();
extern void _ZN7S2210C42v9Ev();
extern void _ZN7S2210C43v10Ev();
extern void _ZN7S2210C43v11Ev();
extern void _ZN7S2210C43v12Ev();
extern void _ZN7S2210C43v13Ev();
extern void _ZN7S2210C43v14Ev();
extern void _ZN7S2210C33v15Ev();
extern void _ZN7S2210C33v16Ev();
extern void _ZN7S2210C33v17Ev();
extern void _ZN7S2210C33v18Ev();
extern void _ZN7S2210C33v19Ev();
extern void _ZN7S2210C33v20Ev();
extern void _ZN7S2210C33v21Ev();
extern void _ZN7S2210C23v58Ev();
extern void _ZN7S2210C23v59Ev();
extern void _ZN7S2210C23v60Ev();
extern void _ZN7S2210C23v61Ev();
extern void _ZN7S2210C23v62Ev();
extern void _ZN7S2210C23v63Ev();
extern void _ZN7S2210C23v64Ev();
extern void _ZN7S2210C23v65Ev();
extern void _ZN7S2210C23v66Ev();
extern void _ZN7S2210C23v67Ev();
extern void _ZN7S2210C23v68Ev();
extern void _ZN7S2210C23v69Ev();
extern void _ZN7S2210C23v70Ev();
extern void _ZN7S2210C23v71Ev();
extern void _ZN7S2210C23v72Ev();
extern void _ZN7S2210C23v73Ev();
extern void _ZN7S2210C23v74Ev();
extern void _ZN7S2210C23v75Ev();
extern void _ZN7S2210C23v76Ev();
extern void _ZN7S2210C23v77Ev();
extern void _ZN7S2210C23v78Ev();
extern void _ZN7S2210C23v79Ev();
extern void _ZN7S2210C23v80Ev();
extern void _ZN7S2210C23v81Ev();
extern void _ZN7S2210C23v82Ev();
extern void _ZN7S2210C23v83Ev();
extern void _ZN7S2210C23v84Ev();
extern void _ZN7S2210C23v85Ev();
extern void _ZN7S2210C23v86Ev();
extern void _ZN7S2210C23v87Ev();
extern void _ZN7S2210C23v88Ev();
extern void _ZN7S2210C23v89Ev();
extern void ABISELECT(_ZThn96_N7S2210C2D1Ev,_ZThn72_N7S2210C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S2210C2D0Ev,_ZThn72_N7S2210C2D0Ev)();
extern void _ZN8S2210C143v22Ev();
extern void _ZN8S2210C143v23Ev();
extern void _ZN8S2210C143v24Ev();
extern void _ZN8S2210C133v25Ev();
extern void _ZN8S2210C133v26Ev();
extern void _ZN8S2210C133v27Ev();
extern void _ZN8S2210C133v28Ev();
extern void _ZN8S2210C123v29Ev();
extern void _ZN8S2210C123v30Ev();
extern void _ZN8S2210C123v31Ev();
extern void ABISELECT(_ZThn168_N7S2210C2D1Ev,_ZThn128_N7S2210C2D1Ev)();
extern void ABISELECT(_ZThn168_N7S2210C2D0Ev,_ZThn128_N7S2210C2D0Ev)();
extern void _ZN8S2210C183v32Ev();
extern void _ZN8S2210C183v33Ev();
extern void _ZN8S2210C183v34Ev();
extern void _ZN8S2210C183v35Ev();
extern void _ZN8S2210C183v36Ev();
extern void _ZN8S2210C183v37Ev();
extern void _ZN8S2210C183v38Ev();
extern void _ZN8S2210C183v39Ev();
extern void _ZN8S2210C183v40Ev();
extern void _ZN8S2210C183v41Ev();
extern void _ZN8S2210C183v42Ev();
extern void _ZN8S2210C183v43Ev();
extern void _ZN8S2210C183v44Ev();
extern void _ZN8S2210C183v45Ev();
extern void _ZN8S2210C183v46Ev();
extern void _ZN8S2210C183v47Ev();
extern void _ZN8S2210C183v48Ev();
extern void _ZN8S2210C183v49Ev();
extern void _ZN8S2210C183v50Ev();
extern void _ZN8S2210C183v51Ev();
extern void _ZN8S2210C183v52Ev();
extern void _ZN8S2210C183v53Ev();
extern void _ZN8S2210C183v54Ev();
extern void _ZN8S2210C183v55Ev();
extern void _ZN8S2210C183v56Ev();
extern void _ZN8S2210C183v57Ev();
static  VTBL_ENTRY vtc_S2210C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2210C2[0]),
  (VTBL_ENTRY)&_ZN7S2210C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2210C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v73Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v74Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v75Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v76Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v77Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v78Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v79Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v80Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v81Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v82Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v83Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v84Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v85Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v86Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v87Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v88Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v89Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S2210C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2210C2D1Ev,_ZThn72_N7S2210C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2210C2D0Ev,_ZThn72_N7S2210C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2210C143v22Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v23Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v24Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v25Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v26Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v27Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v28Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v29Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v30Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v31Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S2210C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2210C2D1Ev,_ZThn128_N7S2210C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2210C2D0Ev,_ZThn128_N7S2210C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2210C183v32Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v33Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v34Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v35Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v36Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v37Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v38Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v39Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v40Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v41Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v42Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v43Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v44Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v45Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v46Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v47Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v48Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v49Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v50Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v51Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v52Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v53Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v54Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v55Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v56Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v57Ev,
};
extern VTBL_ENTRY _ZTI7S2210C2[];
extern  VTBL_ENTRY _ZTV7S2210C2[];
Class_Descriptor cd_S2210C2 = {  "S2210C2", // class name
  bases_S2210C2, 6,
  &(vtc_S2210C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,240), // object size
  NSPAIRA(_ZTI7S2210C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2210C2),99, //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  S2210C1  : S2210C2 {
  virtual  ~S2210C1(); // _ZN7S2210C1D1Ev
  virtual void  v1(); // _ZN7S2210C12v1Ev
  virtual void  v2(); // _ZN7S2210C12v2Ev
  S2210C1(); // tgen
};
//SIG(1 S2210C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ m FL[4]} Fc} vd v15 v16 v17 v18 v19 v20 v21 FC9{ m Fp Fi[2] FC10{ m}}} BC11{ BC12{ BC13{ vd v22 v23 v24} vd v25 v26 v27 v28} vd v29 v30 v31 FC14{ m Fp Fi[2] FC10} FC15{ m FL[4]} Fc} BC16{ vd v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57} vd 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 FC17{ m Fp Fi FC18{ m}} Fc[2] Fi Fp[5] Fc[2] Fp FC19{ m Fp Fi[4] Fc Fi[3]} FL[2] Fi[2]} vd v1 v2}


 S2210C1 ::~S2210C1(){ note_dtor("S2210C1", this);}
void  S2210C1 ::v1(){vfunc_called(this, "_ZN7S2210C12v1Ev");}
void  S2210C1 ::v2(){vfunc_called(this, "_ZN7S2210C12v2Ev");}
S2210C1 ::S2210C1(){ note_ctor("S2210C1", this);} // tgen

static void Test_S2210C1()
{
  extern Class_Descriptor cd_S2210C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,61)];
    init_test(&cd_S2210C1, buf);
    S2210C1 *dp, &lv = *(dp=new (buf) S2210C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,240), "sizeof(S2210C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2210C1)");
    check_base_class_offset(lv, (S2210C4*)(S2210C3*)(S2210C2*), 0, "S2210C1");
    check_base_class_offset(lv, (S2210C3*)(S2210C2*), 0, "S2210C1");
    check_base_class_offset(lv, (S2210C14*)(S2210C13*)(S2210C12*)(S2210C2*), ABISELECT(96,72), "S2210C1");
    check_base_class_offset(lv, (S2210C13*)(S2210C12*)(S2210C2*), ABISELECT(96,72), "S2210C1");
    check_base_class_offset(lv, (S2210C12*)(S2210C2*), ABISELECT(96,72), "S2210C1");
    check_base_class_offset(lv, (S2210C18*)(S2210C2*), ABISELECT(168,128), "S2210C1");
    check_base_class_offset(lv, (S2210C2*), 0, "S2210C1");
    test_class_info(&lv, &cd_S2210C1);
    dp->~S2210C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2210C1(Test_S2210C1, "S2210C1", ABISELECT(320,240));

#else // __cplusplus

extern void _ZN7S2210C1C1Ev();
extern void _ZN7S2210C1D1Ev();
Name_Map name_map_S2210C1[] = {
  NSPAIR(_ZN7S2210C1C1Ev),
  NSPAIR(_ZN7S2210C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2210C4;
extern VTBL_ENTRY _ZTI7S2210C4[];
extern  VTBL_ENTRY _ZTV7S2210C4[];
extern Class_Descriptor cd_S2210C3;
extern VTBL_ENTRY _ZTI7S2210C3[];
extern  VTBL_ENTRY _ZTV7S2210C3[];
extern Class_Descriptor cd_S2210C14;
extern VTBL_ENTRY _ZTI8S2210C14[];
extern  VTBL_ENTRY _ZTV8S2210C14[];
extern Class_Descriptor cd_S2210C13;
extern VTBL_ENTRY _ZTI8S2210C13[];
extern  VTBL_ENTRY _ZTV8S2210C13[];
extern Class_Descriptor cd_S2210C12;
extern VTBL_ENTRY _ZTI8S2210C12[];
extern  VTBL_ENTRY _ZTV8S2210C12[];
extern Class_Descriptor cd_S2210C18;
extern VTBL_ENTRY _ZTI8S2210C18[];
extern  VTBL_ENTRY _ZTV8S2210C18[];
extern Class_Descriptor cd_S2210C2;
extern VTBL_ENTRY _ZTI7S2210C2[];
extern  VTBL_ENTRY _ZTV7S2210C2[];
static Base_Class bases_S2210C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2210C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2210C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2210C14,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2210C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2210C12,    ABISELECT(96,72), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2210C18,    ABISELECT(168,128), //bcp->offset
    71, //bcp->virtual_function_table_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_S2210C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2210C1[];
extern void _ZN7S2210C1D1Ev();
extern void _ZN7S2210C1D0Ev();
extern void _ZN7S2210C42v3Ev();
extern void _ZN7S2210C42v4Ev();
extern void _ZN7S2210C42v5Ev();
extern void _ZN7S2210C42v6Ev();
extern void _ZN7S2210C42v7Ev();
extern void _ZN7S2210C42v8Ev();
extern void _ZN7S2210C42v9Ev();
extern void _ZN7S2210C43v10Ev();
extern void _ZN7S2210C43v11Ev();
extern void _ZN7S2210C43v12Ev();
extern void _ZN7S2210C43v13Ev();
extern void _ZN7S2210C43v14Ev();
extern void _ZN7S2210C33v15Ev();
extern void _ZN7S2210C33v16Ev();
extern void _ZN7S2210C33v17Ev();
extern void _ZN7S2210C33v18Ev();
extern void _ZN7S2210C33v19Ev();
extern void _ZN7S2210C33v20Ev();
extern void _ZN7S2210C33v21Ev();
extern void _ZN7S2210C23v58Ev();
extern void _ZN7S2210C23v59Ev();
extern void _ZN7S2210C23v60Ev();
extern void _ZN7S2210C23v61Ev();
extern void _ZN7S2210C23v62Ev();
extern void _ZN7S2210C23v63Ev();
extern void _ZN7S2210C23v64Ev();
extern void _ZN7S2210C23v65Ev();
extern void _ZN7S2210C23v66Ev();
extern void _ZN7S2210C23v67Ev();
extern void _ZN7S2210C23v68Ev();
extern void _ZN7S2210C23v69Ev();
extern void _ZN7S2210C23v70Ev();
extern void _ZN7S2210C23v71Ev();
extern void _ZN7S2210C23v72Ev();
extern void _ZN7S2210C23v73Ev();
extern void _ZN7S2210C23v74Ev();
extern void _ZN7S2210C23v75Ev();
extern void _ZN7S2210C23v76Ev();
extern void _ZN7S2210C23v77Ev();
extern void _ZN7S2210C23v78Ev();
extern void _ZN7S2210C23v79Ev();
extern void _ZN7S2210C23v80Ev();
extern void _ZN7S2210C23v81Ev();
extern void _ZN7S2210C23v82Ev();
extern void _ZN7S2210C23v83Ev();
extern void _ZN7S2210C23v84Ev();
extern void _ZN7S2210C23v85Ev();
extern void _ZN7S2210C23v86Ev();
extern void _ZN7S2210C23v87Ev();
extern void _ZN7S2210C23v88Ev();
extern void _ZN7S2210C23v89Ev();
extern void _ZN7S2210C12v1Ev();
extern void _ZN7S2210C12v2Ev();
extern void ABISELECT(_ZThn96_N7S2210C1D1Ev,_ZThn72_N7S2210C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S2210C1D0Ev,_ZThn72_N7S2210C1D0Ev)();
extern void _ZN8S2210C143v22Ev();
extern void _ZN8S2210C143v23Ev();
extern void _ZN8S2210C143v24Ev();
extern void _ZN8S2210C133v25Ev();
extern void _ZN8S2210C133v26Ev();
extern void _ZN8S2210C133v27Ev();
extern void _ZN8S2210C133v28Ev();
extern void _ZN8S2210C123v29Ev();
extern void _ZN8S2210C123v30Ev();
extern void _ZN8S2210C123v31Ev();
extern void ABISELECT(_ZThn168_N7S2210C1D1Ev,_ZThn128_N7S2210C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S2210C1D0Ev,_ZThn128_N7S2210C1D0Ev)();
extern void _ZN8S2210C183v32Ev();
extern void _ZN8S2210C183v33Ev();
extern void _ZN8S2210C183v34Ev();
extern void _ZN8S2210C183v35Ev();
extern void _ZN8S2210C183v36Ev();
extern void _ZN8S2210C183v37Ev();
extern void _ZN8S2210C183v38Ev();
extern void _ZN8S2210C183v39Ev();
extern void _ZN8S2210C183v40Ev();
extern void _ZN8S2210C183v41Ev();
extern void _ZN8S2210C183v42Ev();
extern void _ZN8S2210C183v43Ev();
extern void _ZN8S2210C183v44Ev();
extern void _ZN8S2210C183v45Ev();
extern void _ZN8S2210C183v46Ev();
extern void _ZN8S2210C183v47Ev();
extern void _ZN8S2210C183v48Ev();
extern void _ZN8S2210C183v49Ev();
extern void _ZN8S2210C183v50Ev();
extern void _ZN8S2210C183v51Ev();
extern void _ZN8S2210C183v52Ev();
extern void _ZN8S2210C183v53Ev();
extern void _ZN8S2210C183v54Ev();
extern void _ZN8S2210C183v55Ev();
extern void _ZN8S2210C183v56Ev();
extern void _ZN8S2210C183v57Ev();
static  VTBL_ENTRY vtc_S2210C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2210C1[0]),
  (VTBL_ENTRY)&_ZN7S2210C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2210C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2210C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2210C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2210C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v73Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v74Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v75Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v76Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v77Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v78Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v79Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v80Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v81Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v82Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v83Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v84Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v85Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v86Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v87Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v88Ev,
  (VTBL_ENTRY)&_ZN7S2210C23v89Ev,
  (VTBL_ENTRY)&_ZN7S2210C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2210C12v2Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S2210C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2210C1D1Ev,_ZThn72_N7S2210C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2210C1D0Ev,_ZThn72_N7S2210C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2210C143v22Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v23Ev,
  (VTBL_ENTRY)&_ZN8S2210C143v24Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v25Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v26Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v27Ev,
  (VTBL_ENTRY)&_ZN8S2210C133v28Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v29Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v30Ev,
  (VTBL_ENTRY)&_ZN8S2210C123v31Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S2210C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2210C1D1Ev,_ZThn128_N7S2210C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S2210C1D0Ev,_ZThn128_N7S2210C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2210C183v32Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v33Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v34Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v35Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v36Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v37Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v38Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v39Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v40Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v41Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v42Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v43Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v44Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v45Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v46Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v47Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v48Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v49Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v50Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v51Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v52Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v53Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v54Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v55Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v56Ev,
  (VTBL_ENTRY)&_ZN8S2210C183v57Ev,
};
extern VTBL_ENTRY _ZTI7S2210C1[];
extern  VTBL_ENTRY _ZTV7S2210C1[];
Class_Descriptor cd_S2210C1 = {  "S2210C1", // class name
  bases_S2210C1, 7,
  &(vtc_S2210C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,240), // object size
  NSPAIRA(_ZTI7S2210C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2210C1),101, //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  S7817C4  {
  __tsi64 s7817c4f0;
  virtual void  v8(); // _ZN7S7817C42v8Ev
  virtual void  v9(); // _ZN7S7817C42v9Ev
  virtual void  v10(); // _ZN7S7817C43v10Ev
  virtual void  v11(); // _ZN7S7817C43v11Ev
  virtual void  v12(); // _ZN7S7817C43v12Ev
  virtual void  v13(); // _ZN7S7817C43v13Ev
  virtual void  v14(); // _ZN7S7817C43v14Ev
  virtual void  v15(); // _ZN7S7817C43v15Ev
  ~S7817C4(); // tgen
  S7817C4(); // tgen
};
//SIG(-1 S7817C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S7817C4 ::v8(){vfunc_called(this, "_ZN7S7817C42v8Ev");}
void  S7817C4 ::v9(){vfunc_called(this, "_ZN7S7817C42v9Ev");}
void  S7817C4 ::v10(){vfunc_called(this, "_ZN7S7817C43v10Ev");}
void  S7817C4 ::v11(){vfunc_called(this, "_ZN7S7817C43v11Ev");}
void  S7817C4 ::v12(){vfunc_called(this, "_ZN7S7817C43v12Ev");}
void  S7817C4 ::v13(){vfunc_called(this, "_ZN7S7817C43v13Ev");}
void  S7817C4 ::v14(){vfunc_called(this, "_ZN7S7817C43v14Ev");}
void  S7817C4 ::v15(){vfunc_called(this, "_ZN7S7817C43v15Ev");}
S7817C4 ::~S7817C4(){ note_dtor("S7817C4", this);} // tgen
S7817C4 ::S7817C4(){ note_ctor("S7817C4", this);} // tgen

static void Test_S7817C4()
{
  extern Class_Descriptor cd_S7817C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7817C4, buf);
    S7817C4 *dp, &lv = *(dp=new (buf) S7817C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7817C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C4)");
    check_field_offset(lv, s7817c4f0, ABISELECT(8,4), "S7817C4.s7817c4f0");
    test_class_info(&lv, &cd_S7817C4);
    dp->~S7817C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C4(Test_S7817C4, "S7817C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7817C4C1Ev();
extern void _ZN7S7817C4D1Ev();
Name_Map name_map_S7817C4[] = {
  NSPAIR(_ZN7S7817C4C1Ev),
  NSPAIR(_ZN7S7817C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7817C4[];
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY vtc_S7817C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C4[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
Class_Descriptor cd_S7817C4 = {  "S7817C4", // class name
  0,0,//no base classes
  &(vtc_S7817C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7817C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7817C4),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  S7817C3  : virtual S7817C4 {
  ::S7817C4 s7817c3f0;
  int s7817c3f1;
  void *s7817c3f2;
  virtual void  v16(); // _ZN7S7817C33v16Ev
  virtual void  v17(); // _ZN7S7817C33v17Ev
  virtual void  v18(); // _ZN7S7817C33v18Ev
  virtual void  v19(); // _ZN7S7817C33v19Ev
  virtual void  v20(); // _ZN7S7817C33v20Ev
  virtual void  v21(); // _ZN7S7817C33v21Ev
  ~S7817C3(); // tgen
  S7817C3(); // tgen
};
//SIG(-1 S7817C3) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S7817C3 ::v16(){vfunc_called(this, "_ZN7S7817C33v16Ev");}
void  S7817C3 ::v17(){vfunc_called(this, "_ZN7S7817C33v17Ev");}
void  S7817C3 ::v18(){vfunc_called(this, "_ZN7S7817C33v18Ev");}
void  S7817C3 ::v19(){vfunc_called(this, "_ZN7S7817C33v19Ev");}
void  S7817C3 ::v20(){vfunc_called(this, "_ZN7S7817C33v20Ev");}
void  S7817C3 ::v21(){vfunc_called(this, "_ZN7S7817C33v21Ev");}
S7817C3 ::~S7817C3(){ note_dtor("S7817C3", this);} // tgen
S7817C3 ::S7817C3(){ note_ctor("S7817C3", this);} // tgen

static void Test_S7817C3()
{
  extern Class_Descriptor cd_S7817C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7817C3, buf);
    S7817C3 *dp, &lv = *(dp=new (buf) S7817C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7817C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C3)");
    check_base_class_offset(lv, (S7817C4*), ABISELECT(40,24), "S7817C3");
    check_field_offset(lv, s7817c3f0, ABISELECT(8,4), "S7817C3.s7817c3f0");
    check_field_offset(lv, s7817c3f1, ABISELECT(24,16), "S7817C3.s7817c3f1");
    check_field_offset(lv, s7817c3f2, ABISELECT(32,20), "S7817C3.s7817c3f2");
    test_class_info(&lv, &cd_S7817C3);
    dp->~S7817C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C3(Test_S7817C3, "S7817C3", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S7817C3C1Ev();
extern void _ZN7S7817C3D1Ev();
Name_Map name_map_S7817C3[] = {
  NSPAIR(_ZN7S7817C3C1Ev),
  NSPAIR(_ZN7S7817C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
static Base_Class bases_S7817C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI7S7817C3[];
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY vtc_S7817C3[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7817C3[];
static  VTT_ENTRY vtt_S7817C3[] = {
  {&(_ZTV7S7817C3[3]),  3,27},
  {&(_ZTV7S7817C3[19]),  19,27},
};
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
Class_Descriptor cd_S7817C3 = {  "S7817C3", // class name
  bases_S7817C3, 1,
  &(vtc_S7817C3[0]), // expected_vtbl_contents
  &(vtt_S7817C3[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S7817C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7817C3),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7817C3),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  S7817C2  : virtual S7817C3 {
  short s7817c2f0[6];
  int s7817c2f1;
  short s7817c2f2;
  char s7817c2f3[6];
  virtual  ~S7817C2(); // _ZN7S7817C2D2Ev
  virtual void  v22(); // _ZN7S7817C23v22Ev
  virtual void  v23(); // _ZN7S7817C23v23Ev
  virtual void  v24(); // _ZN7S7817C23v24Ev
  virtual void  v25(); // _ZN7S7817C23v25Ev
  virtual void  v26(); // _ZN7S7817C23v26Ev
  S7817C2(); // tgen
};
//SIG(-1 S7817C2) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13 FL} v14 v15 v16 v17 v18 v19 FC3 Fi Fp} vd v1 v2 v3 v4 v5 Fs[6] Fi Fs Fc[6]}


 S7817C2 ::~S7817C2(){ note_dtor("S7817C2", this);}
void  S7817C2 ::v22(){vfunc_called(this, "_ZN7S7817C23v22Ev");}
void  S7817C2 ::v23(){vfunc_called(this, "_ZN7S7817C23v23Ev");}
void  S7817C2 ::v24(){vfunc_called(this, "_ZN7S7817C23v24Ev");}
void  S7817C2 ::v25(){vfunc_called(this, "_ZN7S7817C23v25Ev");}
void  S7817C2 ::v26(){vfunc_called(this, "_ZN7S7817C23v26Ev");}
S7817C2 ::S7817C2(){ note_ctor("S7817C2", this);} // tgen

static void Test_S7817C2()
{
  extern Class_Descriptor cd_S7817C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S7817C2, buf);
    S7817C2 *dp, &lv = *(dp=new (buf) S7817C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S7817C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C2)");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(72,52), "S7817C2");
    check_base_class_offset(lv, (S7817C3*), ABISELECT(32,28), "S7817C2");
    check_field_offset(lv, s7817c2f0, ABISELECT(8,4), "S7817C2.s7817c2f0");
    check_field_offset(lv, s7817c2f1, ABISELECT(20,16), "S7817C2.s7817c2f1");
    check_field_offset(lv, s7817c2f2, ABISELECT(24,20), "S7817C2.s7817c2f2");
    check_field_offset(lv, s7817c2f3, ABISELECT(26,22), "S7817C2.s7817c2f3");
    test_class_info(&lv, &cd_S7817C2);
    dp->~S7817C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C2(Test_S7817C2, "S7817C2", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S7817C2C1Ev();
extern void _ZN7S7817C2D2Ev();
Name_Map name_map_S7817C2[] = {
  NSPAIR(_ZN7S7817C2C1Ev),
  NSPAIR(_ZN7S7817C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
static Base_Class bases_S7817C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    ABISELECT(72,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //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_S7817C3,    ABISELECT(32,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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 _ZTI7S7817C2[];
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY vtc_S7817C2[] = {
  ABISELECT(72,52),
  ABISELECT(32,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7817C2[];
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__7S7817C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
static  VTT_ENTRY vtt_S7817C2[] = {
  {&(_ZTV7S7817C2[4]),  4,44},
  {&(_ZTV7S7817C2[20]),  20,44},
  {&(_ZTV7S7817C2[36]),  36,44},
  {&(_tg__ZTV7S7817C3__7S7817C2[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__7S7817C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
Class_Descriptor cd_S7817C2 = {  "S7817C2", // class name
  bases_S7817C2, 2,
  &(vtc_S7817C2[0]), // expected_vtbl_contents
  &(vtt_S7817C2[0]), // expected_vtt_contents
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S7817C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7817C2),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7817C2),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  S7817C6  : virtual S7817C3 , virtual S7817C2 {
  virtual  ~S7817C6(); // _ZN7S7817C6D2Ev
  virtual void  v27(); // _ZN7S7817C63v27Ev
  virtual void  v28(); // _ZN7S7817C63v28Ev
  S7817C6(); // tgen
};
//SIG(-1 S7817C6) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 FL} v11 v12 v13 v14 v15 v16 FC3 Fi Fp} VBC4{ VBC2 vd v17 v18 v19 v20 v21 Fs[6] Fi Fs Fc[6]} vd v1 v2}


 S7817C6 ::~S7817C6(){ note_dtor("S7817C6", this);}
void  S7817C6 ::v27(){vfunc_called(this, "_ZN7S7817C63v27Ev");}
void  S7817C6 ::v28(){vfunc_called(this, "_ZN7S7817C63v28Ev");}
S7817C6 ::S7817C6(){ note_ctor("S7817C6", this);} // tgen

static void Test_S7817C6()
{
  extern Class_Descriptor cd_S7817C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S7817C6, buf);
    S7817C6 *dp, &lv = *(dp=new (buf) S7817C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S7817C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C6)");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(48,28), "S7817C6");
    check_base_class_offset(lv, (S7817C3*), ABISELECT(8,4), "S7817C6");
    check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(8,4), "S7817C6");
    check_base_class_offset(lv, (S7817C2*), ABISELECT(64,40), "S7817C6");
    test_class_info(&lv, &cd_S7817C6);
    dp->~S7817C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C6(Test_S7817C6, "S7817C6", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S7817C6C1Ev();
extern void _ZN7S7817C6D2Ev();
Name_Map name_map_S7817C6[] = {
  NSPAIR(_ZN7S7817C6C1Ev),
  NSPAIR(_ZN7S7817C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
static Base_Class bases_S7817C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S7817C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //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_S7817C2,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S7817C6[];
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S7817C6D1Ev,_ZThn40_N7S7817C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S7817C6D0Ev,_ZThn40_N7S7817C6D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY vtc_S7817C6[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern VTBL_ENTRY _ZTV7S7817C6[];
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C6[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__7S7817C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C6[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__7S7817C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__7S7817C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
static  VTT_ENTRY vtt_S7817C6[] = {
  {&(_ZTV7S7817C6[5]),  5,59},
  {&(_ZTV7S7817C6[18]),  18,59},
  {&(_ZTV7S7817C6[34]),  34,59},
  {&(_ZTV7S7817C6[52]),  52,59},
  {&(_tg__ZTV7S7817C3__7S7817C6[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__7S7817C6[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C6[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__7S7817C6[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__7S7817C6[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7817C6D0Ev,_ZThn40_N7S7817C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7817C6D1Ev,_ZThn40_N7S7817C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C6 = {  "S7817C6", // class name
  bases_S7817C6, 3,
  &(vtc_S7817C6[0]), // expected_vtbl_contents
  &(vtt_S7817C6[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S7817C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7817C6),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7817C6),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7817C8  {
  int s7817c8f0;
  virtual void  v29(); // _ZN7S7817C83v29Ev
  virtual void  v30(); // _ZN7S7817C83v30Ev
  virtual void  v31(); // _ZN7S7817C83v31Ev
  ~S7817C8(); // tgen
  S7817C8(); // tgen
};
//SIG(-1 S7817C8) C1{ v1 v2 v3 Fi}


void  S7817C8 ::v29(){vfunc_called(this, "_ZN7S7817C83v29Ev");}
void  S7817C8 ::v30(){vfunc_called(this, "_ZN7S7817C83v30Ev");}
void  S7817C8 ::v31(){vfunc_called(this, "_ZN7S7817C83v31Ev");}
S7817C8 ::~S7817C8(){ note_dtor("S7817C8", this);} // tgen
S7817C8 ::S7817C8(){ note_ctor("S7817C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7817C8C1Ev();
extern void _ZN7S7817C8D1Ev();
Name_Map name_map_S7817C8[] = {
  NSPAIR(_ZN7S7817C8C1Ev),
  NSPAIR(_ZN7S7817C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7817C8[];
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY vtc_S7817C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C8[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
Class_Descriptor cd_S7817C8 = {  "S7817C8", // class name
  0,0,//no base classes
  &(vtc_S7817C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7817C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7817C8),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  S7817C7  : virtual S7817C4 , virtual S7817C3 , S7817C2 , virtual S7817C8 , S7817C6 {
  virtual  ~S7817C7(); // _ZN7S7817C7D2Ev
  virtual void  v32(); // _ZN7S7817C73v32Ev
  virtual void  v33(); // _ZN7S7817C73v33Ev
  virtual void  v34(); // _ZN7S7817C73v34Ev
  virtual void  v35(); // _ZN7S7817C73v35Ev
  S7817C7(); // tgen
};
//SIG(-1 S7817C7) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 FL} VBC3{ VBC2 v13 v14 v15 v16 v17 v18 FC2 Fi Fp} BC4{ VBC3 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} VBC5{ v24 v25 v26 Fi} BC6{ VBC3 VBC4 vd v27 v28} vd v1 v2 v3 v4}


 S7817C7 ::~S7817C7(){ note_dtor("S7817C7", this);}
void  S7817C7 ::v32(){vfunc_called(this, "_ZN7S7817C73v32Ev");}
void  S7817C7 ::v33(){vfunc_called(this, "_ZN7S7817C73v33Ev");}
void  S7817C7 ::v34(){vfunc_called(this, "_ZN7S7817C73v34Ev");}
void  S7817C7 ::v35(){vfunc_called(this, "_ZN7S7817C73v35Ev");}
S7817C7 ::S7817C7(){ note_ctor("S7817C7", this);} // tgen

static void Test_S7817C7()
{
  extern Class_Descriptor cd_S7817C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,27)];
    init_test(&cd_S7817C7, buf);
    S7817C7 *dp, &lv = *(dp=new (buf) S7817C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,104), "sizeof(S7817C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C7)");
    check_base_class_offset(lv, (S7817C4*), ABISELECT(40,32), "S7817C7");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(40,32), "S7817C7");
    check_base_class_offset(lv, (S7817C3*), ABISELECT(56,44), "S7817C7");
    /*is_ambiguous_... S7817C7::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(56,44), "S7817C7");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*), ABISELECT(56,44), "S7817C7");
    /*is_ambiguous_... S7817C7::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(56,44), "S7817C7");
    /*is_ambiguous_... S7817C7::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C2*), 0, "S7817C7");
    check_base_class_offset(lv, (S7817C8*), ABISELECT(96,68), "S7817C7");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*), ABISELECT(112,76), "S7817C7");
    check_base_class_offset(lv, (S7817C6*), ABISELECT(32,28), "S7817C7");
    test_class_info(&lv, &cd_S7817C7);
    dp->~S7817C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C7(Test_S7817C7, "S7817C7", ABISELECT(144,104));

#else // __cplusplus

extern void _ZN7S7817C7C1Ev();
extern void _ZN7S7817C7D2Ev();
Name_Map name_map_S7817C7[] = {
  NSPAIR(_ZN7S7817C7C1Ev),
  NSPAIR(_ZN7S7817C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
static Base_Class bases_S7817C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    ABISELECT(40,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C3,    ABISELECT(56,44), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C2,    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_S7817C8,    ABISELECT(96,68), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C2,    ABISELECT(112,76), //bcp->offset
    67, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7817C6,    ABISELECT(32,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7817C7[];
extern void _ZN7S7817C7D1Ev();
extern void _ZN7S7817C7D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C73v32Ev();
extern void _ZN7S7817C73v33Ev();
extern void _ZN7S7817C73v34Ev();
extern void _ZN7S7817C73v35Ev();
extern void ABISELECT(_ZThn32_N7S7817C7D1Ev,_ZThn28_N7S7817C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7817C7D0Ev,_ZThn28_N7S7817C7D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void ABISELECT(_ZTv0_n40_N7S7817C7D1Ev,_ZTv0_n20_N7S7817C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7817C7D1Ev,_ZThn76_N7S7817C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C7D0Ev,_ZTv0_n20_N7S7817C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7817C7D0Ev,_ZThn76_N7S7817C7D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY vtc_S7817C7[] = {
  ABISELECT(112,76),
  ABISELECT(96,68),
  ABISELECT(40,32),
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v35Ev,
  ABISELECT(80,48),
  ABISELECT(8,4),
  ABISELECT(24,16),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7817C7D1Ev,_ZThn28_N7S7817C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7817C7D0Ev,_ZThn28_N7S7817C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-76),
  ABISELECT(-72,-44),
  ABISELECT(-56,-32),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C7D1Ev,_ZTv0_n20_N7S7817C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C7D0Ev,_ZTv0_n20_N7S7817C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern VTBL_ENTRY _ZTV7S7817C7[];
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A__7S7817C7[] = {
  ABISELECT(40,32),
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__A__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__A__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__7S7817C7[] = {
  ABISELECT(80,48),
  ABISELECT(8,4),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C6__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C6__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZThn80_N7S7817C6D1Ev,_ZThn48_N7S7817C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void ABISELECT(_ZThn80_N7S7817C6D0Ev,_ZThn48_N7S7817C6D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C6__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  ABISELECT(-72,-44),
  ABISELECT(-56,-32),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C7[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A1__7S7817C7[] = {
  ABISELECT(-72,-44),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__A1__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__A1__7S7817C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,44),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
static  VTT_ENTRY vtt_S7817C7[] = {
  {&(_ZTV7S7817C7[6]),  6,84},
  {&(_tg__ZTV7S7817C2__A__7S7817C7[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__A__7S7817C7[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__A__7S7817C7[10]),  10,18},
  {&(_tg__ZTV7S7817C6__7S7817C7[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C6__7S7817C7[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C6__7S7817C7[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C6__7S7817C7[10]),  10,17},
  {&(_ZTV7S7817C7[36]),  36,84},
  {&(_ZTV7S7817C7[53]),  53,84},
  {&(_ZTV7S7817C7[64]),  64,84},
  {&(_ZTV7S7817C7[22]),  22,84},
  {&(_ZTV7S7817C7[77]),  77,84},
  {&(_tg__ZTV7S7817C3__7S7817C7[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__7S7817C7[10]),  10,18},
  {&(_tg__ZTV7S7817C2__A1__7S7817C7[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__A1__7S7817C7[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__A1__7S7817C7[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7817C7[];
extern  VTBL_ENTRY _ZTV7S7817C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C7[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7817C6D0Ev,_ZThn48_N7S7817C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7817C6D1Ev,_ZThn48_N7S7817C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C7D0Ev,_ZTv0_n20_N7S7817C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7817C7D0Ev,_ZThn76_N7S7817C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C7D1Ev,_ZTv0_n20_N7S7817C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7817C7D1Ev,_ZThn76_N7S7817C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C7 = {  "S7817C7", // class name
  bases_S7817C7, 6,
  &(vtc_S7817C7[0]), // expected_vtbl_contents
  &(vtt_S7817C7[0]), // expected_vtt_contents
  ABISELECT(144,104), // object size
  NSPAIRA(_ZTI7S7817C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7817C7),84, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7817C7),18, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7817C5  : virtual S7817C4 , virtual S7817C3 , virtual S7817C6 , virtual S7817C7 {
  char s7817c5f0;
  virtual  ~S7817C5(); // _ZN7S7817C5D2Ev
  virtual void  v36(); // _ZN7S7817C53v36Ev
  virtual void  v37(); // _ZN7S7817C53v37Ev
  virtual void  v38(); // _ZN7S7817C53v38Ev
  virtual void  v39(); // _ZN7S7817C53v39Ev
  virtual void  v40(); // _ZN7S7817C53v40Ev
  virtual void  v41(); // _ZN7S7817C53v41Ev
  virtual void  v42(); // _ZN7S7817C53v42Ev
  S7817C5(); // tgen
};
//SIG(-1 S7817C5) C1{ VBC2{ v8 v9 v10 v11 v12 v13 v14 v15 FL} VBC3{ VBC2 v16 v17 v18 v19 v20 v21 FC2 Fi Fp} VBC4{ VBC3 VBC5{ VBC3 vd v22 v23 v24 v25 v26 Fs[6] Fi Fs Fc[6]} vd v27 v28} VBC6{ VBC2 VBC3 BC5 VBC7{ v29 v30 v31 Fi} BC4 vd v32 v33 v34 v35} vd v1 v2 v3 v4 v5 v6 v7 Fc}


 S7817C5 ::~S7817C5(){ note_dtor("S7817C5", this);}
void  S7817C5 ::v36(){vfunc_called(this, "_ZN7S7817C53v36Ev");}
void  S7817C5 ::v37(){vfunc_called(this, "_ZN7S7817C53v37Ev");}
void  S7817C5 ::v38(){vfunc_called(this, "_ZN7S7817C53v38Ev");}
void  S7817C5 ::v39(){vfunc_called(this, "_ZN7S7817C53v39Ev");}
void  S7817C5 ::v40(){vfunc_called(this, "_ZN7S7817C53v40Ev");}
void  S7817C5 ::v41(){vfunc_called(this, "_ZN7S7817C53v41Ev");}
void  S7817C5 ::v42(){vfunc_called(this, "_ZN7S7817C53v42Ev");}
S7817C5 ::S7817C5(){ note_ctor("S7817C5", this);} // tgen

static void Test_S7817C5()
{
  extern Class_Descriptor cd_S7817C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S7817C5, buf);
    S7817C5 *dp, &lv = *(dp=new (buf) S7817C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S7817C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C5)");
    check_base_class_offset(lv, (S7817C4*), ABISELECT(16,8), "S7817C5");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(16,8), "S7817C5");
    check_base_class_offset(lv, (S7817C4*)(S7817C7*), ABISELECT(16,8), "S7817C5");
    check_base_class_offset(lv, (S7817C3*), ABISELECT(32,20), "S7817C5");
    /*is_ambiguous_... S7817C5::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C6*), ABISELECT(32,20), "S7817C5");
    /*is_ambiguous_... S7817C5::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(32,20), "S7817C5");
    check_base_class_offset(lv, (S7817C3*)(S7817C7*), ABISELECT(32,20), "S7817C5");
    /*is_ambiguous_... S7817C7::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*)(S7817C7*), ABISELECT(32,20), "S7817C5");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*)(S7817C7*), ABISELECT(32,20), "S7817C5");
    /*is_ambiguous_... S7817C5::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C2*)(S7817C6*), ABISELECT(72,44), "S7817C5");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*)(S7817C7*), ABISELECT(72,44), "S7817C5");
    /*is_ambiguous_... S7817C5::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C6*), 0, "S7817C5");
    /*is_ambiguous_... S7817C7::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C2*)(S7817C7*), ABISELECT(104,72), "S7817C5");
    check_base_class_offset(lv, (S7817C8*)(S7817C7*), ABISELECT(144,104), "S7817C5");
    check_base_class_offset(lv, (S7817C6*)(S7817C7*), ABISELECT(136,100), "S7817C5");
    check_base_class_offset(lv, (S7817C7*), ABISELECT(104,72), "S7817C5");
    check_field_offset(lv, s7817c5f0, ABISELECT(8,4), "S7817C5.s7817c5f0");
    test_class_info(&lv, &cd_S7817C5);
    dp->~S7817C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C5(Test_S7817C5, "S7817C5", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S7817C5C1Ev();
extern void _ZN7S7817C5D2Ev();
Name_Map name_map_S7817C5[] = {
  NSPAIR(_ZN7S7817C5C1Ev),
  NSPAIR(_ZN7S7817C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C7;
extern VTBL_ENTRY _ZTI7S7817C7[];
extern  VTBL_ENTRY _ZTV7S7817C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C7[];
static Base_Class bases_S7817C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    ABISELECT(16,8), //bcp->offset
    22, //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},
  {&cd_S7817C3,    ABISELECT(32,20), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C2,    ABISELECT(72,44), //bcp->offset
    55, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7817C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C2,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7817C8,    ABISELECT(144,104), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7817C6,    ABISELECT(136,100), //bcp->offset
    101, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7817C7,    ABISELECT(104,72), //bcp->offset
    72, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7817C5[];
extern void ABISELECT(_ZTv0_n48_N7S7817C5D1Ev,_ZTv0_n24_N7S7817C5D1Ev)();
extern void _ZN7S7817C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7817C5D0Ev,_ZTv0_n24_N7S7817C5D0Ev)();
extern void _ZN7S7817C5D0Ev() __attribute__((weak));
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C53v36Ev();
extern void _ZN7S7817C53v37Ev();
extern void _ZN7S7817C53v38Ev();
extern void _ZN7S7817C53v39Ev();
extern void _ZN7S7817C53v40Ev();
extern void _ZN7S7817C53v41Ev();
extern void _ZN7S7817C53v42Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void ABISELECT(_ZTv0_n40_N7S7817C5D1Ev,_ZTv0_n20_N7S7817C5D1Ev)();
extern void ABISELECT(_ZThn72_N7S7817C5D1Ev,_ZThn44_N7S7817C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C5D0Ev,_ZTv0_n20_N7S7817C5D0Ev)();
extern void ABISELECT(_ZThn72_N7S7817C5D0Ev,_ZThn44_N7S7817C5D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S7817C5D1Ev,_ZTv0_n28_N7S7817C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7817C5D1Ev,_ZThn72_N7S7817C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7817C5D0Ev,_ZTv0_n28_N7S7817C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7817C5D0Ev,_ZThn72_N7S7817C5D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C73v32Ev();
extern void _ZN7S7817C73v33Ev();
extern void _ZN7S7817C73v34Ev();
extern void _ZN7S7817C73v35Ev();
extern void ABISELECT(_ZTvn32_n56_N7S7817C5D1Ev,_ZTvn28_n28_N7S7817C5D1Ev)();
extern void ABISELECT(_ZTvn32_n56_N7S7817C5D0Ev,_ZTvn28_n28_N7S7817C5D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY vtc_S7817C5[] = {
  ABISELECT(144,104),
  ABISELECT(104,72),
  0,
  0,
  0,
  0,
  ABISELECT(72,44),
  ABISELECT(16,8),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7817C5D1Ev,_ZTv0_n24_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7817C5D0Ev,_ZTv0_n24_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v36Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v37Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v38Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v39Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v40Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v41Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v42Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C5D1Ev,_ZTv0_n20_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C5D0Ev,_ZTv0_n20_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  ABISELECT(32,28),
  ABISELECT(32,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-72),
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-88,-64),
  ABISELECT(-72,-52),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7817C5D1Ev,_ZTv0_n28_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7817C5D0Ev,_ZTv0_n28_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v35Ev,
  ABISELECT(-64,-56),
  ABISELECT(-120,-92),
  ABISELECT(-104,-80),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7817C5D1Ev,_ZTvn28_n28_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7817C5D0Ev,_ZTvn28_n28_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern VTBL_ENTRY _ZTV7S7817C5[];
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C5[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__7S7817C5[] = {
  ABISELECT(72,44),
  ABISELECT(16,8),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C6__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C6__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZThn72_N7S7817C6D1Ev,_ZThn44_N7S7817C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void ABISELECT(_ZThn72_N7S7817C6D0Ev,_ZThn44_N7S7817C6D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C6__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C5[] = {
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C7D1Ev();
extern void _ZN7S7817C7D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C73v32Ev();
extern void _ZN7S7817C73v33Ev();
extern void _ZN7S7817C73v34Ev();
extern void _ZN7S7817C73v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C7__7S7817C5[] = {
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-88,-64),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v35Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C27S7817C7__A1__7S7817C5[] = {
  ABISELECT(-88,-64),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C27S7817C7__A1__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C27S7817C7__A1__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C67S7817C7__A1__7S7817C5[] = {
  ABISELECT(-64,-56),
  ABISELECT(-120,-92),
  ABISELECT(-104,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C67S7817C7__A1__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C67S7817C7__A1__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C67S7817C7__A1__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C7__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C7__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__7S7817C7__7S7817C5[] = {
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZThn32_N7S7817C7D1Ev,_ZThn28_N7S7817C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7817C7D0Ev,_ZThn28_N7S7817C7D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__7S7817C7__7S7817C5[] = {
  ABISELECT(-64,-56),
  ABISELECT(-120,-92),
  ABISELECT(-104,-80),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7817C7D1Ev,_ZThn28_N7S7817C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7817C7D0Ev,_ZThn28_N7S7817C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C7D1Ev,_ZTv0_n20_N7S7817C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C7D0Ev,_ZTv0_n20_N7S7817C7D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A1__7S7817C7__7S7817C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C7D1Ev,_ZTv0_n20_N7S7817C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C7D0Ev,_ZTv0_n20_N7S7817C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
static  VTT_ENTRY vtt_S7817C5[] = {
  {&(_ZTV7S7817C5[11]),  11,118},
  {&(_ZTV7S7817C5[32]),  32,118},
  {&(_ZTV7S7817C5[49]),  49,118},
  {&(_ZTV7S7817C5[11]),  11,118},
  {&(_ZTV7S7817C5[65]),  65,118},
  {&(_ZTV7S7817C5[90]),  90,118},
  {&(_ZTV7S7817C5[115]),  115,118},
  {&(_ZTV7S7817C5[106]),  106,118},
  {&(_tg__ZTV7S7817C3__7S7817C5[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__7S7817C5[10]),  10,18},
  {&(_tg__ZTV7S7817C6__7S7817C5[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C6__7S7817C5[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C6__7S7817C5[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C6__7S7817C5[10]),  10,17},
  {&(_tg__ZTV7S7817C2__7S7817C5[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__7S7817C5[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__7S7817C5[10]),  10,18},
  {&(_tg__ZTV7S7817C7__7S7817C5[6]),  6,17},
  {&(_tg__ZTV7S7817C27S7817C7__A1__7S7817C5[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C27S7817C7__A1__7S7817C5[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C27S7817C7__A1__7S7817C5[10]),  10,18},
  {&(_tg__ZTV7S7817C67S7817C7__A1__7S7817C5[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C67S7817C7__A1__7S7817C5[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C67S7817C7__A1__7S7817C5[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C67S7817C7__A1__7S7817C5[10]),  10,17},
  {&(_tg__ZTV7S7817C4__7S7817C7__7S7817C5[10]),  10,18},
  {&(_tg__ZTV7S7817C3__7S7817C7__7S7817C5[9]),  9,15},
  {&(_tg__ZTV7S7817C8__7S7817C7__7S7817C5[5]),  5,8},
  {&(_tg__ZTV7S7817C6__7S7817C7__7S7817C5[5]),  5,9},
  {&(_tg__ZTV7S7817C2__A1__7S7817C7__7S7817C5[10]),  10,17},
};
extern VTBL_ENTRY _ZTI7S7817C5[];
extern  VTBL_ENTRY _ZTV7S7817C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C5[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7817C6D0Ev,_ZThn44_N7S7817C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7817C6D1Ev,_ZThn44_N7S7817C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7817C5D0Ev,_ZTv0_n28_N7S7817C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7817C5D0Ev,_ZThn72_N7S7817C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7817C5D1Ev,_ZTv0_n28_N7S7817C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7817C5D1Ev,_ZThn72_N7S7817C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C5D0Ev,_ZTv0_n20_N7S7817C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7817C5D0Ev,_ZThn44_N7S7817C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C5D1Ev,_ZTv0_n20_N7S7817C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7817C5D1Ev,_ZThn44_N7S7817C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7817C5D0Ev,_ZTv0_n24_N7S7817C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7817C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7817C5D1Ev,_ZTv0_n24_N7S7817C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7817C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C5 = {  "S7817C5", // class name
  bases_S7817C5, 8,
  &(vtc_S7817C5[0]), // expected_vtbl_contents
  &(vtt_S7817C5[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S7817C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7817C5),118, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7817C5),30, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7817C9  {
  void *s7817c9f0;
  virtual void  v43(); // _ZN7S7817C93v43Ev
  ~S7817C9(); // tgen
  S7817C9(); // tgen
};
//SIG(-1 S7817C9) C1{ v1 Fp}


void  S7817C9 ::v43(){vfunc_called(this, "_ZN7S7817C93v43Ev");}
S7817C9 ::~S7817C9(){ note_dtor("S7817C9", this);} // tgen
S7817C9 ::S7817C9(){ note_ctor("S7817C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7817C9C1Ev();
extern void _ZN7S7817C9D1Ev();
Name_Map name_map_S7817C9[] = {
  NSPAIR(_ZN7S7817C9C1Ev),
  NSPAIR(_ZN7S7817C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7817C9[];
extern void _ZN7S7817C93v43Ev();
static  VTBL_ENTRY vtc_S7817C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C9[0]),
  (VTBL_ENTRY)&_ZN7S7817C93v43Ev,
};
extern VTBL_ENTRY _ZTI7S7817C9[];
extern  VTBL_ENTRY _ZTV7S7817C9[];
Class_Descriptor cd_S7817C9 = {  "S7817C9", // class name
  0,0,//no base classes
  &(vtc_S7817C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7817C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7817C9),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  S7817C11  : S7817C4 , virtual S7817C3 , virtual S7817C2 , virtual S7817C6 , virtual S7817C8 {
  ::S7817C7 s7817c11f0;
  void *s7817c11f1;
  virtual  ~S7817C11(); // _ZN8S7817C11D2Ev
  virtual void  v44(); // _ZN8S7817C113v44Ev
  virtual void  v45(); // _ZN8S7817C113v45Ev
  virtual void  v46(); // _ZN8S7817C113v46Ev
  virtual void  v47(); // _ZN8S7817C113v47Ev
  virtual void  v48(); // _ZN8S7817C113v48Ev
  virtual void  v49(); // _ZN8S7817C113v49Ev
  S7817C11(); // tgen
};
//SIG(-1 S7817C11) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} VBC3{ VBC2 v15 v16 v17 v18 v19 v20 FC2 Fi Fp} VBC4{ VBC3 vd v21 v22 v23 v24 v25 Fs[6] Fi Fs Fc[6]} VBC5{ VBC3 VBC4 vd v26 v27} VBC6{ v28 v29 v30 Fi} vd v1 v2 v3 v4 v5 v6 FC7{ VBC2 VBC3 BC4 VBC6 BC5 vd v31 v32 v33 v34} Fp}


 S7817C11 ::~S7817C11(){ note_dtor("S7817C11", this);}
void  S7817C11 ::v44(){vfunc_called(this, "_ZN8S7817C113v44Ev");}
void  S7817C11 ::v45(){vfunc_called(this, "_ZN8S7817C113v45Ev");}
void  S7817C11 ::v46(){vfunc_called(this, "_ZN8S7817C113v46Ev");}
void  S7817C11 ::v47(){vfunc_called(this, "_ZN8S7817C113v47Ev");}
void  S7817C11 ::v48(){vfunc_called(this, "_ZN8S7817C113v48Ev");}
void  S7817C11 ::v49(){vfunc_called(this, "_ZN8S7817C113v49Ev");}
S7817C11 ::S7817C11(){ note_ctor("S7817C11", this);} // tgen

static void Test_S7817C11()
{
  extern Class_Descriptor cd_S7817C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,50)];
    init_test(&cd_S7817C11, buf);
    S7817C11 *dp, &lv = *(dp=new (buf) S7817C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,196), "sizeof(S7817C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C11)");
    /*is_ambiguous_... S7817C11::S7817C4 */ AMB_check_base_class_offset(lv, (S7817C4*), 0, "S7817C11");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(208,144), "S7817C11");
    check_base_class_offset(lv, (S7817C3*), ABISELECT(168,120), "S7817C11");
    check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(168,120), "S7817C11");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*), ABISELECT(168,120), "S7817C11");
    check_base_class_offset(lv, (S7817C2*), ABISELECT(224,156), "S7817C11");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*), ABISELECT(224,156), "S7817C11");
    check_base_class_offset(lv, (S7817C6*), ABISELECT(256,184), "S7817C11");
    check_base_class_offset(lv, (S7817C8*), ABISELECT(264,188), "S7817C11");
    check_field_offset(lv, s7817c11f0, ABISELECT(16,12), "S7817C11.s7817c11f0");
    check_field_offset(lv, s7817c11f1, ABISELECT(160,116), "S7817C11.s7817c11f1");
    test_class_info(&lv, &cd_S7817C11);
    dp->~S7817C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C11(Test_S7817C11, "S7817C11", ABISELECT(280,196));

#else // __cplusplus

extern void _ZN8S7817C11C1Ev();
extern void _ZN8S7817C11D2Ev();
Name_Map name_map_S7817C11[] = {
  NSPAIR(_ZN8S7817C11C1Ev),
  NSPAIR(_ZN8S7817C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
static Base_Class bases_S7817C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7817C4,    ABISELECT(208,144), //bcp->offset
    38, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7817C3,    ABISELECT(168,120), //bcp->offset
    23, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C2,    ABISELECT(224,156), //bcp->offset
    56, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C6,    ABISELECT(256,184), //bcp->offset
    73, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C8,    ABISELECT(264,188), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7817C11[];
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C11D1Ev();
extern void _ZN8S7817C11D0Ev();
extern void _ZN8S7817C113v44Ev();
extern void _ZN8S7817C113v45Ev();
extern void _ZN8S7817C113v46Ev();
extern void _ZN8S7817C113v47Ev();
extern void _ZN8S7817C113v48Ev();
extern void _ZN8S7817C113v49Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev)();
extern void ABISELECT(_ZThn224_N8S7817C11D1Ev,_ZThn156_N8S7817C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev)();
extern void ABISELECT(_ZThn224_N8S7817C11D0Ev,_ZThn156_N8S7817C11D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev)();
extern void ABISELECT(_ZThn256_N8S7817C11D1Ev,_ZThn184_N8S7817C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev)();
extern void ABISELECT(_ZThn256_N8S7817C11D0Ev,_ZThn184_N8S7817C11D0Ev)() __attribute__((weak));
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY vtc_S7817C11[] = {
  ABISELECT(264,188),
  ABISELECT(256,184),
  ABISELECT(224,156),
  ABISELECT(208,144),
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v49Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  0,
  0,
  ABISELECT(-256,-184),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-256,-184),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S7817C11[];
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C11[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__8S7817C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C11[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__8S7817C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__8S7817C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C11[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C6__8S7817C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C6__8S7817C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C6__8S7817C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
static  VTT_ENTRY vtt_S7817C11[] = {
  {&(_ZTV8S7817C11[7]),  7,93},
  {&(_ZTV8S7817C11[32]),  32,93},
  {&(_ZTV8S7817C11[48]),  48,93},
  {&(_ZTV8S7817C11[66]),  66,93},
  {&(_ZTV8S7817C11[81]),  81,93},
  {&(_ZTV8S7817C11[90]),  90,93},
  {&(_tg__ZTV7S7817C3__8S7817C11[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__8S7817C11[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C11[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__8S7817C11[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__8S7817C11[10]),  10,18},
  {&(_tg__ZTV7S7817C6__8S7817C11[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C6__8S7817C11[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C6__8S7817C11[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C6__8S7817C11[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S7817C11[];
extern  VTBL_ENTRY _ZTV8S7817C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C11[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7817C11D0Ev,_ZThn184_N8S7817C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7817C11D1Ev,_ZThn184_N8S7817C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7817C11D0Ev,_ZThn156_N8S7817C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7817C11D1Ev,_ZThn156_N8S7817C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C11 = {  "S7817C11", // class name
  bases_S7817C11, 6,
  &(vtc_S7817C11[0]), // expected_vtbl_contents
  &(vtt_S7817C11[0]), // expected_vtt_contents
  ABISELECT(280,196), // object size
  NSPAIRA(_ZTI8S7817C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7817C11),93, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7817C11),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7817C13  : virtual S7817C8 , S7817C4 , S7817C6 {
  char s7817c13f0[8];
  virtual  ~S7817C13(); // _ZN8S7817C13D2Ev
  virtual void  v50(); // _ZN8S7817C133v50Ev
  virtual void  v51(); // _ZN8S7817C133v51Ev
  virtual void  v52(); // _ZN8S7817C133v52Ev
  virtual void  v53(); // _ZN8S7817C133v53Ev
  virtual void  v54(); // _ZN8S7817C133v54Ev
  virtual void  v55(); // _ZN8S7817C133v55Ev
  S7817C13(); // tgen
};
//SIG(-1 S7817C13) C1{ VBC2{ v7 v8 v9 Fi} BC3{ v10 v11 v12 v13 v14 v15 v16 v17 FL} BC4{ VBC5{ VBC3 v18 v19 v20 v21 v22 v23 FC3 Fi Fp} VBC6{ VBC5 vd v24 v25 v26 v27 v28 Fs[6] Fi Fs Fc[6]} vd v29 v30} vd v1 v2 v3 v4 v5 v6 Fc[8]}


 S7817C13 ::~S7817C13(){ note_dtor("S7817C13", this);}
void  S7817C13 ::v50(){vfunc_called(this, "_ZN8S7817C133v50Ev");}
void  S7817C13 ::v51(){vfunc_called(this, "_ZN8S7817C133v51Ev");}
void  S7817C13 ::v52(){vfunc_called(this, "_ZN8S7817C133v52Ev");}
void  S7817C13 ::v53(){vfunc_called(this, "_ZN8S7817C133v53Ev");}
void  S7817C13 ::v54(){vfunc_called(this, "_ZN8S7817C133v54Ev");}
void  S7817C13 ::v55(){vfunc_called(this, "_ZN8S7817C133v55Ev");}
S7817C13 ::S7817C13(){ note_ctor("S7817C13", this);} // tgen

static void Test_S7817C13()
{
  extern Class_Descriptor cd_S7817C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S7817C13, buf);
    S7817C13 *dp, &lv = *(dp=new (buf) S7817C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S7817C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C13)");
    check_base_class_offset(lv, (S7817C8*), ABISELECT(32,24), "S7817C13");
    /*is_ambiguous_... S7817C13::S7817C4 */ AMB_check_base_class_offset(lv, (S7817C4*), 0, "S7817C13");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(88,56), "S7817C13");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*), ABISELECT(48,32), "S7817C13");
    check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(48,32), "S7817C13");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*), ABISELECT(104,68), "S7817C13");
    check_base_class_offset(lv, (S7817C6*), ABISELECT(16,12), "S7817C13");
    check_field_offset(lv, s7817c13f0, ABISELECT(24,16), "S7817C13.s7817c13f0");
    test_class_info(&lv, &cd_S7817C13);
    dp->~S7817C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C13(Test_S7817C13, "S7817C13", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN8S7817C13C1Ev();
extern void _ZN8S7817C13D2Ev();
Name_Map name_map_S7817C13[] = {
  NSPAIR(_ZN8S7817C13C1Ev),
  NSPAIR(_ZN8S7817C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
static Base_Class bases_S7817C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C8,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7817C4,    ABISELECT(88,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7817C3,    ABISELECT(48,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7817C2,    ABISELECT(104,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7817C6,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7817C13[];
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C13D1Ev();
extern void _ZN8S7817C13D0Ev();
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
extern void ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev)();
extern void ABISELECT(_ZThn104_N8S7817C13D1Ev,_ZThn68_N8S7817C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev)();
extern void ABISELECT(_ZThn104_N8S7817C13D0Ev,_ZThn68_N8S7817C13D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY vtc_S7817C13[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S7817C13[];
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C13[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C6__8S7817C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C6__8S7817C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S7817C6D1Ev,_ZThn56_N7S7817C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S7817C6D0Ev,_ZThn56_N7S7817C6D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C6__8S7817C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C13[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__8S7817C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C13[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__8S7817C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__8S7817C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
static  VTT_ENTRY vtt_S7817C13[] = {
  {&(_ZTV8S7817C13[6]),  6,89},
  {&(_tg__ZTV7S7817C6__8S7817C13[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C6__8S7817C13[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C6__8S7817C13[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C6__8S7817C13[10]),  10,17},
  {&(_ZTV8S7817C13[36]),  36,89},
  {&(_ZTV8S7817C13[27]),  27,89},
  {&(_ZTV8S7817C13[48]),  48,89},
  {&(_ZTV8S7817C13[64]),  64,89},
  {&(_ZTV8S7817C13[82]),  82,89},
  {&(_tg__ZTV7S7817C3__8S7817C13[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__8S7817C13[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C13[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__8S7817C13[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__8S7817C13[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S7817C13[];
extern  VTBL_ENTRY _ZTV8S7817C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C13[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7817C6D0Ev,_ZThn56_N7S7817C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7817C6D1Ev,_ZThn56_N7S7817C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7817C13D0Ev,_ZThn68_N8S7817C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7817C13D1Ev,_ZThn68_N8S7817C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C13 = {  "S7817C13", // class name
  bases_S7817C13, 6,
  &(vtc_S7817C13[0]), // expected_vtbl_contents
  &(vtt_S7817C13[0]), // expected_vtt_contents
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI8S7817C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7817C13),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7817C13),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7817C12  : virtual S7817C13 , S7817C8 {
  virtual void  v56(); // _ZN8S7817C123v56Ev
  virtual void  v57(); // _ZN8S7817C123v57Ev
  ~S7817C12(); // tgen
  S7817C12(); // tgen
};
//SIG(-1 S7817C12) C1{ VBC2{ VBC3{ v3 v4 v5 Fi} BC4{ v6 v7 v8 v9 v10 v11 v12 v13 FL} BC5{ VBC6{ VBC4 v14 v15 v16 v17 v18 v19 FC4 Fi Fp} VBC7{ VBC6 vd v20 v21 v22 v23 v24 Fs[6] Fi Fs Fc[6]} vd v25 v26} vd v27 v28 v29 v30 v31 v32 Fc[8]} BC3 v1 v2}


void  S7817C12 ::v56(){vfunc_called(this, "_ZN8S7817C123v56Ev");}
void  S7817C12 ::v57(){vfunc_called(this, "_ZN8S7817C123v57Ev");}
S7817C12 ::~S7817C12(){ note_dtor("S7817C12", this);} // tgen
S7817C12 ::S7817C12(){ note_ctor("S7817C12", this);} // tgen

static void Test_S7817C12()
{
  extern Class_Descriptor cd_S7817C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S7817C12, buf);
    S7817C12 *dp, &lv = *(dp=new (buf) S7817C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S7817C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C12)");
    check_base_class_offset(lv, (S7817C8*)(S7817C13*), ABISELECT(48,32), "S7817C12");
    /*is_ambiguous_... S7817C13::S7817C4 */ AMB_check_base_class_offset(lv, (S7817C4*)(S7817C13*), ABISELECT(16,8), "S7817C12");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(104,64), "S7817C12");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*)(S7817C13*), ABISELECT(64,40), "S7817C12");
    check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(64,40), "S7817C12");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*)(S7817C13*), ABISELECT(120,76), "S7817C12");
    check_base_class_offset(lv, (S7817C6*)(S7817C13*), ABISELECT(32,20), "S7817C12");
    check_base_class_offset(lv, (S7817C13*), ABISELECT(16,8), "S7817C12");
    /*is_ambiguous_... S7817C12::S7817C8 */ AMB_check_base_class_offset(lv, (S7817C8*), 0, "S7817C12");
    test_class_info(&lv, &cd_S7817C12);
    dp->~S7817C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C12(Test_S7817C12, "S7817C12", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN8S7817C12C1Ev();
extern void _ZN8S7817C12D1Ev();
Name_Map name_map_S7817C12[] = {
  NSPAIR(_ZN8S7817C12C1Ev),
  NSPAIR(_ZN8S7817C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C13;
extern VTBL_ENTRY _ZTI8S7817C13[];
extern  VTBL_ENTRY _ZTV8S7817C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C13[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
static Base_Class bases_S7817C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C8,    ABISELECT(48,32), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7817C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7817C4,    ABISELECT(104,64), //bcp->offset
    85, //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_S7817C3,    ABISELECT(64,40), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7817C2,    ABISELECT(120,76), //bcp->offset
    103, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7817C6,    ABISELECT(32,20), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7817C13,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S7817C12[];
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN8S7817C123v56Ev();
extern void _ZN8S7817C123v57Ev();
extern void _ZN8S7817C12D1Ev();
extern void _ZN8S7817C12D0Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S7817C12D1Ev,_ZThn8_N8S7817C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S7817C12D0Ev,_ZThn8_N8S7817C12D0Ev)() __attribute__((weak));
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
extern void ABISELECT(_ZTvn16_n120_N8S7817C12D1Ev,_ZTvn12_n60_N8S7817C12D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7817C12D0Ev,_ZTvn12_n60_N8S7817C12D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev)();
extern void ABISELECT(_ZThn120_N8S7817C12D1Ev,_ZThn76_N8S7817C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev)();
extern void ABISELECT(_ZThn120_N8S7817C12D0Ev,_ZThn76_N8S7817C12D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY vtc_S7817C12[] = {
  ABISELECT(120,76),
  ABISELECT(104,64),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v57Ev,
  (VTBL_ENTRY)&_ZN8S7817C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C12D0Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C12D1Ev,_ZTvn12_n60_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C12D0Ev,_ZTvn12_n60_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S7817C12[];
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C13D1Ev();
extern void _ZN8S7817C13D0Ev();
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C13__8S7817C12[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C68S7817C13__8S7817C12[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C68S7817C13__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C68S7817C13__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S7817C6D1Ev,_ZThn56_N7S7817C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S7817C6D0Ev,_ZThn56_N7S7817C6D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C68S7817C13__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C13__8S7817C12[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C13__8S7817C12[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C13__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C13__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev)();
extern void ABISELECT(_ZThn104_N8S7817C13D1Ev,_ZThn68_N8S7817C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev)();
extern void ABISELECT(_ZThn104_N8S7817C13D0Ev,_ZThn68_N8S7817C13D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C13__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C12[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C12[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__8S7817C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
static  VTT_ENTRY vtt_S7817C12[] = {
  {&(_ZTV8S7817C12[7]),  7,120},
  {&(_ZTV8S7817C12[37]),  37,120},
  {&(_ZTV8S7817C12[67]),  67,120},
  {&(_ZTV8S7817C12[58]),  58,120},
  {&(_ZTV8S7817C12[79]),  79,120},
  {&(_ZTV8S7817C12[95]),  95,120},
  {&(_ZTV8S7817C12[113]),  113,120},
  {&(_tg__ZTV8S7817C13__8S7817C12[6]),  6,22},
  {&(_tg__ZTV7S7817C68S7817C13__8S7817C12[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C68S7817C13__8S7817C12[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C68S7817C13__8S7817C12[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C68S7817C13__8S7817C12[10]),  10,17},
  {&(_tg__ZTV7S7817C8__8S7817C13__8S7817C12[5]),  5,8},
  {&(_tg__ZTV7S7817C6__8S7817C13__8S7817C12[5]),  5,9},
  {&(_tg__ZTV7S7817C3__8S7817C13__8S7817C12[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C13__8S7817C12[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C13__8S7817C12[10]),  10,17},
  {&(_tg__ZTV7S7817C3__8S7817C12[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__8S7817C12[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C12[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__8S7817C12[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__8S7817C12[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S7817C12[];
extern  VTBL_ENTRY _ZTV8S7817C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C12[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7817C13D0Ev,_ZThn68_N8S7817C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7817C13D1Ev,_ZThn68_N8S7817C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7817C6D0Ev,_ZThn56_N7S7817C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7817C6D1Ev,_ZThn56_N7S7817C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7817C12D0Ev,_ZThn76_N8S7817C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7817C12D1Ev,_ZThn76_N8S7817C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7817C12D0Ev,_ZThn8_N8S7817C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7817C12D1Ev,_ZThn8_N8S7817C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C12 = {  "S7817C12", // class name
  bases_S7817C12, 8,
  &(vtc_S7817C12[0]), // expected_vtbl_contents
  &(vtt_S7817C12[0]), // expected_vtt_contents
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI8S7817C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7817C12),120, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7817C12),22, //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  S7817C14  {
  ::S7817C7 s7817c14f0;
  __tsi64 s7817c14f1;
  virtual void  v58(); // _ZN8S7817C143v58Ev
  virtual void  v59(); // _ZN8S7817C143v59Ev
  virtual void  v60(); // _ZN8S7817C143v60Ev
  virtual void  v61(); // _ZN8S7817C143v61Ev
  virtual void  v62(); // _ZN8S7817C143v62Ev
  virtual void  v63(); // _ZN8S7817C143v63Ev
  ~S7817C14(); // tgen
  S7817C14(); // tgen
};
//SIG(-1 S7817C14) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} FL}


void  S7817C14 ::v58(){vfunc_called(this, "_ZN8S7817C143v58Ev");}
void  S7817C14 ::v59(){vfunc_called(this, "_ZN8S7817C143v59Ev");}
void  S7817C14 ::v60(){vfunc_called(this, "_ZN8S7817C143v60Ev");}
void  S7817C14 ::v61(){vfunc_called(this, "_ZN8S7817C143v61Ev");}
void  S7817C14 ::v62(){vfunc_called(this, "_ZN8S7817C143v62Ev");}
void  S7817C14 ::v63(){vfunc_called(this, "_ZN8S7817C143v63Ev");}
S7817C14 ::~S7817C14(){ note_dtor("S7817C14", this);} // tgen
S7817C14 ::S7817C14(){ note_ctor("S7817C14", this);} // tgen

static void Test_S7817C14()
{
  extern Class_Descriptor cd_S7817C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,30)];
    init_test(&cd_S7817C14, buf);
    S7817C14 *dp, &lv = *(dp=new (buf) S7817C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S7817C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C14)");
    check_field_offset(lv, s7817c14f0, ABISELECT(8,4), "S7817C14.s7817c14f0");
    check_field_offset(lv, s7817c14f1, ABISELECT(152,108), "S7817C14.s7817c14f1");
    test_class_info(&lv, &cd_S7817C14);
    dp->~S7817C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C14(Test_S7817C14, "S7817C14", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN8S7817C14C1Ev();
extern void _ZN8S7817C14D1Ev();
Name_Map name_map_S7817C14[] = {
  NSPAIR(_ZN8S7817C14C1Ev),
  NSPAIR(_ZN8S7817C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7817C14[];
extern void _ZN8S7817C143v58Ev();
extern void _ZN8S7817C143v59Ev();
extern void _ZN8S7817C143v60Ev();
extern void _ZN8S7817C143v61Ev();
extern void _ZN8S7817C143v62Ev();
extern void _ZN8S7817C143v63Ev();
static  VTBL_ENTRY vtc_S7817C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C14[0]),
  (VTBL_ENTRY)&_ZN8S7817C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v63Ev,
};
extern VTBL_ENTRY _ZTI8S7817C14[];
extern  VTBL_ENTRY _ZTV8S7817C14[];
Class_Descriptor cd_S7817C14 = {  "S7817C14", // class name
  0,0,//no base classes
  &(vtc_S7817C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI8S7817C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7817C14),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

union  S7817C15  {
  __tsi64 s7817c15f0[7];
  void *s7817c15f1;
  void *s7817c15f2;
  int s7817c15f3[4];
  void  mf7817c15(); // _ZN8S7817C159mf7817c15Ev
};
//SIG(1 S7817C15) U1{ m FL[7] Fp Fp Fi[4]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7817C10  : S7817C11 , S7817C12 , virtual S7817C14 , S7817C2 {
  ::S7817C15 s7817c10f0;
  int s7817c10f1;
  virtual  ~S7817C10(); // _ZN8S7817C10D2Ev
  virtual void  v64(); // _ZN8S7817C103v64Ev
  virtual void  v65(); // _ZN8S7817C103v65Ev
  virtual void  v66(); // _ZN8S7817C103v66Ev
  virtual void  v67(); // _ZN8S7817C103v67Ev
  virtual void  v68(); // _ZN8S7817C103v68Ev
  virtual void  v69(); // _ZN8S7817C103v69Ev
  virtual void  v70(); // _ZN8S7817C103v70Ev
  virtual void  v71(); // _ZN8S7817C103v71Ev
  S7817C10(); // tgen
};
//SIG(-1 S7817C10) C1{ BC2{ BC3{ v9 v10 v11 v12 v13 v14 v15 v16 FL} VBC4{ VBC3 v17 v18 v19 v20 v21 v22 FC3 Fi Fp} VBC5{ VBC4 vd v23 v24 v25 v26 v27 Fs[6] Fi Fs Fc[6]} VBC6{ VBC4 VBC5 vd v28 v29} VBC7{ v30 v31 v32 Fi} vd v33 v34 v35 v36 v37 v38 FC8{ VBC3 VBC4 BC5 VBC7 BC6 vd v53 v54 v55 v56} Fp} BC9{ VBC10{ VBC7 BC3 BC6 vd v39 v40 v41 v42 v43 v44 Fc[8]} BC7 v45 v46} VBC11{ v47 v48 v49 v50 v51 v52 FC8 FL} BC5 vd v1 v2 v3 v4 v5 v6 v7 v8 FU12{ m FL[7] Fp Fp Fi[4]} Fi}


 S7817C10 ::~S7817C10(){ note_dtor("S7817C10", this);}
void  S7817C10 ::v64(){vfunc_called(this, "_ZN8S7817C103v64Ev");}
void  S7817C10 ::v65(){vfunc_called(this, "_ZN8S7817C103v65Ev");}
void  S7817C10 ::v66(){vfunc_called(this, "_ZN8S7817C103v66Ev");}
void  S7817C10 ::v67(){vfunc_called(this, "_ZN8S7817C103v67Ev");}
void  S7817C10 ::v68(){vfunc_called(this, "_ZN8S7817C103v68Ev");}
void  S7817C10 ::v69(){vfunc_called(this, "_ZN8S7817C103v69Ev");}
void  S7817C10 ::v70(){vfunc_called(this, "_ZN8S7817C103v70Ev");}
void  S7817C10 ::v71(){vfunc_called(this, "_ZN8S7817C103v71Ev");}
S7817C10 ::S7817C10(){ note_ctor("S7817C10", this);} // tgen

static void Test_S7817C10()
{
  extern Class_Descriptor cd_S7817C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(74,109)];
    init_test(&cd_S7817C10, buf);
    S7817C10 *dp, &lv = *(dp=new (buf) S7817C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(584,432), "sizeof(S7817C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C10)");
    /*is_ambiguous_... S7817C11::S7817C4 */ AMB_check_base_class_offset(lv, (S7817C4*)(S7817C11*), 0, "S7817C10");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(320,240), "S7817C10");
    check_base_class_offset(lv, (S7817C3*)(S7817C11*), ABISELECT(280,216), "S7817C10");
    /*is_ambiguous_... S7817C10::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(280,216), "S7817C10");
    /*is_ambiguous_... S7817C10::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C6*), ABISELECT(280,216), "S7817C10");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*)(S7817C13*), ABISELECT(280,216), "S7817C10");
    /*is_ambiguous_... S7817C10::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(280,216), "S7817C10");
    check_base_class_offset(lv, (S7817C2*)(S7817C11*), ABISELECT(336,252), "S7817C10");
    /*is_ambiguous_... S7817C10::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C2*)(S7817C6*), ABISELECT(336,252), "S7817C10");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*)(S7817C13*), ABISELECT(336,252), "S7817C10");
    check_base_class_offset(lv, (S7817C6*)(S7817C11*), ABISELECT(368,280), "S7817C10");
    check_base_class_offset(lv, (S7817C8*)(S7817C11*), ABISELECT(376,284), "S7817C10");
    check_base_class_offset(lv, (S7817C8*)(S7817C13*), ABISELECT(376,284), "S7817C10");
    check_base_class_offset(lv, (S7817C11*), 0, "S7817C10");
    /*is_ambiguous_... S7817C13::S7817C4 */ AMB_check_base_class_offset(lv, (S7817C4*)(S7817C13*), ABISELECT(392,292), "S7817C10");
    check_base_class_offset(lv, (S7817C6*)(S7817C13*), ABISELECT(408,304), "S7817C10");
    check_base_class_offset(lv, (S7817C13*)(S7817C12*), ABISELECT(392,292), "S7817C10");
    /*is_ambiguous_... S7817C12::S7817C8 */ AMB_check_base_class_offset(lv, (S7817C8*)(S7817C12*), ABISELECT(168,120), "S7817C10");
    check_base_class_offset(lv, (S7817C12*), ABISELECT(168,120), "S7817C10");
    check_base_class_offset(lv, (S7817C14*), ABISELECT(424,316), "S7817C10");
    /*is_ambiguous_... S7817C10::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C2*), ABISELECT(184,128), "S7817C10");
    check_field_offset(lv, s7817c10f0, ABISELECT(216,156), "S7817C10.s7817c10f0");
    check_field_offset(lv, s7817c10f1, ABISELECT(272,212), "S7817C10.s7817c10f1");
    test_class_info(&lv, &cd_S7817C10);
    dp->~S7817C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C10(Test_S7817C10, "S7817C10", ABISELECT(584,432));

#else // __cplusplus

extern void _ZN8S7817C10C1Ev();
extern void _ZN8S7817C10D2Ev();
Name_Map name_map_S7817C10[] = {
  NSPAIR(_ZN8S7817C10C1Ev),
  NSPAIR(_ZN8S7817C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C11;
extern VTBL_ENTRY _ZTI8S7817C11[];
extern  VTBL_ENTRY _ZTV8S7817C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C11[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C13;
extern VTBL_ENTRY _ZTI8S7817C13[];
extern  VTBL_ENTRY _ZTV8S7817C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C13[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C12;
extern VTBL_ENTRY _ZTI8S7817C12[];
extern  VTBL_ENTRY _ZTV8S7817C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C12[];
extern Class_Descriptor cd_S7817C14;
extern VTBL_ENTRY _ZTI8S7817C14[];
extern  VTBL_ENTRY _ZTV8S7817C14[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
static Base_Class bases_S7817C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7817C4,    ABISELECT(320,240), //bcp->offset
    73, //bcp->virtual_function_table_offset
    10, //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_S7817C3,    ABISELECT(280,216), //bcp->offset
    58, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7817C2,    ABISELECT(336,252), //bcp->offset
    91, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7817C6,    ABISELECT(368,280), //bcp->offset
    108, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7817C8,    ABISELECT(376,284), //bcp->offset
    120, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7817C11,    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_S7817C4,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7817C6,    ABISELECT(408,304), //bcp->offset
    167, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7817C13,    ABISELECT(392,292), //bcp->offset
    128, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7817C8,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7817C12,    ABISELECT(168,120), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7817C14,    ABISELECT(424,316), //bcp->offset
    176, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C2,    ABISELECT(184,128), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7817C10[];
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C10D1Ev();
extern void _ZN8S7817C10D0Ev();
extern void _ZN8S7817C113v44Ev();
extern void _ZN8S7817C113v45Ev();
extern void _ZN8S7817C113v46Ev();
extern void _ZN8S7817C113v47Ev();
extern void _ZN8S7817C113v48Ev();
extern void _ZN8S7817C113v49Ev();
extern void _ZN8S7817C103v64Ev();
extern void _ZN8S7817C103v65Ev();
extern void _ZN8S7817C103v66Ev();
extern void _ZN8S7817C103v67Ev();
extern void _ZN8S7817C103v68Ev();
extern void _ZN8S7817C103v69Ev();
extern void _ZN8S7817C103v70Ev();
extern void _ZN8S7817C103v71Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN8S7817C123v56Ev();
extern void _ZN8S7817C123v57Ev();
extern void ABISELECT(_ZThn168_N8S7817C10D1Ev,_ZThn120_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn168_N8S7817C10D0Ev,_ZThn120_N8S7817C10D0Ev)();
extern void ABISELECT(_ZThn184_N8S7817C10D1Ev,_ZThn128_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn184_N8S7817C10D0Ev,_ZThn128_N8S7817C10D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7817C10D1Ev,_ZTv0_n20_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn336_N8S7817C10D1Ev,_ZThn252_N8S7817C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C10D0Ev,_ZTv0_n20_N8S7817C10D0Ev)();
extern void ABISELECT(_ZThn336_N8S7817C10D0Ev,_ZThn252_N8S7817C10D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void ABISELECT(_ZTv0_n48_N8S7817C10D1Ev,_ZTv0_n24_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn368_N8S7817C10D1Ev,_ZThn280_N8S7817C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7817C10D0Ev,_ZTv0_n24_N8S7817C10D0Ev)();
extern void ABISELECT(_ZThn368_N8S7817C10D0Ev,_ZThn280_N8S7817C10D0Ev)() __attribute__((weak));
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7817C10D1Ev,_ZTv0_n60_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn392_N8S7817C10D1Ev,_ZThn292_N8S7817C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7817C10D0Ev,_ZTv0_n60_N8S7817C10D0Ev)();
extern void ABISELECT(_ZThn392_N8S7817C10D0Ev,_ZThn292_N8S7817C10D0Ev)() __attribute__((weak));
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
extern void ABISELECT(_ZTvn16_n120_N8S7817C10D1Ev,_ZTvn12_n60_N8S7817C10D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7817C10D0Ev,_ZTvn12_n60_N8S7817C10D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN8S7817C143v58Ev();
extern void _ZN8S7817C143v59Ev();
extern void _ZN8S7817C143v60Ev();
extern void _ZN8S7817C143v61Ev();
extern void _ZN8S7817C143v62Ev();
extern void _ZN8S7817C143v63Ev();
static  VTBL_ENTRY vtc_S7817C10[] = {
  ABISELECT(424,316),
  ABISELECT(392,292),
  ABISELECT(376,284),
  ABISELECT(368,280),
  ABISELECT(336,252),
  ABISELECT(320,240),
  ABISELECT(280,216),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v49Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v64Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v65Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v66Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v67Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v68Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v69Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v70Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v71Ev,
  ABISELECT(168,132),
  ABISELECT(152,120),
  ABISELECT(112,96),
  ABISELECT(208,164),
  ABISELECT(224,172),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v57Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7817C10D1Ev,_ZThn120_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7817C10D0Ev,_ZThn120_N8S7817C10D0Ev),
  ABISELECT(136,112),
  ABISELECT(96,88),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7817C10D1Ev,_ZThn128_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7817C10D0Ev,_ZThn128_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-280,-216),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-240),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-252),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-336,-252),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C10D1Ev,_ZTv0_n20_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C10D0Ev,_ZTv0_n20_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  0,
  0,
  ABISELECT(-368,-280),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-368,-280),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C10D1Ev,_ZTv0_n24_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C10D0Ev,_ZTv0_n24_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-376,-284),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-292),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-72,-52),
  ABISELECT(-112,-76),
  ABISELECT(-16,-8),
  ABISELECT(-392,-292),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C10D1Ev,_ZTv0_n60_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C10D0Ev,_ZTv0_n60_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  ABISELECT(-408,-304),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C10D1Ev,_ZTvn12_n60_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C10D0Ev,_ZTvn12_n60_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-316),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN8S7817C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v63Ev,
};
extern VTBL_ENTRY _ZTV8S7817C10[];
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C11D1Ev();
extern void _ZN8S7817C11D0Ev();
extern void _ZN8S7817C113v44Ev();
extern void _ZN8S7817C113v45Ev();
extern void _ZN8S7817C113v46Ev();
extern void _ZN8S7817C113v47Ev();
extern void _ZN8S7817C113v48Ev();
extern void _ZN8S7817C113v49Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C11__8S7817C10[] = {
  ABISELECT(376,284),
  ABISELECT(368,280),
  ABISELECT(336,252),
  ABISELECT(320,240),
  ABISELECT(280,216),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v49Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C11__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-280,-216),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C11__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-240),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev)();
extern void ABISELECT(_ZThn336_N8S7817C11D1Ev,_ZThn252_N8S7817C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev)();
extern void ABISELECT(_ZThn336_N8S7817C11D0Ev,_ZThn252_N8S7817C11D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C11__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-252),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-336,-252),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev)();
extern void ABISELECT(_ZThn368_N8S7817C11D1Ev,_ZThn280_N8S7817C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev)();
extern void ABISELECT(_ZThn368_N8S7817C11D0Ev,_ZThn280_N8S7817C11D0Ev)() __attribute__((weak));
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C11__8S7817C10[] = {
  0,
  0,
  ABISELECT(-368,-280),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-368,-280),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C11__8S7817C10[] = {
  0,
  0,
  0,
  ABISELECT(-376,-284),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN8S7817C123v56Ev();
extern void _ZN8S7817C123v57Ev();
extern void _ZN8S7817C12D1Ev();
extern void _ZN8S7817C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C12__8S7817C10[] = {
  ABISELECT(168,132),
  ABISELECT(152,120),
  ABISELECT(112,96),
  ABISELECT(208,164),
  ABISELECT(224,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v57Ev,
  (VTBL_ENTRY)&_ZN8S7817C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C12D0Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev)();
extern void ABISELECT(_ZThn224_N8S7817C12D1Ev,_ZThn172_N8S7817C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev)();
extern void ABISELECT(_ZThn224_N8S7817C12D0Ev,_ZThn172_N8S7817C12D0Ev)() __attribute__((weak));
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C13__8S7817C12__8S7817C10[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-172),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-72,-52),
  ABISELECT(-112,-76),
  ABISELECT(-16,-8),
  ABISELECT(-224,-172),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C12__8S7817C10[] = {
  0,
  0,
  0,
  ABISELECT(-208,-164),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S7817C12D1Ev,_ZTvn12_n60_N8S7817C12D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7817C12D0Ev,_ZTvn12_n60_N8S7817C12D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C68S7817C13__8S7817C12__8S7817C10[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  ABISELECT(-240,-184),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C12D1Ev,_ZTvn12_n60_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C12D0Ev,_ZTvn12_n60_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C12__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-112,-96),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C12__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-120),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev)();
extern void ABISELECT(_ZThn168_N8S7817C12D1Ev,_ZThn132_N8S7817C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev)();
extern void ABISELECT(_ZThn168_N8S7817C12D0Ev,_ZThn132_N8S7817C12D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C12__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-132),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-168,-132),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A__8S7817C10[] = {
  ABISELECT(136,112),
  ABISELECT(96,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__A__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-96,-88),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__A__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-112),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C10[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C10[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C6__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C6__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C6__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C13D1Ev();
extern void _ZN8S7817C13D0Ev();
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C13__8S7817C10[] = {
  ABISELECT(-56,-40),
  ABISELECT(-72,-52),
  ABISELECT(-112,-76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C68S7817C13__A1__8S7817C10[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C68S7817C13__A1__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(128,88),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C68S7817C13__A1__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C68S7817C13__A1__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,52),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C13__8S7817C10[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C13__8S7817C10[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C13__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(112,76),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C13__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C13__8S7817C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
static  VTT_ENTRY vtt_S7817C10[] = {
  {&(_ZTV8S7817C10[9]),  9,190},
  {&(_tg__ZTV8S7817C11__8S7817C10[7]),  7,23},
  {&(_tg__ZTV7S7817C3__8S7817C11__8S7817C10[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C11__8S7817C10[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C11__8S7817C10[10]),  10,17},
  {&(_tg__ZTV7S7817C6__8S7817C11__8S7817C10[8]),  8,12},
  {&(_tg__ZTV7S7817C8__8S7817C11__8S7817C10[5]),  5,8},
  {&(_tg__ZTV8S7817C12__8S7817C10[7]),  7,14},
  {&(_tg__ZTV8S7817C13__8S7817C12__8S7817C10[23]),  23,39},
  {&(_tg__ZTV7S7817C8__8S7817C12__8S7817C10[5]),  5,8},
  {&(_tg__ZTV7S7817C68S7817C13__8S7817C12__8S7817C10[5]),  5,9},
  {&(_tg__ZTV7S7817C3__8S7817C12__8S7817C10[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C12__8S7817C10[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C12__8S7817C10[10]),  10,17},
  {&(_tg__ZTV7S7817C2__A__8S7817C10[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__A__8S7817C10[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__A__8S7817C10[10]),  10,18},
  {&(_ZTV8S7817C10[67]),  67,190},
  {&(_ZTV8S7817C10[83]),  83,190},
  {&(_ZTV8S7817C10[101]),  101,190},
  {&(_ZTV8S7817C10[116]),  116,190},
  {&(_ZTV8S7817C10[125]),  125,190},
  {&(_ZTV8S7817C10[40]),  40,190},
  {&(_ZTV8S7817C10[151]),  151,190},
  {&(_ZTV8S7817C10[172]),  172,190},
  {&(_ZTV8S7817C10[184]),  184,190},
  {&(_ZTV8S7817C10[51]),  51,190},
  {&(_tg__ZTV7S7817C3__8S7817C10[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__8S7817C10[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C10[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__8S7817C10[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__8S7817C10[10]),  10,18},
  {&(_tg__ZTV7S7817C6__8S7817C10[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C6__8S7817C10[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C6__8S7817C10[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C6__8S7817C10[10]),  10,17},
  {&(_tg__ZTV8S7817C13__8S7817C10[6]),  6,22},
  {&(_tg__ZTV7S7817C68S7817C13__A1__8S7817C10[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C68S7817C13__A1__8S7817C10[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C68S7817C13__A1__8S7817C10[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C68S7817C13__A1__8S7817C10[10]),  10,17},
  {&(_tg__ZTV7S7817C8__8S7817C13__8S7817C10[5]),  5,8},
  {&(_tg__ZTV7S7817C6__8S7817C13__8S7817C10[5]),  5,9},
  {&(_tg__ZTV7S7817C3__8S7817C13__8S7817C10[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C13__8S7817C10[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C13__8S7817C10[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S7817C10[];
extern  VTBL_ENTRY _ZTV8S7817C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C10[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7817C12D0Ev,_ZThn132_N8S7817C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7817C12D1Ev,_ZThn132_N8S7817C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7817C12D0Ev,_ZThn172_N8S7817C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7817C12D1Ev,_ZThn172_N8S7817C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7817C11D0Ev,_ZThn280_N8S7817C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7817C11D1Ev,_ZThn280_N8S7817C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7817C11D0Ev,_ZThn252_N8S7817C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7817C11D1Ev,_ZThn252_N8S7817C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C10D0Ev,_ZTv0_n60_N8S7817C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S7817C10D0Ev,_ZThn292_N8S7817C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C10D1Ev,_ZTv0_n60_N8S7817C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S7817C10D1Ev,_ZThn292_N8S7817C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7817C10D0Ev,_ZTv0_n24_N8S7817C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7817C10D0Ev,_ZThn280_N8S7817C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7817C10D1Ev,_ZTv0_n24_N8S7817C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7817C10D1Ev,_ZThn280_N8S7817C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C10D0Ev,_ZTv0_n20_N8S7817C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7817C10D0Ev,_ZThn252_N8S7817C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C10D1Ev,_ZTv0_n20_N8S7817C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7817C10D1Ev,_ZThn252_N8S7817C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C10 = {  "S7817C10", // class name
  bases_S7817C10, 14,
  &(vtc_S7817C10[0]), // expected_vtbl_contents
  &(vtt_S7817C10[0]), // expected_vtt_contents
  ABISELECT(584,432), // object size
  NSPAIRA(_ZTI8S7817C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7817C10),190, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7817C10),46, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7817C1  : S7817C2 , S7817C5 , virtual S7817C9 , S7817C10 {
  int s7817c1f0;
  __tsi64 s7817c1f1;
  virtual  ~S7817C1(); // _ZN7S7817C1D2Ev
  virtual void  v1(); // _ZN7S7817C12v1Ev
  virtual void  v2(); // _ZN7S7817C12v2Ev
  virtual void  v3(); // _ZN7S7817C12v3Ev
  virtual void  v4(); // _ZN7S7817C12v4Ev
  virtual void  v5(); // _ZN7S7817C12v5Ev
  virtual void  v6(); // _ZN7S7817C12v6Ev
  virtual void  v7(); // _ZN7S7817C12v7Ev
  S7817C1(); // tgen
};
//SIG(1 S7817C1) C1{ BC2{ VBC3{ VBC4{ v8 v9 v10 v11 v12 v13 v14 v15 FL} v16 v17 v18 v19 v20 v21 FC4 Fi Fp} vd v22 v23 v24 v25 v26 Fs[6] Fi Fs Fc[6]} BC5{ VBC4 VBC3 VBC6{ VBC3 VBC2 vd v27 v28} VBC7{ VBC4 VBC3 BC2 VBC8{ v29 v30 v31 Fi} BC6 vd v32 v33 v34 v35} vd v36 v37 v38 v39 v40 v41 v42 Fc} VBC9{ v43 Fp} BC10{ BC11{ BC4 VBC3 VBC2 VBC6 VBC8 vd v44 v45 v46 v47 v48 v49 FC7 Fp} BC12{ VBC13{ VBC8 BC4 BC6 vd v50 v51 v52 v53 v54 v55 Fc[8]} BC8 v56 v57} VBC14{ v58 v59 v60 v61 v62 v63 FC7 FL} BC2 vd v64 v65 v66 v67 v68 v69 v70 v71 FU15{ m FL[7] Fp Fp Fi[4]} Fi} vd v1 v2 v3 v4 v5 v6 v7 Fi FL}


 S7817C1 ::~S7817C1(){ note_dtor("S7817C1", this);}
void  S7817C1 ::v1(){vfunc_called(this, "_ZN7S7817C12v1Ev");}
void  S7817C1 ::v2(){vfunc_called(this, "_ZN7S7817C12v2Ev");}
void  S7817C1 ::v3(){vfunc_called(this, "_ZN7S7817C12v3Ev");}
void  S7817C1 ::v4(){vfunc_called(this, "_ZN7S7817C12v4Ev");}
void  S7817C1 ::v5(){vfunc_called(this, "_ZN7S7817C12v5Ev");}
void  S7817C1 ::v6(){vfunc_called(this, "_ZN7S7817C12v6Ev");}
void  S7817C1 ::v7(){vfunc_called(this, "_ZN7S7817C12v7Ev");}
S7817C1 ::S7817C1(){ note_ctor("S7817C1", this);} // tgen

static void Test_S7817C1()
{
  extern Class_Descriptor cd_S7817C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(87,130)];
    init_test(&cd_S7817C1, buf);
    S7817C1 *dp, &lv = *(dp=new (buf) S7817C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,516), "sizeof(S7817C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7817C1)");
    check_base_class_offset(lv, (S7817C4*)(S7817C3*), ABISELECT(376,288), "S7817C1");
    check_base_class_offset(lv, (S7817C4*)(S7817C5*), ABISELECT(376,288), "S7817C1");
    check_base_class_offset(lv, (S7817C4*)(S7817C7*), ABISELECT(376,288), "S7817C1");
    /*is_ambiguous_... S7817C1::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(336,264), "S7817C1");
    check_base_class_offset(lv, (S7817C3*)(S7817C5*), ABISELECT(336,264), "S7817C1");
    /*is_ambiguous_... S7817C1::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C6*), ABISELECT(336,264), "S7817C1");
    /*is_ambiguous_... S7817C1::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*), ABISELECT(336,264), "S7817C1");
    check_base_class_offset(lv, (S7817C3*)(S7817C7*), ABISELECT(336,264), "S7817C1");
    /*is_ambiguous_... S7817C7::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*)(S7817C7*), ABISELECT(336,264), "S7817C1");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*)(S7817C7*), ABISELECT(336,264), "S7817C1");
    check_base_class_offset(lv, (S7817C3*)(S7817C11*)(S7817C10*), ABISELECT(336,264), "S7817C1");
    check_base_class_offset(lv, (S7817C3*)(S7817C6*)(S7817C13*), ABISELECT(336,264), "S7817C1");
    /*is_ambiguous_... S7817C10::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C3*)(S7817C2*)(S7817C10*), ABISELECT(336,264), "S7817C1");
    /*is_ambiguous_... S7817C1::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C2*), 0, "S7817C1");
    /*is_ambiguous_... S7817C1::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C2*)(S7817C6*), ABISELECT(392,300), "S7817C1");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*)(S7817C7*), ABISELECT(392,300), "S7817C1");
    check_base_class_offset(lv, (S7817C2*)(S7817C11*)(S7817C10*), ABISELECT(392,300), "S7817C1");
    check_base_class_offset(lv, (S7817C2*)(S7817C6*)(S7817C13*), ABISELECT(392,300), "S7817C1");
    /*is_ambiguous_... S7817C5::S7817C6 */ AMB_check_base_class_offset(lv, (S7817C6*)(S7817C5*), ABISELECT(32,28), "S7817C1");
    check_base_class_offset(lv, (S7817C6*)(S7817C11*)(S7817C10*), ABISELECT(32,28), "S7817C1");
    /*is_ambiguous_... S7817C7::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C2*)(S7817C7*), ABISELECT(424,328), "S7817C1");
    check_base_class_offset(lv, (S7817C8*)(S7817C7*), ABISELECT(464,360), "S7817C1");
    check_base_class_offset(lv, (S7817C8*)(S7817C11*)(S7817C10*), ABISELECT(464,360), "S7817C1");
    check_base_class_offset(lv, (S7817C8*)(S7817C13*), ABISELECT(464,360), "S7817C1");
    check_base_class_offset(lv, (S7817C6*)(S7817C7*), ABISELECT(456,356), "S7817C1");
    check_base_class_offset(lv, (S7817C7*)(S7817C5*), ABISELECT(424,328), "S7817C1");
    check_base_class_offset(lv, (S7817C5*), ABISELECT(32,28), "S7817C1");
    check_base_class_offset(lv, (S7817C9*), ABISELECT(480,368), "S7817C1");
    /*is_ambiguous_... S7817C11::S7817C4 */ AMB_check_base_class_offset(lv, (S7817C4*)(S7817C11*)(S7817C10*), ABISELECT(48,36), "S7817C1");
    check_base_class_offset(lv, (S7817C11*)(S7817C10*), ABISELECT(48,36), "S7817C1");
    /*is_ambiguous_... S7817C13::S7817C4 */ AMB_check_base_class_offset(lv, (S7817C4*)(S7817C13*), ABISELECT(496,376), "S7817C1");
    check_base_class_offset(lv, (S7817C6*)(S7817C13*), ABISELECT(512,388), "S7817C1");
    check_base_class_offset(lv, (S7817C13*)(S7817C12*)(S7817C10*), ABISELECT(496,376), "S7817C1");
    /*is_ambiguous_... S7817C12::S7817C8 */ AMB_check_base_class_offset(lv, (S7817C8*)(S7817C12*)(S7817C10*), ABISELECT(216,156), "S7817C1");
    check_base_class_offset(lv, (S7817C12*)(S7817C10*), ABISELECT(216,156), "S7817C1");
    check_base_class_offset(lv, (S7817C14*)(S7817C10*), ABISELECT(528,400), "S7817C1");
    /*is_ambiguous_... S7817C10::S7817C2 */ AMB_check_base_class_offset(lv, (S7817C2*)(S7817C10*), ABISELECT(232,164), "S7817C1");
    check_base_class_offset(lv, (S7817C10*), ABISELECT(48,36), "S7817C1");
    check_field_offset(lv, s7817c1f0, ABISELECT(324,252), "S7817C1.s7817c1f0");
    check_field_offset(lv, s7817c1f1, ABISELECT(328,256), "S7817C1.s7817c1f1");
    test_class_info(&lv, &cd_S7817C1);
    dp->~S7817C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7817C1(Test_S7817C1, "S7817C1", ABISELECT(688,516));

#else // __cplusplus

extern void _ZN7S7817C1C1Ev();
extern void _ZN7S7817C1D2Ev();
Name_Map name_map_S7817C1[] = {
  NSPAIR(_ZN7S7817C1C1Ev),
  NSPAIR(_ZN7S7817C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C3;
extern VTBL_ENTRY _ZTI7S7817C3[];
extern  VTBL_ENTRY _ZTV7S7817C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C3[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C7;
extern VTBL_ENTRY _ZTI7S7817C7[];
extern  VTBL_ENTRY _ZTV7S7817C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C7[];
extern Class_Descriptor cd_S7817C5;
extern VTBL_ENTRY _ZTI7S7817C5[];
extern  VTBL_ENTRY _ZTV7S7817C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C5[];
extern Class_Descriptor cd_S7817C9;
extern VTBL_ENTRY _ZTI7S7817C9[];
extern  VTBL_ENTRY _ZTV7S7817C9[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C11;
extern VTBL_ENTRY _ZTI8S7817C11[];
extern  VTBL_ENTRY _ZTV8S7817C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C11[];
extern Class_Descriptor cd_S7817C4;
extern VTBL_ENTRY _ZTI7S7817C4[];
extern  VTBL_ENTRY _ZTV7S7817C4[];
extern Class_Descriptor cd_S7817C6;
extern VTBL_ENTRY _ZTI7S7817C6[];
extern  VTBL_ENTRY _ZTV7S7817C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C6[];
extern Class_Descriptor cd_S7817C13;
extern VTBL_ENTRY _ZTI8S7817C13[];
extern  VTBL_ENTRY _ZTV8S7817C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C13[];
extern Class_Descriptor cd_S7817C8;
extern VTBL_ENTRY _ZTI7S7817C8[];
extern  VTBL_ENTRY _ZTV7S7817C8[];
extern Class_Descriptor cd_S7817C12;
extern VTBL_ENTRY _ZTI8S7817C12[];
extern  VTBL_ENTRY _ZTV8S7817C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C12[];
extern Class_Descriptor cd_S7817C14;
extern VTBL_ENTRY _ZTI8S7817C14[];
extern  VTBL_ENTRY _ZTV8S7817C14[];
extern Class_Descriptor cd_S7817C2;
extern VTBL_ENTRY _ZTI7S7817C2[];
extern  VTBL_ENTRY _ZTV7S7817C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C2[];
extern Class_Descriptor cd_S7817C10;
extern VTBL_ENTRY _ZTI8S7817C10[];
extern  VTBL_ENTRY _ZTV8S7817C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7817C10[];
static Base_Class bases_S7817C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7817C4,    ABISELECT(376,288), //bcp->offset
    120, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7817C3,    ABISELECT(336,264), //bcp->offset
    105, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7817C2,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7817C2,    ABISELECT(392,300), //bcp->offset
    138, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7817C6,    ABISELECT(32,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7817C2,    ABISELECT(424,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7817C8,    ABISELECT(464,360), //bcp->offset
    193, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7817C6,    ABISELECT(456,356), //bcp->offset
    184, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7817C7,    ABISELECT(424,328), //bcp->offset
    155, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7817C5,    ABISELECT(32,28), //bcp->offset
    25, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7817C9,    ABISELECT(480,368), //bcp->offset
    201, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7817C4,    ABISELECT(48,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
    16, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7817C11,    ABISELECT(48,36), //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
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7817C4,    ABISELECT(496,376), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S7817C6,    ABISELECT(512,388), //bcp->offset
    244, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7817C13,    ABISELECT(496,376), //bcp->offset
    205, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7817C8,    ABISELECT(216,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7817C12,    ABISELECT(216,156), //bcp->offset
    80, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7817C14,    ABISELECT(528,400), //bcp->offset
    253, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7817C2,    ABISELECT(232,164), //bcp->offset
    94, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7817C10,    ABISELECT(48,36), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7817C1[];
extern void _ZN7S7817C1D1Ev();
extern void _ZN7S7817C1D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C12v1Ev();
extern void _ZN7S7817C12v2Ev();
extern void _ZN7S7817C12v3Ev();
extern void _ZN7S7817C12v4Ev();
extern void _ZN7S7817C12v5Ev();
extern void _ZN7S7817C12v6Ev();
extern void _ZN7S7817C12v7Ev();
extern void ABISELECT(_ZTv0_n48_N7S7817C1D1Ev,_ZTv0_n24_N7S7817C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7817C1D1Ev,_ZThn28_N7S7817C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7817C1D0Ev,_ZTv0_n24_N7S7817C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7817C1D0Ev,_ZThn28_N7S7817C1D0Ev)() __attribute__((weak));
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C53v36Ev();
extern void _ZN7S7817C53v37Ev();
extern void _ZN7S7817C53v38Ev();
extern void _ZN7S7817C53v39Ev();
extern void _ZN7S7817C53v40Ev();
extern void _ZN7S7817C53v41Ev();
extern void _ZN7S7817C53v42Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZThn48_N7S7817C1D1Ev,_ZThn36_N7S7817C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7817C1D0Ev,_ZThn36_N7S7817C1D0Ev)();
extern void _ZN8S7817C113v44Ev();
extern void _ZN8S7817C113v45Ev();
extern void _ZN8S7817C113v46Ev();
extern void _ZN8S7817C113v47Ev();
extern void _ZN8S7817C113v48Ev();
extern void _ZN8S7817C113v49Ev();
extern void _ZN8S7817C103v64Ev();
extern void _ZN8S7817C103v65Ev();
extern void _ZN8S7817C103v66Ev();
extern void _ZN8S7817C103v67Ev();
extern void _ZN8S7817C103v68Ev();
extern void _ZN8S7817C103v69Ev();
extern void _ZN8S7817C103v70Ev();
extern void _ZN8S7817C103v71Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN8S7817C123v56Ev();
extern void _ZN8S7817C123v57Ev();
extern void ABISELECT(_ZThn216_N7S7817C1D1Ev,_ZThn156_N7S7817C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S7817C1D0Ev,_ZThn156_N7S7817C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7817C1D1Ev,_ZThn164_N7S7817C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7817C1D0Ev,_ZThn164_N7S7817C1D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N7S7817C1D1Ev,_ZTv0_n20_N7S7817C1D1Ev)();
extern void ABISELECT(_ZThn392_N7S7817C1D1Ev,_ZThn300_N7S7817C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C1D0Ev,_ZTv0_n20_N7S7817C1D0Ev)();
extern void ABISELECT(_ZThn392_N7S7817C1D0Ev,_ZThn300_N7S7817C1D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S7817C1D1Ev,_ZTv0_n28_N7S7817C1D1Ev)();
extern void ABISELECT(_ZThn424_N7S7817C1D1Ev,_ZThn328_N7S7817C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7817C1D0Ev,_ZTv0_n28_N7S7817C1D0Ev)();
extern void ABISELECT(_ZThn424_N7S7817C1D0Ev,_ZThn328_N7S7817C1D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C73v32Ev();
extern void _ZN7S7817C73v33Ev();
extern void _ZN7S7817C73v34Ev();
extern void _ZN7S7817C73v35Ev();
extern void ABISELECT(_ZTvn32_n56_N7S7817C1D1Ev,_ZTvn28_n28_N7S7817C1D1Ev)();
extern void ABISELECT(_ZTvn32_n56_N7S7817C1D0Ev,_ZTvn28_n28_N7S7817C1D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN7S7817C93v43Ev();
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N7S7817C1D1Ev,_ZTv0_n60_N7S7817C1D1Ev)();
extern void ABISELECT(_ZThn496_N7S7817C1D1Ev,_ZThn376_N7S7817C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7817C1D0Ev,_ZTv0_n60_N7S7817C1D0Ev)();
extern void ABISELECT(_ZThn496_N7S7817C1D0Ev,_ZThn376_N7S7817C1D0Ev)() __attribute__((weak));
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
extern void ABISELECT(_ZTvn16_n120_N7S7817C1D1Ev,_ZTvn12_n60_N7S7817C1D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N7S7817C1D0Ev,_ZTvn12_n60_N7S7817C1D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN8S7817C143v58Ev();
extern void _ZN8S7817C143v59Ev();
extern void _ZN8S7817C143v60Ev();
extern void _ZN8S7817C143v61Ev();
extern void _ZN8S7817C143v62Ev();
extern void _ZN8S7817C143v63Ev();
static  VTBL_ENTRY vtc_S7817C1[] = {
  ABISELECT(528,400),
  ABISELECT(496,376),
  ABISELECT(480,368),
  ABISELECT(464,360),
  ABISELECT(424,328),
  ABISELECT(392,300),
  ABISELECT(32,28),
  ABISELECT(376,288),
  ABISELECT(336,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7817C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7817C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7817C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7817C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7817C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7817C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7817C12v7Ev,
  ABISELECT(432,332),
  ABISELECT(392,300),
  0,
  0,
  0,
  ABISELECT(-32,-28),
  ABISELECT(360,272),
  ABISELECT(344,260),
  ABISELECT(304,236),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7817C1D1Ev,_ZTv0_n24_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7817C1D0Ev,_ZTv0_n24_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v36Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v37Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v38Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v39Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v40Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v41Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v42Ev,
  ABISELECT(480,364),
  ABISELECT(448,340),
  ABISELECT(416,324),
  ABISELECT(-16,-8),
  ABISELECT(344,264),
  ABISELECT(328,252),
  ABISELECT(288,228),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7817C1D1Ev,_ZThn36_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7817C1D0Ev,_ZThn36_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7817C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v49Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v64Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v65Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v66Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v67Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v68Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v69Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v70Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v71Ev,
  ABISELECT(176,144),
  ABISELECT(160,132),
  ABISELECT(120,108),
  ABISELECT(248,204),
  ABISELECT(280,220),
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v57Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S7817C1D1Ev,_ZThn156_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S7817C1D0Ev,_ZThn156_N7S7817C1D0Ev),
  ABISELECT(144,124),
  ABISELECT(104,100),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7817C1D1Ev,_ZThn164_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7817C1D0Ev,_ZThn164_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-336,-264),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-288),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-300),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-392,-300),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C1D1Ev,_ZTv0_n20_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C1D0Ev,_ZTv0_n20_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  ABISELECT(32,28),
  ABISELECT(32,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-328),
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-424,-328),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7817C1D1Ev,_ZTv0_n28_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7817C1D0Ev,_ZTv0_n28_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v35Ev,
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  ABISELECT(-456,-356),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7817C1D1Ev,_ZTvn28_n28_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7817C1D0Ev,_ZTvn28_n28_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-464,-360),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  0,
  ABISELECT(-480,-368),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C93v43Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-376),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  ABISELECT(-496,-376),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7817C1D1Ev,_ZTv0_n60_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7817C1D0Ev,_ZTv0_n60_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-512,-388),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N7S7817C1D1Ev,_ZTvn12_n60_N7S7817C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N7S7817C1D0Ev,_ZTvn12_n60_N7S7817C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-400),
  (VTBL_ENTRY)&(_ZTI7S7817C1[0]),
  (VTBL_ENTRY)&_ZN8S7817C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v63Ev,
};
extern VTBL_ENTRY _ZTV7S7817C1[];
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A__7S7817C1[] = {
  ABISELECT(376,288),
  ABISELECT(336,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__A__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-336,-264),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__A__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-288),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7817C5D1Ev,_ZTv0_n24_N7S7817C5D1Ev)();
extern void _ZN7S7817C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7817C5D0Ev,_ZTv0_n24_N7S7817C5D0Ev)();
extern void _ZN7S7817C5D0Ev() __attribute__((weak));
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
extern void _ZN7S7817C53v36Ev();
extern void _ZN7S7817C53v37Ev();
extern void _ZN7S7817C53v38Ev();
extern void _ZN7S7817C53v39Ev();
extern void _ZN7S7817C53v40Ev();
extern void _ZN7S7817C53v41Ev();
extern void _ZN7S7817C53v42Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C5__7S7817C1[] = {
  ABISELECT(432,332),
  ABISELECT(392,300),
  0,
  0,
  0,
  0,
  ABISELECT(360,272),
  ABISELECT(344,260),
  ABISELECT(304,236),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7817C5D1Ev,_ZTv0_n24_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7817C5D0Ev,_ZTv0_n24_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v36Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v37Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v38Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v39Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v40Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v41Ev,
  (VTBL_ENTRY)&_ZN7S7817C53v42Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C5__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-260),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C5__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-304,-236),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C5D1Ev,_ZTv0_n20_N7S7817C5D1Ev)();
extern void ABISELECT(_ZThn360_N7S7817C5D1Ev,_ZThn272_N7S7817C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C5D0Ev,_ZTv0_n20_N7S7817C5D0Ev)();
extern void ABISELECT(_ZThn360_N7S7817C5D0Ev,_ZThn272_N7S7817C5D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C5__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-272),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-360,-272),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C5D1Ev,_ZTv0_n20_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C5D0Ev,_ZTv0_n20_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7817C5D1Ev,_ZTv0_n28_N7S7817C5D1Ev)();
extern void ABISELECT(_ZThn392_N7S7817C5D1Ev,_ZThn300_N7S7817C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7817C5D0Ev,_ZTv0_n28_N7S7817C5D0Ev)();
extern void ABISELECT(_ZThn392_N7S7817C5D0Ev,_ZThn300_N7S7817C5D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C73v32Ev();
extern void _ZN7S7817C73v33Ev();
extern void _ZN7S7817C73v34Ev();
extern void _ZN7S7817C73v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C7__7S7817C5__7S7817C1[] = {
  ABISELECT(32,28),
  ABISELECT(32,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-300),
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-392,-300),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7817C5D1Ev,_ZTv0_n28_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7817C5D0Ev,_ZTv0_n28_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v35Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__7S7817C5__7S7817C1[] = {
  0,
  0,
  0,
  ABISELECT(-432,-332),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZTvn32_n56_N7S7817C5D1Ev,_ZTvn28_n28_N7S7817C5D1Ev)();
extern void ABISELECT(_ZTvn32_n56_N7S7817C5D0Ev,_ZTvn28_n28_N7S7817C5D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C67S7817C7__A1__7S7817C5__7S7817C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  ABISELECT(-424,-328),
  (VTBL_ENTRY)&(_ZTI7S7817C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7817C5D1Ev,_ZTvn28_n28_N7S7817C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7817C5D0Ev,_ZTvn28_n28_N7S7817C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C10D1Ev();
extern void _ZN8S7817C10D0Ev();
extern void _ZN8S7817C113v44Ev();
extern void _ZN8S7817C113v45Ev();
extern void _ZN8S7817C113v46Ev();
extern void _ZN8S7817C113v47Ev();
extern void _ZN8S7817C113v48Ev();
extern void _ZN8S7817C113v49Ev();
extern void _ZN8S7817C103v64Ev();
extern void _ZN8S7817C103v65Ev();
extern void _ZN8S7817C103v66Ev();
extern void _ZN8S7817C103v67Ev();
extern void _ZN8S7817C103v68Ev();
extern void _ZN8S7817C103v69Ev();
extern void _ZN8S7817C103v70Ev();
extern void _ZN8S7817C103v71Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C10__7S7817C1[] = {
  ABISELECT(480,364),
  ABISELECT(448,340),
  ABISELECT(416,324),
  ABISELECT(-16,-8),
  ABISELECT(344,264),
  ABISELECT(328,252),
  ABISELECT(288,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v49Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v64Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v65Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v66Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v67Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v68Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v69Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v70Ev,
  (VTBL_ENTRY)&_ZN8S7817C103v71Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C11D1Ev();
extern void _ZN8S7817C11D0Ev();
extern void _ZN8S7817C113v44Ev();
extern void _ZN8S7817C113v45Ev();
extern void _ZN8S7817C113v46Ev();
extern void _ZN8S7817C113v47Ev();
extern void _ZN8S7817C113v48Ev();
extern void _ZN8S7817C113v49Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C118S7817C10__7S7817C1[] = {
  ABISELECT(416,324),
  ABISELECT(-16,-8),
  ABISELECT(344,264),
  ABISELECT(328,252),
  ABISELECT(288,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7817C113v49Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C118S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-288,-228),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C118S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-252),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev)();
extern void ABISELECT(_ZThn344_N8S7817C11D1Ev,_ZThn264_N8S7817C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev)();
extern void ABISELECT(_ZThn344_N8S7817C11D0Ev,_ZThn264_N8S7817C11D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C118S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-264),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-344,-264),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C118S7817C10__7S7817C1[] = {
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(360,272),
  ABISELECT(344,260),
  ABISELECT(304,236),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C11D1Ev,_ZTv0_n24_N8S7817C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C11D0Ev,_ZTv0_n24_N8S7817C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C118S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  ABISELECT(-416,-324),
  (VTBL_ENTRY)&(_ZTI8S7817C11[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN8S7817C123v56Ev();
extern void _ZN8S7817C123v57Ev();
extern void _ZN8S7817C12D1Ev();
extern void _ZN8S7817C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C128S7817C10__7S7817C1[] = {
  ABISELECT(176,144),
  ABISELECT(160,132),
  ABISELECT(120,108),
  ABISELECT(248,204),
  ABISELECT(280,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v57Ev,
  (VTBL_ENTRY)&_ZN8S7817C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C12D0Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev)();
extern void ABISELECT(_ZThn280_N8S7817C12D1Ev,_ZThn220_N8S7817C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev)();
extern void ABISELECT(_ZThn280_N8S7817C12D0Ev,_ZThn220_N8S7817C12D0Ev)() __attribute__((weak));
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C13__8S7817C128S7817C10__7S7817C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-220),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  ABISELECT(-280,-220),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C128S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  ABISELECT(-248,-204),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S7817C12D1Ev,_ZTvn12_n60_N8S7817C12D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7817C12D0Ev,_ZTvn12_n60_N8S7817C12D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C68S7817C13__8S7817C128S7817C10__7S7817C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-296,-232),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C12D1Ev,_ZTvn12_n60_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C12D0Ev,_ZTvn12_n60_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C128S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-120,-108),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C128S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-132),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7817C12D1Ev,_ZThn144_N8S7817C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7817C12D0Ev,_ZThn144_N8S7817C12D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C128S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-144),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-176,-144),
  (VTBL_ENTRY)&(_ZTI8S7817C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C28S7817C10__A3__7S7817C1[] = {
  ABISELECT(144,124),
  ABISELECT(104,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C28S7817C10__A3__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-104,-100),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C28S7817C10__A3__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-288,-228),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-252),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C10D1Ev,_ZTv0_n20_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn344_N8S7817C10D1Ev,_ZThn264_N8S7817C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7817C10D0Ev,_ZTv0_n20_N8S7817C10D0Ev)();
extern void ABISELECT(_ZThn344_N8S7817C10D0Ev,_ZThn264_N8S7817C10D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-264),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-344,-264),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C10D1Ev,_ZTv0_n20_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C10D0Ev,_ZTv0_n20_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7817C10D1Ev,_ZTv0_n24_N8S7817C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7817C10D0Ev,_ZTv0_n24_N8S7817C10D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C10__7S7817C1[] = {
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(360,272),
  ABISELECT(344,260),
  ABISELECT(304,236),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C10D1Ev,_ZTv0_n24_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7817C10D0Ev,_ZTv0_n24_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  ABISELECT(-416,-324),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
extern void _ZN8S7817C123v56Ev();
extern void _ZN8S7817C123v57Ev();
extern void ABISELECT(_ZThn168_N8S7817C10D1Ev,_ZThn120_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn168_N8S7817C10D0Ev,_ZThn120_N8S7817C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7817C12__8S7817C10__7S7817C1[] = {
  ABISELECT(176,144),
  ABISELECT(160,132),
  ABISELECT(120,108),
  ABISELECT(248,204),
  ABISELECT(280,220),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7817C123v57Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7817C10D1Ev,_ZThn120_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7817C10D0Ev,_ZThn120_N8S7817C10D0Ev),
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7817C10D1Ev,_ZTv0_n60_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn448_N8S7817C10D1Ev,_ZThn340_N8S7817C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7817C10D0Ev,_ZTv0_n60_N8S7817C10D0Ev)();
extern void ABISELECT(_ZThn448_N8S7817C10D0Ev,_ZThn340_N8S7817C10D0Ev)() __attribute__((weak));
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C13__8S7817C10__7S7817C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-448,-340),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  ABISELECT(-448,-340),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C10D1Ev,_ZTv0_n60_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7817C10D0Ev,_ZTv0_n60_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S7817C10D1Ev,_ZTvn12_n60_N8S7817C10D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7817C10D0Ev,_ZTvn12_n60_N8S7817C10D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C68S7817C13__A1__8S7817C10__7S7817C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-464,-352),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C10D1Ev,_ZTvn12_n60_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7817C10D0Ev,_ZTvn12_n60_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN8S7817C143v58Ev();
extern void _ZN8S7817C143v59Ev();
extern void _ZN8S7817C143v60Ev();
extern void _ZN8S7817C143v61Ev();
extern void _ZN8S7817C143v62Ev();
extern void _ZN8S7817C143v63Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C14__8S7817C10__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-364),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&_ZN8S7817C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7817C143v63Ev,
};
extern void ABISELECT(_ZThn184_N8S7817C10D1Ev,_ZThn128_N8S7817C10D1Ev)();
extern void ABISELECT(_ZThn184_N8S7817C10D0Ev,_ZThn128_N8S7817C10D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A__8S7817C10__7S7817C1[] = {
  ABISELECT(144,124),
  ABISELECT(104,100),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S7817C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7817C10D1Ev,_ZThn128_N8S7817C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7817C10D0Ev,_ZThn128_N8S7817C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C3__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7817C3[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__7S7817C1[] = {
  ABISELECT(360,272),
  ABISELECT(344,260),
  ABISELECT(304,236),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C6__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-304,-236),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C6__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-260),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZThn360_N7S7817C6D1Ev,_ZThn272_N7S7817C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void ABISELECT(_ZThn360_N7S7817C6D0Ev,_ZThn272_N7S7817C6D0Ev)() __attribute__((weak));
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C6__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-272),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-360,-272),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A1__7S7817C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C2__A1__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C2__A1__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C7D1Ev();
extern void _ZN7S7817C7D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
extern void _ZN7S7817C73v32Ev();
extern void _ZN7S7817C73v33Ev();
extern void _ZN7S7817C73v34Ev();
extern void _ZN7S7817C73v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C7__7S7817C1[] = {
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7817C73v35Ev,
};
extern void _ZN7S7817C2D1Ev();
extern void _ZN7S7817C2D0Ev();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C27S7817C7__A2__7S7817C1[] = {
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C27S7817C7__A2__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C27S7817C7__A2__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7817C2[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C67S7817C7__A1__7S7817C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C67S7817C7__A1__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C67S7817C7__A1__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,68),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C67S7817C7__A1__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C7__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C7__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__7S7817C7__7S7817C1[] = {
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZThn32_N7S7817C7D1Ev,_ZThn28_N7S7817C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7817C7D0Ev,_ZThn28_N7S7817C7D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__7S7817C7__7S7817C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7817C7D1Ev,_ZThn28_N7S7817C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7817C7D0Ev,_ZThn28_N7S7817C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C7D1Ev,_ZTv0_n20_N7S7817C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C7D0Ev,_ZTv0_n20_N7S7817C7D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__A1__7S7817C7__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7817C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C7D1Ev,_ZTv0_n20_N7S7817C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C7D0Ev,_ZTv0_n20_N7S7817C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
extern void _ZN8S7817C13D1Ev();
extern void _ZN8S7817C13D0Ev();
extern void _ZN8S7817C133v50Ev();
extern void _ZN8S7817C133v51Ev();
extern void _ZN8S7817C133v52Ev();
extern void _ZN8S7817C133v53Ev();
extern void _ZN8S7817C133v54Ev();
extern void _ZN8S7817C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7817C13__7S7817C1[] = {
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7817C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7817C133v55Ev,
};
extern void _ZN7S7817C6D1Ev();
extern void _ZN7S7817C6D0Ev();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C68S7817C13__A2__7S7817C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7817C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__7S7817C68S7817C13__A2__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__7S7817C68S7817C13__A2__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__7S7817C68S7817C13__A2__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI7S7817C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
extern void _ZN7S7817C83v29Ev();
extern void _ZN7S7817C83v30Ev();
extern void _ZN7S7817C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C8__8S7817C13__7S7817C1[] = {
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7817C83v31Ev,
};
extern void ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev)();
extern void _ZN7S7817C63v27Ev();
extern void _ZN7S7817C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C6__8S7817C13__7S7817C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D1Ev,_ZThn12_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7817C13D0Ev,_ZThn12_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7817C63v28Ev,
};
extern void _ZN7S7817C33v16Ev();
extern void _ZN7S7817C33v17Ev();
extern void _ZN7S7817C33v18Ev();
extern void _ZN7S7817C33v19Ev();
extern void _ZN7S7817C33v20Ev();
extern void _ZN7S7817C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C3__8S7817C13__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(160,112),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7817C33v21Ev,
};
extern void _ZN7S7817C42v8Ev();
extern void _ZN7S7817C42v9Ev();
extern void _ZN7S7817C43v10Ev();
extern void _ZN7S7817C43v11Ev();
extern void _ZN7S7817C43v12Ev();
extern void _ZN7S7817C43v13Ev();
extern void _ZN7S7817C43v14Ev();
extern void _ZN7S7817C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C4__A1__8S7817C13__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&_ZN7S7817C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7817C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7817C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev)();
extern void _ZN7S7817C23v22Ev();
extern void _ZN7S7817C23v23Ev();
extern void _ZN7S7817C23v24Ev();
extern void _ZN7S7817C23v25Ev();
extern void _ZN7S7817C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7817C2__8S7817C13__7S7817C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,76),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7817C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D1Ev,_ZTv0_n20_N8S7817C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7817C13D0Ev,_ZTv0_n20_N8S7817C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7817C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7817C23v26Ev,
};
static  VTT_ENTRY vtt_S7817C1[] = {
  {&(_ZTV7S7817C1[11]),  11,267},
  {&(_tg__ZTV7S7817C2__A__7S7817C1[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__A__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__A__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C5__7S7817C1[11]),  11,22},
  {&(_tg__ZTV7S7817C4__7S7817C5__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C3__7S7817C5__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C5__7S7817C1[11]),  11,22},
  {&(_tg__ZTV7S7817C2__7S7817C5__7S7817C1[10]),  10,17},
  {&(_tg__ZTV7S7817C7__7S7817C5__7S7817C1[18]),  18,29},
  {&(_tg__ZTV7S7817C8__7S7817C5__7S7817C1[5]),  5,8},
  {&(_tg__ZTV7S7817C67S7817C7__A1__7S7817C5__7S7817C1[5]),  5,9},
  {&(_tg__ZTV8S7817C10__7S7817C1[9]),  9,33},
  {&(_tg__ZTV8S7817C118S7817C10__7S7817C1[7]),  7,23},
  {&(_tg__ZTV7S7817C3__8S7817C118S7817C10__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C118S7817C10__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C118S7817C10__7S7817C1[10]),  10,17},
  {&(_tg__ZTV7S7817C6__8S7817C118S7817C10__7S7817C1[8]),  8,12},
  {&(_tg__ZTV7S7817C8__8S7817C118S7817C10__7S7817C1[5]),  5,8},
  {&(_tg__ZTV8S7817C128S7817C10__7S7817C1[7]),  7,14},
  {&(_tg__ZTV8S7817C13__8S7817C128S7817C10__7S7817C1[23]),  23,39},
  {&(_tg__ZTV7S7817C8__8S7817C128S7817C10__7S7817C1[5]),  5,8},
  {&(_tg__ZTV7S7817C68S7817C13__8S7817C128S7817C10__7S7817C1[5]),  5,9},
  {&(_tg__ZTV7S7817C3__8S7817C128S7817C10__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C128S7817C10__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C128S7817C10__7S7817C1[10]),  10,17},
  {&(_tg__ZTV7S7817C28S7817C10__A3__7S7817C1[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C28S7817C10__A3__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C28S7817C10__A3__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C3__8S7817C10__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C10__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C10__7S7817C1[10]),  10,17},
  {&(_tg__ZTV7S7817C6__8S7817C10__7S7817C1[8]),  8,12},
  {&(_tg__ZTV7S7817C8__8S7817C10__7S7817C1[5]),  5,8},
  {&(_tg__ZTV8S7817C12__8S7817C10__7S7817C1[7]),  7,14},
  {&(_tg__ZTV8S7817C13__8S7817C10__7S7817C1[23]),  23,39},
  {&(_tg__ZTV7S7817C68S7817C13__A1__8S7817C10__7S7817C1[5]),  5,9},
  {&(_tg__ZTV8S7817C14__8S7817C10__7S7817C1[8]),  8,14},
  {&(_tg__ZTV7S7817C2__A__8S7817C10__7S7817C1[4]),  4,11},
  {&(_ZTV7S7817C1[114]),  114,267},
  {&(_ZTV7S7817C1[130]),  130,267},
  {&(_ZTV7S7817C1[36]),  36,267},
  {&(_ZTV7S7817C1[36]),  36,267},
  {&(_ZTV7S7817C1[148]),  148,267},
  {&(_ZTV7S7817C1[173]),  173,267},
  {&(_ZTV7S7817C1[198]),  198,267},
  {&(_ZTV7S7817C1[189]),  189,267},
  {&(_ZTV7S7817C1[204]),  204,267},
  {&(_ZTV7S7817C1[56]),  56,267},
  {&(_ZTV7S7817C1[87]),  87,267},
  {&(_ZTV7S7817C1[228]),  228,267},
  {&(_ZTV7S7817C1[249]),  249,267},
  {&(_ZTV7S7817C1[261]),  261,267},
  {&(_ZTV7S7817C1[98]),  98,267},
  {&(_tg__ZTV7S7817C3__7S7817C1[3]),  3,9},
  {&(_tg__ZTV7S7817C4__7S7817C3__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C6__7S7817C1[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C6__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C6__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C6__7S7817C1[10]),  10,17},
  {&(_tg__ZTV7S7817C2__A1__7S7817C1[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C2__A1__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C2__A1__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C7__7S7817C1[6]),  6,17},
  {&(_tg__ZTV7S7817C27S7817C7__A2__7S7817C1[4]),  4,11},
  {&(_tg__ZTV7S7817C3__7S7817C27S7817C7__A2__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C27S7817C7__A2__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C67S7817C7__A1__7S7817C1[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C67S7817C7__A1__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C67S7817C7__A1__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C67S7817C7__A1__7S7817C1[10]),  10,17},
  {&(_tg__ZTV7S7817C4__7S7817C7__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C3__7S7817C7__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C8__7S7817C7__7S7817C1[5]),  5,8},
  {&(_tg__ZTV7S7817C6__7S7817C7__7S7817C1[5]),  5,9},
  {&(_tg__ZTV7S7817C2__A1__7S7817C7__7S7817C1[10]),  10,17},
  {&(_tg__ZTV8S7817C13__7S7817C1[6]),  6,22},
  {&(_tg__ZTV7S7817C68S7817C13__A2__7S7817C1[5]),  5,9},
  {&(_tg__ZTV7S7817C3__7S7817C68S7817C13__A2__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__7S7817C68S7817C13__A2__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C2__7S7817C68S7817C13__A2__7S7817C1[10]),  10,17},
  {&(_tg__ZTV7S7817C8__8S7817C13__7S7817C1[5]),  5,8},
  {&(_tg__ZTV7S7817C6__8S7817C13__7S7817C1[5]),  5,9},
  {&(_tg__ZTV7S7817C3__8S7817C13__7S7817C1[9]),  9,15},
  {&(_tg__ZTV7S7817C4__A1__8S7817C13__7S7817C1[10]),  10,18},
  {&(_tg__ZTV7S7817C2__8S7817C13__7S7817C1[10]),  10,17},
};
extern VTBL_ENTRY _ZTI7S7817C1[];
extern  VTBL_ENTRY _ZTV7S7817C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7817C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D0Ev,_ZTv0_n20_N7S7817C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7817C6D0Ev,_ZThn272_N7S7817C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C6D1Ev,_ZTv0_n20_N7S7817C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7817C6D1Ev,_ZThn272_N7S7817C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C10D0Ev,_ZTv0_n60_N8S7817C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S7817C10D0Ev,_ZThn340_N8S7817C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C10D1Ev,_ZTv0_n60_N8S7817C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S7817C10D1Ev,_ZThn340_N8S7817C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C10D0Ev,_ZTv0_n20_N8S7817C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7817C10D0Ev,_ZThn264_N8S7817C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C10D1Ev,_ZTv0_n20_N8S7817C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7817C10D1Ev,_ZThn264_N8S7817C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C12D0Ev,_ZTv0_n20_N8S7817C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7817C12D0Ev,_ZThn144_N8S7817C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C12D1Ev,_ZTv0_n20_N8S7817C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7817C12D1Ev,_ZThn144_N8S7817C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C12D0Ev,_ZTv0_n60_N8S7817C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S7817C12D0Ev,_ZThn220_N8S7817C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7817C12D1Ev,_ZTv0_n60_N8S7817C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S7817C12D1Ev,_ZThn220_N8S7817C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C11D0Ev,_ZTv0_n20_N8S7817C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7817C11D0Ev,_ZThn264_N8S7817C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7817C11D1Ev,_ZTv0_n20_N8S7817C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7817C11D1Ev,_ZThn264_N8S7817C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7817C5D0Ev,_ZTv0_n28_N7S7817C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7817C5D0Ev,_ZThn300_N7S7817C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7817C5D1Ev,_ZTv0_n28_N7S7817C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7817C5D1Ev,_ZThn300_N7S7817C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C5D0Ev,_ZTv0_n20_N7S7817C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7817C5D0Ev,_ZThn272_N7S7817C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C5D1Ev,_ZTv0_n20_N7S7817C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7817C5D1Ev,_ZThn272_N7S7817C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7817C5D0Ev,_ZTv0_n24_N7S7817C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7817C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7817C5D1Ev,_ZTv0_n24_N7S7817C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7817C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7817C1D0Ev,_ZTv0_n60_N7S7817C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N7S7817C1D0Ev,_ZThn376_N7S7817C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7817C1D1Ev,_ZTv0_n60_N7S7817C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N7S7817C1D1Ev,_ZThn376_N7S7817C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7817C1D0Ev,_ZTv0_n28_N7S7817C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S7817C1D0Ev,_ZThn328_N7S7817C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7817C1D1Ev,_ZTv0_n28_N7S7817C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S7817C1D1Ev,_ZThn328_N7S7817C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C1D0Ev,_ZTv0_n20_N7S7817C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7817C1D0Ev,_ZThn300_N7S7817C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7817C1D1Ev,_ZTv0_n20_N7S7817C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7817C1D1Ev,_ZThn300_N7S7817C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7817C1D0Ev,_ZTv0_n24_N7S7817C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7817C1D0Ev,_ZThn28_N7S7817C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7817C1D1Ev,_ZTv0_n24_N7S7817C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7817C1D1Ev,_ZThn28_N7S7817C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7817C1 = {  "S7817C1", // class name
  bases_S7817C1, 21,
  &(vtc_S7817C1[0]), // expected_vtbl_contents
  &(vtt_S7817C1[0]), // expected_vtt_contents
  ABISELECT(688,516), // object size
  NSPAIRA(_ZTI7S7817C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7817C1),267, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7817C1),86, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C4  {
  __tsi64 s7816c4f0;
  virtual void  v8(); // _ZN7S7816C42v8Ev
  virtual void  v9(); // _ZN7S7816C42v9Ev
  virtual void  v10(); // _ZN7S7816C43v10Ev
  virtual void  v11(); // _ZN7S7816C43v11Ev
  virtual void  v12(); // _ZN7S7816C43v12Ev
  virtual void  v13(); // _ZN7S7816C43v13Ev
  virtual void  v14(); // _ZN7S7816C43v14Ev
  virtual void  v15(); // _ZN7S7816C43v15Ev
  ~S7816C4(); // tgen
  S7816C4(); // tgen
};
//SIG(-1 S7816C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S7816C4 ::v8(){vfunc_called(this, "_ZN7S7816C42v8Ev");}
void  S7816C4 ::v9(){vfunc_called(this, "_ZN7S7816C42v9Ev");}
void  S7816C4 ::v10(){vfunc_called(this, "_ZN7S7816C43v10Ev");}
void  S7816C4 ::v11(){vfunc_called(this, "_ZN7S7816C43v11Ev");}
void  S7816C4 ::v12(){vfunc_called(this, "_ZN7S7816C43v12Ev");}
void  S7816C4 ::v13(){vfunc_called(this, "_ZN7S7816C43v13Ev");}
void  S7816C4 ::v14(){vfunc_called(this, "_ZN7S7816C43v14Ev");}
void  S7816C4 ::v15(){vfunc_called(this, "_ZN7S7816C43v15Ev");}
S7816C4 ::~S7816C4(){ note_dtor("S7816C4", this);} // tgen
S7816C4 ::S7816C4(){ note_ctor("S7816C4", this);} // tgen

static void Test_S7816C4()
{
  extern Class_Descriptor cd_S7816C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7816C4, buf);
    S7816C4 *dp, &lv = *(dp=new (buf) S7816C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7816C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C4)");
    check_field_offset(lv, s7816c4f0, ABISELECT(8,4), "S7816C4.s7816c4f0");
    test_class_info(&lv, &cd_S7816C4);
    dp->~S7816C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C4(Test_S7816C4, "S7816C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7816C4C1Ev();
extern void _ZN7S7816C4D1Ev();
Name_Map name_map_S7816C4[] = {
  NSPAIR(_ZN7S7816C4C1Ev),
  NSPAIR(_ZN7S7816C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7816C4[];
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY vtc_S7816C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C4[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
Class_Descriptor cd_S7816C4 = {  "S7816C4", // class name
  0,0,//no base classes
  &(vtc_S7816C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7816C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7816C4),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  S7816C3  : virtual S7816C4 {
  ::S7816C4 s7816c3f0;
  int s7816c3f1;
  void *s7816c3f2;
  virtual void  v16(); // _ZN7S7816C33v16Ev
  virtual void  v17(); // _ZN7S7816C33v17Ev
  virtual void  v18(); // _ZN7S7816C33v18Ev
  virtual void  v19(); // _ZN7S7816C33v19Ev
  virtual void  v20(); // _ZN7S7816C33v20Ev
  virtual void  v21(); // _ZN7S7816C33v21Ev
  ~S7816C3(); // tgen
  S7816C3(); // tgen
};
//SIG(-1 S7816C3) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S7816C3 ::v16(){vfunc_called(this, "_ZN7S7816C33v16Ev");}
void  S7816C3 ::v17(){vfunc_called(this, "_ZN7S7816C33v17Ev");}
void  S7816C3 ::v18(){vfunc_called(this, "_ZN7S7816C33v18Ev");}
void  S7816C3 ::v19(){vfunc_called(this, "_ZN7S7816C33v19Ev");}
void  S7816C3 ::v20(){vfunc_called(this, "_ZN7S7816C33v20Ev");}
void  S7816C3 ::v21(){vfunc_called(this, "_ZN7S7816C33v21Ev");}
S7816C3 ::~S7816C3(){ note_dtor("S7816C3", this);} // tgen
S7816C3 ::S7816C3(){ note_ctor("S7816C3", this);} // tgen

static void Test_S7816C3()
{
  extern Class_Descriptor cd_S7816C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7816C3, buf);
    S7816C3 *dp, &lv = *(dp=new (buf) S7816C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7816C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C3)");
    check_base_class_offset(lv, (S7816C4*), ABISELECT(40,24), "S7816C3");
    check_field_offset(lv, s7816c3f0, ABISELECT(8,4), "S7816C3.s7816c3f0");
    check_field_offset(lv, s7816c3f1, ABISELECT(24,16), "S7816C3.s7816c3f1");
    check_field_offset(lv, s7816c3f2, ABISELECT(32,20), "S7816C3.s7816c3f2");
    test_class_info(&lv, &cd_S7816C3);
    dp->~S7816C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C3(Test_S7816C3, "S7816C3", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S7816C3C1Ev();
extern void _ZN7S7816C3D1Ev();
Name_Map name_map_S7816C3[] = {
  NSPAIR(_ZN7S7816C3C1Ev),
  NSPAIR(_ZN7S7816C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
static Base_Class bases_S7816C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI7S7816C3[];
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY vtc_S7816C3[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7816C3[];
static  VTT_ENTRY vtt_S7816C3[] = {
  {&(_ZTV7S7816C3[3]),  3,27},
  {&(_ZTV7S7816C3[19]),  19,27},
};
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
Class_Descriptor cd_S7816C3 = {  "S7816C3", // class name
  bases_S7816C3, 1,
  &(vtc_S7816C3[0]), // expected_vtbl_contents
  &(vtt_S7816C3[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S7816C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7816C3),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7816C3),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  S7816C2  : virtual S7816C3 {
  short s7816c2f0[6];
  int s7816c2f1;
  short s7816c2f2;
  char s7816c2f3[6];
  virtual  ~S7816C2(); // _ZN7S7816C2D2Ev
  virtual void  v22(); // _ZN7S7816C23v22Ev
  virtual void  v23(); // _ZN7S7816C23v23Ev
  virtual void  v24(); // _ZN7S7816C23v24Ev
  virtual void  v25(); // _ZN7S7816C23v25Ev
  virtual void  v26(); // _ZN7S7816C23v26Ev
  S7816C2(); // tgen
};
//SIG(-1 S7816C2) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13 FL} v14 v15 v16 v17 v18 v19 FC3 Fi Fp} vd v1 v2 v3 v4 v5 Fs[6] Fi Fs Fc[6]}


 S7816C2 ::~S7816C2(){ note_dtor("S7816C2", this);}
void  S7816C2 ::v22(){vfunc_called(this, "_ZN7S7816C23v22Ev");}
void  S7816C2 ::v23(){vfunc_called(this, "_ZN7S7816C23v23Ev");}
void  S7816C2 ::v24(){vfunc_called(this, "_ZN7S7816C23v24Ev");}
void  S7816C2 ::v25(){vfunc_called(this, "_ZN7S7816C23v25Ev");}
void  S7816C2 ::v26(){vfunc_called(this, "_ZN7S7816C23v26Ev");}
S7816C2 ::S7816C2(){ note_ctor("S7816C2", this);} // tgen

static void Test_S7816C2()
{
  extern Class_Descriptor cd_S7816C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S7816C2, buf);
    S7816C2 *dp, &lv = *(dp=new (buf) S7816C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S7816C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C2)");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(72,52), "S7816C2");
    check_base_class_offset(lv, (S7816C3*), ABISELECT(32,28), "S7816C2");
    check_field_offset(lv, s7816c2f0, ABISELECT(8,4), "S7816C2.s7816c2f0");
    check_field_offset(lv, s7816c2f1, ABISELECT(20,16), "S7816C2.s7816c2f1");
    check_field_offset(lv, s7816c2f2, ABISELECT(24,20), "S7816C2.s7816c2f2");
    check_field_offset(lv, s7816c2f3, ABISELECT(26,22), "S7816C2.s7816c2f3");
    test_class_info(&lv, &cd_S7816C2);
    dp->~S7816C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C2(Test_S7816C2, "S7816C2", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S7816C2C1Ev();
extern void _ZN7S7816C2D2Ev();
Name_Map name_map_S7816C2[] = {
  NSPAIR(_ZN7S7816C2C1Ev),
  NSPAIR(_ZN7S7816C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
static Base_Class bases_S7816C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    ABISELECT(72,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //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_S7816C3,    ABISELECT(32,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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 _ZTI7S7816C2[];
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY vtc_S7816C2[] = {
  ABISELECT(72,52),
  ABISELECT(32,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7816C2[];
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__7S7816C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
static  VTT_ENTRY vtt_S7816C2[] = {
  {&(_ZTV7S7816C2[4]),  4,44},
  {&(_ZTV7S7816C2[20]),  20,44},
  {&(_ZTV7S7816C2[36]),  36,44},
  {&(_tg__ZTV7S7816C3__7S7816C2[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__7S7816C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
Class_Descriptor cd_S7816C2 = {  "S7816C2", // class name
  bases_S7816C2, 2,
  &(vtc_S7816C2[0]), // expected_vtbl_contents
  &(vtt_S7816C2[0]), // expected_vtt_contents
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S7816C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7816C2),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7816C2),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  S7816C6  : virtual S7816C3 , virtual S7816C2 {
  virtual  ~S7816C6(); // _ZN7S7816C6D2Ev
  virtual void  v27(); // _ZN7S7816C63v27Ev
  virtual void  v28(); // _ZN7S7816C63v28Ev
  S7816C6(); // tgen
};
//SIG(-1 S7816C6) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 FL} v11 v12 v13 v14 v15 v16 FC3 Fi Fp} VBC4{ VBC2 vd v17 v18 v19 v20 v21 Fs[6] Fi Fs Fc[6]} vd v1 v2}


 S7816C6 ::~S7816C6(){ note_dtor("S7816C6", this);}
void  S7816C6 ::v27(){vfunc_called(this, "_ZN7S7816C63v27Ev");}
void  S7816C6 ::v28(){vfunc_called(this, "_ZN7S7816C63v28Ev");}
S7816C6 ::S7816C6(){ note_ctor("S7816C6", this);} // tgen

static void Test_S7816C6()
{
  extern Class_Descriptor cd_S7816C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S7816C6, buf);
    S7816C6 *dp, &lv = *(dp=new (buf) S7816C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S7816C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C6)");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(48,28), "S7816C6");
    check_base_class_offset(lv, (S7816C3*), ABISELECT(8,4), "S7816C6");
    check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(8,4), "S7816C6");
    check_base_class_offset(lv, (S7816C2*), ABISELECT(64,40), "S7816C6");
    test_class_info(&lv, &cd_S7816C6);
    dp->~S7816C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C6(Test_S7816C6, "S7816C6", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S7816C6C1Ev();
extern void _ZN7S7816C6D2Ev();
Name_Map name_map_S7816C6[] = {
  NSPAIR(_ZN7S7816C6C1Ev),
  NSPAIR(_ZN7S7816C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
static Base_Class bases_S7816C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S7816C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //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_S7816C2,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S7816C6[];
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S7816C6D1Ev,_ZThn40_N7S7816C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S7816C6D0Ev,_ZThn40_N7S7816C6D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY vtc_S7816C6[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern VTBL_ENTRY _ZTV7S7816C6[];
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C6[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__7S7816C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C6[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__7S7816C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__7S7816C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
static  VTT_ENTRY vtt_S7816C6[] = {
  {&(_ZTV7S7816C6[5]),  5,59},
  {&(_ZTV7S7816C6[18]),  18,59},
  {&(_ZTV7S7816C6[34]),  34,59},
  {&(_ZTV7S7816C6[52]),  52,59},
  {&(_tg__ZTV7S7816C3__7S7816C6[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__7S7816C6[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C6[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__7S7816C6[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__7S7816C6[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7816C6D0Ev,_ZThn40_N7S7816C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7816C6D1Ev,_ZThn40_N7S7816C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C6 = {  "S7816C6", // class name
  bases_S7816C6, 3,
  &(vtc_S7816C6[0]), // expected_vtbl_contents
  &(vtt_S7816C6[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S7816C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7816C6),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7816C6),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C8  {
  int s7816c8f0;
  virtual void  v29(); // _ZN7S7816C83v29Ev
  virtual void  v30(); // _ZN7S7816C83v30Ev
  virtual void  v31(); // _ZN7S7816C83v31Ev
  ~S7816C8(); // tgen
  S7816C8(); // tgen
};
//SIG(-1 S7816C8) C1{ v1 v2 v3 Fi}


void  S7816C8 ::v29(){vfunc_called(this, "_ZN7S7816C83v29Ev");}
void  S7816C8 ::v30(){vfunc_called(this, "_ZN7S7816C83v30Ev");}
void  S7816C8 ::v31(){vfunc_called(this, "_ZN7S7816C83v31Ev");}
S7816C8 ::~S7816C8(){ note_dtor("S7816C8", this);} // tgen
S7816C8 ::S7816C8(){ note_ctor("S7816C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7816C8C1Ev();
extern void _ZN7S7816C8D1Ev();
Name_Map name_map_S7816C8[] = {
  NSPAIR(_ZN7S7816C8C1Ev),
  NSPAIR(_ZN7S7816C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7816C8[];
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY vtc_S7816C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C8[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
Class_Descriptor cd_S7816C8 = {  "S7816C8", // class name
  0,0,//no base classes
  &(vtc_S7816C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7816C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7816C8),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  S7816C7  : virtual S7816C4 , virtual S7816C3 , S7816C2 , virtual S7816C8 , S7816C6 {
  virtual  ~S7816C7(); // _ZN7S7816C7D2Ev
  virtual void  v32(); // _ZN7S7816C73v32Ev
  virtual void  v33(); // _ZN7S7816C73v33Ev
  virtual void  v34(); // _ZN7S7816C73v34Ev
  virtual void  v35(); // _ZN7S7816C73v35Ev
  S7816C7(); // tgen
};
//SIG(-1 S7816C7) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12 FL} VBC3{ VBC2 v13 v14 v15 v16 v17 v18 FC2 Fi Fp} BC4{ VBC3 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} VBC5{ v24 v25 v26 Fi} BC6{ VBC3 VBC4 vd v27 v28} vd v1 v2 v3 v4}


 S7816C7 ::~S7816C7(){ note_dtor("S7816C7", this);}
void  S7816C7 ::v32(){vfunc_called(this, "_ZN7S7816C73v32Ev");}
void  S7816C7 ::v33(){vfunc_called(this, "_ZN7S7816C73v33Ev");}
void  S7816C7 ::v34(){vfunc_called(this, "_ZN7S7816C73v34Ev");}
void  S7816C7 ::v35(){vfunc_called(this, "_ZN7S7816C73v35Ev");}
S7816C7 ::S7816C7(){ note_ctor("S7816C7", this);} // tgen

static void Test_S7816C7()
{
  extern Class_Descriptor cd_S7816C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,27)];
    init_test(&cd_S7816C7, buf);
    S7816C7 *dp, &lv = *(dp=new (buf) S7816C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,104), "sizeof(S7816C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C7)");
    check_base_class_offset(lv, (S7816C4*), ABISELECT(40,32), "S7816C7");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(40,32), "S7816C7");
    check_base_class_offset(lv, (S7816C3*), ABISELECT(56,44), "S7816C7");
    /*is_ambiguous_... S7816C7::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(56,44), "S7816C7");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*), ABISELECT(56,44), "S7816C7");
    /*is_ambiguous_... S7816C7::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(56,44), "S7816C7");
    /*is_ambiguous_... S7816C7::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C2*), 0, "S7816C7");
    check_base_class_offset(lv, (S7816C8*), ABISELECT(96,68), "S7816C7");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*), ABISELECT(112,76), "S7816C7");
    check_base_class_offset(lv, (S7816C6*), ABISELECT(32,28), "S7816C7");
    test_class_info(&lv, &cd_S7816C7);
    dp->~S7816C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C7(Test_S7816C7, "S7816C7", ABISELECT(144,104));

#else // __cplusplus

extern void _ZN7S7816C7C1Ev();
extern void _ZN7S7816C7D2Ev();
Name_Map name_map_S7816C7[] = {
  NSPAIR(_ZN7S7816C7C1Ev),
  NSPAIR(_ZN7S7816C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
static Base_Class bases_S7816C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    ABISELECT(40,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C3,    ABISELECT(56,44), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C2,    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_S7816C8,    ABISELECT(96,68), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C2,    ABISELECT(112,76), //bcp->offset
    67, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7816C6,    ABISELECT(32,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7816C7[];
extern void _ZN7S7816C7D1Ev();
extern void _ZN7S7816C7D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C73v32Ev();
extern void _ZN7S7816C73v33Ev();
extern void _ZN7S7816C73v34Ev();
extern void _ZN7S7816C73v35Ev();
extern void ABISELECT(_ZThn32_N7S7816C7D1Ev,_ZThn28_N7S7816C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7816C7D0Ev,_ZThn28_N7S7816C7D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void ABISELECT(_ZTv0_n40_N7S7816C7D1Ev,_ZTv0_n20_N7S7816C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7816C7D1Ev,_ZThn76_N7S7816C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C7D0Ev,_ZTv0_n20_N7S7816C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7816C7D0Ev,_ZThn76_N7S7816C7D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY vtc_S7816C7[] = {
  ABISELECT(112,76),
  ABISELECT(96,68),
  ABISELECT(40,32),
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v35Ev,
  ABISELECT(80,48),
  ABISELECT(8,4),
  ABISELECT(24,16),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7816C7D1Ev,_ZThn28_N7S7816C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7816C7D0Ev,_ZThn28_N7S7816C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-76),
  ABISELECT(-72,-44),
  ABISELECT(-56,-32),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C7D1Ev,_ZTv0_n20_N7S7816C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C7D0Ev,_ZTv0_n20_N7S7816C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern VTBL_ENTRY _ZTV7S7816C7[];
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A__7S7816C7[] = {
  ABISELECT(40,32),
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__A__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__A__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__7S7816C7[] = {
  ABISELECT(80,48),
  ABISELECT(8,4),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C6__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C6__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZThn80_N7S7816C6D1Ev,_ZThn48_N7S7816C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void ABISELECT(_ZThn80_N7S7816C6D0Ev,_ZThn48_N7S7816C6D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C6__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  ABISELECT(-72,-44),
  ABISELECT(-56,-32),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C7[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A1__7S7816C7[] = {
  ABISELECT(-72,-44),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__A1__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__A1__7S7816C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,44),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
static  VTT_ENTRY vtt_S7816C7[] = {
  {&(_ZTV7S7816C7[6]),  6,84},
  {&(_tg__ZTV7S7816C2__A__7S7816C7[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__A__7S7816C7[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__A__7S7816C7[10]),  10,18},
  {&(_tg__ZTV7S7816C6__7S7816C7[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C6__7S7816C7[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C6__7S7816C7[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C6__7S7816C7[10]),  10,17},
  {&(_ZTV7S7816C7[36]),  36,84},
  {&(_ZTV7S7816C7[53]),  53,84},
  {&(_ZTV7S7816C7[64]),  64,84},
  {&(_ZTV7S7816C7[22]),  22,84},
  {&(_ZTV7S7816C7[77]),  77,84},
  {&(_tg__ZTV7S7816C3__7S7816C7[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__7S7816C7[10]),  10,18},
  {&(_tg__ZTV7S7816C2__A1__7S7816C7[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__A1__7S7816C7[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__A1__7S7816C7[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7816C7[];
extern  VTBL_ENTRY _ZTV7S7816C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C7[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7816C6D0Ev,_ZThn48_N7S7816C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7816C6D1Ev,_ZThn48_N7S7816C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C7D0Ev,_ZTv0_n20_N7S7816C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7816C7D0Ev,_ZThn76_N7S7816C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C7D1Ev,_ZTv0_n20_N7S7816C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7816C7D1Ev,_ZThn76_N7S7816C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C7 = {  "S7816C7", // class name
  bases_S7816C7, 6,
  &(vtc_S7816C7[0]), // expected_vtbl_contents
  &(vtt_S7816C7[0]), // expected_vtt_contents
  ABISELECT(144,104), // object size
  NSPAIRA(_ZTI7S7816C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7816C7),84, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7816C7),18, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C5  : virtual S7816C4 , virtual S7816C3 , virtual S7816C6 , virtual S7816C7 {
  char s7816c5f0;
  virtual  ~S7816C5(); // _ZN7S7816C5D2Ev
  virtual void  v36(); // _ZN7S7816C53v36Ev
  virtual void  v37(); // _ZN7S7816C53v37Ev
  virtual void  v38(); // _ZN7S7816C53v38Ev
  virtual void  v39(); // _ZN7S7816C53v39Ev
  virtual void  v40(); // _ZN7S7816C53v40Ev
  virtual void  v41(); // _ZN7S7816C53v41Ev
  virtual void  v42(); // _ZN7S7816C53v42Ev
  S7816C5(); // tgen
};
//SIG(-1 S7816C5) C1{ VBC2{ v8 v9 v10 v11 v12 v13 v14 v15 FL} VBC3{ VBC2 v16 v17 v18 v19 v20 v21 FC2 Fi Fp} VBC4{ VBC3 VBC5{ VBC3 vd v22 v23 v24 v25 v26 Fs[6] Fi Fs Fc[6]} vd v27 v28} VBC6{ VBC2 VBC3 BC5 VBC7{ v29 v30 v31 Fi} BC4 vd v32 v33 v34 v35} vd v1 v2 v3 v4 v5 v6 v7 Fc}


 S7816C5 ::~S7816C5(){ note_dtor("S7816C5", this);}
void  S7816C5 ::v36(){vfunc_called(this, "_ZN7S7816C53v36Ev");}
void  S7816C5 ::v37(){vfunc_called(this, "_ZN7S7816C53v37Ev");}
void  S7816C5 ::v38(){vfunc_called(this, "_ZN7S7816C53v38Ev");}
void  S7816C5 ::v39(){vfunc_called(this, "_ZN7S7816C53v39Ev");}
void  S7816C5 ::v40(){vfunc_called(this, "_ZN7S7816C53v40Ev");}
void  S7816C5 ::v41(){vfunc_called(this, "_ZN7S7816C53v41Ev");}
void  S7816C5 ::v42(){vfunc_called(this, "_ZN7S7816C53v42Ev");}
S7816C5 ::S7816C5(){ note_ctor("S7816C5", this);} // tgen

static void Test_S7816C5()
{
  extern Class_Descriptor cd_S7816C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S7816C5, buf);
    S7816C5 *dp, &lv = *(dp=new (buf) S7816C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S7816C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C5)");
    check_base_class_offset(lv, (S7816C4*), ABISELECT(16,8), "S7816C5");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(16,8), "S7816C5");
    check_base_class_offset(lv, (S7816C4*)(S7816C7*), ABISELECT(16,8), "S7816C5");
    check_base_class_offset(lv, (S7816C3*), ABISELECT(32,20), "S7816C5");
    /*is_ambiguous_... S7816C5::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C6*), ABISELECT(32,20), "S7816C5");
    /*is_ambiguous_... S7816C5::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(32,20), "S7816C5");
    check_base_class_offset(lv, (S7816C3*)(S7816C7*), ABISELECT(32,20), "S7816C5");
    /*is_ambiguous_... S7816C7::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*)(S7816C7*), ABISELECT(32,20), "S7816C5");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*)(S7816C7*), ABISELECT(32,20), "S7816C5");
    /*is_ambiguous_... S7816C5::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C2*)(S7816C6*), ABISELECT(72,44), "S7816C5");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*)(S7816C7*), ABISELECT(72,44), "S7816C5");
    /*is_ambiguous_... S7816C5::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C6*), 0, "S7816C5");
    /*is_ambiguous_... S7816C7::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C2*)(S7816C7*), ABISELECT(104,72), "S7816C5");
    check_base_class_offset(lv, (S7816C8*)(S7816C7*), ABISELECT(144,104), "S7816C5");
    check_base_class_offset(lv, (S7816C6*)(S7816C7*), ABISELECT(136,100), "S7816C5");
    check_base_class_offset(lv, (S7816C7*), ABISELECT(104,72), "S7816C5");
    check_field_offset(lv, s7816c5f0, ABISELECT(8,4), "S7816C5.s7816c5f0");
    test_class_info(&lv, &cd_S7816C5);
    dp->~S7816C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C5(Test_S7816C5, "S7816C5", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S7816C5C1Ev();
extern void _ZN7S7816C5D2Ev();
Name_Map name_map_S7816C5[] = {
  NSPAIR(_ZN7S7816C5C1Ev),
  NSPAIR(_ZN7S7816C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C7;
extern VTBL_ENTRY _ZTI7S7816C7[];
extern  VTBL_ENTRY _ZTV7S7816C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C7[];
static Base_Class bases_S7816C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    ABISELECT(16,8), //bcp->offset
    22, //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},
  {&cd_S7816C3,    ABISELECT(32,20), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C2,    ABISELECT(72,44), //bcp->offset
    55, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7816C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C2,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7816C8,    ABISELECT(144,104), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7816C6,    ABISELECT(136,100), //bcp->offset
    101, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7816C7,    ABISELECT(104,72), //bcp->offset
    72, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7816C5[];
extern void ABISELECT(_ZTv0_n48_N7S7816C5D1Ev,_ZTv0_n24_N7S7816C5D1Ev)();
extern void _ZN7S7816C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7816C5D0Ev,_ZTv0_n24_N7S7816C5D0Ev)();
extern void _ZN7S7816C5D0Ev() __attribute__((weak));
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C53v36Ev();
extern void _ZN7S7816C53v37Ev();
extern void _ZN7S7816C53v38Ev();
extern void _ZN7S7816C53v39Ev();
extern void _ZN7S7816C53v40Ev();
extern void _ZN7S7816C53v41Ev();
extern void _ZN7S7816C53v42Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void ABISELECT(_ZTv0_n40_N7S7816C5D1Ev,_ZTv0_n20_N7S7816C5D1Ev)();
extern void ABISELECT(_ZThn72_N7S7816C5D1Ev,_ZThn44_N7S7816C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C5D0Ev,_ZTv0_n20_N7S7816C5D0Ev)();
extern void ABISELECT(_ZThn72_N7S7816C5D0Ev,_ZThn44_N7S7816C5D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S7816C5D1Ev,_ZTv0_n28_N7S7816C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7816C5D1Ev,_ZThn72_N7S7816C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7816C5D0Ev,_ZTv0_n28_N7S7816C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7816C5D0Ev,_ZThn72_N7S7816C5D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C73v32Ev();
extern void _ZN7S7816C73v33Ev();
extern void _ZN7S7816C73v34Ev();
extern void _ZN7S7816C73v35Ev();
extern void ABISELECT(_ZTvn32_n56_N7S7816C5D1Ev,_ZTvn28_n28_N7S7816C5D1Ev)();
extern void ABISELECT(_ZTvn32_n56_N7S7816C5D0Ev,_ZTvn28_n28_N7S7816C5D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY vtc_S7816C5[] = {
  ABISELECT(144,104),
  ABISELECT(104,72),
  0,
  0,
  0,
  0,
  ABISELECT(72,44),
  ABISELECT(16,8),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7816C5D1Ev,_ZTv0_n24_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7816C5D0Ev,_ZTv0_n24_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v36Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v37Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v38Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v39Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v40Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v41Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v42Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C5D1Ev,_ZTv0_n20_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C5D0Ev,_ZTv0_n20_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  ABISELECT(32,28),
  ABISELECT(32,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-72),
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-88,-64),
  ABISELECT(-72,-52),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7816C5D1Ev,_ZTv0_n28_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7816C5D0Ev,_ZTv0_n28_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v35Ev,
  ABISELECT(-64,-56),
  ABISELECT(-120,-92),
  ABISELECT(-104,-80),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7816C5D1Ev,_ZTvn28_n28_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7816C5D0Ev,_ZTvn28_n28_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern VTBL_ENTRY _ZTV7S7816C5[];
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C5[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__7S7816C5[] = {
  ABISELECT(72,44),
  ABISELECT(16,8),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C6__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C6__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZThn72_N7S7816C6D1Ev,_ZThn44_N7S7816C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void ABISELECT(_ZThn72_N7S7816C6D0Ev,_ZThn44_N7S7816C6D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C6__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C5[] = {
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C7D1Ev();
extern void _ZN7S7816C7D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C73v32Ev();
extern void _ZN7S7816C73v33Ev();
extern void _ZN7S7816C73v34Ev();
extern void _ZN7S7816C73v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C7__7S7816C5[] = {
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-88,-64),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v35Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C27S7816C7__A1__7S7816C5[] = {
  ABISELECT(-88,-64),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C27S7816C7__A1__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C27S7816C7__A1__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C67S7816C7__A1__7S7816C5[] = {
  ABISELECT(-64,-56),
  ABISELECT(-120,-92),
  ABISELECT(-104,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C67S7816C7__A1__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C67S7816C7__A1__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C67S7816C7__A1__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C7__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C7__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__7S7816C7__7S7816C5[] = {
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZThn32_N7S7816C7D1Ev,_ZThn28_N7S7816C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7816C7D0Ev,_ZThn28_N7S7816C7D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__7S7816C7__7S7816C5[] = {
  ABISELECT(-64,-56),
  ABISELECT(-120,-92),
  ABISELECT(-104,-80),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7816C7D1Ev,_ZThn28_N7S7816C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7816C7D0Ev,_ZThn28_N7S7816C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C7D1Ev,_ZTv0_n20_N7S7816C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C7D0Ev,_ZTv0_n20_N7S7816C7D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A1__7S7816C7__7S7816C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-56,-36),
  ABISELECT(-40,-24),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C7D1Ev,_ZTv0_n20_N7S7816C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C7D0Ev,_ZTv0_n20_N7S7816C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
static  VTT_ENTRY vtt_S7816C5[] = {
  {&(_ZTV7S7816C5[11]),  11,118},
  {&(_ZTV7S7816C5[32]),  32,118},
  {&(_ZTV7S7816C5[49]),  49,118},
  {&(_ZTV7S7816C5[11]),  11,118},
  {&(_ZTV7S7816C5[65]),  65,118},
  {&(_ZTV7S7816C5[90]),  90,118},
  {&(_ZTV7S7816C5[115]),  115,118},
  {&(_ZTV7S7816C5[106]),  106,118},
  {&(_tg__ZTV7S7816C3__7S7816C5[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__7S7816C5[10]),  10,18},
  {&(_tg__ZTV7S7816C6__7S7816C5[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C6__7S7816C5[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C6__7S7816C5[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C6__7S7816C5[10]),  10,17},
  {&(_tg__ZTV7S7816C2__7S7816C5[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__7S7816C5[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__7S7816C5[10]),  10,18},
  {&(_tg__ZTV7S7816C7__7S7816C5[6]),  6,17},
  {&(_tg__ZTV7S7816C27S7816C7__A1__7S7816C5[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C27S7816C7__A1__7S7816C5[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C27S7816C7__A1__7S7816C5[10]),  10,18},
  {&(_tg__ZTV7S7816C67S7816C7__A1__7S7816C5[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C67S7816C7__A1__7S7816C5[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C67S7816C7__A1__7S7816C5[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C67S7816C7__A1__7S7816C5[10]),  10,17},
  {&(_tg__ZTV7S7816C4__7S7816C7__7S7816C5[10]),  10,18},
  {&(_tg__ZTV7S7816C3__7S7816C7__7S7816C5[9]),  9,15},
  {&(_tg__ZTV7S7816C8__7S7816C7__7S7816C5[5]),  5,8},
  {&(_tg__ZTV7S7816C6__7S7816C7__7S7816C5[5]),  5,9},
  {&(_tg__ZTV7S7816C2__A1__7S7816C7__7S7816C5[10]),  10,17},
};
extern VTBL_ENTRY _ZTI7S7816C5[];
extern  VTBL_ENTRY _ZTV7S7816C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C5[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7816C6D0Ev,_ZThn44_N7S7816C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7816C6D1Ev,_ZThn44_N7S7816C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7816C5D0Ev,_ZTv0_n28_N7S7816C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7816C5D0Ev,_ZThn72_N7S7816C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7816C5D1Ev,_ZTv0_n28_N7S7816C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7816C5D1Ev,_ZThn72_N7S7816C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C5D0Ev,_ZTv0_n20_N7S7816C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7816C5D0Ev,_ZThn44_N7S7816C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C5D1Ev,_ZTv0_n20_N7S7816C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7816C5D1Ev,_ZThn44_N7S7816C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7816C5D0Ev,_ZTv0_n24_N7S7816C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7816C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7816C5D1Ev,_ZTv0_n24_N7S7816C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7816C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C5 = {  "S7816C5", // class name
  bases_S7816C5, 8,
  &(vtc_S7816C5[0]), // expected_vtbl_contents
  &(vtt_S7816C5[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S7816C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7816C5),118, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7816C5),30, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C9  {
  void *s7816c9f0;
  virtual void  v43(); // _ZN7S7816C93v43Ev
  ~S7816C9(); // tgen
  S7816C9(); // tgen
};
//SIG(-1 S7816C9) C1{ v1 Fp}


void  S7816C9 ::v43(){vfunc_called(this, "_ZN7S7816C93v43Ev");}
S7816C9 ::~S7816C9(){ note_dtor("S7816C9", this);} // tgen
S7816C9 ::S7816C9(){ note_ctor("S7816C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7816C9C1Ev();
extern void _ZN7S7816C9D1Ev();
Name_Map name_map_S7816C9[] = {
  NSPAIR(_ZN7S7816C9C1Ev),
  NSPAIR(_ZN7S7816C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7816C9[];
extern void _ZN7S7816C93v43Ev();
static  VTBL_ENTRY vtc_S7816C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C9[0]),
  (VTBL_ENTRY)&_ZN7S7816C93v43Ev,
};
extern VTBL_ENTRY _ZTI7S7816C9[];
extern  VTBL_ENTRY _ZTV7S7816C9[];
Class_Descriptor cd_S7816C9 = {  "S7816C9", // class name
  0,0,//no base classes
  &(vtc_S7816C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7816C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7816C9),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  S7816C11  : S7816C4 , virtual S7816C3 , virtual S7816C2 , virtual S7816C6 , virtual S7816C8 {
  ::S7816C7 s7816c11f0;
  void *s7816c11f1;
  virtual  ~S7816C11(); // _ZN8S7816C11D2Ev
  virtual void  v44(); // _ZN8S7816C113v44Ev
  virtual void  v45(); // _ZN8S7816C113v45Ev
  virtual void  v46(); // _ZN8S7816C113v46Ev
  virtual void  v47(); // _ZN8S7816C113v47Ev
  virtual void  v48(); // _ZN8S7816C113v48Ev
  virtual void  v49(); // _ZN8S7816C113v49Ev
  S7816C11(); // tgen
};
//SIG(-1 S7816C11) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} VBC3{ VBC2 v15 v16 v17 v18 v19 v20 FC2 Fi Fp} VBC4{ VBC3 vd v21 v22 v23 v24 v25 Fs[6] Fi Fs Fc[6]} VBC5{ VBC3 VBC4 vd v26 v27} VBC6{ v28 v29 v30 Fi} vd v1 v2 v3 v4 v5 v6 FC7{ VBC2 VBC3 BC4 VBC6 BC5 vd v31 v32 v33 v34} Fp}


 S7816C11 ::~S7816C11(){ note_dtor("S7816C11", this);}
void  S7816C11 ::v44(){vfunc_called(this, "_ZN8S7816C113v44Ev");}
void  S7816C11 ::v45(){vfunc_called(this, "_ZN8S7816C113v45Ev");}
void  S7816C11 ::v46(){vfunc_called(this, "_ZN8S7816C113v46Ev");}
void  S7816C11 ::v47(){vfunc_called(this, "_ZN8S7816C113v47Ev");}
void  S7816C11 ::v48(){vfunc_called(this, "_ZN8S7816C113v48Ev");}
void  S7816C11 ::v49(){vfunc_called(this, "_ZN8S7816C113v49Ev");}
S7816C11 ::S7816C11(){ note_ctor("S7816C11", this);} // tgen

static void Test_S7816C11()
{
  extern Class_Descriptor cd_S7816C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,50)];
    init_test(&cd_S7816C11, buf);
    S7816C11 *dp, &lv = *(dp=new (buf) S7816C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,196), "sizeof(S7816C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C11)");
    /*is_ambiguous_... S7816C11::S7816C4 */ AMB_check_base_class_offset(lv, (S7816C4*), 0, "S7816C11");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(208,144), "S7816C11");
    check_base_class_offset(lv, (S7816C3*), ABISELECT(168,120), "S7816C11");
    check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(168,120), "S7816C11");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*), ABISELECT(168,120), "S7816C11");
    check_base_class_offset(lv, (S7816C2*), ABISELECT(224,156), "S7816C11");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*), ABISELECT(224,156), "S7816C11");
    check_base_class_offset(lv, (S7816C6*), ABISELECT(256,184), "S7816C11");
    check_base_class_offset(lv, (S7816C8*), ABISELECT(264,188), "S7816C11");
    check_field_offset(lv, s7816c11f0, ABISELECT(16,12), "S7816C11.s7816c11f0");
    check_field_offset(lv, s7816c11f1, ABISELECT(160,116), "S7816C11.s7816c11f1");
    test_class_info(&lv, &cd_S7816C11);
    dp->~S7816C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C11(Test_S7816C11, "S7816C11", ABISELECT(280,196));

#else // __cplusplus

extern void _ZN8S7816C11C1Ev();
extern void _ZN8S7816C11D2Ev();
Name_Map name_map_S7816C11[] = {
  NSPAIR(_ZN8S7816C11C1Ev),
  NSPAIR(_ZN8S7816C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
static Base_Class bases_S7816C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7816C4,    ABISELECT(208,144), //bcp->offset
    38, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7816C3,    ABISELECT(168,120), //bcp->offset
    23, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C2,    ABISELECT(224,156), //bcp->offset
    56, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C6,    ABISELECT(256,184), //bcp->offset
    73, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C8,    ABISELECT(264,188), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7816C11[];
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C11D1Ev();
extern void _ZN8S7816C11D0Ev();
extern void _ZN8S7816C113v44Ev();
extern void _ZN8S7816C113v45Ev();
extern void _ZN8S7816C113v46Ev();
extern void _ZN8S7816C113v47Ev();
extern void _ZN8S7816C113v48Ev();
extern void _ZN8S7816C113v49Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev)();
extern void ABISELECT(_ZThn224_N8S7816C11D1Ev,_ZThn156_N8S7816C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev)();
extern void ABISELECT(_ZThn224_N8S7816C11D0Ev,_ZThn156_N8S7816C11D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev)();
extern void ABISELECT(_ZThn256_N8S7816C11D1Ev,_ZThn184_N8S7816C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev)();
extern void ABISELECT(_ZThn256_N8S7816C11D0Ev,_ZThn184_N8S7816C11D0Ev)() __attribute__((weak));
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY vtc_S7816C11[] = {
  ABISELECT(264,188),
  ABISELECT(256,184),
  ABISELECT(224,156),
  ABISELECT(208,144),
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v49Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  0,
  0,
  ABISELECT(-256,-184),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-256,-184),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S7816C11[];
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C11[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__8S7816C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C11[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__8S7816C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__8S7816C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C11[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C6__8S7816C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C6__8S7816C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C6__8S7816C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
static  VTT_ENTRY vtt_S7816C11[] = {
  {&(_ZTV8S7816C11[7]),  7,93},
  {&(_ZTV8S7816C11[32]),  32,93},
  {&(_ZTV8S7816C11[48]),  48,93},
  {&(_ZTV8S7816C11[66]),  66,93},
  {&(_ZTV8S7816C11[81]),  81,93},
  {&(_ZTV8S7816C11[90]),  90,93},
  {&(_tg__ZTV7S7816C3__8S7816C11[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__8S7816C11[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C11[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__8S7816C11[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__8S7816C11[10]),  10,18},
  {&(_tg__ZTV7S7816C6__8S7816C11[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C6__8S7816C11[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C6__8S7816C11[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C6__8S7816C11[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S7816C11[];
extern  VTBL_ENTRY _ZTV8S7816C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C11[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7816C11D0Ev,_ZThn184_N8S7816C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7816C11D1Ev,_ZThn184_N8S7816C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7816C11D0Ev,_ZThn156_N8S7816C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7816C11D1Ev,_ZThn156_N8S7816C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C11 = {  "S7816C11", // class name
  bases_S7816C11, 6,
  &(vtc_S7816C11[0]), // expected_vtbl_contents
  &(vtt_S7816C11[0]), // expected_vtt_contents
  ABISELECT(280,196), // object size
  NSPAIRA(_ZTI8S7816C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7816C11),93, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7816C11),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C13  : virtual S7816C8 , S7816C4 , S7816C6 {
  char s7816c13f0[8];
  virtual  ~S7816C13(); // _ZN8S7816C13D2Ev
  virtual void  v50(); // _ZN8S7816C133v50Ev
  virtual void  v51(); // _ZN8S7816C133v51Ev
  virtual void  v52(); // _ZN8S7816C133v52Ev
  virtual void  v53(); // _ZN8S7816C133v53Ev
  virtual void  v54(); // _ZN8S7816C133v54Ev
  virtual void  v55(); // _ZN8S7816C133v55Ev
  S7816C13(); // tgen
};
//SIG(-1 S7816C13) C1{ VBC2{ v7 v8 v9 Fi} BC3{ v10 v11 v12 v13 v14 v15 v16 v17 FL} BC4{ VBC5{ VBC3 v18 v19 v20 v21 v22 v23 FC3 Fi Fp} VBC6{ VBC5 vd v24 v25 v26 v27 v28 Fs[6] Fi Fs Fc[6]} vd v29 v30} vd v1 v2 v3 v4 v5 v6 Fc[8]}


 S7816C13 ::~S7816C13(){ note_dtor("S7816C13", this);}
void  S7816C13 ::v50(){vfunc_called(this, "_ZN8S7816C133v50Ev");}
void  S7816C13 ::v51(){vfunc_called(this, "_ZN8S7816C133v51Ev");}
void  S7816C13 ::v52(){vfunc_called(this, "_ZN8S7816C133v52Ev");}
void  S7816C13 ::v53(){vfunc_called(this, "_ZN8S7816C133v53Ev");}
void  S7816C13 ::v54(){vfunc_called(this, "_ZN8S7816C133v54Ev");}
void  S7816C13 ::v55(){vfunc_called(this, "_ZN8S7816C133v55Ev");}
S7816C13 ::S7816C13(){ note_ctor("S7816C13", this);} // tgen

static void Test_S7816C13()
{
  extern Class_Descriptor cd_S7816C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S7816C13, buf);
    S7816C13 *dp, &lv = *(dp=new (buf) S7816C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S7816C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C13)");
    check_base_class_offset(lv, (S7816C8*), ABISELECT(32,24), "S7816C13");
    /*is_ambiguous_... S7816C13::S7816C4 */ AMB_check_base_class_offset(lv, (S7816C4*), 0, "S7816C13");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(88,56), "S7816C13");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*), ABISELECT(48,32), "S7816C13");
    check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(48,32), "S7816C13");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*), ABISELECT(104,68), "S7816C13");
    check_base_class_offset(lv, (S7816C6*), ABISELECT(16,12), "S7816C13");
    check_field_offset(lv, s7816c13f0, ABISELECT(24,16), "S7816C13.s7816c13f0");
    test_class_info(&lv, &cd_S7816C13);
    dp->~S7816C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C13(Test_S7816C13, "S7816C13", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN8S7816C13C1Ev();
extern void _ZN8S7816C13D2Ev();
Name_Map name_map_S7816C13[] = {
  NSPAIR(_ZN8S7816C13C1Ev),
  NSPAIR(_ZN8S7816C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
static Base_Class bases_S7816C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C8,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7816C4,    ABISELECT(88,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7816C3,    ABISELECT(48,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7816C2,    ABISELECT(104,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7816C6,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7816C13[];
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C13D1Ev();
extern void _ZN8S7816C13D0Ev();
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
extern void ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev)();
extern void ABISELECT(_ZThn104_N8S7816C13D1Ev,_ZThn68_N8S7816C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev)();
extern void ABISELECT(_ZThn104_N8S7816C13D0Ev,_ZThn68_N8S7816C13D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY vtc_S7816C13[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S7816C13[];
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C13[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C6__8S7816C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C6__8S7816C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S7816C6D1Ev,_ZThn56_N7S7816C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S7816C6D0Ev,_ZThn56_N7S7816C6D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C6__8S7816C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C13[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__8S7816C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C13[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__8S7816C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__8S7816C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
static  VTT_ENTRY vtt_S7816C13[] = {
  {&(_ZTV8S7816C13[6]),  6,89},
  {&(_tg__ZTV7S7816C6__8S7816C13[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C6__8S7816C13[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C6__8S7816C13[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C6__8S7816C13[10]),  10,17},
  {&(_ZTV8S7816C13[36]),  36,89},
  {&(_ZTV8S7816C13[27]),  27,89},
  {&(_ZTV8S7816C13[48]),  48,89},
  {&(_ZTV8S7816C13[64]),  64,89},
  {&(_ZTV8S7816C13[82]),  82,89},
  {&(_tg__ZTV7S7816C3__8S7816C13[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__8S7816C13[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C13[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__8S7816C13[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__8S7816C13[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S7816C13[];
extern  VTBL_ENTRY _ZTV8S7816C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C13[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7816C6D0Ev,_ZThn56_N7S7816C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7816C6D1Ev,_ZThn56_N7S7816C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7816C13D0Ev,_ZThn68_N8S7816C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7816C13D1Ev,_ZThn68_N8S7816C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C13 = {  "S7816C13", // class name
  bases_S7816C13, 6,
  &(vtc_S7816C13[0]), // expected_vtbl_contents
  &(vtt_S7816C13[0]), // expected_vtt_contents
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI8S7816C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7816C13),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7816C13),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C12  : virtual S7816C13 , S7816C8 {
  virtual void  v56(); // _ZN8S7816C123v56Ev
  virtual void  v57(); // _ZN8S7816C123v57Ev
  ~S7816C12(); // tgen
  S7816C12(); // tgen
};
//SIG(-1 S7816C12) C1{ VBC2{ VBC3{ v3 v4 v5 Fi} BC4{ v6 v7 v8 v9 v10 v11 v12 v13 FL} BC5{ VBC6{ VBC4 v14 v15 v16 v17 v18 v19 FC4 Fi Fp} VBC7{ VBC6 vd v20 v21 v22 v23 v24 Fs[6] Fi Fs Fc[6]} vd v25 v26} vd v27 v28 v29 v30 v31 v32 Fc[8]} BC3 v1 v2}


void  S7816C12 ::v56(){vfunc_called(this, "_ZN8S7816C123v56Ev");}
void  S7816C12 ::v57(){vfunc_called(this, "_ZN8S7816C123v57Ev");}
S7816C12 ::~S7816C12(){ note_dtor("S7816C12", this);} // tgen
S7816C12 ::S7816C12(){ note_ctor("S7816C12", this);} // tgen

static void Test_S7816C12()
{
  extern Class_Descriptor cd_S7816C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S7816C12, buf);
    S7816C12 *dp, &lv = *(dp=new (buf) S7816C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S7816C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C12)");
    check_base_class_offset(lv, (S7816C8*)(S7816C13*), ABISELECT(48,32), "S7816C12");
    /*is_ambiguous_... S7816C13::S7816C4 */ AMB_check_base_class_offset(lv, (S7816C4*)(S7816C13*), ABISELECT(16,8), "S7816C12");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(104,64), "S7816C12");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*)(S7816C13*), ABISELECT(64,40), "S7816C12");
    check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(64,40), "S7816C12");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*)(S7816C13*), ABISELECT(120,76), "S7816C12");
    check_base_class_offset(lv, (S7816C6*)(S7816C13*), ABISELECT(32,20), "S7816C12");
    check_base_class_offset(lv, (S7816C13*), ABISELECT(16,8), "S7816C12");
    /*is_ambiguous_... S7816C12::S7816C8 */ AMB_check_base_class_offset(lv, (S7816C8*), 0, "S7816C12");
    test_class_info(&lv, &cd_S7816C12);
    dp->~S7816C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C12(Test_S7816C12, "S7816C12", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN8S7816C12C1Ev();
extern void _ZN8S7816C12D1Ev();
Name_Map name_map_S7816C12[] = {
  NSPAIR(_ZN8S7816C12C1Ev),
  NSPAIR(_ZN8S7816C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C13;
extern VTBL_ENTRY _ZTI8S7816C13[];
extern  VTBL_ENTRY _ZTV8S7816C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C13[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
static Base_Class bases_S7816C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C8,    ABISELECT(48,32), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7816C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7816C4,    ABISELECT(104,64), //bcp->offset
    85, //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_S7816C3,    ABISELECT(64,40), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7816C2,    ABISELECT(120,76), //bcp->offset
    103, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7816C6,    ABISELECT(32,20), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7816C13,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S7816C12[];
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN8S7816C123v56Ev();
extern void _ZN8S7816C123v57Ev();
extern void _ZN8S7816C12D1Ev();
extern void _ZN8S7816C12D0Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S7816C12D1Ev,_ZThn8_N8S7816C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S7816C12D0Ev,_ZThn8_N8S7816C12D0Ev)() __attribute__((weak));
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
extern void ABISELECT(_ZTvn16_n120_N8S7816C12D1Ev,_ZTvn12_n60_N8S7816C12D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7816C12D0Ev,_ZTvn12_n60_N8S7816C12D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev)();
extern void ABISELECT(_ZThn120_N8S7816C12D1Ev,_ZThn76_N8S7816C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev)();
extern void ABISELECT(_ZThn120_N8S7816C12D0Ev,_ZThn76_N8S7816C12D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY vtc_S7816C12[] = {
  ABISELECT(120,76),
  ABISELECT(104,64),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v57Ev,
  (VTBL_ENTRY)&_ZN8S7816C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C12D0Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C12D1Ev,_ZTvn12_n60_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C12D0Ev,_ZTvn12_n60_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S7816C12[];
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C13D1Ev();
extern void _ZN8S7816C13D0Ev();
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C13__8S7816C12[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C68S7816C13__8S7816C12[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C68S7816C13__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C68S7816C13__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S7816C6D1Ev,_ZThn56_N7S7816C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S7816C6D0Ev,_ZThn56_N7S7816C6D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C68S7816C13__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C13__8S7816C12[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C13__8S7816C12[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C13__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C13__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev)();
extern void ABISELECT(_ZThn104_N8S7816C13D1Ev,_ZThn68_N8S7816C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev)();
extern void ABISELECT(_ZThn104_N8S7816C13D0Ev,_ZThn68_N8S7816C13D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C13__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C12[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C12[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__8S7816C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
static  VTT_ENTRY vtt_S7816C12[] = {
  {&(_ZTV8S7816C12[7]),  7,120},
  {&(_ZTV8S7816C12[37]),  37,120},
  {&(_ZTV8S7816C12[67]),  67,120},
  {&(_ZTV8S7816C12[58]),  58,120},
  {&(_ZTV8S7816C12[79]),  79,120},
  {&(_ZTV8S7816C12[95]),  95,120},
  {&(_ZTV8S7816C12[113]),  113,120},
  {&(_tg__ZTV8S7816C13__8S7816C12[6]),  6,22},
  {&(_tg__ZTV7S7816C68S7816C13__8S7816C12[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C68S7816C13__8S7816C12[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C68S7816C13__8S7816C12[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C68S7816C13__8S7816C12[10]),  10,17},
  {&(_tg__ZTV7S7816C8__8S7816C13__8S7816C12[5]),  5,8},
  {&(_tg__ZTV7S7816C6__8S7816C13__8S7816C12[5]),  5,9},
  {&(_tg__ZTV7S7816C3__8S7816C13__8S7816C12[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C13__8S7816C12[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C13__8S7816C12[10]),  10,17},
  {&(_tg__ZTV7S7816C3__8S7816C12[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__8S7816C12[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C12[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__8S7816C12[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__8S7816C12[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S7816C12[];
extern  VTBL_ENTRY _ZTV8S7816C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C12[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7816C13D0Ev,_ZThn68_N8S7816C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7816C13D1Ev,_ZThn68_N8S7816C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7816C6D0Ev,_ZThn56_N7S7816C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7816C6D1Ev,_ZThn56_N7S7816C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7816C12D0Ev,_ZThn76_N8S7816C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7816C12D1Ev,_ZThn76_N8S7816C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7816C12D0Ev,_ZThn8_N8S7816C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7816C12D1Ev,_ZThn8_N8S7816C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C12 = {  "S7816C12", // class name
  bases_S7816C12, 8,
  &(vtc_S7816C12[0]), // expected_vtbl_contents
  &(vtt_S7816C12[0]), // expected_vtt_contents
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI8S7816C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7816C12),120, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7816C12),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C14  {
  ::S7816C7 s7816c14f0;
  long s7816c14f1;
  virtual void  v58(); // _ZN8S7816C143v58Ev
  virtual void  v59(); // _ZN8S7816C143v59Ev
  virtual void  v60(); // _ZN8S7816C143v60Ev
  virtual void  v61(); // _ZN8S7816C143v61Ev
  virtual void  v62(); // _ZN8S7816C143v62Ev
  virtual void  v63(); // _ZN8S7816C143v63Ev
  ~S7816C14(); // tgen
  S7816C14(); // tgen
};
//SIG(-1 S7816C14) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} Fl}


void  S7816C14 ::v58(){vfunc_called(this, "_ZN8S7816C143v58Ev");}
void  S7816C14 ::v59(){vfunc_called(this, "_ZN8S7816C143v59Ev");}
void  S7816C14 ::v60(){vfunc_called(this, "_ZN8S7816C143v60Ev");}
void  S7816C14 ::v61(){vfunc_called(this, "_ZN8S7816C143v61Ev");}
void  S7816C14 ::v62(){vfunc_called(this, "_ZN8S7816C143v62Ev");}
void  S7816C14 ::v63(){vfunc_called(this, "_ZN8S7816C143v63Ev");}
S7816C14 ::~S7816C14(){ note_dtor("S7816C14", this);} // tgen
S7816C14 ::S7816C14(){ note_ctor("S7816C14", this);} // tgen

static void Test_S7816C14()
{
  extern Class_Descriptor cd_S7816C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S7816C14, buf);
    S7816C14 *dp, &lv = *(dp=new (buf) S7816C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S7816C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C14)");
    check_field_offset(lv, s7816c14f0, ABISELECT(8,4), "S7816C14.s7816c14f0");
    check_field_offset(lv, s7816c14f1, ABISELECT(152,108), "S7816C14.s7816c14f1");
    test_class_info(&lv, &cd_S7816C14);
    dp->~S7816C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C14(Test_S7816C14, "S7816C14", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S7816C14C1Ev();
extern void _ZN8S7816C14D1Ev();
Name_Map name_map_S7816C14[] = {
  NSPAIR(_ZN8S7816C14C1Ev),
  NSPAIR(_ZN8S7816C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7816C14[];
extern void _ZN8S7816C143v58Ev();
extern void _ZN8S7816C143v59Ev();
extern void _ZN8S7816C143v60Ev();
extern void _ZN8S7816C143v61Ev();
extern void _ZN8S7816C143v62Ev();
extern void _ZN8S7816C143v63Ev();
static  VTBL_ENTRY vtc_S7816C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C14[0]),
  (VTBL_ENTRY)&_ZN8S7816C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v63Ev,
};
extern VTBL_ENTRY _ZTI8S7816C14[];
extern  VTBL_ENTRY _ZTV8S7816C14[];
Class_Descriptor cd_S7816C14 = {  "S7816C14", // class name
  0,0,//no base classes
  &(vtc_S7816C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S7816C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7816C14),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

union  S7816C15  {
  long s7816c15f0[7];
  void *s7816c15f1;
  void *s7816c15f2;
  int s7816c15f3[4];
  void  mf7816c15(); // _ZN8S7816C159mf7816c15Ev
};
//SIG(1 S7816C15) U1{ m Fl[7] Fp Fp Fi[4]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7816C10  : S7816C11 , S7816C12 , virtual S7816C14 , S7816C2 {
  ::S7816C15 s7816c10f0;
  int s7816c10f1;
  virtual  ~S7816C10(); // _ZN8S7816C10D2Ev
  virtual void  v64(); // _ZN8S7816C103v64Ev
  virtual void  v65(); // _ZN8S7816C103v65Ev
  virtual void  v66(); // _ZN8S7816C103v66Ev
  virtual void  v67(); // _ZN8S7816C103v67Ev
  virtual void  v68(); // _ZN8S7816C103v68Ev
  virtual void  v69(); // _ZN8S7816C103v69Ev
  virtual void  v70(); // _ZN8S7816C103v70Ev
  virtual void  v71(); // _ZN8S7816C103v71Ev
  S7816C10(); // tgen
};
//SIG(-1 S7816C10) C1{ BC2{ BC3{ v9 v10 v11 v12 v13 v14 v15 v16 FL} VBC4{ VBC3 v17 v18 v19 v20 v21 v22 FC3 Fi Fp} VBC5{ VBC4 vd v23 v24 v25 v26 v27 Fs[6] Fi Fs Fc[6]} VBC6{ VBC4 VBC5 vd v28 v29} VBC7{ v30 v31 v32 Fi} vd v33 v34 v35 v36 v37 v38 FC8{ VBC3 VBC4 BC5 VBC7 BC6 vd v53 v54 v55 v56} Fp} BC9{ VBC10{ VBC7 BC3 BC6 vd v39 v40 v41 v42 v43 v44 Fc[8]} BC7 v45 v46} VBC11{ v47 v48 v49 v50 v51 v52 FC8 Fl} BC5 vd v1 v2 v3 v4 v5 v6 v7 v8 FU12{ m Fl[7] Fp Fp Fi[4]} Fi}


 S7816C10 ::~S7816C10(){ note_dtor("S7816C10", this);}
void  S7816C10 ::v64(){vfunc_called(this, "_ZN8S7816C103v64Ev");}
void  S7816C10 ::v65(){vfunc_called(this, "_ZN8S7816C103v65Ev");}
void  S7816C10 ::v66(){vfunc_called(this, "_ZN8S7816C103v66Ev");}
void  S7816C10 ::v67(){vfunc_called(this, "_ZN8S7816C103v67Ev");}
void  S7816C10 ::v68(){vfunc_called(this, "_ZN8S7816C103v68Ev");}
void  S7816C10 ::v69(){vfunc_called(this, "_ZN8S7816C103v69Ev");}
void  S7816C10 ::v70(){vfunc_called(this, "_ZN8S7816C103v70Ev");}
void  S7816C10 ::v71(){vfunc_called(this, "_ZN8S7816C103v71Ev");}
S7816C10 ::S7816C10(){ note_ctor("S7816C10", this);} // tgen

static void Test_S7816C10()
{
  extern Class_Descriptor cd_S7816C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(74,101)];
    init_test(&cd_S7816C10, buf);
    S7816C10 *dp, &lv = *(dp=new (buf) S7816C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(584,400), "sizeof(S7816C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C10)");
    /*is_ambiguous_... S7816C11::S7816C4 */ AMB_check_base_class_offset(lv, (S7816C4*)(S7816C11*), 0, "S7816C10");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(320,212), "S7816C10");
    check_base_class_offset(lv, (S7816C3*)(S7816C11*), ABISELECT(280,188), "S7816C10");
    /*is_ambiguous_... S7816C10::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(280,188), "S7816C10");
    /*is_ambiguous_... S7816C10::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C6*), ABISELECT(280,188), "S7816C10");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*)(S7816C13*), ABISELECT(280,188), "S7816C10");
    /*is_ambiguous_... S7816C10::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(280,188), "S7816C10");
    check_base_class_offset(lv, (S7816C2*)(S7816C11*), ABISELECT(336,224), "S7816C10");
    /*is_ambiguous_... S7816C10::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C2*)(S7816C6*), ABISELECT(336,224), "S7816C10");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*)(S7816C13*), ABISELECT(336,224), "S7816C10");
    check_base_class_offset(lv, (S7816C6*)(S7816C11*), ABISELECT(368,252), "S7816C10");
    check_base_class_offset(lv, (S7816C8*)(S7816C11*), ABISELECT(376,256), "S7816C10");
    check_base_class_offset(lv, (S7816C8*)(S7816C13*), ABISELECT(376,256), "S7816C10");
    check_base_class_offset(lv, (S7816C11*), 0, "S7816C10");
    /*is_ambiguous_... S7816C13::S7816C4 */ AMB_check_base_class_offset(lv, (S7816C4*)(S7816C13*), ABISELECT(392,264), "S7816C10");
    check_base_class_offset(lv, (S7816C6*)(S7816C13*), ABISELECT(408,276), "S7816C10");
    check_base_class_offset(lv, (S7816C13*)(S7816C12*), ABISELECT(392,264), "S7816C10");
    /*is_ambiguous_... S7816C12::S7816C8 */ AMB_check_base_class_offset(lv, (S7816C8*)(S7816C12*), ABISELECT(168,120), "S7816C10");
    check_base_class_offset(lv, (S7816C12*), ABISELECT(168,120), "S7816C10");
    check_base_class_offset(lv, (S7816C14*), ABISELECT(424,288), "S7816C10");
    /*is_ambiguous_... S7816C10::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C2*), ABISELECT(184,128), "S7816C10");
    check_field_offset(lv, s7816c10f0, ABISELECT(216,156), "S7816C10.s7816c10f0");
    check_field_offset(lv, s7816c10f1, ABISELECT(272,184), "S7816C10.s7816c10f1");
    test_class_info(&lv, &cd_S7816C10);
    dp->~S7816C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C10(Test_S7816C10, "S7816C10", ABISELECT(584,400));

#else // __cplusplus

extern void _ZN8S7816C10C1Ev();
extern void _ZN8S7816C10D2Ev();
Name_Map name_map_S7816C10[] = {
  NSPAIR(_ZN8S7816C10C1Ev),
  NSPAIR(_ZN8S7816C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C11;
extern VTBL_ENTRY _ZTI8S7816C11[];
extern  VTBL_ENTRY _ZTV8S7816C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C11[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C13;
extern VTBL_ENTRY _ZTI8S7816C13[];
extern  VTBL_ENTRY _ZTV8S7816C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C13[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C12;
extern VTBL_ENTRY _ZTI8S7816C12[];
extern  VTBL_ENTRY _ZTV8S7816C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C12[];
extern Class_Descriptor cd_S7816C14;
extern VTBL_ENTRY _ZTI8S7816C14[];
extern  VTBL_ENTRY _ZTV8S7816C14[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
static Base_Class bases_S7816C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7816C4,    ABISELECT(320,212), //bcp->offset
    73, //bcp->virtual_function_table_offset
    10, //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_S7816C3,    ABISELECT(280,188), //bcp->offset
    58, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7816C2,    ABISELECT(336,224), //bcp->offset
    91, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7816C6,    ABISELECT(368,252), //bcp->offset
    108, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7816C8,    ABISELECT(376,256), //bcp->offset
    120, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7816C11,    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_S7816C4,    ABISELECT(392,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7816C6,    ABISELECT(408,276), //bcp->offset
    167, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7816C13,    ABISELECT(392,264), //bcp->offset
    128, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7816C8,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7816C12,    ABISELECT(168,120), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7816C14,    ABISELECT(424,288), //bcp->offset
    176, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C2,    ABISELECT(184,128), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7816C10[];
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C10D1Ev();
extern void _ZN8S7816C10D0Ev();
extern void _ZN8S7816C113v44Ev();
extern void _ZN8S7816C113v45Ev();
extern void _ZN8S7816C113v46Ev();
extern void _ZN8S7816C113v47Ev();
extern void _ZN8S7816C113v48Ev();
extern void _ZN8S7816C113v49Ev();
extern void _ZN8S7816C103v64Ev();
extern void _ZN8S7816C103v65Ev();
extern void _ZN8S7816C103v66Ev();
extern void _ZN8S7816C103v67Ev();
extern void _ZN8S7816C103v68Ev();
extern void _ZN8S7816C103v69Ev();
extern void _ZN8S7816C103v70Ev();
extern void _ZN8S7816C103v71Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN8S7816C123v56Ev();
extern void _ZN8S7816C123v57Ev();
extern void ABISELECT(_ZThn168_N8S7816C10D1Ev,_ZThn120_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn168_N8S7816C10D0Ev,_ZThn120_N8S7816C10D0Ev)();
extern void ABISELECT(_ZThn184_N8S7816C10D1Ev,_ZThn128_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn184_N8S7816C10D0Ev,_ZThn128_N8S7816C10D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S7816C10D1Ev,_ZTv0_n20_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn336_N8S7816C10D1Ev,_ZThn224_N8S7816C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C10D0Ev,_ZTv0_n20_N8S7816C10D0Ev)();
extern void ABISELECT(_ZThn336_N8S7816C10D0Ev,_ZThn224_N8S7816C10D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void ABISELECT(_ZTv0_n48_N8S7816C10D1Ev,_ZTv0_n24_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn368_N8S7816C10D1Ev,_ZThn252_N8S7816C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7816C10D0Ev,_ZTv0_n24_N8S7816C10D0Ev)();
extern void ABISELECT(_ZThn368_N8S7816C10D0Ev,_ZThn252_N8S7816C10D0Ev)() __attribute__((weak));
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7816C10D1Ev,_ZTv0_n60_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn392_N8S7816C10D1Ev,_ZThn264_N8S7816C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7816C10D0Ev,_ZTv0_n60_N8S7816C10D0Ev)();
extern void ABISELECT(_ZThn392_N8S7816C10D0Ev,_ZThn264_N8S7816C10D0Ev)() __attribute__((weak));
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
extern void ABISELECT(_ZTvn16_n120_N8S7816C10D1Ev,_ZTvn12_n60_N8S7816C10D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7816C10D0Ev,_ZTvn12_n60_N8S7816C10D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN8S7816C143v58Ev();
extern void _ZN8S7816C143v59Ev();
extern void _ZN8S7816C143v60Ev();
extern void _ZN8S7816C143v61Ev();
extern void _ZN8S7816C143v62Ev();
extern void _ZN8S7816C143v63Ev();
static  VTBL_ENTRY vtc_S7816C10[] = {
  ABISELECT(424,288),
  ABISELECT(392,264),
  ABISELECT(376,256),
  ABISELECT(368,252),
  ABISELECT(336,224),
  ABISELECT(320,212),
  ABISELECT(280,188),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v49Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v64Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v65Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v66Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v67Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v68Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v69Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v70Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v71Ev,
  ABISELECT(168,104),
  ABISELECT(152,92),
  ABISELECT(112,68),
  ABISELECT(208,136),
  ABISELECT(224,144),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v57Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7816C10D1Ev,_ZThn120_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7816C10D0Ev,_ZThn120_N8S7816C10D0Ev),
  ABISELECT(136,84),
  ABISELECT(96,60),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7816C10D1Ev,_ZThn128_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7816C10D0Ev,_ZThn128_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-336,-224),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C10D1Ev,_ZTv0_n20_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C10D0Ev,_ZTv0_n20_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  0,
  0,
  ABISELECT(-368,-252),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-368,-252),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C10D1Ev,_ZTv0_n24_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C10D0Ev,_ZTv0_n24_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-376,-256),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-264),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-72,-52),
  ABISELECT(-112,-76),
  ABISELECT(-16,-8),
  ABISELECT(-392,-264),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C10D1Ev,_ZTv0_n60_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C10D0Ev,_ZTv0_n60_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  ABISELECT(-408,-276),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C10D1Ev,_ZTvn12_n60_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C10D0Ev,_ZTvn12_n60_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-288),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN8S7816C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v63Ev,
};
extern VTBL_ENTRY _ZTV8S7816C10[];
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C11D1Ev();
extern void _ZN8S7816C11D0Ev();
extern void _ZN8S7816C113v44Ev();
extern void _ZN8S7816C113v45Ev();
extern void _ZN8S7816C113v46Ev();
extern void _ZN8S7816C113v47Ev();
extern void _ZN8S7816C113v48Ev();
extern void _ZN8S7816C113v49Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C11__8S7816C10[] = {
  ABISELECT(376,256),
  ABISELECT(368,252),
  ABISELECT(336,224),
  ABISELECT(320,212),
  ABISELECT(280,188),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v49Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C11__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C11__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev)();
extern void ABISELECT(_ZThn336_N8S7816C11D1Ev,_ZThn224_N8S7816C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev)();
extern void ABISELECT(_ZThn336_N8S7816C11D0Ev,_ZThn224_N8S7816C11D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C11__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-336,-224),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev)();
extern void ABISELECT(_ZThn368_N8S7816C11D1Ev,_ZThn252_N8S7816C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev)();
extern void ABISELECT(_ZThn368_N8S7816C11D0Ev,_ZThn252_N8S7816C11D0Ev)() __attribute__((weak));
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C11__8S7816C10[] = {
  0,
  0,
  ABISELECT(-368,-252),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-368,-252),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C11__8S7816C10[] = {
  0,
  0,
  0,
  ABISELECT(-376,-256),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN8S7816C123v56Ev();
extern void _ZN8S7816C123v57Ev();
extern void _ZN8S7816C12D1Ev();
extern void _ZN8S7816C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C12__8S7816C10[] = {
  ABISELECT(168,104),
  ABISELECT(152,92),
  ABISELECT(112,68),
  ABISELECT(208,136),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v57Ev,
  (VTBL_ENTRY)&_ZN8S7816C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C12D0Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev)();
extern void ABISELECT(_ZThn224_N8S7816C12D1Ev,_ZThn144_N8S7816C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev)();
extern void ABISELECT(_ZThn224_N8S7816C12D0Ev,_ZThn144_N8S7816C12D0Ev)() __attribute__((weak));
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C13__8S7816C12__8S7816C10[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-72,-52),
  ABISELECT(-112,-76),
  ABISELECT(-16,-8),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C12__8S7816C10[] = {
  0,
  0,
  0,
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S7816C12D1Ev,_ZTvn12_n60_N8S7816C12D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7816C12D0Ev,_ZTvn12_n60_N8S7816C12D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C68S7816C13__8S7816C12__8S7816C10[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C12D1Ev,_ZTvn12_n60_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C12D0Ev,_ZTvn12_n60_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C12__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C12__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-92),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev)();
extern void ABISELECT(_ZThn168_N8S7816C12D1Ev,_ZThn104_N8S7816C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev)();
extern void ABISELECT(_ZThn168_N8S7816C12D0Ev,_ZThn104_N8S7816C12D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C12__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-104),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A__8S7816C10[] = {
  ABISELECT(136,84),
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__A__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__A__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C10[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C10[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C6__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C6__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C6__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C13D1Ev();
extern void _ZN8S7816C13D0Ev();
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C13__8S7816C10[] = {
  ABISELECT(-56,-40),
  ABISELECT(-72,-52),
  ABISELECT(-112,-76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C68S7816C13__A1__8S7816C10[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C68S7816C13__A1__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(128,88),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C68S7816C13__A1__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C68S7816C13__A1__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,52),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C13__8S7816C10[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C13__8S7816C10[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-64),
  ABISELECT(-128,-88),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C13__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(112,76),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C13__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C13__8S7816C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
static  VTT_ENTRY vtt_S7816C10[] = {
  {&(_ZTV8S7816C10[9]),  9,190},
  {&(_tg__ZTV8S7816C11__8S7816C10[7]),  7,23},
  {&(_tg__ZTV7S7816C3__8S7816C11__8S7816C10[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C11__8S7816C10[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C11__8S7816C10[10]),  10,17},
  {&(_tg__ZTV7S7816C6__8S7816C11__8S7816C10[8]),  8,12},
  {&(_tg__ZTV7S7816C8__8S7816C11__8S7816C10[5]),  5,8},
  {&(_tg__ZTV8S7816C12__8S7816C10[7]),  7,14},
  {&(_tg__ZTV8S7816C13__8S7816C12__8S7816C10[23]),  23,39},
  {&(_tg__ZTV7S7816C8__8S7816C12__8S7816C10[5]),  5,8},
  {&(_tg__ZTV7S7816C68S7816C13__8S7816C12__8S7816C10[5]),  5,9},
  {&(_tg__ZTV7S7816C3__8S7816C12__8S7816C10[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C12__8S7816C10[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C12__8S7816C10[10]),  10,17},
  {&(_tg__ZTV7S7816C2__A__8S7816C10[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__A__8S7816C10[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__A__8S7816C10[10]),  10,18},
  {&(_ZTV8S7816C10[67]),  67,190},
  {&(_ZTV8S7816C10[83]),  83,190},
  {&(_ZTV8S7816C10[101]),  101,190},
  {&(_ZTV8S7816C10[116]),  116,190},
  {&(_ZTV8S7816C10[125]),  125,190},
  {&(_ZTV8S7816C10[40]),  40,190},
  {&(_ZTV8S7816C10[151]),  151,190},
  {&(_ZTV8S7816C10[172]),  172,190},
  {&(_ZTV8S7816C10[184]),  184,190},
  {&(_ZTV8S7816C10[51]),  51,190},
  {&(_tg__ZTV7S7816C3__8S7816C10[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__8S7816C10[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C10[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__8S7816C10[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__8S7816C10[10]),  10,18},
  {&(_tg__ZTV7S7816C6__8S7816C10[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C6__8S7816C10[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C6__8S7816C10[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C6__8S7816C10[10]),  10,17},
  {&(_tg__ZTV8S7816C13__8S7816C10[6]),  6,22},
  {&(_tg__ZTV7S7816C68S7816C13__A1__8S7816C10[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C68S7816C13__A1__8S7816C10[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C68S7816C13__A1__8S7816C10[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C68S7816C13__A1__8S7816C10[10]),  10,17},
  {&(_tg__ZTV7S7816C8__8S7816C13__8S7816C10[5]),  5,8},
  {&(_tg__ZTV7S7816C6__8S7816C13__8S7816C10[5]),  5,9},
  {&(_tg__ZTV7S7816C3__8S7816C13__8S7816C10[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C13__8S7816C10[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C13__8S7816C10[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S7816C10[];
extern  VTBL_ENTRY _ZTV8S7816C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C10[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7816C12D0Ev,_ZThn104_N8S7816C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7816C12D1Ev,_ZThn104_N8S7816C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7816C12D0Ev,_ZThn144_N8S7816C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7816C12D1Ev,_ZThn144_N8S7816C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7816C11D0Ev,_ZThn252_N8S7816C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7816C11D1Ev,_ZThn252_N8S7816C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7816C11D0Ev,_ZThn224_N8S7816C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7816C11D1Ev,_ZThn224_N8S7816C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C10D0Ev,_ZTv0_n60_N8S7816C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S7816C10D0Ev,_ZThn264_N8S7816C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C10D1Ev,_ZTv0_n60_N8S7816C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S7816C10D1Ev,_ZThn264_N8S7816C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7816C10D0Ev,_ZTv0_n24_N8S7816C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7816C10D0Ev,_ZThn252_N8S7816C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7816C10D1Ev,_ZTv0_n24_N8S7816C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S7816C10D1Ev,_ZThn252_N8S7816C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C10D0Ev,_ZTv0_n20_N8S7816C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7816C10D0Ev,_ZThn224_N8S7816C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C10D1Ev,_ZTv0_n20_N8S7816C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S7816C10D1Ev,_ZThn224_N8S7816C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C10 = {  "S7816C10", // class name
  bases_S7816C10, 14,
  &(vtc_S7816C10[0]), // expected_vtbl_contents
  &(vtt_S7816C10[0]), // expected_vtt_contents
  ABISELECT(584,400), // object size
  NSPAIRA(_ZTI8S7816C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7816C10),190, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7816C10),46, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7816C1  : S7816C2 , S7816C5 , virtual S7816C9 , S7816C10 {
  int s7816c1f0;
  long s7816c1f1;
  virtual  ~S7816C1(); // _ZN7S7816C1D2Ev
  virtual void  v1(); // _ZN7S7816C12v1Ev
  virtual void  v2(); // _ZN7S7816C12v2Ev
  virtual void  v3(); // _ZN7S7816C12v3Ev
  virtual void  v4(); // _ZN7S7816C12v4Ev
  virtual void  v5(); // _ZN7S7816C12v5Ev
  virtual void  v6(); // _ZN7S7816C12v6Ev
  virtual void  v7(); // _ZN7S7816C12v7Ev
  S7816C1(); // tgen
};
//SIG(1 S7816C1) C1{ BC2{ VBC3{ VBC4{ v8 v9 v10 v11 v12 v13 v14 v15 FL} v16 v17 v18 v19 v20 v21 FC4 Fi Fp} vd v22 v23 v24 v25 v26 Fs[6] Fi Fs Fc[6]} BC5{ VBC4 VBC3 VBC6{ VBC3 VBC2 vd v27 v28} VBC7{ VBC4 VBC3 BC2 VBC8{ v29 v30 v31 Fi} BC6 vd v32 v33 v34 v35} vd v36 v37 v38 v39 v40 v41 v42 Fc} VBC9{ v43 Fp} BC10{ BC11{ BC4 VBC3 VBC2 VBC6 VBC8 vd v44 v45 v46 v47 v48 v49 FC7 Fp} BC12{ VBC13{ VBC8 BC4 BC6 vd v50 v51 v52 v53 v54 v55 Fc[8]} BC8 v56 v57} VBC14{ v58 v59 v60 v61 v62 v63 FC7 Fl} BC2 vd v64 v65 v66 v67 v68 v69 v70 v71 FU15{ m Fl[7] Fp Fp Fi[4]} Fi} vd v1 v2 v3 v4 v5 v6 v7 Fi Fl}


 S7816C1 ::~S7816C1(){ note_dtor("S7816C1", this);}
void  S7816C1 ::v1(){vfunc_called(this, "_ZN7S7816C12v1Ev");}
void  S7816C1 ::v2(){vfunc_called(this, "_ZN7S7816C12v2Ev");}
void  S7816C1 ::v3(){vfunc_called(this, "_ZN7S7816C12v3Ev");}
void  S7816C1 ::v4(){vfunc_called(this, "_ZN7S7816C12v4Ev");}
void  S7816C1 ::v5(){vfunc_called(this, "_ZN7S7816C12v5Ev");}
void  S7816C1 ::v6(){vfunc_called(this, "_ZN7S7816C12v6Ev");}
void  S7816C1 ::v7(){vfunc_called(this, "_ZN7S7816C12v7Ev");}
S7816C1 ::S7816C1(){ note_ctor("S7816C1", this);} // tgen

static void Test_S7816C1()
{
  extern Class_Descriptor cd_S7816C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(87,121)];
    init_test(&cd_S7816C1, buf);
    S7816C1 *dp, &lv = *(dp=new (buf) S7816C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,480), "sizeof(S7816C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7816C1)");
    check_base_class_offset(lv, (S7816C4*)(S7816C3*), ABISELECT(376,256), "S7816C1");
    check_base_class_offset(lv, (S7816C4*)(S7816C5*), ABISELECT(376,256), "S7816C1");
    check_base_class_offset(lv, (S7816C4*)(S7816C7*), ABISELECT(376,256), "S7816C1");
    /*is_ambiguous_... S7816C1::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(336,232), "S7816C1");
    check_base_class_offset(lv, (S7816C3*)(S7816C5*), ABISELECT(336,232), "S7816C1");
    /*is_ambiguous_... S7816C1::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C6*), ABISELECT(336,232), "S7816C1");
    /*is_ambiguous_... S7816C1::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*), ABISELECT(336,232), "S7816C1");
    check_base_class_offset(lv, (S7816C3*)(S7816C7*), ABISELECT(336,232), "S7816C1");
    /*is_ambiguous_... S7816C7::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*)(S7816C7*), ABISELECT(336,232), "S7816C1");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*)(S7816C7*), ABISELECT(336,232), "S7816C1");
    check_base_class_offset(lv, (S7816C3*)(S7816C11*)(S7816C10*), ABISELECT(336,232), "S7816C1");
    check_base_class_offset(lv, (S7816C3*)(S7816C6*)(S7816C13*), ABISELECT(336,232), "S7816C1");
    /*is_ambiguous_... S7816C10::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C3*)(S7816C2*)(S7816C10*), ABISELECT(336,232), "S7816C1");
    /*is_ambiguous_... S7816C1::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C2*), 0, "S7816C1");
    /*is_ambiguous_... S7816C1::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C2*)(S7816C6*), ABISELECT(392,268), "S7816C1");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*)(S7816C7*), ABISELECT(392,268), "S7816C1");
    check_base_class_offset(lv, (S7816C2*)(S7816C11*)(S7816C10*), ABISELECT(392,268), "S7816C1");
    check_base_class_offset(lv, (S7816C2*)(S7816C6*)(S7816C13*), ABISELECT(392,268), "S7816C1");
    /*is_ambiguous_... S7816C5::S7816C6 */ AMB_check_base_class_offset(lv, (S7816C6*)(S7816C5*), ABISELECT(32,28), "S7816C1");
    check_base_class_offset(lv, (S7816C6*)(S7816C11*)(S7816C10*), ABISELECT(32,28), "S7816C1");
    /*is_ambiguous_... S7816C7::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C2*)(S7816C7*), ABISELECT(424,296), "S7816C1");
    check_base_class_offset(lv, (S7816C8*)(S7816C7*), ABISELECT(464,328), "S7816C1");
    check_base_class_offset(lv, (S7816C8*)(S7816C11*)(S7816C10*), ABISELECT(464,328), "S7816C1");
    check_base_class_offset(lv, (S7816C8*)(S7816C13*), ABISELECT(464,328), "S7816C1");
    check_base_class_offset(lv, (S7816C6*)(S7816C7*), ABISELECT(456,324), "S7816C1");
    check_base_class_offset(lv, (S7816C7*)(S7816C5*), ABISELECT(424,296), "S7816C1");
    check_base_class_offset(lv, (S7816C5*), ABISELECT(32,28), "S7816C1");
    check_base_class_offset(lv, (S7816C9*), ABISELECT(480,336), "S7816C1");
    /*is_ambiguous_... S7816C11::S7816C4 */ AMB_check_base_class_offset(lv, (S7816C4*)(S7816C11*)(S7816C10*), ABISELECT(48,36), "S7816C1");
    check_base_class_offset(lv, (S7816C11*)(S7816C10*), ABISELECT(48,36), "S7816C1");
    /*is_ambiguous_... S7816C13::S7816C4 */ AMB_check_base_class_offset(lv, (S7816C4*)(S7816C13*), ABISELECT(496,344), "S7816C1");
    check_base_class_offset(lv, (S7816C6*)(S7816C13*), ABISELECT(512,356), "S7816C1");
    check_base_class_offset(lv, (S7816C13*)(S7816C12*)(S7816C10*), ABISELECT(496,344), "S7816C1");
    /*is_ambiguous_... S7816C12::S7816C8 */ AMB_check_base_class_offset(lv, (S7816C8*)(S7816C12*)(S7816C10*), ABISELECT(216,156), "S7816C1");
    check_base_class_offset(lv, (S7816C12*)(S7816C10*), ABISELECT(216,156), "S7816C1");
    check_base_class_offset(lv, (S7816C14*)(S7816C10*), ABISELECT(528,368), "S7816C1");
    /*is_ambiguous_... S7816C10::S7816C2 */ AMB_check_base_class_offset(lv, (S7816C2*)(S7816C10*), ABISELECT(232,164), "S7816C1");
    check_base_class_offset(lv, (S7816C10*), ABISELECT(48,36), "S7816C1");
    check_field_offset(lv, s7816c1f0, ABISELECT(324,224), "S7816C1.s7816c1f0");
    check_field_offset(lv, s7816c1f1, ABISELECT(328,228), "S7816C1.s7816c1f1");
    test_class_info(&lv, &cd_S7816C1);
    dp->~S7816C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7816C1(Test_S7816C1, "S7816C1", ABISELECT(688,480));

#else // __cplusplus

extern void _ZN7S7816C1C1Ev();
extern void _ZN7S7816C1D2Ev();
Name_Map name_map_S7816C1[] = {
  NSPAIR(_ZN7S7816C1C1Ev),
  NSPAIR(_ZN7S7816C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C3;
extern VTBL_ENTRY _ZTI7S7816C3[];
extern  VTBL_ENTRY _ZTV7S7816C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C3[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C7;
extern VTBL_ENTRY _ZTI7S7816C7[];
extern  VTBL_ENTRY _ZTV7S7816C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C7[];
extern Class_Descriptor cd_S7816C5;
extern VTBL_ENTRY _ZTI7S7816C5[];
extern  VTBL_ENTRY _ZTV7S7816C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C5[];
extern Class_Descriptor cd_S7816C9;
extern VTBL_ENTRY _ZTI7S7816C9[];
extern  VTBL_ENTRY _ZTV7S7816C9[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C11;
extern VTBL_ENTRY _ZTI8S7816C11[];
extern  VTBL_ENTRY _ZTV8S7816C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C11[];
extern Class_Descriptor cd_S7816C4;
extern VTBL_ENTRY _ZTI7S7816C4[];
extern  VTBL_ENTRY _ZTV7S7816C4[];
extern Class_Descriptor cd_S7816C6;
extern VTBL_ENTRY _ZTI7S7816C6[];
extern  VTBL_ENTRY _ZTV7S7816C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C6[];
extern Class_Descriptor cd_S7816C13;
extern VTBL_ENTRY _ZTI8S7816C13[];
extern  VTBL_ENTRY _ZTV8S7816C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C13[];
extern Class_Descriptor cd_S7816C8;
extern VTBL_ENTRY _ZTI7S7816C8[];
extern  VTBL_ENTRY _ZTV7S7816C8[];
extern Class_Descriptor cd_S7816C12;
extern VTBL_ENTRY _ZTI8S7816C12[];
extern  VTBL_ENTRY _ZTV8S7816C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C12[];
extern Class_Descriptor cd_S7816C14;
extern VTBL_ENTRY _ZTI8S7816C14[];
extern  VTBL_ENTRY _ZTV8S7816C14[];
extern Class_Descriptor cd_S7816C2;
extern VTBL_ENTRY _ZTI7S7816C2[];
extern  VTBL_ENTRY _ZTV7S7816C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C2[];
extern Class_Descriptor cd_S7816C10;
extern VTBL_ENTRY _ZTI8S7816C10[];
extern  VTBL_ENTRY _ZTV8S7816C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7816C10[];
static Base_Class bases_S7816C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7816C4,    ABISELECT(376,256), //bcp->offset
    120, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7816C3,    ABISELECT(336,232), //bcp->offset
    105, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7816C2,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7816C2,    ABISELECT(392,268), //bcp->offset
    138, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7816C6,    ABISELECT(32,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7816C2,    ABISELECT(424,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7816C8,    ABISELECT(464,328), //bcp->offset
    193, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7816C6,    ABISELECT(456,324), //bcp->offset
    184, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7816C7,    ABISELECT(424,296), //bcp->offset
    155, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7816C5,    ABISELECT(32,28), //bcp->offset
    25, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7816C9,    ABISELECT(480,336), //bcp->offset
    201, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7816C4,    ABISELECT(48,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
    16, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7816C11,    ABISELECT(48,36), //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
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7816C4,    ABISELECT(496,344), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S7816C6,    ABISELECT(512,356), //bcp->offset
    244, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7816C13,    ABISELECT(496,344), //bcp->offset
    205, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7816C8,    ABISELECT(216,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7816C12,    ABISELECT(216,156), //bcp->offset
    80, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7816C14,    ABISELECT(528,368), //bcp->offset
    253, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7816C2,    ABISELECT(232,164), //bcp->offset
    94, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7816C10,    ABISELECT(48,36), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7816C1[];
extern void _ZN7S7816C1D1Ev();
extern void _ZN7S7816C1D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C12v1Ev();
extern void _ZN7S7816C12v2Ev();
extern void _ZN7S7816C12v3Ev();
extern void _ZN7S7816C12v4Ev();
extern void _ZN7S7816C12v5Ev();
extern void _ZN7S7816C12v6Ev();
extern void _ZN7S7816C12v7Ev();
extern void ABISELECT(_ZTv0_n48_N7S7816C1D1Ev,_ZTv0_n24_N7S7816C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7816C1D1Ev,_ZThn28_N7S7816C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7816C1D0Ev,_ZTv0_n24_N7S7816C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7816C1D0Ev,_ZThn28_N7S7816C1D0Ev)() __attribute__((weak));
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C53v36Ev();
extern void _ZN7S7816C53v37Ev();
extern void _ZN7S7816C53v38Ev();
extern void _ZN7S7816C53v39Ev();
extern void _ZN7S7816C53v40Ev();
extern void _ZN7S7816C53v41Ev();
extern void _ZN7S7816C53v42Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZThn48_N7S7816C1D1Ev,_ZThn36_N7S7816C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7816C1D0Ev,_ZThn36_N7S7816C1D0Ev)();
extern void _ZN8S7816C113v44Ev();
extern void _ZN8S7816C113v45Ev();
extern void _ZN8S7816C113v46Ev();
extern void _ZN8S7816C113v47Ev();
extern void _ZN8S7816C113v48Ev();
extern void _ZN8S7816C113v49Ev();
extern void _ZN8S7816C103v64Ev();
extern void _ZN8S7816C103v65Ev();
extern void _ZN8S7816C103v66Ev();
extern void _ZN8S7816C103v67Ev();
extern void _ZN8S7816C103v68Ev();
extern void _ZN8S7816C103v69Ev();
extern void _ZN8S7816C103v70Ev();
extern void _ZN8S7816C103v71Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN8S7816C123v56Ev();
extern void _ZN8S7816C123v57Ev();
extern void ABISELECT(_ZThn216_N7S7816C1D1Ev,_ZThn156_N7S7816C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S7816C1D0Ev,_ZThn156_N7S7816C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7816C1D1Ev,_ZThn164_N7S7816C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7816C1D0Ev,_ZThn164_N7S7816C1D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n40_N7S7816C1D1Ev,_ZTv0_n20_N7S7816C1D1Ev)();
extern void ABISELECT(_ZThn392_N7S7816C1D1Ev,_ZThn268_N7S7816C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C1D0Ev,_ZTv0_n20_N7S7816C1D0Ev)();
extern void ABISELECT(_ZThn392_N7S7816C1D0Ev,_ZThn268_N7S7816C1D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S7816C1D1Ev,_ZTv0_n28_N7S7816C1D1Ev)();
extern void ABISELECT(_ZThn424_N7S7816C1D1Ev,_ZThn296_N7S7816C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7816C1D0Ev,_ZTv0_n28_N7S7816C1D0Ev)();
extern void ABISELECT(_ZThn424_N7S7816C1D0Ev,_ZThn296_N7S7816C1D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C73v32Ev();
extern void _ZN7S7816C73v33Ev();
extern void _ZN7S7816C73v34Ev();
extern void _ZN7S7816C73v35Ev();
extern void ABISELECT(_ZTvn32_n56_N7S7816C1D1Ev,_ZTvn28_n28_N7S7816C1D1Ev)();
extern void ABISELECT(_ZTvn32_n56_N7S7816C1D0Ev,_ZTvn28_n28_N7S7816C1D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN7S7816C93v43Ev();
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N7S7816C1D1Ev,_ZTv0_n60_N7S7816C1D1Ev)();
extern void ABISELECT(_ZThn496_N7S7816C1D1Ev,_ZThn344_N7S7816C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S7816C1D0Ev,_ZTv0_n60_N7S7816C1D0Ev)();
extern void ABISELECT(_ZThn496_N7S7816C1D0Ev,_ZThn344_N7S7816C1D0Ev)() __attribute__((weak));
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
extern void ABISELECT(_ZTvn16_n120_N7S7816C1D1Ev,_ZTvn12_n60_N7S7816C1D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N7S7816C1D0Ev,_ZTvn12_n60_N7S7816C1D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN8S7816C143v58Ev();
extern void _ZN8S7816C143v59Ev();
extern void _ZN8S7816C143v60Ev();
extern void _ZN8S7816C143v61Ev();
extern void _ZN8S7816C143v62Ev();
extern void _ZN8S7816C143v63Ev();
static  VTBL_ENTRY vtc_S7816C1[] = {
  ABISELECT(528,368),
  ABISELECT(496,344),
  ABISELECT(480,336),
  ABISELECT(464,328),
  ABISELECT(424,296),
  ABISELECT(392,268),
  ABISELECT(32,28),
  ABISELECT(376,256),
  ABISELECT(336,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7816C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7816C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7816C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7816C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7816C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7816C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7816C12v7Ev,
  ABISELECT(432,300),
  ABISELECT(392,268),
  0,
  0,
  0,
  ABISELECT(-32,-28),
  ABISELECT(360,240),
  ABISELECT(344,228),
  ABISELECT(304,204),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7816C1D1Ev,_ZTv0_n24_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7816C1D0Ev,_ZTv0_n24_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v36Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v37Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v38Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v39Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v40Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v41Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v42Ev,
  ABISELECT(480,332),
  ABISELECT(448,308),
  ABISELECT(416,292),
  ABISELECT(-16,-8),
  ABISELECT(344,232),
  ABISELECT(328,220),
  ABISELECT(288,196),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7816C1D1Ev,_ZThn36_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7816C1D0Ev,_ZThn36_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7816C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v49Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v64Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v65Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v66Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v67Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v68Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v69Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v70Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v71Ev,
  ABISELECT(176,112),
  ABISELECT(160,100),
  ABISELECT(120,76),
  ABISELECT(248,172),
  ABISELECT(280,188),
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v57Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S7816C1D1Ev,_ZThn156_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S7816C1D0Ev,_ZThn156_N7S7816C1D0Ev),
  ABISELECT(144,92),
  ABISELECT(104,68),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7816C1D1Ev,_ZThn164_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7816C1D0Ev,_ZThn164_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-336,-232),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-256),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-268),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-392,-268),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C1D1Ev,_ZTv0_n20_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C1D0Ev,_ZTv0_n20_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  ABISELECT(32,28),
  ABISELECT(32,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-296),
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-424,-296),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7816C1D1Ev,_ZTv0_n28_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7816C1D0Ev,_ZTv0_n28_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v35Ev,
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  ABISELECT(-456,-324),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7816C1D1Ev,_ZTvn28_n28_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7816C1D0Ev,_ZTvn28_n28_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  ABISELECT(-464,-328),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  0,
  ABISELECT(-480,-336),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C93v43Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-496,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  ABISELECT(-496,-344),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7816C1D1Ev,_ZTv0_n60_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S7816C1D0Ev,_ZTv0_n60_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-512,-356),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N7S7816C1D1Ev,_ZTvn12_n60_N7S7816C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N7S7816C1D0Ev,_ZTvn12_n60_N7S7816C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-368),
  (VTBL_ENTRY)&(_ZTI7S7816C1[0]),
  (VTBL_ENTRY)&_ZN8S7816C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v63Ev,
};
extern VTBL_ENTRY _ZTV7S7816C1[];
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A__7S7816C1[] = {
  ABISELECT(376,256),
  ABISELECT(336,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__A__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-336,-232),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__A__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-256),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7816C5D1Ev,_ZTv0_n24_N7S7816C5D1Ev)();
extern void _ZN7S7816C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7816C5D0Ev,_ZTv0_n24_N7S7816C5D0Ev)();
extern void _ZN7S7816C5D0Ev() __attribute__((weak));
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
extern void _ZN7S7816C53v36Ev();
extern void _ZN7S7816C53v37Ev();
extern void _ZN7S7816C53v38Ev();
extern void _ZN7S7816C53v39Ev();
extern void _ZN7S7816C53v40Ev();
extern void _ZN7S7816C53v41Ev();
extern void _ZN7S7816C53v42Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C5__7S7816C1[] = {
  ABISELECT(432,300),
  ABISELECT(392,268),
  0,
  0,
  0,
  0,
  ABISELECT(360,240),
  ABISELECT(344,228),
  ABISELECT(304,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7816C5D1Ev,_ZTv0_n24_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7816C5D0Ev,_ZTv0_n24_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v36Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v37Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v38Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v39Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v40Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v41Ev,
  (VTBL_ENTRY)&_ZN7S7816C53v42Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C5__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-228),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C5__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C5D1Ev,_ZTv0_n20_N7S7816C5D1Ev)();
extern void ABISELECT(_ZThn360_N7S7816C5D1Ev,_ZThn240_N7S7816C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C5D0Ev,_ZTv0_n20_N7S7816C5D0Ev)();
extern void ABISELECT(_ZThn360_N7S7816C5D0Ev,_ZThn240_N7S7816C5D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C5__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-240),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-360,-240),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C5D1Ev,_ZTv0_n20_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C5D0Ev,_ZTv0_n20_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7816C5D1Ev,_ZTv0_n28_N7S7816C5D1Ev)();
extern void ABISELECT(_ZThn392_N7S7816C5D1Ev,_ZThn268_N7S7816C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7816C5D0Ev,_ZTv0_n28_N7S7816C5D0Ev)();
extern void ABISELECT(_ZThn392_N7S7816C5D0Ev,_ZThn268_N7S7816C5D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C73v32Ev();
extern void _ZN7S7816C73v33Ev();
extern void _ZN7S7816C73v34Ev();
extern void _ZN7S7816C73v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C7__7S7816C5__7S7816C1[] = {
  ABISELECT(32,28),
  ABISELECT(32,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-268),
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-392,-268),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7816C5D1Ev,_ZTv0_n28_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7816C5D0Ev,_ZTv0_n28_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v35Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__7S7816C5__7S7816C1[] = {
  0,
  0,
  0,
  ABISELECT(-432,-300),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZTvn32_n56_N7S7816C5D1Ev,_ZTvn28_n28_N7S7816C5D1Ev)();
extern void ABISELECT(_ZTvn32_n56_N7S7816C5D0Ev,_ZTvn28_n28_N7S7816C5D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C67S7816C7__A1__7S7816C5__7S7816C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  ABISELECT(-424,-296),
  (VTBL_ENTRY)&(_ZTI7S7816C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7816C5D1Ev,_ZTvn28_n28_N7S7816C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n56_N7S7816C5D0Ev,_ZTvn28_n28_N7S7816C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C10D1Ev();
extern void _ZN8S7816C10D0Ev();
extern void _ZN8S7816C113v44Ev();
extern void _ZN8S7816C113v45Ev();
extern void _ZN8S7816C113v46Ev();
extern void _ZN8S7816C113v47Ev();
extern void _ZN8S7816C113v48Ev();
extern void _ZN8S7816C113v49Ev();
extern void _ZN8S7816C103v64Ev();
extern void _ZN8S7816C103v65Ev();
extern void _ZN8S7816C103v66Ev();
extern void _ZN8S7816C103v67Ev();
extern void _ZN8S7816C103v68Ev();
extern void _ZN8S7816C103v69Ev();
extern void _ZN8S7816C103v70Ev();
extern void _ZN8S7816C103v71Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C10__7S7816C1[] = {
  ABISELECT(480,332),
  ABISELECT(448,308),
  ABISELECT(416,292),
  ABISELECT(-16,-8),
  ABISELECT(344,232),
  ABISELECT(328,220),
  ABISELECT(288,196),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v49Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v64Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v65Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v66Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v67Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v68Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v69Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v70Ev,
  (VTBL_ENTRY)&_ZN8S7816C103v71Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C11D1Ev();
extern void _ZN8S7816C11D0Ev();
extern void _ZN8S7816C113v44Ev();
extern void _ZN8S7816C113v45Ev();
extern void _ZN8S7816C113v46Ev();
extern void _ZN8S7816C113v47Ev();
extern void _ZN8S7816C113v48Ev();
extern void _ZN8S7816C113v49Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C118S7816C10__7S7816C1[] = {
  ABISELECT(416,292),
  ABISELECT(-16,-8),
  ABISELECT(344,232),
  ABISELECT(328,220),
  ABISELECT(288,196),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v48Ev,
  (VTBL_ENTRY)&_ZN8S7816C113v49Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C118S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C118S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev)();
extern void ABISELECT(_ZThn344_N8S7816C11D1Ev,_ZThn232_N8S7816C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev)();
extern void ABISELECT(_ZThn344_N8S7816C11D0Ev,_ZThn232_N8S7816C11D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C118S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-232),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-344,-232),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C118S7816C10__7S7816C1[] = {
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(360,240),
  ABISELECT(344,228),
  ABISELECT(304,204),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C11D1Ev,_ZTv0_n24_N8S7816C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C11D0Ev,_ZTv0_n24_N8S7816C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C118S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S7816C11[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN8S7816C123v56Ev();
extern void _ZN8S7816C123v57Ev();
extern void _ZN8S7816C12D1Ev();
extern void _ZN8S7816C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C128S7816C10__7S7816C1[] = {
  ABISELECT(176,112),
  ABISELECT(160,100),
  ABISELECT(120,76),
  ABISELECT(248,172),
  ABISELECT(280,188),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v57Ev,
  (VTBL_ENTRY)&_ZN8S7816C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C12D0Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev)();
extern void ABISELECT(_ZThn280_N8S7816C12D1Ev,_ZThn188_N8S7816C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev)();
extern void ABISELECT(_ZThn280_N8S7816C12D0Ev,_ZThn188_N8S7816C12D0Ev)() __attribute__((weak));
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C13__8S7816C128S7816C10__7S7816C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-188),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C128S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  ABISELECT(-248,-172),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S7816C12D1Ev,_ZTvn12_n60_N8S7816C12D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7816C12D0Ev,_ZTvn12_n60_N8S7816C12D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C68S7816C13__8S7816C128S7816C10__7S7816C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C12D1Ev,_ZTvn12_n60_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C12D0Ev,_ZTvn12_n60_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C128S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C128S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7816C12D1Ev,_ZThn112_N8S7816C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7816C12D0Ev,_ZThn112_N8S7816C12D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C128S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-112),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S7816C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C28S7816C10__A3__7S7816C1[] = {
  ABISELECT(144,92),
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C28S7816C10__A3__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C28S7816C10__A3__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C10D1Ev,_ZTv0_n20_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn344_N8S7816C10D1Ev,_ZThn232_N8S7816C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7816C10D0Ev,_ZTv0_n20_N8S7816C10D0Ev)();
extern void ABISELECT(_ZThn344_N8S7816C10D0Ev,_ZThn232_N8S7816C10D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-232),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-344,-232),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C10D1Ev,_ZTv0_n20_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C10D0Ev,_ZTv0_n20_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7816C10D1Ev,_ZTv0_n24_N8S7816C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7816C10D0Ev,_ZTv0_n24_N8S7816C10D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C10__7S7816C1[] = {
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(360,240),
  ABISELECT(344,228),
  ABISELECT(304,204),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C10D1Ev,_ZTv0_n24_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7816C10D0Ev,_ZTv0_n24_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
extern void _ZN8S7816C123v56Ev();
extern void _ZN8S7816C123v57Ev();
extern void ABISELECT(_ZThn168_N8S7816C10D1Ev,_ZThn120_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn168_N8S7816C10D0Ev,_ZThn120_N8S7816C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7816C12__8S7816C10__7S7816C1[] = {
  ABISELECT(176,112),
  ABISELECT(160,100),
  ABISELECT(120,76),
  ABISELECT(248,172),
  ABISELECT(280,188),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v56Ev,
  (VTBL_ENTRY)&_ZN8S7816C123v57Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7816C10D1Ev,_ZThn120_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N8S7816C10D0Ev,_ZThn120_N8S7816C10D0Ev),
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void ABISELECT(_ZTv0_n120_N8S7816C10D1Ev,_ZTv0_n60_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn448_N8S7816C10D1Ev,_ZThn308_N8S7816C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S7816C10D0Ev,_ZTv0_n60_N8S7816C10D0Ev)();
extern void ABISELECT(_ZThn448_N8S7816C10D0Ev,_ZThn308_N8S7816C10D0Ev)() __attribute__((weak));
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C13__8S7816C10__7S7816C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-448,-308),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  ABISELECT(-448,-308),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C10D1Ev,_ZTv0_n60_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S7816C10D0Ev,_ZTv0_n60_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S7816C10D1Ev,_ZTvn12_n60_N8S7816C10D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S7816C10D0Ev,_ZTvn12_n60_N8S7816C10D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C68S7816C13__A1__8S7816C10__7S7816C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-464,-320),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C10D1Ev,_ZTvn12_n60_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S7816C10D0Ev,_ZTvn12_n60_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN8S7816C143v58Ev();
extern void _ZN8S7816C143v59Ev();
extern void _ZN8S7816C143v60Ev();
extern void _ZN8S7816C143v61Ev();
extern void _ZN8S7816C143v62Ev();
extern void _ZN8S7816C143v63Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C14__8S7816C10__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&_ZN8S7816C143v58Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v59Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v60Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v61Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v62Ev,
  (VTBL_ENTRY)&_ZN8S7816C143v63Ev,
};
extern void ABISELECT(_ZThn184_N8S7816C10D1Ev,_ZThn128_N8S7816C10D1Ev)();
extern void ABISELECT(_ZThn184_N8S7816C10D0Ev,_ZThn128_N8S7816C10D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A__8S7816C10__7S7816C1[] = {
  ABISELECT(144,92),
  ABISELECT(104,68),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI8S7816C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7816C10D1Ev,_ZThn128_N8S7816C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S7816C10D0Ev,_ZThn128_N8S7816C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C3__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7816C3[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__7S7816C1[] = {
  ABISELECT(360,240),
  ABISELECT(344,228),
  ABISELECT(304,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C6__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C6__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-228),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZThn360_N7S7816C6D1Ev,_ZThn240_N7S7816C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void ABISELECT(_ZThn360_N7S7816C6D0Ev,_ZThn240_N7S7816C6D0Ev)() __attribute__((weak));
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C6__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-240),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-360,-240),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A1__7S7816C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C2__A1__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C2__A1__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C7D1Ev();
extern void _ZN7S7816C7D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
extern void _ZN7S7816C73v32Ev();
extern void _ZN7S7816C73v33Ev();
extern void _ZN7S7816C73v34Ev();
extern void _ZN7S7816C73v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C7__7S7816C1[] = {
  ABISELECT(-32,-28),
  ABISELECT(40,32),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v32Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7816C73v35Ev,
};
extern void _ZN7S7816C2D1Ev();
extern void _ZN7S7816C2D0Ev();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C27S7816C7__A2__7S7816C1[] = {
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C27S7816C7__A2__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C27S7816C7__A2__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7816C2[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C67S7816C7__A1__7S7816C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C67S7816C7__A1__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C67S7816C7__A1__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,68),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C67S7816C7__A1__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C7__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C7__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__7S7816C7__7S7816C1[] = {
  0,
  0,
  0,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZThn32_N7S7816C7D1Ev,_ZThn28_N7S7816C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7816C7D0Ev,_ZThn28_N7S7816C7D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__7S7816C7__7S7816C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-80,-68),
  ABISELECT(-120,-92),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7816C7D1Ev,_ZThn28_N7S7816C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7816C7D0Ev,_ZThn28_N7S7816C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C7D1Ev,_ZTv0_n20_N7S7816C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C7D0Ev,_ZTv0_n20_N7S7816C7D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__A1__7S7816C7__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI7S7816C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C7D1Ev,_ZTv0_n20_N7S7816C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C7D0Ev,_ZTv0_n20_N7S7816C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
extern void _ZN8S7816C13D1Ev();
extern void _ZN8S7816C13D0Ev();
extern void _ZN8S7816C133v50Ev();
extern void _ZN8S7816C133v51Ev();
extern void _ZN8S7816C133v52Ev();
extern void _ZN8S7816C133v53Ev();
extern void _ZN8S7816C133v54Ev();
extern void _ZN8S7816C133v55Ev();
static  VTBL_ENTRY _tg__ZTV8S7816C13__7S7816C1[] = {
  ABISELECT(-104,-76),
  ABISELECT(-120,-88),
  ABISELECT(-160,-112),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7816C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v50Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v51Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v52Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v53Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v54Ev,
  (VTBL_ENTRY)&_ZN8S7816C133v55Ev,
};
extern void _ZN7S7816C6D1Ev();
extern void _ZN7S7816C6D0Ev();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C68S7816C13__A2__7S7816C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7816C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__7S7816C68S7816C13__A2__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__7S7816C68S7816C13__A2__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(136,100),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__7S7816C68S7816C13__A2__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI7S7816C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
extern void _ZN7S7816C83v29Ev();
extern void _ZN7S7816C83v30Ev();
extern void _ZN7S7816C83v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C8__8S7816C13__7S7816C1[] = {
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7816C83v31Ev,
};
extern void ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev)();
extern void _ZN7S7816C63v27Ev();
extern void _ZN7S7816C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C6__8S7816C13__7S7816C1[] = {
  ABISELECT(-120,-88),
  ABISELECT(-136,-100),
  ABISELECT(-176,-124),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D1Ev,_ZThn12_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7816C13D0Ev,_ZThn12_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7816C63v28Ev,
};
extern void _ZN7S7816C33v16Ev();
extern void _ZN7S7816C33v17Ev();
extern void _ZN7S7816C33v18Ev();
extern void _ZN7S7816C33v19Ev();
extern void _ZN7S7816C33v20Ev();
extern void _ZN7S7816C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C3__8S7816C13__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(160,112),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7816C33v21Ev,
};
extern void _ZN7S7816C42v8Ev();
extern void _ZN7S7816C42v9Ev();
extern void _ZN7S7816C43v10Ev();
extern void _ZN7S7816C43v11Ev();
extern void _ZN7S7816C43v12Ev();
extern void _ZN7S7816C43v13Ev();
extern void _ZN7S7816C43v14Ev();
extern void _ZN7S7816C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C4__A1__8S7816C13__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&_ZN7S7816C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7816C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7816C43v15Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev)();
extern void _ZN7S7816C23v22Ev();
extern void _ZN7S7816C23v23Ev();
extern void _ZN7S7816C23v24Ev();
extern void _ZN7S7816C23v25Ev();
extern void _ZN7S7816C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7816C2__8S7816C13__7S7816C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,76),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7816C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D1Ev,_ZTv0_n20_N8S7816C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7816C13D0Ev,_ZTv0_n20_N8S7816C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7816C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7816C23v26Ev,
};
static  VTT_ENTRY vtt_S7816C1[] = {
  {&(_ZTV7S7816C1[11]),  11,267},
  {&(_tg__ZTV7S7816C2__A__7S7816C1[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__A__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__A__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C5__7S7816C1[11]),  11,22},
  {&(_tg__ZTV7S7816C4__7S7816C5__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C3__7S7816C5__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C5__7S7816C1[11]),  11,22},
  {&(_tg__ZTV7S7816C2__7S7816C5__7S7816C1[10]),  10,17},
  {&(_tg__ZTV7S7816C7__7S7816C5__7S7816C1[18]),  18,29},
  {&(_tg__ZTV7S7816C8__7S7816C5__7S7816C1[5]),  5,8},
  {&(_tg__ZTV7S7816C67S7816C7__A1__7S7816C5__7S7816C1[5]),  5,9},
  {&(_tg__ZTV8S7816C10__7S7816C1[9]),  9,33},
  {&(_tg__ZTV8S7816C118S7816C10__7S7816C1[7]),  7,23},
  {&(_tg__ZTV7S7816C3__8S7816C118S7816C10__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C118S7816C10__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C118S7816C10__7S7816C1[10]),  10,17},
  {&(_tg__ZTV7S7816C6__8S7816C118S7816C10__7S7816C1[8]),  8,12},
  {&(_tg__ZTV7S7816C8__8S7816C118S7816C10__7S7816C1[5]),  5,8},
  {&(_tg__ZTV8S7816C128S7816C10__7S7816C1[7]),  7,14},
  {&(_tg__ZTV8S7816C13__8S7816C128S7816C10__7S7816C1[23]),  23,39},
  {&(_tg__ZTV7S7816C8__8S7816C128S7816C10__7S7816C1[5]),  5,8},
  {&(_tg__ZTV7S7816C68S7816C13__8S7816C128S7816C10__7S7816C1[5]),  5,9},
  {&(_tg__ZTV7S7816C3__8S7816C128S7816C10__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C128S7816C10__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C128S7816C10__7S7816C1[10]),  10,17},
  {&(_tg__ZTV7S7816C28S7816C10__A3__7S7816C1[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C28S7816C10__A3__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C28S7816C10__A3__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C3__8S7816C10__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C10__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C10__7S7816C1[10]),  10,17},
  {&(_tg__ZTV7S7816C6__8S7816C10__7S7816C1[8]),  8,12},
  {&(_tg__ZTV7S7816C8__8S7816C10__7S7816C1[5]),  5,8},
  {&(_tg__ZTV8S7816C12__8S7816C10__7S7816C1[7]),  7,14},
  {&(_tg__ZTV8S7816C13__8S7816C10__7S7816C1[23]),  23,39},
  {&(_tg__ZTV7S7816C68S7816C13__A1__8S7816C10__7S7816C1[5]),  5,9},
  {&(_tg__ZTV8S7816C14__8S7816C10__7S7816C1[8]),  8,14},
  {&(_tg__ZTV7S7816C2__A__8S7816C10__7S7816C1[4]),  4,11},
  {&(_ZTV7S7816C1[114]),  114,267},
  {&(_ZTV7S7816C1[130]),  130,267},
  {&(_ZTV7S7816C1[36]),  36,267},
  {&(_ZTV7S7816C1[36]),  36,267},
  {&(_ZTV7S7816C1[148]),  148,267},
  {&(_ZTV7S7816C1[173]),  173,267},
  {&(_ZTV7S7816C1[198]),  198,267},
  {&(_ZTV7S7816C1[189]),  189,267},
  {&(_ZTV7S7816C1[204]),  204,267},
  {&(_ZTV7S7816C1[56]),  56,267},
  {&(_ZTV7S7816C1[87]),  87,267},
  {&(_ZTV7S7816C1[228]),  228,267},
  {&(_ZTV7S7816C1[249]),  249,267},
  {&(_ZTV7S7816C1[261]),  261,267},
  {&(_ZTV7S7816C1[98]),  98,267},
  {&(_tg__ZTV7S7816C3__7S7816C1[3]),  3,9},
  {&(_tg__ZTV7S7816C4__7S7816C3__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C6__7S7816C1[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C6__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C6__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C6__7S7816C1[10]),  10,17},
  {&(_tg__ZTV7S7816C2__A1__7S7816C1[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C2__A1__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C2__A1__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C7__7S7816C1[6]),  6,17},
  {&(_tg__ZTV7S7816C27S7816C7__A2__7S7816C1[4]),  4,11},
  {&(_tg__ZTV7S7816C3__7S7816C27S7816C7__A2__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C27S7816C7__A2__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C67S7816C7__A1__7S7816C1[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C67S7816C7__A1__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C67S7816C7__A1__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C67S7816C7__A1__7S7816C1[10]),  10,17},
  {&(_tg__ZTV7S7816C4__7S7816C7__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C3__7S7816C7__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C8__7S7816C7__7S7816C1[5]),  5,8},
  {&(_tg__ZTV7S7816C6__7S7816C7__7S7816C1[5]),  5,9},
  {&(_tg__ZTV7S7816C2__A1__7S7816C7__7S7816C1[10]),  10,17},
  {&(_tg__ZTV8S7816C13__7S7816C1[6]),  6,22},
  {&(_tg__ZTV7S7816C68S7816C13__A2__7S7816C1[5]),  5,9},
  {&(_tg__ZTV7S7816C3__7S7816C68S7816C13__A2__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__7S7816C68S7816C13__A2__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C2__7S7816C68S7816C13__A2__7S7816C1[10]),  10,17},
  {&(_tg__ZTV7S7816C8__8S7816C13__7S7816C1[5]),  5,8},
  {&(_tg__ZTV7S7816C6__8S7816C13__7S7816C1[5]),  5,9},
  {&(_tg__ZTV7S7816C3__8S7816C13__7S7816C1[9]),  9,15},
  {&(_tg__ZTV7S7816C4__A1__8S7816C13__7S7816C1[10]),  10,18},
  {&(_tg__ZTV7S7816C2__8S7816C13__7S7816C1[10]),  10,17},
};
extern VTBL_ENTRY _ZTI7S7816C1[];
extern  VTBL_ENTRY _ZTV7S7816C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7816C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D0Ev,_ZTv0_n20_N7S7816C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7816C6D0Ev,_ZThn240_N7S7816C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C6D1Ev,_ZTv0_n20_N7S7816C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7816C6D1Ev,_ZThn240_N7S7816C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C10D0Ev,_ZTv0_n60_N8S7816C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S7816C10D0Ev,_ZThn308_N8S7816C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C10D1Ev,_ZTv0_n60_N8S7816C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S7816C10D1Ev,_ZThn308_N8S7816C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C10D0Ev,_ZTv0_n20_N8S7816C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7816C10D0Ev,_ZThn232_N8S7816C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C10D1Ev,_ZTv0_n20_N8S7816C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7816C10D1Ev,_ZThn232_N8S7816C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C12D0Ev,_ZTv0_n20_N8S7816C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7816C12D0Ev,_ZThn112_N8S7816C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C12D1Ev,_ZTv0_n20_N8S7816C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7816C12D1Ev,_ZThn112_N8S7816C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C12D0Ev,_ZTv0_n60_N8S7816C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S7816C12D0Ev,_ZThn188_N8S7816C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S7816C12D1Ev,_ZTv0_n60_N8S7816C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S7816C12D1Ev,_ZThn188_N8S7816C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C11D0Ev,_ZTv0_n20_N8S7816C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7816C11D0Ev,_ZThn232_N8S7816C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7816C11D1Ev,_ZTv0_n20_N8S7816C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S7816C11D1Ev,_ZThn232_N8S7816C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7816C5D0Ev,_ZTv0_n28_N7S7816C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7816C5D0Ev,_ZThn268_N7S7816C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7816C5D1Ev,_ZTv0_n28_N7S7816C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7816C5D1Ev,_ZThn268_N7S7816C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C5D0Ev,_ZTv0_n20_N7S7816C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7816C5D0Ev,_ZThn240_N7S7816C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C5D1Ev,_ZTv0_n20_N7S7816C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N7S7816C5D1Ev,_ZThn240_N7S7816C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7816C5D0Ev,_ZTv0_n24_N7S7816C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7816C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7816C5D1Ev,_ZTv0_n24_N7S7816C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7816C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7816C1D0Ev,_ZTv0_n60_N7S7816C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N7S7816C1D0Ev,_ZThn344_N7S7816C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S7816C1D1Ev,_ZTv0_n60_N7S7816C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N7S7816C1D1Ev,_ZThn344_N7S7816C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7816C1D0Ev,_ZTv0_n28_N7S7816C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S7816C1D0Ev,_ZThn296_N7S7816C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7816C1D1Ev,_ZTv0_n28_N7S7816C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S7816C1D1Ev,_ZThn296_N7S7816C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C1D0Ev,_ZTv0_n20_N7S7816C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7816C1D0Ev,_ZThn268_N7S7816C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7816C1D1Ev,_ZTv0_n20_N7S7816C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N7S7816C1D1Ev,_ZThn268_N7S7816C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7816C1D0Ev,_ZTv0_n24_N7S7816C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7816C1D0Ev,_ZThn28_N7S7816C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7816C1D1Ev,_ZTv0_n24_N7S7816C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7816C1D1Ev,_ZThn28_N7S7816C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7816C1 = {  "S7816C1", // class name
  bases_S7816C1, 21,
  &(vtc_S7816C1[0]), // expected_vtbl_contents
  &(vtt_S7816C1[0]), // expected_vtt_contents
  ABISELECT(688,480), // object size
  NSPAIRA(_ZTI7S7816C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7816C1),267, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7816C1),86, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5786C6  : virtual S7511C5 {
  ::S7511C5 s5786c6f0;
  ::S7511C5 s5786c6f1;
  void *s5786c6f2;
  int s5786c6f3;
  void *s5786c6f4[7];
  int s5786c6f5[2];
  ::S7511C5 s5786c6f6;
  ::S7511C5 s5786c6f7[6];
  __tsi64 s5786c6f8[2];
  void *s5786c6f9;
  int s5786c6f10;
  void *s5786c6f11;
  ~S5786C6(); // tgen
  S5786C6(); // tgen
};
//SIG(-1 S5786C6) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}


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

static void Test_S5786C6()
{
  extern Class_Descriptor cd_S5786C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,210)];
    init_test(&cd_S5786C6, buf);
    S5786C6 *dp, &lv = *(dp=new (buf) S5786C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,836), "sizeof(S5786C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C6)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1296,760), "S5786C6");
    check_field_offset(lv, s5786c6f0, ABISELECT(16,4), "S5786C6.s5786c6f0");
    check_field_offset(lv, s5786c6f1, ABISELECT(144,80), "S5786C6.s5786c6f1");
    check_field_offset(lv, s5786c6f2, ABISELECT(272,156), "S5786C6.s5786c6f2");
    check_field_offset(lv, s5786c6f3, ABISELECT(280,160), "S5786C6.s5786c6f3");
    check_field_offset(lv, s5786c6f4, ABISELECT(288,164), "S5786C6.s5786c6f4");
    check_field_offset(lv, s5786c6f5, ABISELECT(344,192), "S5786C6.s5786c6f5");
    check_field_offset(lv, s5786c6f6, ABISELECT(352,200), "S5786C6.s5786c6f6");
    check_field_offset(lv, s5786c6f7, ABISELECT(480,276), "S5786C6.s5786c6f7");
    check_field_offset(lv, s5786c6f8, ABISELECT(1248,732), "S5786C6.s5786c6f8");
    check_field_offset(lv, s5786c6f9, ABISELECT(1264,748), "S5786C6.s5786c6f9");
    check_field_offset(lv, s5786c6f10, ABISELECT(1272,752), "S5786C6.s5786c6f10");
    check_field_offset(lv, s5786c6f11, ABISELECT(1280,756), "S5786C6.s5786c6f11");
    test_class_info(&lv, &cd_S5786C6);
    dp->~S5786C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C6(Test_S5786C6, "S5786C6", ABISELECT(1424,836));

#else // __cplusplus

extern void _ZN7S5786C6C1Ev();
extern void _ZN7S5786C6D1Ev();
Name_Map name_map_S5786C6[] = {
  NSPAIR(_ZN7S5786C6C1Ev),
  NSPAIR(_ZN7S5786C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
static Base_Class bases_S5786C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1296,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5786C6[];
static  VTBL_ENTRY vtc_S5786C6[] = {
  ABISELECT(1296,760),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
extern VTBL_ENTRY _ZTV7S5786C6[];
static  VTT_ENTRY vtt_S5786C6[] = {
  {&(_ZTV7S5786C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
Class_Descriptor cd_S5786C6 = {  "S5786C6", // class name
  bases_S5786C6, 1,
  &(vtc_S5786C6[0]), // expected_vtbl_contents
  &(vtt_S5786C6[0]), // expected_vtt_contents
  ABISELECT(1424,836), // object size
  NSPAIRA(_ZTI7S5786C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5786C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5786C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5786C8  {
  int s5786c8f0[2];
  char s5786c8f1:3;
  int s5786c8f2[5];
  int s5786c8f3:4;
  int s5786c8f4;
  ::S5786C6 s5786c8f5;
  virtual void  v3(); // _ZN7S5786C82v3Ev
  virtual void  v4(); // _ZN7S5786C82v4Ev
  ~S5786C8(); // tgen
  S5786C8(); // tgen
};
//SIG(-1 S5786C8) C1{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp}}


void  S5786C8 ::v3(){vfunc_called(this, "_ZN7S5786C82v3Ev");}
void  S5786C8 ::v4(){vfunc_called(this, "_ZN7S5786C82v4Ev");}
S5786C8 ::~S5786C8(){ note_dtor("S5786C8", this);} // tgen
S5786C8 ::S5786C8(){ note_ctor("S5786C8", this);} // tgen

static void Test_S5786C8()
{
  extern Class_Descriptor cd_S5786C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,221)];
    init_test(&cd_S5786C8, buf);
    S5786C8 *dp, &lv = *(dp=new (buf) S5786C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,880), "sizeof(S5786C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C8)");
    check_field_offset(lv, s5786c8f0, ABISELECT(8,4), "S5786C8.s5786c8f0");
    set_bf_and_test(lv, s5786c8f1, ABISELECT(16,12), 0, 3, 1, "S5786C8");
    set_bf_and_test(lv, s5786c8f1, ABISELECT(16,12), 0, 3, hide_sll(1LL<<2), "S5786C8");
    check_field_offset(lv, s5786c8f2, ABISELECT(20,16), "S5786C8.s5786c8f2");
    set_bf_and_test(lv, s5786c8f3, ABISELECT(40,36), 0, 4, 1, "S5786C8");
    set_bf_and_test(lv, s5786c8f3, ABISELECT(40,36), 0, 4, hide_sll(1LL<<3), "S5786C8");
    check_field_offset(lv, s5786c8f4, ABISELECT(44,40), "S5786C8.s5786c8f4");
    check_field_offset(lv, s5786c8f5, ABISELECT(48,44), "S5786C8.s5786c8f5");
    test_class_info(&lv, &cd_S5786C8);
    dp->~S5786C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C8(Test_S5786C8, "S5786C8", ABISELECT(1472,880));

#else // __cplusplus

extern void _ZN7S5786C8C1Ev();
extern void _ZN7S5786C8D1Ev();
Name_Map name_map_S5786C8[] = {
  NSPAIR(_ZN7S5786C8C1Ev),
  NSPAIR(_ZN7S5786C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5786C8[];
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY vtc_S5786C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C8[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
};
extern VTBL_ENTRY _ZTI7S5786C8[];
extern  VTBL_ENTRY _ZTV7S5786C8[];
Class_Descriptor cd_S5786C8 = {  "S5786C8", // class name
  0,0,//no base classes
  &(vtc_S5786C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,880), // object size
  NSPAIRA(_ZTI7S5786C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5786C8),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  S5786C4  : S7511C10 , virtual S2524C7 , S5786C6 {
  short s5786c4f0;
  int s5786c4f1;
  long double s5786c4f2;
  char s5786c4f3;
  int s5786c4f4;
  long s5786c4f5;
  void *s5786c4f6;
  ::S5786C8 s5786c4f7;
  int s5786c4f8;
  void *s5786c4f9;
  virtual void  v7(); // _ZN7S5786C42v7Ev
  ~S5786C4(); // tgen
  S5786C4(); // tgen
};
//SIG(-1 S5786C4) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fi[2] FL Fp[6]} BC4{ VBC5{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC5 FC5 Fp Fi Fp[7] Fi[2] FC5 FC5[6] FL[2] Fp Fi Fp} v1 Fs Fi FD Fc Fi Fl Fp FC6{ v2 v3 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} Fi Fp}


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

static void Test_S5786C4()
{
  extern Class_Descriptor cd_S5786C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,456)];
    init_test(&cd_S5786C4, buf);
    S5786C4 *dp, &lv = *(dp=new (buf) S5786C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1820), "sizeof(S5786C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C4)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S5786C4");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(2864,1704), "S5786C4");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*), ABISELECT(2928,1744), "S5786C4");
    check_base_class_offset(lv, (S5786C6*), 0, "S5786C4");
    check_field_offset(lv, s5786c4f0, ABISELECT(1312,780), "S5786C4.s5786c4f0");
    check_field_offset(lv, s5786c4f1, ABISELECT(1316,784), "S5786C4.s5786c4f1");
    check_field_offset(lv, s5786c4f2, ABISELECT(1328,788), "S5786C4.s5786c4f2");
    check_field_offset(lv, s5786c4f3, ABISELECT(1344,800), "S5786C4.s5786c4f3");
    check_field_offset(lv, s5786c4f4, ABISELECT(1348,804), "S5786C4.s5786c4f4");
    check_field_offset(lv, s5786c4f5, ABISELECT(1352,808), "S5786C4.s5786c4f5");
    check_field_offset(lv, s5786c4f6, ABISELECT(1360,812), "S5786C4.s5786c4f6");
    check_field_offset(lv, s5786c4f7, ABISELECT(1376,816), "S5786C4.s5786c4f7");
    check_field_offset(lv, s5786c4f8, ABISELECT(2848,1696), "S5786C4.s5786c4f8");
    check_field_offset(lv, s5786c4f9, ABISELECT(2856,1700), "S5786C4.s5786c4f9");
    test_class_info(&lv, &cd_S5786C4);
    dp->~S5786C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C4(Test_S5786C4, "S5786C4", ABISELECT(3056,1820));

#else // __cplusplus

extern void _ZN7S5786C4C1Ev();
extern void _ZN7S5786C4D1Ev();
Name_Map name_map_S5786C4[] = {
  NSPAIR(_ZN7S5786C4C1Ev),
  NSPAIR(_ZN7S5786C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
static Base_Class bases_S5786C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2524C7,    ABISELECT(2864,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C5,    ABISELECT(2928,1744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5786C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5786C4[];
extern void _ZN7S5786C42v7Ev();
static  VTBL_ENTRY vtc_S5786C4[] = {
  ABISELECT(2864,1704),
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C4[0]),
  (VTBL_ENTRY)&_ZN7S5786C42v7Ev,
};
extern VTBL_ENTRY _ZTV7S5786C4[];
static  VTBL_ENTRY _tg__ZTV7S5786C6__7S5786C4[] = {
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTT_ENTRY vtt_S5786C4[] = {
  {&(_ZTV7S5786C4[4]),  4,5},
  {&(_tg__ZTV7S5786C6__7S5786C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5786C4[];
extern  VTBL_ENTRY _ZTV7S5786C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C4[];
Class_Descriptor cd_S5786C4 = {  "S5786C4", // class name
  bases_S5786C4, 4,
  &(vtc_S5786C4[0]), // expected_vtbl_contents
  &(vtt_S5786C4[0]), // expected_vtt_contents
  ABISELECT(3056,1820), // object size
  NSPAIRA(_ZTI7S5786C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5786C4),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5786C4),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  S5786C3  {
  int s5786c3f0;
  ::S5786C4 s5786c3f1;
  ::S7511C5 s5786c3f2;
  void *s5786c3f3[11];
  virtual void  v1(); // _ZN7S5786C32v1Ev
  virtual void  v2(); // _ZN7S5786C32v2Ev
  ~S5786C3(); // tgen
  S5786C3(); // tgen
};
//SIG(-1 S5786C3) C1{ v1 v2 Fi FC2{ BC3{ m Fi Fs FL Fp} VBC4{ m Fi[2] FL Fp[6]} BC5{ VBC6{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC6 FC6 Fp Fi Fp[7] Fi[2] FC6 FC6[6] FL[2] Fp Fi Fp} v3 Fs Fi FD Fc Fi Fl Fp FC7{ v4 v5 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} Fi Fp} FC6 Fp[11]}


void  S5786C3 ::v1(){vfunc_called(this, "_ZN7S5786C32v1Ev");}
void  S5786C3 ::v2(){vfunc_called(this, "_ZN7S5786C32v2Ev");}
S5786C3 ::~S5786C3(){ note_dtor("S5786C3", this);} // tgen
S5786C3 ::S5786C3(){ note_ctor("S5786C3", this);} // tgen

static void Test_S5786C3()
{
  extern Class_Descriptor cd_S5786C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,488)];
    init_test(&cd_S5786C3, buf);
    S5786C3 *dp, &lv = *(dp=new (buf) S5786C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1948), "sizeof(S5786C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C3)");
    check_field_offset(lv, s5786c3f0, ABISELECT(8,4), "S5786C3.s5786c3f0");
    check_field_offset(lv, s5786c3f1, ABISELECT(16,8), "S5786C3.s5786c3f1");
    check_field_offset(lv, s5786c3f2, ABISELECT(3072,1828), "S5786C3.s5786c3f2");
    check_field_offset(lv, s5786c3f3, ABISELECT(3200,1904), "S5786C3.s5786c3f3");
    test_class_info(&lv, &cd_S5786C3);
    dp->~S5786C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C3(Test_S5786C3, "S5786C3", ABISELECT(3296,1948));

#else // __cplusplus

extern void _ZN7S5786C3C1Ev();
extern void _ZN7S5786C3D1Ev();
Name_Map name_map_S5786C3[] = {
  NSPAIR(_ZN7S5786C3C1Ev),
  NSPAIR(_ZN7S5786C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5786C3[];
extern void _ZN7S5786C32v1Ev();
extern void _ZN7S5786C32v2Ev();
static  VTBL_ENTRY vtc_S5786C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C3[0]),
  (VTBL_ENTRY)&_ZN7S5786C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5786C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S5786C3[];
extern  VTBL_ENTRY _ZTV7S5786C3[];
Class_Descriptor cd_S5786C3 = {  "S5786C3", // class name
  0,0,//no base classes
  &(vtc_S5786C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3296,1948), // object size
  NSPAIRA(_ZTI7S5786C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5786C3),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  S5786C9  : virtual S7511C5 , virtual S5786C8 , virtual S5786C6 {
  __tsi64 s5786c9f0;
  int s5786c9f1;
  __tsi64 s5786c9f2[5];
  int s5786c9f3[11];
  ::S5786C6 s5786c9f4;
  void *s5786c9f5;
  char s5786c9f6;
  void *s5786c9f7;
  ::S7511C10 s5786c9f8;
  void *s5786c9f9[8];
  virtual void  v5(); // _ZN7S5786C92v5Ev
  virtual void  v6(); // _ZN7S5786C92v6Ev
  ~S5786C9(); // tgen
  S5786C9(); // tgen
};
//SIG(-1 S5786C9) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} VBC3{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4{ VBC2 FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}} VBC4 v1 v2 FL Fi FL[5] Fi[11] FC4 Fp Fc Fp FC5{ m Fi Fs FL Fp} Fp[8]}


void  S5786C9 ::v5(){vfunc_called(this, "_ZN7S5786C92v5Ev");}
void  S5786C9 ::v6(){vfunc_called(this, "_ZN7S5786C92v6Ev");}
S5786C9 ::~S5786C9(){ note_dtor("S5786C9", this);} // tgen
S5786C9 ::S5786C9(){ note_ctor("S5786C9", this);} // tgen

static void Test_S5786C9()
{
  extern Class_Descriptor cd_S5786C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,680)];
    init_test(&cd_S5786C9, buf);
    S5786C9 *dp, &lv = *(dp=new (buf) S5786C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,2716), "sizeof(S5786C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C9)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1648,1000), "S5786C9");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*), ABISELECT(1648,1000), "S5786C9");
    check_base_class_offset(lv, (S5786C8*), ABISELECT(1776,1076), "S5786C9");
    check_base_class_offset(lv, (S5786C6*), ABISELECT(3248,1956), "S5786C9");
    check_field_offset(lv, s5786c9f0, ABISELECT(8,4), "S5786C9.s5786c9f0");
    check_field_offset(lv, s5786c9f1, ABISELECT(16,12), "S5786C9.s5786c9f1");
    check_field_offset(lv, s5786c9f2, ABISELECT(24,16), "S5786C9.s5786c9f2");
    check_field_offset(lv, s5786c9f3, ABISELECT(64,56), "S5786C9.s5786c9f3");
    check_field_offset(lv, s5786c9f4, ABISELECT(112,100), "S5786C9.s5786c9f4");
    check_field_offset(lv, s5786c9f5, ABISELECT(1536,936), "S5786C9.s5786c9f5");
    check_field_offset(lv, s5786c9f6, ABISELECT(1544,940), "S5786C9.s5786c9f6");
    check_field_offset(lv, s5786c9f7, ABISELECT(1552,944), "S5786C9.s5786c9f7");
    check_field_offset(lv, s5786c9f8, ABISELECT(1560,948), "S5786C9.s5786c9f8");
    check_field_offset(lv, s5786c9f9, ABISELECT(1584,968), "S5786C9.s5786c9f9");
    test_class_info(&lv, &cd_S5786C9);
    dp->~S5786C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C9(Test_S5786C9, "S5786C9", ABISELECT(4544,2716));

#else // __cplusplus

extern void _ZN7S5786C9C1Ev();
extern void _ZN7S5786C9D1Ev();
Name_Map name_map_S5786C9[] = {
  NSPAIR(_ZN7S5786C9C1Ev),
  NSPAIR(_ZN7S5786C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5786C8;
extern VTBL_ENTRY _ZTI7S5786C8[];
extern  VTBL_ENTRY _ZTV7S5786C8[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
static Base_Class bases_S5786C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1648,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5786C8,    ABISELECT(1776,1076), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5786C6,    ABISELECT(3248,1956), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //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 _ZTI7S5786C9[];
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY vtc_S5786C9[] = {
  ABISELECT(3248,1956),
  ABISELECT(1776,1076),
  ABISELECT(1648,1000),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
  0,
  0,
  ABISELECT(-1776,-1076),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
  ABISELECT(-1600,-956),
  ABISELECT(-3248,-1956),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
};
extern VTBL_ENTRY _ZTV7S5786C9[];
static  VTBL_ENTRY _tg__ZTV7S5786C6__7S5786C9[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTT_ENTRY vtt_S5786C9[] = {
  {&(_ZTV7S5786C9[5]),  5,16},
  {&(_ZTV7S5786C9[11]),  11,16},
  {&(_ZTV7S5786C9[16]),  16,16},
  {&(_tg__ZTV7S5786C6__7S5786C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5786C9[];
extern  VTBL_ENTRY _ZTV7S5786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C9[];
Class_Descriptor cd_S5786C9 = {  "S5786C9", // class name
  bases_S5786C9, 3,
  &(vtc_S5786C9[0]), // expected_vtbl_contents
  &(vtt_S5786C9[0]), // expected_vtt_contents
  ABISELECT(4544,2716), // object size
  NSPAIRA(_ZTI7S5786C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5786C9),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5786C9),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  S5786C12  : virtual S7511C5 , S5786C6 {
  int s5786c12f0;
  void *s5786c12f1[3];
  int s5786c12f2;
  ::S7511C8 s5786c12f3;
  ::S7511C9_nt s5786c12f4;
  ::S7511C9_nt s5786c12f5;
  ::S5786C6 s5786c12f6;
  ::S7511C8 s5786c12f7;
  void *s5786c12f8[3];
  virtual  ~S5786C12(); // _ZN8S5786C12D2Ev
  S5786C12(); // tgen
};
//SIG(-1 S5786C12) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC3{ VBC2 FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU4{ m Fs:0 Fi FL Fp} FC5{} FC5 FC3 FU4 Fp[3]}


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

static void Test_S5786C12()
{
  extern Class_Descriptor cd_S5786C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(184,432)];
    init_test(&cd_S5786C12, buf);
    S5786C12 *dp, &lv = *(dp=new (buf) S5786C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2928,1724), "sizeof(S5786C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C12)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(2800,1648), "S5786C12");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*), ABISELECT(2800,1648), "S5786C12");
    check_base_class_offset(lv, (S5786C6*), 0, "S5786C12");
    check_field_offset(lv, s5786c12f0, ABISELECT(1288,760), "S5786C12.s5786c12f0");
    check_field_offset(lv, s5786c12f1, ABISELECT(1296,764), "S5786C12.s5786c12f1");
    check_field_offset(lv, s5786c12f2, ABISELECT(1320,776), "S5786C12.s5786c12f2");
    check_field_offset(lv, s5786c12f3, ABISELECT(1328,780), "S5786C12.s5786c12f3");
    check_field_offset(lv, s5786c12f4, ABISELECT(1336,788), "S5786C12.s5786c12f4");
    check_field_offset(lv, s5786c12f5, ABISELECT(1337,789), "S5786C12.s5786c12f5");
    check_field_offset(lv, s5786c12f6, ABISELECT(1344,792), "S5786C12.s5786c12f6");
    check_field_offset(lv, s5786c12f7, ABISELECT(2768,1628), "S5786C12.s5786c12f7");
    check_field_offset(lv, s5786c12f8, ABISELECT(2776,1636), "S5786C12.s5786c12f8");
    test_class_info(&lv, &cd_S5786C12);
    dp->~S5786C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C12(Test_S5786C12, "S5786C12", ABISELECT(2928,1724));

#else // __cplusplus

extern void _ZN8S5786C12C1Ev();
extern void _ZN8S5786C12D2Ev();
Name_Map name_map_S5786C12[] = {
  NSPAIR(_ZN8S5786C12C1Ev),
  NSPAIR(_ZN8S5786C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
static Base_Class bases_S5786C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(2800,1648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5786C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5786C12[];
extern void _ZN8S5786C12D1Ev();
extern void _ZN8S5786C12D0Ev();
static  VTBL_ENTRY vtc_S5786C12[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C12[0]),
  (VTBL_ENTRY)&_ZN8S5786C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5786C12D0Ev,
};
extern VTBL_ENTRY _ZTV8S5786C12[];
static  VTBL_ENTRY _tg__ZTV7S5786C6__8S5786C12[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTT_ENTRY vtt_S5786C12[] = {
  {&(_ZTV8S5786C12[3]),  3,5},
  {&(_tg__ZTV7S5786C6__8S5786C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S5786C12[];
extern  VTBL_ENTRY _ZTV8S5786C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C12[];
Class_Descriptor cd_S5786C12 = {  "S5786C12", // class name
  bases_S5786C12, 2,
  &(vtc_S5786C12[0]), // expected_vtbl_contents
  &(vtt_S5786C12[0]), // expected_vtt_contents
  ABISELECT(2928,1724), // object size
  NSPAIRA(_ZTI8S5786C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S5786C12),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5786C12),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  S5786C15  : S7511C10 , virtual S7511C5 , S5786C6 , virtual S5786C8 , S2524C7 {
  short s5786c15f0;
  ::S2524C7 s5786c15f1;
  int s5786c15f2;
  int s5786c15f3;
  ~S5786C15(); // tgen
  S5786C15(); // tgen
};
//SIG(-1 S5786C15) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} VBC5{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} BC6{ m Fi[2] FL Fp[6]} Fs FC6 Fi[2]}


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

static void Test_S5786C15()
{
  extern Class_Descriptor cd_S5786C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,458)];
    init_test(&cd_S5786C15, buf);
    S5786C15 *dp, &lv = *(dp=new (buf) S5786C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1828), "sizeof(S5786C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C15)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S5786C15");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1456,872), "S5786C15");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*), ABISELECT(1456,872), "S5786C15");
    check_base_class_offset(lv, (S5786C6*), 0, "S5786C15");
    check_base_class_offset(lv, (S5786C8*), ABISELECT(1584,948), "S5786C15");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(1312,780), "S5786C15");
    check_field_offset(lv, s5786c15f0, ABISELECT(1376,820), "S5786C15.s5786c15f0");
    check_field_offset(lv, s5786c15f1, ABISELECT(1384,824), "S5786C15.s5786c15f1");
    check_field_offset(lv, s5786c15f2, ABISELECT(1448,864), "S5786C15.s5786c15f2");
    check_field_offset(lv, s5786c15f3, ABISELECT(1452,868), "S5786C15.s5786c15f3");
    test_class_info(&lv, &cd_S5786C15);
    dp->~S5786C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C15(Test_S5786C15, "S5786C15", ABISELECT(3056,1828));

#else // __cplusplus

extern void _ZN8S5786C15C1Ev();
extern void _ZN8S5786C15D1Ev();
Name_Map name_map_S5786C15[] = {
  NSPAIR(_ZN8S5786C15C1Ev),
  NSPAIR(_ZN8S5786C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C8;
extern VTBL_ENTRY _ZTI7S5786C8[];
extern  VTBL_ENTRY _ZTV7S5786C8[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
static Base_Class bases_S5786C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7511C5,    ABISELECT(1456,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5786C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5786C8,    ABISELECT(1584,948), //bcp->offset
    4, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2524C7,    ABISELECT(1312,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5786C15[];
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY vtc_S5786C15[] = {
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C15[0]),
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI8S5786C15[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
};
extern VTBL_ENTRY _ZTV8S5786C15[];
static  VTBL_ENTRY _tg__ZTV7S5786C6__8S5786C15[] = {
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTT_ENTRY vtt_S5786C15[] = {
  {&(_ZTV8S5786C15[4]),  4,10},
  {&(_tg__ZTV7S5786C6__8S5786C15[3]),  3,3},
  {&(_ZTV8S5786C15[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S5786C15[];
extern  VTBL_ENTRY _ZTV8S5786C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C15[];
Class_Descriptor cd_S5786C15 = {  "S5786C15", // class name
  bases_S5786C15, 5,
  &(vtc_S5786C15[0]), // expected_vtbl_contents
  &(vtt_S5786C15[0]), // expected_vtt_contents
  ABISELECT(3056,1828), // object size
  NSPAIRA(_ZTI8S5786C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S5786C15),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5786C15),3, //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  S5786C11  : virtual S5786C12 , S7511C10 , virtual S5786C6 , virtual S5786C9 , virtual S5786C4 {
  int s5786c11f0;
  int s5786c11f1;
  void *s5786c11f2[7];
  int s5786c11f3;
  ::S5786C15 s5786c11f4;
  virtual  ~S5786C11(); // _ZN8S5786C11D2Ev
  S5786C11(); // tgen
};
//SIG(-1 S5786C11) C1{ VBC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU5{ m Fs:0 Fi FL Fp} FC6{} FC6 FC4 FU5 Fp[3]} BC7{ m Fi Fs FL Fp} VBC4 VBC8{ VBC3 VBC9{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} VBC4 v3 v4 FL Fi FL[5] Fi[11] FC4 Fp Fc Fp FC7 Fp[8]} VBC10{ BC7 VBC11{ m Fi[2] FL Fp[6]} BC4 v5 Fs Fi FD Fc Fi Fl Fp FC9 Fi Fp} vd Fi Fi Fp[7] Fi FC12{ BC7 VBC3 BC4 VBC9 BC11 Fs FC11 Fi Fi}}


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

static void Test_S5786C11()
{
  extern Class_Descriptor cd_S5786C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(841,2001)];
    init_test(&cd_S5786C11, buf);
    S5786C11 *dp, &lv = *(dp=new (buf) S5786C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13440,8000), "sizeof(S5786C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C11)");
    check_base_class_offset(lv, (S7511C5*)(S5786C12*), ABISELECT(5968,3540), "S5786C11");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*)(S5786C12*), ABISELECT(5968,3540), "S5786C11");
    /*is_ambiguous_... S5786C11::S5786C6 */ AMB_check_base_class_offset(lv, (S7511C5*)(S5786C6*), ABISELECT(5968,3540), "S5786C11");
    check_base_class_offset(lv, (S7511C5*)(S5786C9*), ABISELECT(5968,3540), "S5786C11");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*)(S5786C4*), ABISELECT(5968,3540), "S5786C11");
    check_base_class_offset(lv, (S5786C6*)(S5786C12*), ABISELECT(3168,1892), "S5786C11");
    check_base_class_offset(lv, (S5786C12*), ABISELECT(3168,1892), "S5786C11");
    /*is_ambiguous_... S5786C11::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*), ABISELECT(8,4), "S5786C11");
    /*is_ambiguous_... S5786C11::S5786C6 */ AMB_check_base_class_offset(lv, (S5786C6*), ABISELECT(6096,3616), "S5786C11");
    check_base_class_offset(lv, (S5786C6*)(S5786C9*), ABISELECT(6096,3616), "S5786C11");
    check_base_class_offset(lv, (S5786C8*)(S5786C9*), ABISELECT(9040,5376), "S5786C11");
    check_base_class_offset(lv, (S5786C9*), ABISELECT(7392,4376), "S5786C11");
    check_base_class_offset(lv, (S7511C10*)(S5786C4*), ABISELECT(11800,7016), "S5786C11");
    check_base_class_offset(lv, (S2524C7*)(S5786C4*), ABISELECT(13376,7960), "S5786C11");
    check_base_class_offset(lv, (S5786C6*)(S5786C4*), ABISELECT(10512,6256), "S5786C11");
    check_base_class_offset(lv, (S5786C4*), ABISELECT(10512,6256), "S5786C11");
    check_field_offset(lv, s5786c11f0, ABISELECT(32,24), "S5786C11.s5786c11f0");
    check_field_offset(lv, s5786c11f1, ABISELECT(36,28), "S5786C11.s5786c11f1");
    check_field_offset(lv, s5786c11f2, ABISELECT(40,32), "S5786C11.s5786c11f2");
    check_field_offset(lv, s5786c11f3, ABISELECT(96,60), "S5786C11.s5786c11f3");
    check_field_offset(lv, s5786c11f4, ABISELECT(112,64), "S5786C11.s5786c11f4");
    test_class_info(&lv, &cd_S5786C11);
    dp->~S5786C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C11(Test_S5786C11, "S5786C11", ABISELECT(13440,8000));

#else // __cplusplus

extern void _ZN8S5786C11C1Ev();
extern void _ZN8S5786C11D2Ev();
Name_Map name_map_S5786C11[] = {
  NSPAIR(_ZN8S5786C11C1Ev),
  NSPAIR(_ZN8S5786C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C12;
extern VTBL_ENTRY _ZTI8S5786C12[];
extern  VTBL_ENTRY _ZTV8S5786C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C12[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C8;
extern VTBL_ENTRY _ZTI7S5786C8[];
extern  VTBL_ENTRY _ZTV7S5786C8[];
extern Class_Descriptor cd_S5786C9;
extern VTBL_ENTRY _ZTI7S5786C9[];
extern  VTBL_ENTRY _ZTV7S5786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C9[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C4;
extern VTBL_ENTRY _ZTI7S5786C4[];
extern  VTBL_ENTRY _ZTV7S5786C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C4[];
static Base_Class bases_S5786C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(5968,3540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5786C6,    ABISELECT(3168,1892), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5786C12,    ABISELECT(3168,1892), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    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_S5786C6,    ABISELECT(6096,3616), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5786C8,    ABISELECT(9040,5376), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S5786C9,    ABISELECT(7392,4376), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C10,    ABISELECT(11800,7016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2524C7,    ABISELECT(13376,7960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5786C6,    ABISELECT(10512,6256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5786C4,    ABISELECT(10512,6256), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S5786C11[];
extern void _ZN8S5786C11D1Ev();
extern void _ZN8S5786C11D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S5786C11D1Ev,_ZTv0_n16_N8S5786C11D1Ev)();
extern void ABISELECT(_ZThn3168_N8S5786C11D1Ev,_ZThn1892_N8S5786C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5786C11D0Ev,_ZTv0_n16_N8S5786C11D0Ev)();
extern void ABISELECT(_ZThn3168_N8S5786C11D0Ev,_ZThn1892_N8S5786C11D0Ev)() __attribute__((weak));
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
extern void _ZN7S5786C42v7Ev();
static  VTBL_ENTRY vtc_S5786C11[] = {
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN8S5786C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5786C11D0Ev,
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5786C11D1Ev,_ZTv0_n16_N8S5786C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5786C11D0Ev,_ZTv0_n16_N8S5786C11D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
  0,
  0,
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-10512,-6256),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN7S5786C42v7Ev,
};
extern VTBL_ENTRY _ZTV8S5786C11[];
extern void _ZN8S5786C12D1Ev();
extern void _ZN8S5786C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5786C12__8S5786C11[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C12[0]),
  (VTBL_ENTRY)&_ZN8S5786C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5786C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C68S5786C12__8S5786C11[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5786C6__A1__8S5786C11[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C9__8S5786C11[] = {
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
};
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C8__7S5786C9__8S5786C11[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C6__7S5786C9__8S5786C11[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
};
extern void _ZN7S5786C42v7Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C4__8S5786C11[] = {
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C4[0]),
  (VTBL_ENTRY)&_ZN7S5786C42v7Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C67S5786C4__A2__8S5786C11[] = {
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTT_ENTRY vtt_S5786C11[] = {
  {&(_ZTV8S5786C11[9]),  9,41},
  {&(_ZTV8S5786C11[15]),  15,41},
  {&(_ZTV8S5786C11[20]),  20,41},
  {&(_ZTV8S5786C11[27]),  27,41},
  {&(_ZTV8S5786C11[33]),  33,41},
  {&(_ZTV8S5786C11[40]),  40,41},
  {&(_tg__ZTV8S5786C12__8S5786C11[3]),  3,5},
  {&(_tg__ZTV7S5786C68S5786C12__8S5786C11[3]),  3,3},
  {&(_tg__ZTV7S5786C6__A1__8S5786C11[3]),  3,3},
  {&(_tg__ZTV7S5786C9__8S5786C11[5]),  5,7},
  {&(_tg__ZTV7S5786C8__7S5786C9__8S5786C11[4]),  4,6},
  {&(_tg__ZTV7S5786C6__7S5786C9__8S5786C11[3]),  3,3},
  {&(_tg__ZTV7S5786C4__8S5786C11[4]),  4,5},
  {&(_tg__ZTV7S5786C67S5786C4__A2__8S5786C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S5786C11[];
extern  VTBL_ENTRY _ZTV8S5786C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C11[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5786C11D0Ev,_ZTv0_n16_N8S5786C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S5786C11D0Ev,_ZThn1892_N8S5786C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5786C11D1Ev,_ZTv0_n16_N8S5786C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S5786C11D1Ev,_ZThn1892_N8S5786C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5786C11 = {  "S5786C11", // class name
  bases_S5786C11, 11,
  &(vtc_S5786C11[0]), // expected_vtbl_contents
  &(vtt_S5786C11[0]), // expected_vtt_contents
  ABISELECT(13440,8000), // object size
  NSPAIRA(_ZTI8S5786C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S5786C11),41, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5786C11),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5786C10  : virtual S5786C11 , S5786C3 , S5786C12 {
  int s5786c10f0;
  void *s5786c10f1;
  long double s5786c10f2[5];
  ~S5786C10(); // tgen
  S5786C10(); // tgen
};
//SIG(-1 S5786C10) C1{ VBC2{ VBC3{ VBC4{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC5{ VBC4 FC4 FC4 Fp Fi Fp[7] Fi[2] FC4 FC4[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU6{ m Fs:0 Fi FL Fp} FC7{} FC7 FC5 FU6 Fp[3]} BC8{ m Fi Fs FL Fp} VBC5 VBC9{ VBC4 VBC10{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} VBC5 v3 v4 FL Fi FL[5] Fi[11] FC5 Fp Fc Fp FC8 Fp[8]} VBC11{ BC8 VBC12{ m Fi[2] FL Fp[6]} BC5 v5 Fs Fi FD Fc Fi Fl Fp FC10 Fi Fp} vd Fi Fi Fp[7] Fi FC13{ BC8 VBC4 BC5 VBC10 BC12 Fs FC12 Fi Fi}} BC14{ v6 v7 Fi FC11 FC4 Fp[11]} BC3 Fi Fp FD[5]}


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

static void Test_S5786C10()
{
  extern Class_Descriptor cd_S5786C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1228,2917)];
    init_test(&cd_S5786C10, buf);
    S5786C10 *dp, &lv = *(dp=new (buf) S5786C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19632,11664), "sizeof(S5786C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C10)");
    /*is_ambiguous_... S5786C10::S5786C12 */ AMB_check_base_class_offset(lv, (S7511C5*)(S5786C12*), ABISELECT(12160,7204), "S5786C10");
    /*is_ambiguous_... S5786C10::S5786C12 */ AMB_check_base_class_offset(lv, (S7511C5*)(S5786C6*)(S5786C12*), ABISELECT(12160,7204), "S5786C10");
    /*is_ambiguous_... S5786C10::S5786C6 */ AMB_check_base_class_offset(lv, (S7511C5*)(S5786C6*), ABISELECT(12160,7204), "S5786C10");
    check_base_class_offset(lv, (S7511C5*)(S5786C9*), ABISELECT(12160,7204), "S5786C10");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*)(S5786C4*), ABISELECT(12160,7204), "S5786C10");
    /*is_ambiguous_... S5786C10::S5786C12 */ AMB_check_base_class_offset(lv, (S7511C5*)(S5786C12*), ABISELECT(12160,7204), "S5786C10");
    /*is_ambiguous_... S5786C10::S5786C12 */ AMB_check_base_class_offset(lv, (S7511C5*)(S5786C6*)(S5786C12*), ABISELECT(12160,7204), "S5786C10");
    /*is_ambiguous_... S5786C10::S5786C12 */ AMB_check_base_class_offset(lv, (S5786C6*)(S5786C12*), ABISELECT(9360,5556), "S5786C10");
    check_base_class_offset(lv, (S5786C12*)(S5786C11*), ABISELECT(9360,5556), "S5786C10");
    /*is_ambiguous_... S5786C11::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*)(S5786C11*), ABISELECT(6200,3668), "S5786C10");
    /*is_ambiguous_... S5786C11::S5786C6 */ AMB_check_base_class_offset(lv, (S5786C6*)(S5786C11*), ABISELECT(12288,7280), "S5786C10");
    check_base_class_offset(lv, (S5786C6*)(S5786C9*), ABISELECT(12288,7280), "S5786C10");
    check_base_class_offset(lv, (S5786C8*)(S5786C9*), ABISELECT(15232,9040), "S5786C10");
    check_base_class_offset(lv, (S5786C9*)(S5786C11*), ABISELECT(13584,8040), "S5786C10");
    check_base_class_offset(lv, (S7511C10*)(S5786C4*), ABISELECT(17992,10680), "S5786C10");
    check_base_class_offset(lv, (S2524C7*)(S5786C4*), ABISELECT(19568,11624), "S5786C10");
    check_base_class_offset(lv, (S5786C6*)(S5786C4*), ABISELECT(16704,9920), "S5786C10");
    check_base_class_offset(lv, (S5786C4*)(S5786C11*), ABISELECT(16704,9920), "S5786C10");
    check_base_class_offset(lv, (S5786C11*), ABISELECT(6192,3664), "S5786C10");
    check_base_class_offset(lv, (S5786C3*), 0, "S5786C10");
    /*is_ambiguous_... S5786C10::S5786C12 */ AMB_check_base_class_offset(lv, (S5786C6*)(S5786C12*), ABISELECT(3296,1948), "S5786C10");
    /*is_ambiguous_... S5786C10::S5786C12 */ AMB_check_base_class_offset(lv, (S5786C12*), ABISELECT(3296,1948), "S5786C10");
    check_field_offset(lv, s5786c10f0, ABISELECT(6096,3596), "S5786C10.s5786c10f0");
    check_field_offset(lv, s5786c10f1, ABISELECT(6104,3600), "S5786C10.s5786c10f1");
    check_field_offset(lv, s5786c10f2, ABISELECT(6112,3604), "S5786C10.s5786c10f2");
    test_class_info(&lv, &cd_S5786C10);
    dp->~S5786C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C10(Test_S5786C10, "S5786C10", ABISELECT(19632,11664));

#else // __cplusplus

extern void _ZN8S5786C10C1Ev();
extern void _ZN8S5786C10D1Ev();
Name_Map name_map_S5786C10[] = {
  NSPAIR(_ZN8S5786C10C1Ev),
  NSPAIR(_ZN8S5786C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C12;
extern VTBL_ENTRY _ZTI8S5786C12[];
extern  VTBL_ENTRY _ZTV8S5786C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C12[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C8;
extern VTBL_ENTRY _ZTI7S5786C8[];
extern  VTBL_ENTRY _ZTV7S5786C8[];
extern Class_Descriptor cd_S5786C9;
extern VTBL_ENTRY _ZTI7S5786C9[];
extern  VTBL_ENTRY _ZTV7S5786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C9[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C4;
extern VTBL_ENTRY _ZTI7S5786C4[];
extern  VTBL_ENTRY _ZTV7S5786C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C4[];
extern Class_Descriptor cd_S5786C11;
extern VTBL_ENTRY _ZTI8S5786C11[];
extern  VTBL_ENTRY _ZTV8S5786C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C11[];
extern Class_Descriptor cd_S5786C3;
extern VTBL_ENTRY _ZTI7S5786C3[];
extern  VTBL_ENTRY _ZTV7S5786C3[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C12;
extern VTBL_ENTRY _ZTI8S5786C12[];
extern  VTBL_ENTRY _ZTV8S5786C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C12[];
static Base_Class bases_S5786C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(12160,7204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5786C6,    ABISELECT(9360,5556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5786C12,    ABISELECT(9360,5556), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(6200,3668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5786C6,    ABISELECT(12288,7280), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S5786C8,    ABISELECT(15232,9040), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S5786C9,    ABISELECT(13584,8040), //bcp->offset
    40, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7511C10,    ABISELECT(17992,10680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2524C7,    ABISELECT(19568,11624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5786C6,    ABISELECT(16704,9920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5786C4,    ABISELECT(16704,9920), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S5786C11,    ABISELECT(6192,3664), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5786C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5786C6,    ABISELECT(3296,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5786C12,    ABISELECT(3296,1948), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //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 _ZTI8S5786C10[];
extern void _ZN7S5786C32v1Ev();
extern void _ZN7S5786C32v2Ev();
extern void _ZN8S5786C10D1Ev();
extern void _ZN8S5786C10D0Ev();
extern void ABISELECT(_ZThn3296_N8S5786C10D1Ev,_ZThn1948_N8S5786C10D1Ev)();
extern void ABISELECT(_ZThn3296_N8S5786C10D0Ev,_ZThn1948_N8S5786C10D0Ev)();
extern void ABISELECT(_ZTv0_n80_N8S5786C10D1Ev,_ZTv0_n40_N8S5786C10D1Ev)();
extern void ABISELECT(_ZThn6192_N8S5786C10D1Ev,_ZThn3664_N8S5786C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S5786C10D0Ev,_ZTv0_n40_N8S5786C10D0Ev)();
extern void ABISELECT(_ZThn6192_N8S5786C10D0Ev,_ZThn3664_N8S5786C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5786C10D1Ev,_ZTv0_n16_N8S5786C10D1Ev)();
extern void ABISELECT(_ZThn9360_N8S5786C10D1Ev,_ZThn5556_N8S5786C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5786C10D0Ev,_ZTv0_n16_N8S5786C10D0Ev)();
extern void ABISELECT(_ZThn9360_N8S5786C10D0Ev,_ZThn5556_N8S5786C10D0Ev)() __attribute__((weak));
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
extern void _ZN7S5786C42v7Ev();
static  VTBL_ENTRY vtc_S5786C10[] = {
  ABISELECT(19568,11624),
  ABISELECT(16704,9920),
  ABISELECT(15232,9040),
  ABISELECT(13584,8040),
  ABISELECT(12288,7280),
  ABISELECT(12160,7204),
  ABISELECT(9360,5556),
  ABISELECT(6192,3664),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  (VTBL_ENTRY)&_ZN7S5786C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5786C32v2Ev,
  (VTBL_ENTRY)&_ZN8S5786C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5786C10D0Ev,
  ABISELECT(8864,5256),
  ABISELECT(-3296,-1948),
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S5786C10D1Ev,_ZThn1948_N8S5786C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S5786C10D0Ev,_ZThn1948_N8S5786C10D0Ev),
  ABISELECT(-6192,-3664),
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  ABISELECT(-6192,-3664),
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S5786C10D1Ev,_ZTv0_n40_N8S5786C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S5786C10D0Ev,_ZTv0_n40_N8S5786C10D0Ev),
  ABISELECT(-9360,-5556),
  ABISELECT(2800,1648),
  ABISELECT(-9360,-5556),
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5786C10D1Ev,_ZTv0_n16_N8S5786C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5786C10D0Ev,_ZTv0_n16_N8S5786C10D0Ev),
  ABISELECT(-128,-76),
  ABISELECT(-12288,-7280),
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-13584,-8040),
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
  0,
  0,
  ABISELECT(-15232,-9040),
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-16704,-9920),
  (VTBL_ENTRY)&(_ZTI8S5786C10[0]),
  (VTBL_ENTRY)&_ZN7S5786C42v7Ev,
};
extern VTBL_ENTRY _ZTV8S5786C10[];
extern void _ZN8S5786C12D1Ev();
extern void _ZN8S5786C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5786C12__A__8S5786C10[] = {
  ABISELECT(8864,5256),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C12[0]),
  (VTBL_ENTRY)&_ZN8S5786C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5786C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C68S5786C12__A3__8S5786C10[] = {
  ABISELECT(8864,5256),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
extern void _ZN8S5786C11D1Ev();
extern void _ZN8S5786C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5786C11__8S5786C10[] = {
  ABISELECT(13376,7960),
  ABISELECT(10512,6256),
  ABISELECT(9040,5376),
  ABISELECT(7392,4376),
  ABISELECT(6096,3616),
  ABISELECT(5968,3540),
  ABISELECT(3168,1892),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN8S5786C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5786C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S5786C11D1Ev,_ZTv0_n16_N8S5786C11D1Ev)();
extern void ABISELECT(_ZThn3168_N8S5786C11D1Ev,_ZThn1892_N8S5786C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S5786C11D0Ev,_ZTv0_n16_N8S5786C11D0Ev)();
extern void ABISELECT(_ZThn3168_N8S5786C11D0Ev,_ZThn1892_N8S5786C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5786C12__8S5786C11__8S5786C10[] = {
  ABISELECT(-3168,-1892),
  ABISELECT(2800,1648),
  ABISELECT(-3168,-1892),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5786C11D1Ev,_ZTv0_n16_N8S5786C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S5786C11D0Ev,_ZTv0_n16_N8S5786C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5786C6__A1__8S5786C11__8S5786C10[] = {
  ABISELECT(-128,-76),
  ABISELECT(-6096,-3616),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
};
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C9__8S5786C11__8S5786C10[] = {
  0,
  0,
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  ABISELECT(-7392,-4376),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
};
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C8__8S5786C11__8S5786C10[] = {
  0,
  0,
  ABISELECT(-9040,-5376),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
};
extern void _ZN7S5786C42v7Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C4__8S5786C11__8S5786C10[] = {
  0,
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  ABISELECT(-10512,-6256),
  (VTBL_ENTRY)&(_ZTI8S5786C11[0]),
  (VTBL_ENTRY)&_ZN7S5786C42v7Ev,
};
extern void _ZN8S5786C12D1Ev();
extern void _ZN8S5786C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5786C12__8S5786C10[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI8S5786C12[0]),
  (VTBL_ENTRY)&_ZN8S5786C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5786C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C68S5786C12__8S5786C10[] = {
  ABISELECT(2800,1648),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5786C6__A1__8S5786C10[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C9__8S5786C10[] = {
  ABISELECT(-1296,-760),
  ABISELECT(1648,1000),
  ABISELECT(-1424,-836),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
};
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C8__7S5786C9__8S5786C10[] = {
  0,
  0,
  ABISELECT(-1648,-1000),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C6__7S5786C9__8S5786C10[] = {
  ABISELECT(-128,-76),
  ABISELECT(1296,760),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
};
extern void _ZN7S5786C42v7Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C4__8S5786C10[] = {
  ABISELECT(2864,1704),
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C4[0]),
  (VTBL_ENTRY)&_ZN7S5786C42v7Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C67S5786C4__A2__8S5786C10[] = {
  ABISELECT(-4544,-2716),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTT_ENTRY vtt_S5786C10[] = {
  {&(_ZTV8S5786C10[10]),  10,61},
  {&(_tg__ZTV8S5786C12__A__8S5786C10[3]),  3,5},
  {&(_tg__ZTV7S5786C68S5786C12__A3__8S5786C10[3]),  3,3},
  {&(_ZTV8S5786C10[29]),  29,61},
  {&(_ZTV8S5786C10[35]),  35,61},
  {&(_ZTV8S5786C10[40]),  40,61},
  {&(_ZTV8S5786C10[47]),  47,61},
  {&(_ZTV8S5786C10[53]),  53,61},
  {&(_ZTV8S5786C10[60]),  60,61},
  {&(_ZTV8S5786C10[17]),  17,61},
  {&(_tg__ZTV8S5786C11__8S5786C10[9]),  9,11},
  {&(_tg__ZTV8S5786C12__8S5786C11__8S5786C10[4]),  4,6},
  {&(_tg__ZTV7S5786C6__A1__8S5786C11__8S5786C10[3]),  3,3},
  {&(_tg__ZTV7S5786C9__8S5786C11__8S5786C10[7]),  7,9},
  {&(_tg__ZTV7S5786C8__8S5786C11__8S5786C10[4]),  4,6},
  {&(_tg__ZTV7S5786C4__8S5786C11__8S5786C10[5]),  5,6},
  {&(_tg__ZTV8S5786C12__8S5786C10[3]),  3,5},
  {&(_tg__ZTV7S5786C68S5786C12__8S5786C10[3]),  3,3},
  {&(_tg__ZTV7S5786C6__A1__8S5786C10[3]),  3,3},
  {&(_tg__ZTV7S5786C9__8S5786C10[5]),  5,7},
  {&(_tg__ZTV7S5786C8__7S5786C9__8S5786C10[4]),  4,6},
  {&(_tg__ZTV7S5786C6__7S5786C9__8S5786C10[3]),  3,3},
  {&(_tg__ZTV7S5786C4__8S5786C10[4]),  4,5},
  {&(_tg__ZTV7S5786C67S5786C4__A2__8S5786C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S5786C10[];
extern  VTBL_ENTRY _ZTV8S5786C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5786C10[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5786C11D0Ev,_ZTv0_n16_N8S5786C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S5786C11D0Ev,_ZThn1892_N8S5786C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5786C11D1Ev,_ZTv0_n16_N8S5786C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S5786C11D1Ev,_ZThn1892_N8S5786C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5786C10D0Ev,_ZTv0_n16_N8S5786C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9360_N8S5786C10D0Ev,_ZThn5556_N8S5786C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S5786C10D1Ev,_ZTv0_n16_N8S5786C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9360_N8S5786C10D1Ev,_ZThn5556_N8S5786C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S5786C10D0Ev,_ZTv0_n40_N8S5786C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S5786C10D0Ev,_ZThn3664_N8S5786C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S5786C10D1Ev,_ZTv0_n40_N8S5786C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S5786C10D1Ev,_ZThn3664_N8S5786C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5786C10 = {  "S5786C10", // class name
  bases_S5786C10, 15,
  &(vtc_S5786C10[0]), // expected_vtbl_contents
  &(vtt_S5786C10[0]), // expected_vtt_contents
  ABISELECT(19632,11664), // object size
  NSPAIRA(_ZTI8S5786C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S5786C10),61, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5786C10),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5786C1  : S2524C7 , virtual S5786C3 , S5786C9 {
  ::S5786C10 s5786c1f0;
  int s5786c1f1;
  __tsi64 s5786c1f2;
  int s5786c1f3;
  void *s5786c1f4[9];
  void *s5786c1f5;
  void *s5786c1f6;
  __tsi64 s5786c1f7[7];
  ::S7511C10 s5786c1f8;
  ~S5786C1(); // tgen
  S5786C1(); // tgen
};
//SIG(1 S5786C1) C1{ BC2{ m Fi[2] FL Fp[6]} VBC3{ v1 v2 Fi FC4{ BC5{ m Fi Fs FL Fp} VBC2 BC6{ VBC7{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC7 FC7 Fp Fi Fp[7] Fi[2] FC7 FC7[6] FL[2] Fp Fi Fp} v7 Fs Fi FD Fc Fi Fl Fp FC8{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC6} Fi Fp} FC7 Fp[11]} BC9{ VBC7 VBC8 VBC6 v5 v6 FL Fi FL[5] Fi[11] FC6 Fp Fc Fp FC5 Fp[8]} FC10{ VBC11{ VBC12{ VBC7 BC6 vd Fi Fp[3] Fi FU13{ m Fs:0 Fi FL Fp} FC14{} FC14 FC6 FU13 Fp[3]} BC5 VBC6 VBC9 VBC4 vd Fi Fi Fp[7] Fi FC15{ BC5 VBC7 BC6 VBC8 BC2 Fs FC2 Fi Fi}} BC3 BC12 Fi Fp FD[5]} Fi FL Fi Fp[9] Fp Fp FL[7] FC5}


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

static void Test_S5786C1()
{
  extern Class_Descriptor cd_S5786C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1734,4127)];
    init_test(&cd_S5786C1, buf);
    S5786C1 *dp, &lv = *(dp=new (buf) S5786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(27728,16504), "sizeof(S5786C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5786C1)");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(1648,1000), "S5786C1");
    check_base_class_offset(lv, (S5786C3*), ABISELECT(21536,12840), "S5786C1");
    check_base_class_offset(lv, (S7511C5*)(S5786C9*), ABISELECT(24832,14788), "S5786C1");
    check_base_class_offset(lv, (S7511C5*)(S5786C6*), ABISELECT(24832,14788), "S5786C1");
    check_base_class_offset(lv, (S5786C8*)(S5786C9*), ABISELECT(24960,14864), "S5786C1");
    check_base_class_offset(lv, (S5786C6*)(S5786C9*), ABISELECT(26432,15744), "S5786C1");
    check_base_class_offset(lv, (S5786C9*), 0, "S5786C1");
    check_field_offset(lv, s5786c1f0, ABISELECT(1712,1040), "S5786C1.s5786c1f0");
    check_field_offset(lv, s5786c1f1, ABISELECT(21344,12704), "S5786C1.s5786c1f1");
    check_field_offset(lv, s5786c1f2, ABISELECT(21352,12708), "S5786C1.s5786c1f2");
    check_field_offset(lv, s5786c1f3, ABISELECT(21360,12716), "S5786C1.s5786c1f3");
    check_field_offset(lv, s5786c1f4, ABISELECT(21368,12720), "S5786C1.s5786c1f4");
    check_field_offset(lv, s5786c1f5, ABISELECT(21440,12756), "S5786C1.s5786c1f5");
    check_field_offset(lv, s5786c1f6, ABISELECT(21448,12760), "S5786C1.s5786c1f6");
    check_field_offset(lv, s5786c1f7, ABISELECT(21456,12764), "S5786C1.s5786c1f7");
    check_field_offset(lv, s5786c1f8, ABISELECT(21512,12820), "S5786C1.s5786c1f8");
    test_class_info(&lv, &cd_S5786C1);
    dp->~S5786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5786C1(Test_S5786C1, "S5786C1", ABISELECT(27728,16504));

#else // __cplusplus

extern void _ZN7S5786C1C1Ev();
extern void _ZN7S5786C1D1Ev();
Name_Map name_map_S5786C1[] = {
  NSPAIR(_ZN7S5786C1C1Ev),
  NSPAIR(_ZN7S5786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S5786C3;
extern VTBL_ENTRY _ZTI7S5786C3[];
extern  VTBL_ENTRY _ZTV7S5786C3[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5786C8;
extern VTBL_ENTRY _ZTI7S5786C8[];
extern  VTBL_ENTRY _ZTV7S5786C8[];
extern Class_Descriptor cd_S5786C6;
extern VTBL_ENTRY _ZTI7S5786C6[];
extern  VTBL_ENTRY _ZTV7S5786C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C6[];
extern Class_Descriptor cd_S5786C9;
extern VTBL_ENTRY _ZTI7S5786C9[];
extern  VTBL_ENTRY _ZTV7S5786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C9[];
static Base_Class bases_S5786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2524C7,    ABISELECT(1648,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5786C3,    ABISELECT(21536,12840), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C5,    ABISELECT(24832,14788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5786C8,    ABISELECT(24960,14864), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 1},
  {&cd_S5786C6,    ABISELECT(26432,15744), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S5786C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5786C1[];
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
extern void _ZN7S5786C32v1Ev();
extern void _ZN7S5786C32v2Ev();
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY vtc_S5786C1[] = {
  ABISELECT(21536,12840),
  ABISELECT(26432,15744),
  ABISELECT(24960,14864),
  ABISELECT(24832,14788),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C1[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
  0,
  0,
  ABISELECT(-21536,-12840),
  (VTBL_ENTRY)&(_ZTI7S5786C1[0]),
  (VTBL_ENTRY)&_ZN7S5786C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5786C32v2Ev,
  0,
  0,
  ABISELECT(-24960,-14864),
  (VTBL_ENTRY)&(_ZTI7S5786C1[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
  ABISELECT(-1600,-956),
  ABISELECT(-26432,-15744),
  (VTBL_ENTRY)&(_ZTI7S5786C1[0]),
};
extern VTBL_ENTRY _ZTV7S5786C1[];
extern void _ZN7S5786C92v5Ev();
extern void _ZN7S5786C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C9__7S5786C1[] = {
  ABISELECT(26432,15744),
  ABISELECT(24960,14864),
  ABISELECT(24832,14788),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5786C92v6Ev,
};
extern void _ZN7S5786C82v3Ev();
extern void _ZN7S5786C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S5786C8__7S5786C9__7S5786C1[] = {
  0,
  0,
  ABISELECT(-24960,-14864),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
  (VTBL_ENTRY)&_ZN7S5786C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5786C82v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5786C6__7S5786C9__7S5786C1[] = {
  ABISELECT(-1600,-956),
  ABISELECT(-26432,-15744),
  (VTBL_ENTRY)&(_ZTI7S5786C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5786C6__7S5786C1[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S5786C6[0]),
};
static  VTT_ENTRY vtt_S5786C1[] = {
  {&(_ZTV7S5786C1[6]),  6,23},
  {&(_tg__ZTV7S5786C9__7S5786C1[5]),  5,7},
  {&(_tg__ZTV7S5786C8__7S5786C9__7S5786C1[4]),  4,6},
  {&(_tg__ZTV7S5786C6__7S5786C9__7S5786C1[3]),  3,3},
  {&(_ZTV7S5786C1[12]),  12,23},
  {&(_ZTV7S5786C1[18]),  18,23},
  {&(_ZTV7S5786C1[23]),  23,23},
  {&(_tg__ZTV7S5786C6__7S5786C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5786C1[];
extern  VTBL_ENTRY _ZTV7S5786C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5786C1[];
Class_Descriptor cd_S5786C1 = {  "S5786C1", // class name
  bases_S5786C1, 6,
  &(vtc_S5786C1[0]), // expected_vtbl_contents
  &(vtt_S5786C1[0]), // expected_vtt_contents
  ABISELECT(27728,16504), // object size
  NSPAIRA(_ZTI7S5786C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5786C1),23, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5786C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5785C6  : virtual S7511C5 {
  ::S7511C5 s5785c6f0;
  ::S7511C5 s5785c6f1;
  void *s5785c6f2;
  int s5785c6f3;
  void *s5785c6f4[7];
  int s5785c6f5[2];
  ::S7511C5 s5785c6f6;
  ::S7511C5 s5785c6f7[6];
  __tsi64 s5785c6f8[2];
  void *s5785c6f9;
  int s5785c6f10;
  void *s5785c6f11;
  ~S5785C6(); // tgen
  S5785C6(); // tgen
};
//SIG(-1 S5785C6) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}


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

static void Test_S5785C6()
{
  extern Class_Descriptor cd_S5785C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,210)];
    init_test(&cd_S5785C6, buf);
    S5785C6 *dp, &lv = *(dp=new (buf) S5785C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,836), "sizeof(S5785C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5785C6)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1296,760), "S5785C6");
    check_field_offset(lv, s5785c6f0, ABISELECT(16,4), "S5785C6.s5785c6f0");
    check_field_offset(lv, s5785c6f1, ABISELECT(144,80), "S5785C6.s5785c6f1");
    check_field_offset(lv, s5785c6f2, ABISELECT(272,156), "S5785C6.s5785c6f2");
    check_field_offset(lv, s5785c6f3, ABISELECT(280,160), "S5785C6.s5785c6f3");
    check_field_offset(lv, s5785c6f4, ABISELECT(288,164), "S5785C6.s5785c6f4");
    check_field_offset(lv, s5785c6f5, ABISELECT(344,192), "S5785C6.s5785c6f5");
    check_field_offset(lv, s5785c6f6, ABISELECT(352,200), "S5785C6.s5785c6f6");
    check_field_offset(lv, s5785c6f7, ABISELECT(480,276), "S5785C6.s5785c6f7");
    check_field_offset(lv, s5785c6f8, ABISELECT(1248,732), "S5785C6.s5785c6f8");
    check_field_offset(lv, s5785c6f9, ABISELECT(1264,748), "S5785C6.s5785c6f9");
    check_field_offset(lv, s5785c6f10, ABISELECT(1272,752), "S5785C6.s5785c6f10");
    check_field_offset(lv, s5785c6f11, ABISELECT(1280,756), "S5785C6.s5785c6f11");
    test_class_info(&lv, &cd_S5785C6);
    dp->~S5785C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5785C6(Test_S5785C6, "S5785C6", ABISELECT(1424,836));

#else // __cplusplus

extern void _ZN7S5785C6C1Ev();
extern void _ZN7S5785C6D1Ev();
Name_Map name_map_S5785C6[] = {
  NSPAIR(_ZN7S5785C6C1Ev),
  NSPAIR(_ZN7S5785C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
static Base_Class bases_S5785C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1296,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5785C6[];
static  VTBL_ENTRY vtc_S5785C6[] = {
  ABISELECT(1296,760),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C6[0]),
};
extern VTBL_ENTRY _ZTV7S5785C6[];
static  VTT_ENTRY vtt_S5785C6[] = {
  {&(_ZTV7S5785C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5785C6[];
extern  VTBL_ENTRY _ZTV7S5785C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C6[];
Class_Descriptor cd_S5785C6 = {  "S5785C6", // class name
  bases_S5785C6, 1,
  &(vtc_S5785C6[0]), // expected_vtbl_contents
  &(vtt_S5785C6[0]), // expected_vtt_contents
  ABISELECT(1424,836), // object size
  NSPAIRA(_ZTI7S5785C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5785C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5785C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5785C8  {
  int s5785c8f0[2];
  char s5785c8f1:3;
  int s5785c8f2[5];
  int s5785c8f3:4;
  int s5785c8f4;
  ::S5785C6 s5785c8f5;
  virtual void  v3(); // _ZN7S5785C82v3Ev
  virtual void  v4(); // _ZN7S5785C82v4Ev
  ~S5785C8(); // tgen
  S5785C8(); // tgen
};
//SIG(-1 S5785C8) C1{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp}}


void  S5785C8 ::v3(){vfunc_called(this, "_ZN7S5785C82v3Ev");}
void  S5785C8 ::v4(){vfunc_called(this, "_ZN7S5785C82v4Ev");}
S5785C8 ::~S5785C8(){ note_dtor("S5785C8", this);} // tgen
S5785C8 ::S5785C8(){ note_ctor("S5785C8", this);} // tgen

static void Test_S5785C8()
{
  extern Class_Descriptor cd_S5785C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,221)];
    init_test(&cd_S5785C8, buf);
    S5785C8 *dp, &lv = *(dp=new (buf) S5785C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,880), "sizeof(S5785C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5785C8)");
    check_field_offset(lv, s5785c8f0, ABISELECT(8,4), "S5785C8.s5785c8f0");
    set_bf_and_test(lv, s5785c8f1, ABISELECT(16,12), 0, 3, 1, "S5785C8");
    set_bf_and_test(lv, s5785c8f1, ABISELECT(16,12), 0, 3, hide_sll(1LL<<2), "S5785C8");
    check_field_offset(lv, s5785c8f2, ABISELECT(20,16), "S5785C8.s5785c8f2");
    set_bf_and_test(lv, s5785c8f3, ABISELECT(40,36), 0, 4, 1, "S5785C8");
    set_bf_and_test(lv, s5785c8f3, ABISELECT(40,36), 0, 4, hide_sll(1LL<<3), "S5785C8");
    check_field_offset(lv, s5785c8f4, ABISELECT(44,40), "S5785C8.s5785c8f4");
    check_field_offset(lv, s5785c8f5, ABISELECT(48,44), "S5785C8.s5785c8f5");
    test_class_info(&lv, &cd_S5785C8);
    dp->~S5785C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5785C8(Test_S5785C8, "S5785C8", ABISELECT(1472,880));

#else // __cplusplus

extern void _ZN7S5785C8C1Ev();
extern void _ZN7S5785C8D1Ev();
Name_Map name_map_S5785C8[] = {
  NSPAIR(_ZN7S5785C8C1Ev),
  NSPAIR(_ZN7S5785C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5785C8[];
extern void _ZN7S5785C82v3Ev();
extern void _ZN7S5785C82v4Ev();
static  VTBL_ENTRY vtc_S5785C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C8[0]),
  (VTBL_ENTRY)&_ZN7S5785C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5785C82v4Ev,
};
extern VTBL_ENTRY _ZTI7S5785C8[];
extern  VTBL_ENTRY _ZTV7S5785C8[];
Class_Descriptor cd_S5785C8 = {  "S5785C8", // class name
  0,0,//no base classes
  &(vtc_S5785C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,880), // object size
  NSPAIRA(_ZTI7S5785C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5785C8),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  S5785C4  : S7511C10 , virtual S2524C7 , S5785C6 {
  short s5785c4f0;
  int s5785c4f1;
  long double s5785c4f2;
  char s5785c4f3;
  int s5785c4f4;
  long s5785c4f5;
  void *s5785c4f6;
  ::S5785C8 s5785c4f7;
  int s5785c4f8;
  void *s5785c4f9;
  virtual void  v7(); // _ZN7S5785C42v7Ev
  ~S5785C4(); // tgen
  S5785C4(); // tgen
};
//SIG(-1 S5785C4) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fi[2] FL Fp[6]} BC4{ VBC5{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC5 FC5 Fp Fi Fp[7] Fi[2] FC5 FC5[6] FL[2] Fp Fi Fp} v1 Fs Fi FD Fc Fi Fl Fp FC6{ v2 v3 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} Fi Fp}


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

static void Test_S5785C4()
{
  extern Class_Descriptor cd_S5785C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,456)];
    init_test(&cd_S5785C4, buf);
    S5785C4 *dp, &lv = *(dp=new (buf) S5785C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1820), "sizeof(S5785C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5785C4)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S5785C4");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(2864,1704), "S5785C4");
    check_base_class_offset(lv, (S7511C5*)(S5785C6*), ABISELECT(2928,1744), "S5785C4");
    check_base_class_offset(lv, (S5785C6*), 0, "S5785C4");
    check_field_offset(lv, s5785c4f0, ABISELECT(1312,780), "S5785C4.s5785c4f0");
    check_field_offset(lv, s5785c4f1, ABISELECT(1316,784), "S5785C4.s5785c4f1");
    check_field_offset(lv, s5785c4f2, ABISELECT(1328,788), "S5785C4.s5785c4f2");
    check_field_offset(lv, s5785c4f3, ABISELECT(1344,800), "S5785C4.s5785c4f3");
    check_field_offset(lv, s5785c4f4, ABISELECT(1348,804), "S5785C4.s5785c4f4");
    check_field_offset(lv, s5785c4f5, ABISELECT(1352,808), "S5785C4.s5785c4f5");
    check_field_offset(lv, s5785c4f6, ABISELECT(1360,812), "S5785C4.s5785c4f6");
    check_field_offset(lv, s5785c4f7, ABISELECT(1376,816), "S5785C4.s5785c4f7");
    check_field_offset(lv, s5785c4f8, ABISELECT(2848,1696), "S5785C4.s5785c4f8");
    check_field_offset(lv, s5785c4f9, ABISELECT(2856,1700), "S5785C4.s5785c4f9");
    test_class_info(&lv, &cd_S5785C4);
    dp->~S5785C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5785C4(Test_S5785C4, "S5785C4", ABISELECT(3056,1820));

#else // __cplusplus

extern void _ZN7S5785C4C1Ev();
extern void _ZN7S5785C4D1Ev();
Name_Map name_map_S5785C4[] = {
  NSPAIR(_ZN7S5785C4C1Ev),
  NSPAIR(_ZN7S5785C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5785C6;
extern VTBL_ENTRY _ZTI7S5785C6[];
extern  VTBL_ENTRY _ZTV7S5785C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C6[];
static Base_Class bases_S5785C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2524C7,    ABISELECT(2864,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7511C5,    ABISELECT(2928,1744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5785C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5785C4[];
extern void _ZN7S5785C42v7Ev();
static  VTBL_ENTRY vtc_S5785C4[] = {
  ABISELECT(2864,1704),
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C4[0]),
  (VTBL_ENTRY)&_ZN7S5785C42v7Ev,
};
extern VTBL_ENTRY _ZTV7S5785C4[];
static  VTBL_ENTRY _tg__ZTV7S5785C6__7S5785C4[] = {
  ABISELECT(2928,1744),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C6[0]),
};
static  VTT_ENTRY vtt_S5785C4[] = {
  {&(_ZTV7S5785C4[4]),  4,5},
  {&(_tg__ZTV7S5785C6__7S5785C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5785C4[];
extern  VTBL_ENTRY _ZTV7S5785C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C4[];
Class_Descriptor cd_S5785C4 = {  "S5785C4", // class name
  bases_S5785C4, 4,
  &(vtc_S5785C4[0]), // expected_vtbl_contents
  &(vtt_S5785C4[0]), // expected_vtt_contents
  ABISELECT(3056,1820), // object size
  NSPAIRA(_ZTI7S5785C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5785C4),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5785C4),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  S5785C3  {
  int s5785c3f0;
  ::S5785C4 s5785c3f1;
  ::S7511C5 s5785c3f2;
  void *s5785c3f3[11];
  virtual void  v1(); // _ZN7S5785C32v1Ev
  virtual void  v2(); // _ZN7S5785C32v2Ev
  ~S5785C3(); // tgen
  S5785C3(); // tgen
};
//SIG(-1 S5785C3) C1{ v1 v2 Fi FC2{ BC3{ m Fi Fs FL Fp} VBC4{ m Fi[2] FL Fp[6]} BC5{ VBC6{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC6 FC6 Fp Fi Fp[7] Fi[2] FC6 FC6[6] FL[2] Fp Fi Fp} v3 Fs Fi FD Fc Fi Fl Fp FC7{ v4 v5 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC5} Fi Fp} FC6 Fp[11]}


void  S5785C3 ::v1(){vfunc_called(this, "_ZN7S5785C32v1Ev");}
void  S5785C3 ::v2(){vfunc_called(this, "_ZN7S5785C32v2Ev");}
S5785C3 ::~S5785C3(){ note_dtor("S5785C3", this);} // tgen
S5785C3 ::S5785C3(){ note_ctor("S5785C3", this);} // tgen

static void Test_S5785C3()
{
  extern Class_Descriptor cd_S5785C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,488)];
    init_test(&cd_S5785C3, buf);
    S5785C3 *dp, &lv = *(dp=new (buf) S5785C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1948), "sizeof(S5785C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5785C3)");
    check_field_offset(lv, s5785c3f0, ABISELECT(8,4), "S5785C3.s5785c3f0");
    check_field_offset(lv, s5785c3f1, ABISELECT(16,8), "S5785C3.s5785c3f1");
    check_field_offset(lv, s5785c3f2, ABISELECT(3072,1828), "S5785C3.s5785c3f2");
    check_field_offset(lv, s5785c3f3, ABISELECT(3200,1904), "S5785C3.s5785c3f3");
    test_class_info(&lv, &cd_S5785C3);
    dp->~S5785C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5785C3(Test_S5785C3, "S5785C3", ABISELECT(3296,1948));

#else // __cplusplus

extern void _ZN7S5785C3C1Ev();
extern void _ZN7S5785C3D1Ev();
Name_Map name_map_S5785C3[] = {
  NSPAIR(_ZN7S5785C3C1Ev),
  NSPAIR(_ZN7S5785C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5785C3[];
extern void _ZN7S5785C32v1Ev();
extern void _ZN7S5785C32v2Ev();
static  VTBL_ENTRY vtc_S5785C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C3[0]),
  (VTBL_ENTRY)&_ZN7S5785C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5785C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S5785C3[];
extern  VTBL_ENTRY _ZTV7S5785C3[];
Class_Descriptor cd_S5785C3 = {  "S5785C3", // class name
  0,0,//no base classes
  &(vtc_S5785C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3296,1948), // object size
  NSPAIRA(_ZTI7S5785C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5785C3),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  S5785C9  : virtual S7511C5 , virtual S5785C8 , virtual S5785C6 {
  __tsi64 s5785c9f0;
  int s5785c9f1;
  __tsi64 s5785c9f2[5];
  int s5785c9f3[11];
  ::S5785C6 s5785c9f4;
  void *s5785c9f5;
  char s5785c9f6;
  void *s5785c9f7;
  ::S7511C10 s5785c9f8;
  void *s5785c9f9[8];
  virtual void  v5(); // _ZN7S5785C92v5Ev
  virtual void  v6(); // _ZN7S5785C92v6Ev
  ~S5785C9(); // tgen
  S5785C9(); // tgen
};
//SIG(-1 S5785C9) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} VBC3{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4{ VBC2 FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}} VBC4 v1 v2 FL Fi FL[5] Fi[11] FC4 Fp Fc Fp FC5{ m Fi Fs FL Fp} Fp[8]}


void  S5785C9 ::v5(){vfunc_called(this, "_ZN7S5785C92v5Ev");}
void  S5785C9 ::v6(){vfunc_called(this, "_ZN7S5785C92v6Ev");}
S5785C9 ::~S5785C9(){ note_dtor("S5785C9", this);} // tgen
S5785C9 ::S5785C9(){ note_ctor("S5785C9", this);} // tgen

static void Test_S5785C9()
{
  extern Class_Descriptor cd_S5785C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,680)];
    init_test(&cd_S5785C9, buf);
    S5785C9 *dp, &lv = *(dp=new (buf) S5785C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,2716), "sizeof(S5785C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5785C9)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1648,1000), "S5785C9");
    check_base_class_offset(lv, (S7511C5*)(S5785C6*), ABISELECT(1648,1000), "S5785C9");
    check_base_class_offset(lv, (S5785C8*), ABISELECT(1776,1076), "S5785C9");
    check_base_class_offset(lv, (S5785C6*), ABISELECT(3248,1956), "S5785C9");
    check_field_offset(lv, s5785c9f0, ABISELECT(8,4), "S5785C9.s5785c9f0");
    check_field_offset(lv, s5785c9f1, ABISELECT(16,12), "S5785C9.s5785c9f1");
    check_field_offset(lv, s5785c9f2, ABISELECT(24,16), "S5785C9.s5785c9f2");
    check_field_offset(lv, s5785c9f3, ABISELECT(64,56), "S5785C9.s5785c9f3");
    check_field_offset(lv, s5785c9f4, ABISELECT(112,100), "S5785C9.s5785c9f4");
    check_field_offset(lv, s5785c9f5, ABISELECT(1536,936), "S5785C9.s5785c9f5");
    check_field_offset(lv, s5785c9f6, ABISELECT(1544,940), "S5785C9.s5785c9f6");
    check_field_offset(lv, s5785c9f7, ABISELECT(1552,944), "S5785C9.s5785c9f7");
    check_field_offset(lv, s5785c9f8, ABISELECT(1560,948), "S5785C9.s5785c9f8");
    check_field_offset(lv, s5785c9f9, ABISELECT(1584,968), "S5785C9.s5785c9f9");
    test_class_info(&lv, &cd_S5785C9);
    dp->~S5785C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5785C9(Test_S5785C9, "S5785C9", ABISELECT(4544,2716));

#else // __cplusplus

extern void _ZN7S5785C9C1Ev();
extern void _ZN7S5785C9D1Ev();
Name_Map name_map_S5785C9[] = {
  NSPAIR(_ZN7S5785C9C1Ev),
  NSPAIR(_ZN7S5785C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5785C8;
extern VTBL_ENTRY _ZTI7S5785C8[];
extern  VTBL_ENTRY _ZTV7S5785C8[];
extern Class_Descriptor cd_S5785C6;
extern VTBL_ENTRY _ZTI7S5785C6[];
extern  VTBL_ENTRY _ZTV7S5785C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C6[];
static Base_Class bases_S5785C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1648,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5785C8,    ABISELECT(1776,1076), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5785C6,    ABISELECT(3248,1956), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //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 _ZTI7S5785C9[];
extern void _ZN7S5785C92v5Ev();
extern void _ZN7S5785C92v6Ev();
extern void _ZN7S5785C82v3Ev();
extern void _ZN7S5785C82v4Ev();
static  VTBL_ENTRY vtc_S5785C9[] = {
  ABISELECT(3248,1956),
  ABISELECT(1776,1076),
  ABISELECT(1648,1000),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C9[0]),
  (VTBL_ENTRY)&_ZN7S5785C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5785C92v6Ev,
  0,
  0,
  ABISELECT(-1776,-1076),
  (VTBL_ENTRY)&(_ZTI7S5785C9[0]),
  (VTBL_ENTRY)&_ZN7S5785C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5785C82v4Ev,
  ABISELECT(-1600,-956),
  ABISELECT(-3248,-1956),
  (VTBL_ENTRY)&(_ZTI7S5785C9[0]),
};
extern VTBL_ENTRY _ZTV7S5785C9[];
static  VTBL_ENTRY _tg__ZTV7S5785C6__7S5785C9[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C6[0]),
};
static  VTT_ENTRY vtt_S5785C9[] = {
  {&(_ZTV7S5785C9[5]),  5,16},
  {&(_ZTV7S5785C9[11]),  11,16},
  {&(_ZTV7S5785C9[16]),  16,16},
  {&(_tg__ZTV7S5785C6__7S5785C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5785C9[];
extern  VTBL_ENTRY _ZTV7S5785C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C9[];
Class_Descriptor cd_S5785C9 = {  "S5785C9", // class name
  bases_S5785C9, 3,
  &(vtc_S5785C9[0]), // expected_vtbl_contents
  &(vtt_S5785C9[0]), // expected_vtt_contents
  ABISELECT(4544,2716), // object size
  NSPAIRA(_ZTI7S5785C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5785C9),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5785C9),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  S5785C1  : S2524C7 , virtual S5785C3 , S5785C9 {
  ::S5786C10 s5785c1f0;
  int s5785c1f1;
  long s5785c1f2;
  int s5785c1f3;
  void *s5785c1f4[9];
  void *s5785c1f5;
  void *s5785c1f6;
  __tsi64 s5785c1f7[7];
  ::S7511C10 s5785c1f8;
  ~S5785C1(); // tgen
  S5785C1(); // tgen
};
//SIG(1 S5785C1) C1{ BC2{ m Fi[2] FL Fp[6]} VBC3{ v1 v2 Fi FC4{ BC5{ m Fi Fs FL Fp} VBC2 BC6{ VBC7{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC7 FC7 Fp Fi Fp[7] Fi[2] FC7 FC7[6] FL[2] Fp Fi Fp} v14 Fs Fi FD Fc Fi Fl Fp FC8{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC6} Fi Fp} FC7 Fp[11]} BC9{ VBC7 VBC8 VBC6 v5 v6 FL Fi FL[5] Fi[11] FC6 Fp Fc Fp FC5 Fp[8]} FC10{ VBC11{ VBC12{ VBC7 BC13{ VBC7 FC7 FC7 Fp Fi Fp[7] Fi[2] FC7 FC7[6] FL[2] Fp Fi Fp} vd Fi Fp[3] Fi FU14{ m Fs:0 Fi FL Fp} FC15{} FC15 FC13 FU14 Fp[3]} BC5 VBC13 VBC16{ VBC7 VBC17{ v7 v8 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC13} VBC13 v9 v10 FL Fi FL[5] Fi[11] FC13 Fp Fc Fp FC5 Fp[8]} VBC18{ BC5 VBC2 BC13 v11 Fs Fi FD Fc Fi Fl Fp FC17 Fi Fp} vd Fi Fi Fp[7] Fi FC19{ BC5 VBC7 BC13 VBC17 BC2 Fs FC2 Fi Fi}} BC20{ v12 v13 Fi FC18 FC7 Fp[11]} BC12 Fi Fp FD[5]} Fi Fl Fi Fp[9] Fp Fp FL[7] FC5}


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

static void Test_S5785C1()
{
  extern Class_Descriptor cd_S5785C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1734,4126)];
    init_test(&cd_S5785C1, buf);
    S5785C1 *dp, &lv = *(dp=new (buf) S5785C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(27728,16500), "sizeof(S5785C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5785C1)");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(1648,1000), "S5785C1");
    check_base_class_offset(lv, (S5785C3*), ABISELECT(21536,12836), "S5785C1");
    check_base_class_offset(lv, (S7511C5*)(S5785C9*), ABISELECT(24832,14784), "S5785C1");
    check_base_class_offset(lv, (S7511C5*)(S5785C6*), ABISELECT(24832,14784), "S5785C1");
    check_base_class_offset(lv, (S5785C8*)(S5785C9*), ABISELECT(24960,14860), "S5785C1");
    check_base_class_offset(lv, (S5785C6*)(S5785C9*), ABISELECT(26432,15740), "S5785C1");
    check_base_class_offset(lv, (S5785C9*), 0, "S5785C1");
    check_field_offset(lv, s5785c1f0, ABISELECT(1712,1040), "S5785C1.s5785c1f0");
    check_field_offset(lv, s5785c1f1, ABISELECT(21344,12704), "S5785C1.s5785c1f1");
    check_field_offset(lv, s5785c1f2, ABISELECT(21352,12708), "S5785C1.s5785c1f2");
    check_field_offset(lv, s5785c1f3, ABISELECT(21360,12712), "S5785C1.s5785c1f3");
    check_field_offset(lv, s5785c1f4, ABISELECT(21368,12716), "S5785C1.s5785c1f4");
    check_field_offset(lv, s5785c1f5, ABISELECT(21440,12752), "S5785C1.s5785c1f5");
    check_field_offset(lv, s5785c1f6, ABISELECT(21448,12756), "S5785C1.s5785c1f6");
    check_field_offset(lv, s5785c1f7, ABISELECT(21456,12760), "S5785C1.s5785c1f7");
    check_field_offset(lv, s5785c1f8, ABISELECT(21512,12816), "S5785C1.s5785c1f8");
    test_class_info(&lv, &cd_S5785C1);
    dp->~S5785C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5785C1(Test_S5785C1, "S5785C1", ABISELECT(27728,16500));

#else // __cplusplus

extern void _ZN7S5785C1C1Ev();
extern void _ZN7S5785C1D1Ev();
Name_Map name_map_S5785C1[] = {
  NSPAIR(_ZN7S5785C1C1Ev),
  NSPAIR(_ZN7S5785C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S5785C3;
extern VTBL_ENTRY _ZTI7S5785C3[];
extern  VTBL_ENTRY _ZTV7S5785C3[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5785C8;
extern VTBL_ENTRY _ZTI7S5785C8[];
extern  VTBL_ENTRY _ZTV7S5785C8[];
extern Class_Descriptor cd_S5785C6;
extern VTBL_ENTRY _ZTI7S5785C6[];
extern  VTBL_ENTRY _ZTV7S5785C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C6[];
extern Class_Descriptor cd_S5785C9;
extern VTBL_ENTRY _ZTI7S5785C9[];
extern  VTBL_ENTRY _ZTV7S5785C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C9[];
static Base_Class bases_S5785C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2524C7,    ABISELECT(1648,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5785C3,    ABISELECT(21536,12836), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7511C5,    ABISELECT(24832,14784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5785C8,    ABISELECT(24960,14860), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 1},
  {&cd_S5785C6,    ABISELECT(26432,15740), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S5785C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5785C1[];
extern void _ZN7S5785C92v5Ev();
extern void _ZN7S5785C92v6Ev();
extern void _ZN7S5785C32v1Ev();
extern void _ZN7S5785C32v2Ev();
extern void _ZN7S5785C82v3Ev();
extern void _ZN7S5785C82v4Ev();
static  VTBL_ENTRY vtc_S5785C1[] = {
  ABISELECT(21536,12836),
  ABISELECT(26432,15740),
  ABISELECT(24960,14860),
  ABISELECT(24832,14784),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C1[0]),
  (VTBL_ENTRY)&_ZN7S5785C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5785C92v6Ev,
  0,
  0,
  ABISELECT(-21536,-12836),
  (VTBL_ENTRY)&(_ZTI7S5785C1[0]),
  (VTBL_ENTRY)&_ZN7S5785C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5785C32v2Ev,
  0,
  0,
  ABISELECT(-24960,-14860),
  (VTBL_ENTRY)&(_ZTI7S5785C1[0]),
  (VTBL_ENTRY)&_ZN7S5785C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5785C82v4Ev,
  ABISELECT(-1600,-956),
  ABISELECT(-26432,-15740),
  (VTBL_ENTRY)&(_ZTI7S5785C1[0]),
};
extern VTBL_ENTRY _ZTV7S5785C1[];
extern void _ZN7S5785C92v5Ev();
extern void _ZN7S5785C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5785C9__7S5785C1[] = {
  ABISELECT(26432,15740),
  ABISELECT(24960,14860),
  ABISELECT(24832,14784),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C9[0]),
  (VTBL_ENTRY)&_ZN7S5785C92v5Ev,
  (VTBL_ENTRY)&_ZN7S5785C92v6Ev,
};
extern void _ZN7S5785C82v3Ev();
extern void _ZN7S5785C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S5785C8__7S5785C9__7S5785C1[] = {
  0,
  0,
  ABISELECT(-24960,-14860),
  (VTBL_ENTRY)&(_ZTI7S5785C9[0]),
  (VTBL_ENTRY)&_ZN7S5785C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5785C82v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5785C6__7S5785C9__7S5785C1[] = {
  ABISELECT(-1600,-956),
  ABISELECT(-26432,-15740),
  (VTBL_ENTRY)&(_ZTI7S5785C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5785C6__7S5785C1[] = {
  ABISELECT(-1600,-956),
  0,
  (VTBL_ENTRY)&(_ZTI7S5785C6[0]),
};
static  VTT_ENTRY vtt_S5785C1[] = {
  {&(_ZTV7S5785C1[6]),  6,23},
  {&(_tg__ZTV7S5785C9__7S5785C1[5]),  5,7},
  {&(_tg__ZTV7S5785C8__7S5785C9__7S5785C1[4]),  4,6},
  {&(_tg__ZTV7S5785C6__7S5785C9__7S5785C1[3]),  3,3},
  {&(_ZTV7S5785C1[12]),  12,23},
  {&(_ZTV7S5785C1[18]),  18,23},
  {&(_ZTV7S5785C1[23]),  23,23},
  {&(_tg__ZTV7S5785C6__7S5785C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5785C1[];
extern  VTBL_ENTRY _ZTV7S5785C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5785C1[];
Class_Descriptor cd_S5785C1 = {  "S5785C1", // class name
  bases_S5785C1, 6,
  &(vtc_S5785C1[0]), // expected_vtbl_contents
  &(vtt_S5785C1[0]), // expected_vtt_contents
  ABISELECT(27728,16500), // object size
  NSPAIRA(_ZTI7S5785C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5785C1),23, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5785C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C2  {
  __tsi64 s20111c2f0;
  virtual void  v3(); // _ZN8S20111C22v3Ev
  ~S20111C2(); // tgen
  S20111C2(); // tgen
};
//SIG(-1 S20111C2) C1{ v1 FL}


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

static void Test_S20111C2()
{
  extern Class_Descriptor cd_S20111C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20111C2, buf);
    S20111C2 *dp, &lv = *(dp=new (buf) S20111C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20111C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20111C2)");
    check_field_offset(lv, s20111c2f0, ABISELECT(8,4), "S20111C2.s20111c2f0");
    test_class_info(&lv, &cd_S20111C2);
    dp->~S20111C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C2(Test_S20111C2, "S20111C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20111C2C1Ev();
extern void _ZN8S20111C2D1Ev();
Name_Map name_map_S20111C2[] = {
  NSPAIR(_ZN8S20111C2C1Ev),
  NSPAIR(_ZN8S20111C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20111C2[];
extern void _ZN8S20111C22v3Ev();
static  VTBL_ENTRY vtc_S20111C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C2[0]),
  (VTBL_ENTRY)&_ZN8S20111C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S20111C2[];
extern  VTBL_ENTRY _ZTV8S20111C2[];
Class_Descriptor cd_S20111C2 = {  "S20111C2", // class name
  0,0,//no base classes
  &(vtc_S20111C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20111C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20111C2),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  S20111C3  {
  int s20111c3f0;
  virtual void  v4(); // _ZN8S20111C32v4Ev
  virtual void  v5(); // _ZN8S20111C32v5Ev
  virtual void  v6(); // _ZN8S20111C32v6Ev
  ~S20111C3(); // tgen
  S20111C3(); // tgen
};
//SIG(-1 S20111C3) C1{ v1 v2 v3 Fi}


void  S20111C3 ::v4(){vfunc_called(this, "_ZN8S20111C32v4Ev");}
void  S20111C3 ::v5(){vfunc_called(this, "_ZN8S20111C32v5Ev");}
void  S20111C3 ::v6(){vfunc_called(this, "_ZN8S20111C32v6Ev");}
S20111C3 ::~S20111C3(){ note_dtor("S20111C3", this);} // tgen
S20111C3 ::S20111C3(){ note_ctor("S20111C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20111C3C1Ev();
extern void _ZN8S20111C3D1Ev();
Name_Map name_map_S20111C3[] = {
  NSPAIR(_ZN8S20111C3C1Ev),
  NSPAIR(_ZN8S20111C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20111C3[];
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
static  VTBL_ENTRY vtc_S20111C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C3[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
Class_Descriptor cd_S20111C3 = {  "S20111C3", // class name
  0,0,//no base classes
  &(vtc_S20111C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20111C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20111C3),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  S20111C5  : S20111C3 {
  virtual void  v7(); // _ZN8S20111C52v7Ev
  virtual void  v8(); // _ZN8S20111C52v8Ev
  virtual void  v9(); // _ZN8S20111C52v9Ev
  virtual void  v10(); // _ZN8S20111C53v10Ev
  virtual void  v11(); // _ZN8S20111C53v11Ev
  ~S20111C5(); // tgen
  S20111C5(); // tgen
};
//SIG(-1 S20111C5) C1{ BC2{ v6 v7 v8 Fi} v1 v2 v3 v4 v5}


void  S20111C5 ::v7(){vfunc_called(this, "_ZN8S20111C52v7Ev");}
void  S20111C5 ::v8(){vfunc_called(this, "_ZN8S20111C52v8Ev");}
void  S20111C5 ::v9(){vfunc_called(this, "_ZN8S20111C52v9Ev");}
void  S20111C5 ::v10(){vfunc_called(this, "_ZN8S20111C53v10Ev");}
void  S20111C5 ::v11(){vfunc_called(this, "_ZN8S20111C53v11Ev");}
S20111C5 ::~S20111C5(){ note_dtor("S20111C5", this);} // tgen
S20111C5 ::S20111C5(){ note_ctor("S20111C5", this);} // tgen

static void Test_S20111C5()
{
  extern Class_Descriptor cd_S20111C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20111C5, buf);
    S20111C5 *dp, &lv = *(dp=new (buf) S20111C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20111C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20111C5)");
    check_base_class_offset(lv, (S20111C3*), 0, "S20111C5");
    test_class_info(&lv, &cd_S20111C5);
    dp->~S20111C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C5(Test_S20111C5, "S20111C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20111C5C1Ev();
extern void _ZN8S20111C5D1Ev();
Name_Map name_map_S20111C5[] = {
  NSPAIR(_ZN8S20111C5C1Ev),
  NSPAIR(_ZN8S20111C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
static Base_Class bases_S20111C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20111C5[];
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
static  VTBL_ENTRY vtc_S20111C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C5[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S20111C5[];
extern  VTBL_ENTRY _ZTV8S20111C5[];
Class_Descriptor cd_S20111C5 = {  "S20111C5", // class name
  bases_S20111C5, 1,
  &(vtc_S20111C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20111C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20111C5),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  S20111C6  {
  virtual void  v12(); // _ZN8S20111C63v12Ev
  virtual void  v13(); // _ZN8S20111C63v13Ev
  virtual void  v14(); // _ZN8S20111C63v14Ev
  virtual void  v15(); // _ZN8S20111C63v15Ev
  virtual void  v16(); // _ZN8S20111C63v16Ev
  virtual void  v17(); // _ZN8S20111C63v17Ev
  virtual void  v18(); // _ZN8S20111C63v18Ev
  ~S20111C6(); // tgen
  S20111C6(); // tgen
};
//SIG(-1 S20111C6) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S20111C6 ::v12(){vfunc_called(this, "_ZN8S20111C63v12Ev");}
void  S20111C6 ::v13(){vfunc_called(this, "_ZN8S20111C63v13Ev");}
void  S20111C6 ::v14(){vfunc_called(this, "_ZN8S20111C63v14Ev");}
void  S20111C6 ::v15(){vfunc_called(this, "_ZN8S20111C63v15Ev");}
void  S20111C6 ::v16(){vfunc_called(this, "_ZN8S20111C63v16Ev");}
void  S20111C6 ::v17(){vfunc_called(this, "_ZN8S20111C63v17Ev");}
void  S20111C6 ::v18(){vfunc_called(this, "_ZN8S20111C63v18Ev");}
S20111C6 ::~S20111C6(){ note_dtor("S20111C6", this);} // tgen
S20111C6 ::S20111C6(){ note_ctor("S20111C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20111C6C1Ev();
extern void _ZN8S20111C6D1Ev();
Name_Map name_map_S20111C6[] = {
  NSPAIR(_ZN8S20111C6C1Ev),
  NSPAIR(_ZN8S20111C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20111C6[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY vtc_S20111C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C6[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
Class_Descriptor cd_S20111C6 = {  "S20111C6", // class name
  0,0,//no base classes
  &(vtc_S20111C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20111C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20111C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C8  {
  ::S20111C6 s20111c8f0;
  virtual void  v19(); // _ZN8S20111C83v19Ev
  ~S20111C8(); // tgen
  S20111C8(); // tgen
};
//SIG(-1 S20111C8) C1{ v1 FC2{ v2 v3 v4 v5 v6 v7 v8}}


void  S20111C8 ::v19(){vfunc_called(this, "_ZN8S20111C83v19Ev");}
S20111C8 ::~S20111C8(){ note_dtor("S20111C8", this);} // tgen
S20111C8 ::S20111C8(){ note_ctor("S20111C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20111C8C1Ev();
extern void _ZN8S20111C8D1Ev();
Name_Map name_map_S20111C8[] = {
  NSPAIR(_ZN8S20111C8C1Ev),
  NSPAIR(_ZN8S20111C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20111C8[];
extern void _ZN8S20111C83v19Ev();
static  VTBL_ENTRY vtc_S20111C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C8[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S20111C8[];
extern  VTBL_ENTRY _ZTV8S20111C8[];
Class_Descriptor cd_S20111C8 = {  "S20111C8", // class name
  0,0,//no base classes
  &(vtc_S20111C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20111C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20111C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C9  {
  virtual  ~S20111C9(); // _ZN8S20111C9D1Ev
  virtual void  v46(); // _ZN8S20111C93v46Ev
  virtual void  v47(); // _ZN8S20111C93v47Ev
  virtual void  v48(); // _ZN8S20111C93v48Ev
  virtual void  v49(); // _ZN8S20111C93v49Ev
  virtual void  v50(); // _ZN8S20111C93v50Ev
  S20111C9(); // tgen
};
//SIG(-1 S20111C9) C1{ vd v1 v2 v3 v4 v5}


 S20111C9 ::~S20111C9(){ note_dtor("S20111C9", this);}
void  S20111C9 ::v46(){vfunc_called(this, "_ZN8S20111C93v46Ev");}
void  S20111C9 ::v47(){vfunc_called(this, "_ZN8S20111C93v47Ev");}
void  S20111C9 ::v48(){vfunc_called(this, "_ZN8S20111C93v48Ev");}
void  S20111C9 ::v49(){vfunc_called(this, "_ZN8S20111C93v49Ev");}
void  S20111C9 ::v50(){vfunc_called(this, "_ZN8S20111C93v50Ev");}
S20111C9 ::S20111C9(){ note_ctor("S20111C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20111C9C1Ev();
extern void _ZN8S20111C9D1Ev();
Name_Map name_map_S20111C9[] = {
  NSPAIR(_ZN8S20111C9C1Ev),
  NSPAIR(_ZN8S20111C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20111C9[];
extern void _ZN8S20111C9D1Ev();
extern void _ZN8S20111C9D0Ev();
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
static  VTBL_ENTRY vtc_S20111C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C9[0]),
  (VTBL_ENTRY)&_ZN8S20111C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20111C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
};
extern VTBL_ENTRY _ZTI8S20111C9[];
extern  VTBL_ENTRY _ZTV8S20111C9[];
Class_Descriptor cd_S20111C9 = {  "S20111C9", // class name
  0,0,//no base classes
  &(vtc_S20111C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20111C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20111C9),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C7  : S20111C5 , S20111C8 {
  ::S20111C9 s20111c7f0;
  virtual  ~S20111C7(); // _ZN8S20111C7D1Ev
  S20111C7(); // tgen
};
//SIG(-1 S20111C7) C1{ BC2{ BC3{ v1 v2 v3 Fi} v4 v5 v6 v7 v8} BC4{ v9 FC5{ v10 v11 v12 v13 v14 v15 v16}} vd FC6{ vd v17 v18 v19 v20 v21}}


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

static void Test_S20111C7()
{
  extern Class_Descriptor cd_S20111C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20111C7, buf);
    S20111C7 *dp, &lv = *(dp=new (buf) S20111C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20111C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20111C7)");
    check_base_class_offset(lv, (S20111C3*)(S20111C5*), 0, "S20111C7");
    check_base_class_offset(lv, (S20111C5*), 0, "S20111C7");
    check_base_class_offset(lv, (S20111C8*), ABISELECT(16,8), "S20111C7");
    check_field_offset(lv, s20111c7f0, ABISELECT(32,16), "S20111C7.s20111c7f0");
    test_class_info(&lv, &cd_S20111C7);
    dp->~S20111C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C7(Test_S20111C7, "S20111C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20111C7C1Ev();
extern void _ZN8S20111C7D1Ev();
Name_Map name_map_S20111C7[] = {
  NSPAIR(_ZN8S20111C7C1Ev),
  NSPAIR(_ZN8S20111C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C5;
extern VTBL_ENTRY _ZTI8S20111C5[];
extern  VTBL_ENTRY _ZTV8S20111C5[];
extern Class_Descriptor cd_S20111C8;
extern VTBL_ENTRY _ZTI8S20111C8[];
extern  VTBL_ENTRY _ZTV8S20111C8[];
static Base_Class bases_S20111C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20111C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20111C8,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20111C7[];
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
extern void _ZN8S20111C7D1Ev();
extern void _ZN8S20111C7D0Ev();
extern void _ZN8S20111C83v19Ev();
static  VTBL_ENTRY vtc_S20111C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C7[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20111C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20111C7D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20111C7[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S20111C7[];
extern  VTBL_ENTRY _ZTV8S20111C7[];
Class_Descriptor cd_S20111C7 = {  "S20111C7", // class name
  bases_S20111C7, 3,
  &(vtc_S20111C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20111C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20111C7),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C10  {
  int s20111c10f0;
  virtual void  v20(); // _ZN9S20111C103v20Ev
  virtual void  v21(); // _ZN9S20111C103v21Ev
  virtual void  v22(); // _ZN9S20111C103v22Ev
  virtual void  v23(); // _ZN9S20111C103v23Ev
  virtual void  v24(); // _ZN9S20111C103v24Ev
  ~S20111C10(); // tgen
  S20111C10(); // tgen
};
//SIG(-1 S20111C10) C1{ v1 v2 v3 v4 v5 Fi}


void  S20111C10 ::v20(){vfunc_called(this, "_ZN9S20111C103v20Ev");}
void  S20111C10 ::v21(){vfunc_called(this, "_ZN9S20111C103v21Ev");}
void  S20111C10 ::v22(){vfunc_called(this, "_ZN9S20111C103v22Ev");}
void  S20111C10 ::v23(){vfunc_called(this, "_ZN9S20111C103v23Ev");}
void  S20111C10 ::v24(){vfunc_called(this, "_ZN9S20111C103v24Ev");}
S20111C10 ::~S20111C10(){ note_dtor("S20111C10", this);} // tgen
S20111C10 ::S20111C10(){ note_ctor("S20111C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S20111C10C1Ev();
extern void _ZN9S20111C10D1Ev();
Name_Map name_map_S20111C10[] = {
  NSPAIR(_ZN9S20111C10C1Ev),
  NSPAIR(_ZN9S20111C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20111C10[];
extern void _ZN9S20111C103v20Ev();
extern void _ZN9S20111C103v21Ev();
extern void _ZN9S20111C103v22Ev();
extern void _ZN9S20111C103v23Ev();
extern void _ZN9S20111C103v24Ev();
static  VTBL_ENTRY vtc_S20111C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C10[0]),
  (VTBL_ENTRY)&_ZN9S20111C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v23Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v24Ev,
};
extern VTBL_ENTRY _ZTI9S20111C10[];
extern  VTBL_ENTRY _ZTV9S20111C10[];
Class_Descriptor cd_S20111C10 = {  "S20111C10", // class name
  0,0,//no base classes
  &(vtc_S20111C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20111C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20111C10),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  S20111C4  : S20111C5 , S20111C2 , S20111C6 , virtual S20111C7 , S20111C10 {
  virtual  ~S20111C4(); // _ZN8S20111C4D2Ev
  virtual void  v25(); // _ZN8S20111C43v25Ev
  virtual void  v26(); // _ZN8S20111C43v26Ev
  virtual void  v27(); // _ZN8S20111C43v27Ev
  virtual void  v28(); // _ZN8S20111C43v28Ev
  virtual void  v29(); // _ZN8S20111C43v29Ev
  S20111C4(); // tgen
};
//SIG(-1 S20111C4) C1{ BC2{ BC3{ v6 v7 v8 Fi} v9 v10 v11 v12 v13} BC4{ v14 FL} BC5{ v15 v16 v17 v18 v19 v20 v21} VBC6{ BC2 BC7{ v22 FC5} vd FC8{ vd v28 v29 v30 v31 v32}} BC9{ v23 v24 v25 v26 v27 Fi} vd v1 v2 v3 v4 v5}


 S20111C4 ::~S20111C4(){ note_dtor("S20111C4", this);}
void  S20111C4 ::v25(){vfunc_called(this, "_ZN8S20111C43v25Ev");}
void  S20111C4 ::v26(){vfunc_called(this, "_ZN8S20111C43v26Ev");}
void  S20111C4 ::v27(){vfunc_called(this, "_ZN8S20111C43v27Ev");}
void  S20111C4 ::v28(){vfunc_called(this, "_ZN8S20111C43v28Ev");}
void  S20111C4 ::v29(){vfunc_called(this, "_ZN8S20111C43v29Ev");}
S20111C4 ::S20111C4(){ note_ctor("S20111C4", this);} // tgen

static void Test_S20111C4()
{
  extern Class_Descriptor cd_S20111C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S20111C4, buf);
    S20111C4 *dp, &lv = *(dp=new (buf) S20111C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20111C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20111C4)");
    /*is_ambiguous_... S20111C4::S20111C5 */ AMB_check_base_class_offset(lv, (S20111C3*)(S20111C5*), 0, "S20111C4");
    /*is_ambiguous_... S20111C4::S20111C5 */ AMB_check_base_class_offset(lv, (S20111C5*), 0, "S20111C4");
    check_base_class_offset(lv, (S20111C2*), ABISELECT(16,8), "S20111C4");
    check_base_class_offset(lv, (S20111C6*), ABISELECT(32,20), "S20111C4");
    check_base_class_offset(lv, (S20111C3*)(S20111C5*)(S20111C7*), ABISELECT(56,32), "S20111C4");
    check_base_class_offset(lv, (S20111C5*)(S20111C7*), ABISELECT(56,32), "S20111C4");
    check_base_class_offset(lv, (S20111C8*)(S20111C7*), ABISELECT(72,40), "S20111C4");
    check_base_class_offset(lv, (S20111C7*), ABISELECT(56,32), "S20111C4");
    check_base_class_offset(lv, (S20111C10*), ABISELECT(40,24), "S20111C4");
    test_class_info(&lv, &cd_S20111C4);
    dp->~S20111C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C4(Test_S20111C4, "S20111C4", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20111C4C1Ev();
extern void _ZN8S20111C4D2Ev();
Name_Map name_map_S20111C4[] = {
  NSPAIR(_ZN8S20111C4C1Ev),
  NSPAIR(_ZN8S20111C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C5;
extern VTBL_ENTRY _ZTI8S20111C5[];
extern  VTBL_ENTRY _ZTV8S20111C5[];
extern Class_Descriptor cd_S20111C2;
extern VTBL_ENTRY _ZTI8S20111C2[];
extern  VTBL_ENTRY _ZTV8S20111C2[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C5;
extern VTBL_ENTRY _ZTI8S20111C5[];
extern  VTBL_ENTRY _ZTV8S20111C5[];
extern Class_Descriptor cd_S20111C8;
extern VTBL_ENTRY _ZTI8S20111C8[];
extern  VTBL_ENTRY _ZTV8S20111C8[];
extern Class_Descriptor cd_S20111C7;
extern VTBL_ENTRY _ZTI8S20111C7[];
extern  VTBL_ENTRY _ZTV8S20111C7[];
extern Class_Descriptor cd_S20111C10;
extern VTBL_ENTRY _ZTI9S20111C10[];
extern  VTBL_ENTRY _ZTV9S20111C10[];
static Base_Class bases_S20111C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20111C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20111C2,    ABISELECT(16,8), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C6,    ABISELECT(32,20), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C3,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20111C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20111C8,    ABISELECT(72,40), //bcp->offset
    59, //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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20111C7,    ABISELECT(56,32), //bcp->offset
    37, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C10,    ABISELECT(40,24), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20111C4[];
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
extern void _ZN8S20111C4D1Ev();
extern void _ZN8S20111C4D0Ev();
extern void _ZN8S20111C43v25Ev();
extern void _ZN8S20111C43v26Ev();
extern void _ZN8S20111C43v27Ev();
extern void _ZN8S20111C43v28Ev();
extern void _ZN8S20111C43v29Ev();
extern void _ZN8S20111C22v3Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C103v20Ev();
extern void _ZN9S20111C103v21Ev();
extern void _ZN9S20111C103v22Ev();
extern void _ZN9S20111C103v23Ev();
extern void _ZN9S20111C103v24Ev();
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
extern void ABISELECT(_ZTv0_n88_N8S20111C4D1Ev,_ZTv0_n44_N8S20111C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S20111C4D1Ev,_ZThn32_N8S20111C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20111C4D0Ev,_ZTv0_n44_N8S20111C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S20111C4D0Ev,_ZThn32_N8S20111C4D0Ev)() __attribute__((weak));
extern void _ZN8S20111C83v19Ev();
static  VTBL_ENTRY vtc_S20111C4[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20111C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20111C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v29Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C22v3Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN9S20111C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v23Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v24Ev,
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20111C4D1Ev,_ZTv0_n44_N8S20111C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20111C4D0Ev,_ZTv0_n44_N8S20111C4D0Ev),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
};
extern VTBL_ENTRY _ZTV8S20111C4[];
static  VTT_ENTRY vtt_S20111C4[] = {
  {&(_ZTV8S20111C4[3]),  3,62},
  {&(_ZTV8S20111C4[49]),  49,62},
  {&(_ZTV8S20111C4[61]),  61,62},
};
extern VTBL_ENTRY _ZTI8S20111C4[];
extern  VTBL_ENTRY _ZTV8S20111C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20111C4[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20111C4D0Ev,_ZTv0_n44_N8S20111C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20111C4D0Ev,_ZThn32_N8S20111C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20111C4D1Ev,_ZTv0_n44_N8S20111C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20111C4D1Ev,_ZThn32_N8S20111C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20111C4 = {  "S20111C4", // class name
  bases_S20111C4, 9,
  &(vtc_S20111C4[0]), // expected_vtbl_contents
  &(vtt_S20111C4[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20111C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20111C4),62, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20111C4),3, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C13  {
  virtual void  v30(); // _ZN9S20111C133v30Ev
  virtual void  v31(); // _ZN9S20111C133v31Ev
  virtual void  v32(); // _ZN9S20111C133v32Ev
  ~S20111C13(); // tgen
  S20111C13(); // tgen
};
//SIG(-1 S20111C13) C1{ v1 v2 v3}


void  S20111C13 ::v30(){vfunc_called(this, "_ZN9S20111C133v30Ev");}
void  S20111C13 ::v31(){vfunc_called(this, "_ZN9S20111C133v31Ev");}
void  S20111C13 ::v32(){vfunc_called(this, "_ZN9S20111C133v32Ev");}
S20111C13 ::~S20111C13(){ note_dtor("S20111C13", this);} // tgen
S20111C13 ::S20111C13(){ note_ctor("S20111C13", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S20111C13C1Ev();
extern void _ZN9S20111C13D1Ev();
Name_Map name_map_S20111C13[] = {
  NSPAIR(_ZN9S20111C13C1Ev),
  NSPAIR(_ZN9S20111C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20111C13[];
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY vtc_S20111C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C13[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
Class_Descriptor cd_S20111C13 = {  "S20111C13", // class name
  0,0,//no base classes
  &(vtc_S20111C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20111C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20111C13),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  S20111C16  : virtual S20111C6 {
  long double s20111c16f0[9];
  virtual void  v33(); // _ZN9S20111C163v33Ev
  virtual void  v34(); // _ZN9S20111C163v34Ev
  virtual void  v35(); // _ZN9S20111C163v35Ev
  ~S20111C16(); // tgen
  S20111C16(); // tgen
};
//SIG(-1 S20111C16) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10} v1 v2 v3 FD[9]}


void  S20111C16 ::v33(){vfunc_called(this, "_ZN9S20111C163v33Ev");}
void  S20111C16 ::v34(){vfunc_called(this, "_ZN9S20111C163v34Ev");}
void  S20111C16 ::v35(){vfunc_called(this, "_ZN9S20111C163v35Ev");}
S20111C16 ::~S20111C16(){ note_dtor("S20111C16", this);} // tgen
S20111C16 ::S20111C16(){ note_ctor("S20111C16", this);} // tgen

static void Test_S20111C16()
{
  extern Class_Descriptor cd_S20111C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20111C16, buf);
    S20111C16 *dp, &lv = *(dp=new (buf) S20111C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20111C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C16)");
    check_base_class_offset(lv, (S20111C6*), 0, "S20111C16");
    check_field_offset(lv, s20111c16f0, ABISELECT(16,4), "S20111C16.s20111c16f0");
    test_class_info(&lv, &cd_S20111C16);
    dp->~S20111C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C16(Test_S20111C16, "S20111C16", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN9S20111C16C1Ev();
extern void _ZN9S20111C16D1Ev();
Name_Map name_map_S20111C16[] = {
  NSPAIR(_ZN9S20111C16C1Ev),
  NSPAIR(_ZN9S20111C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
static Base_Class bases_S20111C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C6,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20111C16[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY vtc_S20111C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern VTBL_ENTRY _ZTV9S20111C16[];
static  VTT_ENTRY vtt_S20111C16[] = {
  {&(_ZTV9S20111C16[10]),  10,20},
  {&(_ZTV9S20111C16[10]),  10,20},
};
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
Class_Descriptor cd_S20111C16 = {  "S20111C16", // class name
  bases_S20111C16, 1,
  &(vtc_S20111C16[0]), // expected_vtbl_contents
  &(vtt_S20111C16[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20111C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20111C16),20, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20111C16),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  S20111C17  : S20111C6 {
  virtual void  v36(); // _ZN9S20111C173v36Ev
  ~S20111C17(); // tgen
  S20111C17(); // tgen
};
//SIG(-1 S20111C17) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


void  S20111C17 ::v36(){vfunc_called(this, "_ZN9S20111C173v36Ev");}
S20111C17 ::~S20111C17(){ note_dtor("S20111C17", this);} // tgen
S20111C17 ::S20111C17(){ note_ctor("S20111C17", this);} // tgen

static void Test_S20111C17()
{
  extern Class_Descriptor cd_S20111C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20111C17, buf);
    S20111C17 *dp, &lv = *(dp=new (buf) S20111C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20111C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20111C17)");
    check_base_class_offset(lv, (S20111C6*), 0, "S20111C17");
    test_class_info(&lv, &cd_S20111C17);
    dp->~S20111C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C17(Test_S20111C17, "S20111C17", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S20111C17C1Ev();
extern void _ZN9S20111C17D1Ev();
Name_Map name_map_S20111C17[] = {
  NSPAIR(_ZN9S20111C17C1Ev),
  NSPAIR(_ZN9S20111C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
static Base_Class bases_S20111C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20111C17[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY vtc_S20111C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C17[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
Class_Descriptor cd_S20111C17 = {  "S20111C17", // class name
  bases_S20111C17, 1,
  &(vtc_S20111C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20111C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20111C17),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  S20111C15  : virtual S20111C6 , S20111C16 , virtual S20111C17 {
  long double s20111c15f0;
  virtual void  v37(); // _ZN9S20111C153v37Ev
  ~S20111C15(); // tgen
  S20111C15(); // tgen
};
//SIG(-1 S20111C15) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8} BC3{ VBC2 v9 v10 v11 FD[9]} VBC4{ BC2 v12} v1 FD}


void  S20111C15 ::v37(){vfunc_called(this, "_ZN9S20111C153v37Ev");}
S20111C15 ::~S20111C15(){ note_dtor("S20111C15", this);} // tgen
S20111C15 ::S20111C15(){ note_ctor("S20111C15", this);} // tgen

static void Test_S20111C15()
{
  extern Class_Descriptor cd_S20111C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S20111C15, buf);
    S20111C15 *dp, &lv = *(dp=new (buf) S20111C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S20111C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C15)");
    /*is_ambiguous_... S20111C15::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*), 0, "S20111C15");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*), 0, "S20111C15");
    check_base_class_offset(lv, (S20111C16*), 0, "S20111C15");
    check_base_class_offset(lv, (S20111C6*)(S20111C17*), ABISELECT(176,124), "S20111C15");
    check_base_class_offset(lv, (S20111C17*), ABISELECT(176,124), "S20111C15");
    check_field_offset(lv, s20111c15f0, ABISELECT(160,112), "S20111C15.s20111c15f0");
    test_class_info(&lv, &cd_S20111C15);
    dp->~S20111C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C15(Test_S20111C15, "S20111C15", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN9S20111C15C1Ev();
extern void _ZN9S20111C15D1Ev();
Name_Map name_map_S20111C15[] = {
  NSPAIR(_ZN9S20111C15C1Ev),
  NSPAIR(_ZN9S20111C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
static Base_Class bases_S20111C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C6,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C16,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C6,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20111C17,    ABISELECT(176,124), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20111C15[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY vtc_S20111C15[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern VTBL_ENTRY _ZTV9S20111C15[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C16__9S20111C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
static  VTT_ENTRY vtt_S20111C15[] = {
  {&(_ZTV9S20111C15[11]),  11,40},
  {&(_tg__ZTV9S20111C16__9S20111C15[10]),  10,20},
  {&(_tg__ZTV9S20111C16__9S20111C15[10]),  10,20},
  {&(_ZTV9S20111C15[11]),  11,40},
  {&(_ZTV9S20111C15[32]),  32,40},
};
extern VTBL_ENTRY _ZTI9S20111C15[];
extern  VTBL_ENTRY _ZTV9S20111C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C15[];
Class_Descriptor cd_S20111C15 = {  "S20111C15", // class name
  bases_S20111C15, 4,
  &(vtc_S20111C15[0]), // expected_vtbl_contents
  &(vtt_S20111C15[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI9S20111C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20111C15),40, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20111C15),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C14  : virtual S20111C3 , virtual S20111C15 , S20111C16 , S20111C6 {
  void *s20111c14f0;
  int s20111c14f1;
  virtual void  v38(); // _ZN9S20111C143v38Ev
  virtual void  v39(); // _ZN9S20111C143v39Ev
  virtual void  v40(); // _ZN9S20111C143v40Ev
  virtual void  v41(); // _ZN9S20111C143v41Ev
  virtual void  v42(); // _ZN9S20111C143v42Ev
  virtual void  v43(); // _ZN9S20111C143v43Ev
  virtual void  v44(); // _ZN9S20111C143v44Ev
  virtual void  v45(); // _ZN9S20111C143v45Ev
  ~S20111C14(); // tgen
  S20111C14(); // tgen
};
//SIG(-1 S20111C14) C1{ VBC2{ v9 v10 v11 Fi} VBC3{ VBC4{ v12 v13 v14 v15 v16 v17 v18} BC5{ VBC4 v19 v20 v21 FD[9]} VBC6{ BC4 v22} v23 FD} BC5 BC4 v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi}


void  S20111C14 ::v38(){vfunc_called(this, "_ZN9S20111C143v38Ev");}
void  S20111C14 ::v39(){vfunc_called(this, "_ZN9S20111C143v39Ev");}
void  S20111C14 ::v40(){vfunc_called(this, "_ZN9S20111C143v40Ev");}
void  S20111C14 ::v41(){vfunc_called(this, "_ZN9S20111C143v41Ev");}
void  S20111C14 ::v42(){vfunc_called(this, "_ZN9S20111C143v42Ev");}
void  S20111C14 ::v43(){vfunc_called(this, "_ZN9S20111C143v43Ev");}
void  S20111C14 ::v44(){vfunc_called(this, "_ZN9S20111C143v44Ev");}
void  S20111C14 ::v45(){vfunc_called(this, "_ZN9S20111C143v45Ev");}
S20111C14 ::~S20111C14(){ note_dtor("S20111C14", this);} // tgen
S20111C14 ::S20111C14(){ note_ctor("S20111C14", this);} // tgen

static void Test_S20111C14()
{
  extern Class_Descriptor cd_S20111C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,66)];
    init_test(&cd_S20111C14, buf);
    S20111C14 *dp, &lv = *(dp=new (buf) S20111C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,260), "sizeof(S20111C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C14)");
    check_base_class_offset(lv, (S20111C3*), ABISELECT(184,124), "S20111C14");
    /*is_ambiguous_... S20111C15::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C15*), ABISELECT(208,132), "S20111C14");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C15*), ABISELECT(208,132), "S20111C14");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C16*), ABISELECT(208,132), "S20111C14");
    check_base_class_offset(lv, (S20111C16*)(S20111C15*), ABISELECT(208,132), "S20111C14");
    check_base_class_offset(lv, (S20111C6*)(S20111C17*), ABISELECT(384,256), "S20111C14");
    check_base_class_offset(lv, (S20111C17*)(S20111C15*), ABISELECT(384,256), "S20111C14");
    check_base_class_offset(lv, (S20111C15*), ABISELECT(208,132), "S20111C14");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C16*), 0, "S20111C14");
    /*is_ambiguous_... S20111C14::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*), ABISELECT(160,112), "S20111C14");
    check_field_offset(lv, s20111c14f0, ABISELECT(168,116), "S20111C14.s20111c14f0");
    check_field_offset(lv, s20111c14f1, ABISELECT(176,120), "S20111C14.s20111c14f1");
    test_class_info(&lv, &cd_S20111C14);
    dp->~S20111C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C14(Test_S20111C14, "S20111C14", ABISELECT(400,260));

#else // __cplusplus

extern void _ZN9S20111C14C1Ev();
extern void _ZN9S20111C14D1Ev();
Name_Map name_map_S20111C14[] = {
  NSPAIR(_ZN9S20111C14C1Ev),
  NSPAIR(_ZN9S20111C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C15;
extern VTBL_ENTRY _ZTI9S20111C15[];
extern  VTBL_ENTRY _ZTV9S20111C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C15[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
static Base_Class bases_S20111C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C3,    ABISELECT(184,124), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C6,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(384,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20111C17,    ABISELECT(384,256), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20111C15,    ABISELECT(208,132), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C16,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C6,    ABISELECT(160,112), //bcp->offset
    31, //bcp->virtual_function_table_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 _ZTI9S20111C14[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY vtc_S20111C14[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern VTBL_ENTRY _ZTV9S20111C14[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C16__A1__9S20111C14[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C16__A1__9S20111C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C14[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C15__9S20111C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C15__9S20111C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
static  VTT_ENTRY vtt_S20111C14[] = {
  {&(_ZTV9S20111C14[13]),  13,92},
  {&(_tg__ZTV9S20111C16__A1__9S20111C14[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C16__A1__9S20111C14[9]),  9,16},
  {&(_ZTV9S20111C14[45]),  45,92},
  {&(_ZTV9S20111C14[63]),  63,92},
  {&(_ZTV9S20111C14[63]),  63,92},
  {&(_ZTV9S20111C14[84]),  84,92},
  {&(_tg__ZTV9S20111C15__9S20111C14[11]),  11,22},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C14[10]),  10,20},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C14[10]),  10,20},
  {&(_tg__ZTV9S20111C15__9S20111C14[11]),  11,22},
  {&(_tg__ZTV9S20111C17__9S20111C15__9S20111C14[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20111C14[];
extern  VTBL_ENTRY _ZTV9S20111C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C14[];
Class_Descriptor cd_S20111C14 = {  "S20111C14", // class name
  bases_S20111C14, 8,
  &(vtc_S20111C14[0]), // expected_vtbl_contents
  &(vtt_S20111C14[0]), // expected_vtt_contents
  ABISELECT(400,260), // object size
  NSPAIRA(_ZTI9S20111C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20111C14),92, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20111C14),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C18  : virtual S20111C17 , virtual S20111C9 , S20111C16 , virtual S20111C13 {
  virtual  ~S20111C18(); // _ZN9S20111C18D2Ev
  virtual void  v51(); // _ZN9S20111C183v51Ev
  S20111C18(); // tgen
};
//SIG(-1 S20111C18) C1{ VBC2{ BC3{ v2 v3 v4 v5 v6 v7 v8} v9} VBC4{ vd v10 v11 v12 v13 v14} BC5{ VBC3 v15 v16 v17 FD[9]} VBC6{ v18 v19 v20} vd v1}


 S20111C18 ::~S20111C18(){ note_dtor("S20111C18", this);}
void  S20111C18 ::v51(){vfunc_called(this, "_ZN9S20111C183v51Ev");}
S20111C18 ::S20111C18(){ note_ctor("S20111C18", this);} // tgen

static void Test_S20111C18()
{
  extern Class_Descriptor cd_S20111C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S20111C18, buf);
    S20111C18 *dp, &lv = *(dp=new (buf) S20111C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S20111C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C18)");
    check_base_class_offset(lv, (S20111C6*)(S20111C17*), ABISELECT(160,112), "S20111C18");
    check_base_class_offset(lv, (S20111C17*), ABISELECT(160,112), "S20111C18");
    check_base_class_offset(lv, (S20111C9*), ABISELECT(168,116), "S20111C18");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*), 0, "S20111C18");
    check_base_class_offset(lv, (S20111C16*), 0, "S20111C18");
    check_base_class_offset(lv, (S20111C13*), ABISELECT(176,120), "S20111C18");
    test_class_info(&lv, &cd_S20111C18);
    dp->~S20111C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C18(Test_S20111C18, "S20111C18", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN9S20111C18C1Ev();
extern void _ZN9S20111C18D2Ev();
Name_Map name_map_S20111C18[] = {
  NSPAIR(_ZN9S20111C18C1Ev),
  NSPAIR(_ZN9S20111C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C9;
extern VTBL_ENTRY _ZTI8S20111C9[];
extern  VTBL_ENTRY _ZTV8S20111C9[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
static Base_Class bases_S20111C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C6,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20111C17,    ABISELECT(160,112), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C9,    ABISELECT(168,116), //bcp->offset
    44, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20111C16,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C13,    ABISELECT(176,120), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20111C18[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C18D1Ev();
extern void _ZN9S20111C18D0Ev();
extern void _ZN9S20111C183v51Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev)();
extern void ABISELECT(_ZThn168_N9S20111C18D1Ev,_ZThn116_N9S20111C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev)();
extern void ABISELECT(_ZThn168_N9S20111C18D0Ev,_ZThn116_N9S20111C18D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY vtc_S20111C18[] = {
  ABISELECT(176,120),
  ABISELECT(168,116),
  ABISELECT(160,112),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
extern VTBL_ENTRY _ZTV9S20111C18[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C16__9S20111C18[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
static  VTT_ENTRY vtt_S20111C18[] = {
  {&(_ZTV9S20111C18[13]),  13,67},
  {&(_tg__ZTV9S20111C16__9S20111C18[10]),  10,20},
  {&(_tg__ZTV9S20111C16__9S20111C18[10]),  10,20},
  {&(_ZTV9S20111C18[36]),  36,67},
  {&(_ZTV9S20111C18[52]),  52,67},
  {&(_ZTV9S20111C18[13]),  13,67},
  {&(_ZTV9S20111C18[64]),  64,67},
};
extern VTBL_ENTRY _ZTI9S20111C18[];
extern  VTBL_ENTRY _ZTV9S20111C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C18[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20111C18D0Ev,_ZThn116_N9S20111C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20111C18D1Ev,_ZThn116_N9S20111C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20111C18 = {  "S20111C18", // class name
  bases_S20111C18, 6,
  &(vtc_S20111C18[0]), // expected_vtbl_contents
  &(vtt_S20111C18[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI9S20111C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20111C18),67, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20111C18),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C12  : S20111C13 , virtual S20111C14 , virtual S20111C18 {
  ::S20111C18 s20111c12f0;
  int s20111c12f1;
  virtual void  v52(); // _ZN9S20111C123v52Ev
  virtual void  v53(); // _ZN9S20111C123v53Ev
  virtual void  v54(); // _ZN9S20111C123v54Ev
  virtual void  v55(); // _ZN9S20111C123v55Ev
  virtual void  v56(); // _ZN9S20111C123v56Ev
  virtual void  v57(); // _ZN9S20111C123v57Ev
  virtual void  v58(); // _ZN9S20111C123v58Ev
  ~S20111C12(); // tgen
  S20111C12(); // tgen
};
//SIG(-1 S20111C12) C1{ BC2{ v8 v9 v10} VBC3{ VBC4{ v11 v12 v13 Fi} VBC5{ VBC6{ v14 v15 v16 v17 v18 v19 v20} BC7{ VBC6 v21 v22 v23 FD[9]} VBC8{ BC6 v24} v25 FD} BC7 BC6 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi} VBC9{ VBC8 VBC10{ vd v34 v35 v36 v37 v38} BC7 VBC2 vd v39} v1 v2 v3 v4 v5 v6 v7 FC9 Fi}


void  S20111C12 ::v52(){vfunc_called(this, "_ZN9S20111C123v52Ev");}
void  S20111C12 ::v53(){vfunc_called(this, "_ZN9S20111C123v53Ev");}
void  S20111C12 ::v54(){vfunc_called(this, "_ZN9S20111C123v54Ev");}
void  S20111C12 ::v55(){vfunc_called(this, "_ZN9S20111C123v55Ev");}
void  S20111C12 ::v56(){vfunc_called(this, "_ZN9S20111C123v56Ev");}
void  S20111C12 ::v57(){vfunc_called(this, "_ZN9S20111C123v57Ev");}
void  S20111C12 ::v58(){vfunc_called(this, "_ZN9S20111C123v58Ev");}
S20111C12 ::~S20111C12(){ note_dtor("S20111C12", this);} // tgen
S20111C12 ::S20111C12(){ note_ctor("S20111C12", this);} // tgen

static void Test_S20111C12()
{
  extern Class_Descriptor cd_S20111C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,129)];
    init_test(&cd_S20111C12, buf);
    S20111C12 *dp, &lv = *(dp=new (buf) S20111C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,512), "sizeof(S20111C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C12)");
    /*is_ambiguous_... S20111C12::S20111C13 */ AMB_check_base_class_offset(lv, (S20111C13*), 0, "S20111C12");
    check_base_class_offset(lv, (S20111C3*)(S20111C14*), ABISELECT(408,256), "S20111C12");
    /*is_ambiguous_... S20111C15::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C15*), ABISELECT(432,264), "S20111C12");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C15*), ABISELECT(432,264), "S20111C12");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C14*), ABISELECT(432,264), "S20111C12");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C18*), ABISELECT(432,264), "S20111C12");
    check_base_class_offset(lv, (S20111C16*)(S20111C15*), ABISELECT(432,264), "S20111C12");
    check_base_class_offset(lv, (S20111C6*)(S20111C17*), ABISELECT(608,388), "S20111C12");
    check_base_class_offset(lv, (S20111C17*)(S20111C15*), ABISELECT(608,388), "S20111C12");
    check_base_class_offset(lv, (S20111C17*)(S20111C18*), ABISELECT(608,388), "S20111C12");
    check_base_class_offset(lv, (S20111C15*)(S20111C14*), ABISELECT(432,264), "S20111C12");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C16*)(S20111C14*), ABISELECT(224,132), "S20111C12");
    /*is_ambiguous_... S20111C14::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C14*), ABISELECT(384,244), "S20111C12");
    check_base_class_offset(lv, (S20111C14*), ABISELECT(224,132), "S20111C12");
    check_base_class_offset(lv, (S20111C9*)(S20111C18*), ABISELECT(784,504), "S20111C12");
    check_base_class_offset(lv, (S20111C16*)(S20111C18*), ABISELECT(624,392), "S20111C12");
    check_base_class_offset(lv, (S20111C13*)(S20111C18*), ABISELECT(792,508), "S20111C12");
    check_base_class_offset(lv, (S20111C18*), ABISELECT(624,392), "S20111C12");
    check_field_offset(lv, s20111c12f0, ABISELECT(16,4), "S20111C12.s20111c12f0");
    check_field_offset(lv, s20111c12f1, ABISELECT(208,128), "S20111C12.s20111c12f1");
    test_class_info(&lv, &cd_S20111C12);
    dp->~S20111C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C12(Test_S20111C12, "S20111C12", ABISELECT(800,512));

#else // __cplusplus

extern void _ZN9S20111C12C1Ev();
extern void _ZN9S20111C12D1Ev();
Name_Map name_map_S20111C12[] = {
  NSPAIR(_ZN9S20111C12C1Ev),
  NSPAIR(_ZN9S20111C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C15;
extern VTBL_ENTRY _ZTI9S20111C15[];
extern  VTBL_ENTRY _ZTV9S20111C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C15[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C14;
extern VTBL_ENTRY _ZTI9S20111C14[];
extern  VTBL_ENTRY _ZTV9S20111C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C14[];
extern Class_Descriptor cd_S20111C9;
extern VTBL_ENTRY _ZTI8S20111C9[];
extern  VTBL_ENTRY _ZTV8S20111C9[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C18;
extern VTBL_ENTRY _ZTI9S20111C18[];
extern  VTBL_ENTRY _ZTV9S20111C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C18[];
static Base_Class bases_S20111C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20111C3,    ABISELECT(408,256), //bcp->offset
    73, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20111C6,    ABISELECT(432,264), //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_S20111C16,    ABISELECT(432,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S20111C6,    ABISELECT(608,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20111C17,    ABISELECT(608,388), //bcp->offset
    107, //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
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20111C15,    ABISELECT(432,264), //bcp->offset
    81, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(384,244), //bcp->offset
    64, //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20111C14,    ABISELECT(224,132), //bcp->offset
    22, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C9,    ABISELECT(784,504), //bcp->offset
    156, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(624,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20111C13,    ABISELECT(792,508), //bcp->offset
    171, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20111C18,    ABISELECT(624,392), //bcp->offset
    125, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20111C12[];
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN9S20111C123v52Ev();
extern void _ZN9S20111C123v53Ev();
extern void _ZN9S20111C123v54Ev();
extern void _ZN9S20111C123v55Ev();
extern void _ZN9S20111C123v56Ev();
extern void _ZN9S20111C123v57Ev();
extern void _ZN9S20111C123v58Ev();
extern void _ZN9S20111C12D1Ev();
extern void _ZN9S20111C12D0Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev)();
extern void ABISELECT(_ZThn624_N9S20111C12D1Ev,_ZThn392_N9S20111C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev)();
extern void ABISELECT(_ZThn624_N9S20111C12D0Ev,_ZThn392_N9S20111C12D0Ev)() __attribute__((weak));
extern void _ZN9S20111C183v51Ev();
extern void ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev)();
extern void ABISELECT(_ZThn784_N9S20111C12D1Ev,_ZThn504_N9S20111C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev)();
extern void ABISELECT(_ZThn784_N9S20111C12D0Ev,_ZThn504_N9S20111C12D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY vtc_S20111C12[] = {
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v55Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v56Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v57Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v58Ev,
  (VTBL_ENTRY)&_ZN9S20111C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C12D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  0,
  0,
  0,
  ABISELECT(-408,-256),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-388),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  0,
  ABISELECT(-624,-392),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-624,-392),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev),
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-504),
  ABISELECT(-784,-504),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
  0,
  0,
  0,
  ABISELECT(-792,-508),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
extern VTBL_ENTRY _ZTV9S20111C12[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C14__9S20111C12[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C14__A1__9S20111C12[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C14__A1__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C3__9S20111C14__9S20111C12[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C14__9S20111C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C14__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C12[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C15__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C15__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C18D1Ev();
extern void _ZN9S20111C18D0Ev();
extern void _ZN9S20111C183v51Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C18__9S20111C12[] = {
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C18__A2__9S20111C12[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C18__A2__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C18__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev)();
extern void ABISELECT(_ZThn160_N9S20111C18D1Ev,_ZThn112_N9S20111C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev)();
extern void ABISELECT(_ZThn160_N9S20111C18D0Ev,_ZThn112_N9S20111C18D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C9__9S20111C18__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__A1__9S20111C18__9S20111C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C13__9S20111C18__9S20111C12[] = {
  0,
  0,
  0,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
static  VTT_ENTRY vtt_S20111C12[] = {
  {&(_ZTV9S20111C12[10]),  10,179},
  {&(_ZTV9S20111C12[46]),  46,179},
  {&(_ZTV9S20111C12[78]),  78,179},
  {&(_ZTV9S20111C12[96]),  96,179},
  {&(_ZTV9S20111C12[96]),  96,179},
  {&(_ZTV9S20111C12[117]),  117,179},
  {&(_ZTV9S20111C12[66]),  66,179},
  {&(_ZTV9S20111C12[143]),  143,179},
  {&(_ZTV9S20111C12[164]),  164,179},
  {&(_ZTV9S20111C12[176]),  176,179},
  {&(_tg__ZTV9S20111C14__9S20111C12[13]),  13,31},
  {&(_tg__ZTV9S20111C169S20111C14__A1__9S20111C12[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C14__A1__9S20111C12[9]),  9,16},
  {&(_tg__ZTV8S20111C3__9S20111C14__9S20111C12[5]),  5,8},
  {&(_tg__ZTV9S20111C15__9S20111C14__9S20111C12[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C14__9S20111C12[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C14__9S20111C12[10]),  10,18},
  {&(_tg__ZTV9S20111C15__9S20111C12[11]),  11,22},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C12[10]),  10,20},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C12[10]),  10,20},
  {&(_tg__ZTV9S20111C15__9S20111C12[11]),  11,22},
  {&(_tg__ZTV9S20111C17__9S20111C15__9S20111C12[10]),  10,18},
  {&(_tg__ZTV9S20111C18__9S20111C12[13]),  13,26},
  {&(_tg__ZTV9S20111C169S20111C18__A2__9S20111C12[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C18__A2__9S20111C12[9]),  9,16},
  {&(_tg__ZTV9S20111C17__9S20111C18__9S20111C12[10]),  10,18},
  {&(_tg__ZTV8S20111C9__9S20111C18__9S20111C12[8]),  8,15},
  {&(_tg__ZTV8S20111C6__A1__9S20111C18__9S20111C12[9]),  9,16},
  {&(_tg__ZTV9S20111C13__9S20111C18__9S20111C12[5]),  5,8},
};
extern VTBL_ENTRY _ZTI9S20111C12[];
extern  VTBL_ENTRY _ZTV9S20111C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C12[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20111C18D0Ev,_ZThn112_N9S20111C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20111C18D1Ev,_ZThn112_N9S20111C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S20111C12D0Ev,_ZThn504_N9S20111C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S20111C12D1Ev,_ZThn504_N9S20111C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20111C12D0Ev,_ZThn392_N9S20111C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20111C12D1Ev,_ZThn392_N9S20111C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20111C12 = {  "S20111C12", // class name
  bases_S20111C12, 14,
  &(vtc_S20111C12[0]), // expected_vtbl_contents
  &(vtt_S20111C12[0]), // expected_vtt_contents
  ABISELECT(800,512), // object size
  NSPAIRA(_ZTI9S20111C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20111C12),179, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20111C12),29, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C19  : virtual S20111C15 , S20111C17 , S20111C16 , S20111C13 {
  virtual  ~S20111C19(); // _ZN9S20111C19D2Ev
  virtual void  v59(); // _ZN9S20111C193v59Ev
  virtual void  v60(); // _ZN9S20111C193v60Ev
  virtual void  v61(); // _ZN9S20111C193v61Ev
  virtual void  v62(); // _ZN9S20111C193v62Ev
  virtual void  v63(); // _ZN9S20111C193v63Ev
  virtual void  v64(); // _ZN9S20111C193v64Ev
  virtual void  v65(); // _ZN9S20111C193v65Ev
  virtual void  v66(); // _ZN9S20111C193v66Ev
  S20111C19(); // tgen
};
//SIG(-1 S20111C19) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13 v14 v15} BC4{ VBC3 v16 v17 v18 FD[9]} VBC5{ BC3 v19} v20 FD} BC5 BC4 BC6{ v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S20111C19 ::~S20111C19(){ note_dtor("S20111C19", this);}
void  S20111C19 ::v59(){vfunc_called(this, "_ZN9S20111C193v59Ev");}
void  S20111C19 ::v60(){vfunc_called(this, "_ZN9S20111C193v60Ev");}
void  S20111C19 ::v61(){vfunc_called(this, "_ZN9S20111C193v61Ev");}
void  S20111C19 ::v62(){vfunc_called(this, "_ZN9S20111C193v62Ev");}
void  S20111C19 ::v63(){vfunc_called(this, "_ZN9S20111C193v63Ev");}
void  S20111C19 ::v64(){vfunc_called(this, "_ZN9S20111C193v64Ev");}
void  S20111C19 ::v65(){vfunc_called(this, "_ZN9S20111C193v65Ev");}
void  S20111C19 ::v66(){vfunc_called(this, "_ZN9S20111C193v66Ev");}
S20111C19 ::S20111C19(){ note_ctor("S20111C19", this);} // tgen

static void Test_S20111C19()
{
  extern Class_Descriptor cd_S20111C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S20111C19, buf);
    S20111C19 *dp, &lv = *(dp=new (buf) S20111C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S20111C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C19)");
    /*is_ambiguous_... S20111C15::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C15*), ABISELECT(192,120), "S20111C19");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C15*), ABISELECT(192,120), "S20111C19");
    /*is_ambiguous_... S20111C19::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C16*), ABISELECT(192,120), "S20111C19");
    check_base_class_offset(lv, (S20111C16*)(S20111C15*), ABISELECT(192,120), "S20111C19");
    /*is_ambiguous_... S20111C19::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C17*), ABISELECT(368,244), "S20111C19");
    check_base_class_offset(lv, (S20111C17*)(S20111C15*), ABISELECT(368,244), "S20111C19");
    check_base_class_offset(lv, (S20111C15*), ABISELECT(192,120), "S20111C19");
    /*is_ambiguous_... S20111C19::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C17*), 0, "S20111C19");
    /*is_ambiguous_... S20111C19::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C17*), 0, "S20111C19");
    /*is_ambiguous_... S20111C19::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C16*), ABISELECT(16,4), "S20111C19");
    check_base_class_offset(lv, (S20111C13*), ABISELECT(176,116), "S20111C19");
    test_class_info(&lv, &cd_S20111C19);
    dp->~S20111C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C19(Test_S20111C19, "S20111C19", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN9S20111C19C1Ev();
extern void _ZN9S20111C19D2Ev();
Name_Map name_map_S20111C19[] = {
  NSPAIR(_ZN9S20111C19C1Ev),
  NSPAIR(_ZN9S20111C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C15;
extern VTBL_ENTRY _ZTI9S20111C15[];
extern  VTBL_ENTRY _ZTV9S20111C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C15[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
static Base_Class bases_S20111C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C6,    ABISELECT(192,120), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20111C17,    ABISELECT(368,244), //bcp->offset
    74, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20111C15,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20111C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C16,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C13,    ABISELECT(176,116), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20111C19[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN9S20111C19D1Ev();
extern void _ZN9S20111C19D0Ev();
extern void _ZN9S20111C193v59Ev();
extern void _ZN9S20111C193v60Ev();
extern void _ZN9S20111C193v61Ev();
extern void _ZN9S20111C193v62Ev();
extern void _ZN9S20111C193v63Ev();
extern void _ZN9S20111C193v64Ev();
extern void _ZN9S20111C193v65Ev();
extern void _ZN9S20111C193v66Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY vtc_S20111C19[] = {
  ABISELECT(368,244),
  ABISELECT(192,120),
  ABISELECT(192,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  (VTBL_ENTRY)&_ZN9S20111C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C19D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v59Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v60Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v61Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v62Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v63Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v64Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v65Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v66Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern VTBL_ENTRY _ZTV9S20111C19[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C16__A1__9S20111C19[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C16__A1__9S20111C19[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C19[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C15__9S20111C19[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C15__9S20111C19[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
static  VTT_ENTRY vtt_S20111C19[] = {
  {&(_ZTV9S20111C19[5]),  5,92},
  {&(_tg__ZTV9S20111C16__A1__9S20111C19[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C16__A1__9S20111C19[9]),  9,16},
  {&(_ZTV9S20111C19[63]),  63,92},
  {&(_ZTV9S20111C19[63]),  63,92},
  {&(_ZTV9S20111C19[84]),  84,92},
  {&(_ZTV9S20111C19[33]),  33,92},
  {&(_tg__ZTV9S20111C15__9S20111C19[11]),  11,22},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C19[10]),  10,20},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C19[10]),  10,20},
  {&(_tg__ZTV9S20111C15__9S20111C19[11]),  11,22},
  {&(_tg__ZTV9S20111C17__9S20111C15__9S20111C19[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20111C19[];
extern  VTBL_ENTRY _ZTV9S20111C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C19[];
Class_Descriptor cd_S20111C19 = {  "S20111C19", // class name
  bases_S20111C19, 9,
  &(vtc_S20111C19[0]), // expected_vtbl_contents
  &(vtt_S20111C19[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI9S20111C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20111C19),92, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20111C19),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C11  : virtual S20111C12 , virtual S20111C8 , S20111C19 {
  virtual void  v67(); // _ZN9S20111C113v67Ev
  virtual void  v68(); // _ZN9S20111C113v68Ev
  virtual void  v69(); // _ZN9S20111C113v69Ev
  ~S20111C11(); // tgen
  S20111C11(); // tgen
};
//SIG(-1 S20111C11) C1{ VBC2{ BC3{ v4 v5 v6} VBC4{ VBC5{ v7 v8 v9 Fi} VBC6{ VBC7{ v10 v11 v12 v13 v14 v15 v16} BC8{ VBC7 v17 v18 v19 FD[9]} VBC9{ BC7 v20} v21 FD} BC8 BC7 v22 v23 v24 v25 v26 v27 v28 v29 Fp Fi} VBC10{ VBC9 VBC11{ vd v30 v31 v32 v33 v34} BC8 VBC3 vd v35} v36 v37 v38 v39 v40 v41 v42 FC10 Fi} VBC12{ v43 FC7} BC13{ VBC6 BC9 BC8 BC3 vd v44 v45 v46 v47 v48 v49 v50 v51} v1 v2 v3}


void  S20111C11 ::v67(){vfunc_called(this, "_ZN9S20111C113v67Ev");}
void  S20111C11 ::v68(){vfunc_called(this, "_ZN9S20111C113v68Ev");}
void  S20111C11 ::v69(){vfunc_called(this, "_ZN9S20111C113v69Ev");}
S20111C11 ::~S20111C11(){ note_dtor("S20111C11", this);} // tgen
S20111C11 ::S20111C11(){ note_ctor("S20111C11", this);} // tgen

static void Test_S20111C11()
{
  extern Class_Descriptor cd_S20111C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(64,161)];
    init_test(&cd_S20111C11, buf);
    S20111C11 *dp, &lv = *(dp=new (buf) S20111C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1008,640), "sizeof(S20111C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C11)");
    /*is_ambiguous_... S20111C12::S20111C13 */ AMB_check_base_class_offset(lv, (S20111C13*)(S20111C12*), ABISELECT(192,120), "S20111C11");
    check_base_class_offset(lv, (S20111C3*)(S20111C14*), ABISELECT(600,376), "S20111C11");
    /*is_ambiguous_... S20111C15::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C15*), ABISELECT(624,384), "S20111C11");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C15*), ABISELECT(624,384), "S20111C11");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C14*), ABISELECT(624,384), "S20111C11");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C18*), ABISELECT(624,384), "S20111C11");
    /*is_ambiguous_... S20111C19::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C19*), ABISELECT(624,384), "S20111C11");
    check_base_class_offset(lv, (S20111C16*)(S20111C15*), ABISELECT(624,384), "S20111C11");
    /*is_ambiguous_... S20111C11::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C17*), ABISELECT(800,508), "S20111C11");
    check_base_class_offset(lv, (S20111C17*)(S20111C15*), ABISELECT(800,508), "S20111C11");
    check_base_class_offset(lv, (S20111C17*)(S20111C18*), ABISELECT(800,508), "S20111C11");
    check_base_class_offset(lv, (S20111C15*)(S20111C14*), ABISELECT(624,384), "S20111C11");
    check_base_class_offset(lv, (S20111C15*)(S20111C19*), ABISELECT(624,384), "S20111C11");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C16*)(S20111C14*), ABISELECT(416,252), "S20111C11");
    /*is_ambiguous_... S20111C14::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C14*), ABISELECT(576,364), "S20111C11");
    check_base_class_offset(lv, (S20111C14*)(S20111C12*), ABISELECT(416,252), "S20111C11");
    check_base_class_offset(lv, (S20111C9*)(S20111C18*), ABISELECT(976,624), "S20111C11");
    check_base_class_offset(lv, (S20111C16*)(S20111C18*), ABISELECT(816,512), "S20111C11");
    check_base_class_offset(lv, (S20111C13*)(S20111C18*), ABISELECT(984,628), "S20111C11");
    check_base_class_offset(lv, (S20111C18*)(S20111C12*), ABISELECT(816,512), "S20111C11");
    check_base_class_offset(lv, (S20111C12*), ABISELECT(192,120), "S20111C11");
    check_base_class_offset(lv, (S20111C8*), ABISELECT(992,632), "S20111C11");
    /*is_ambiguous_... S20111C19::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C17*)(S20111C19*), 0, "S20111C11");
    /*is_ambiguous_... S20111C19::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C17*)(S20111C19*), 0, "S20111C11");
    /*is_ambiguous_... S20111C19::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C16*)(S20111C19*), ABISELECT(16,4), "S20111C11");
    check_base_class_offset(lv, (S20111C13*)(S20111C19*), ABISELECT(176,116), "S20111C11");
    check_base_class_offset(lv, (S20111C19*), 0, "S20111C11");
    test_class_info(&lv, &cd_S20111C11);
    dp->~S20111C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C11(Test_S20111C11, "S20111C11", ABISELECT(1008,640));

#else // __cplusplus

extern void _ZN9S20111C11C1Ev();
extern void _ZN9S20111C11D1Ev();
Name_Map name_map_S20111C11[] = {
  NSPAIR(_ZN9S20111C11C1Ev),
  NSPAIR(_ZN9S20111C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C15;
extern VTBL_ENTRY _ZTI9S20111C15[];
extern  VTBL_ENTRY _ZTV9S20111C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C15[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C14;
extern VTBL_ENTRY _ZTI9S20111C14[];
extern  VTBL_ENTRY _ZTV9S20111C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C14[];
extern Class_Descriptor cd_S20111C9;
extern VTBL_ENTRY _ZTI8S20111C9[];
extern  VTBL_ENTRY _ZTV8S20111C9[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C18;
extern VTBL_ENTRY _ZTI9S20111C18[];
extern  VTBL_ENTRY _ZTV9S20111C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C18[];
extern Class_Descriptor cd_S20111C12;
extern VTBL_ENTRY _ZTI9S20111C12[];
extern  VTBL_ENTRY _ZTV9S20111C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C12[];
extern Class_Descriptor cd_S20111C8;
extern VTBL_ENTRY _ZTI8S20111C8[];
extern  VTBL_ENTRY _ZTV8S20111C8[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C19;
extern VTBL_ENTRY _ZTI9S20111C19[];
extern  VTBL_ENTRY _ZTV9S20111C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C19[];
static Base_Class bases_S20111C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C13,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20111C3,    ABISELECT(600,376), //bcp->offset
    142, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20111C6,    ABISELECT(624,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(624,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(800,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20111C17,    ABISELECT(800,508), //bcp->offset
    176, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20111C15,    ABISELECT(624,384), //bcp->offset
    150, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(416,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(576,364), //bcp->offset
    133, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20111C14,    ABISELECT(416,252), //bcp->offset
    91, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20111C9,    ABISELECT(976,624), //bcp->offset
    225, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(816,512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20111C13,    ABISELECT(984,628), //bcp->offset
    240, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20111C18,    ABISELECT(816,512), //bcp->offset
    194, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20111C12,    ABISELECT(192,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    21, //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_S20111C8,    ABISELECT(992,632), //bcp->offset
    248, //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
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20111C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20111C16,    ABISELECT(16,4), //bcp->offset
    33, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20111C13,    ABISELECT(176,116), //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
    20, //immediately_derived
  0, 0},
  {&cd_S20111C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20111C11[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN9S20111C11D1Ev();
extern void _ZN9S20111C11D0Ev();
extern void _ZN9S20111C193v59Ev();
extern void _ZN9S20111C193v60Ev();
extern void _ZN9S20111C193v61Ev();
extern void _ZN9S20111C193v62Ev();
extern void _ZN9S20111C193v63Ev();
extern void _ZN9S20111C193v64Ev();
extern void _ZN9S20111C193v65Ev();
extern void _ZN9S20111C193v66Ev();
extern void _ZN9S20111C113v67Ev();
extern void _ZN9S20111C113v68Ev();
extern void _ZN9S20111C113v69Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN9S20111C123v52Ev();
extern void _ZN9S20111C123v53Ev();
extern void _ZN9S20111C123v54Ev();
extern void _ZN9S20111C123v55Ev();
extern void _ZN9S20111C123v56Ev();
extern void _ZN9S20111C123v57Ev();
extern void _ZN9S20111C123v58Ev();
extern void ABISELECT(_ZTv0_n168_N9S20111C11D1Ev,_ZTv0_n84_N9S20111C11D1Ev)();
extern void ABISELECT(_ZThn192_N9S20111C11D1Ev,_ZThn120_N9S20111C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n168_N9S20111C11D0Ev,_ZTv0_n84_N9S20111C11D0Ev)();
extern void ABISELECT(_ZThn192_N9S20111C11D0Ev,_ZThn120_N9S20111C11D0Ev)() __attribute__((weak));
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void ABISELECT(_ZTv0_n136_N9S20111C11D1Ev,_ZTv0_n68_N9S20111C11D1Ev)();
extern void ABISELECT(_ZThn816_N9S20111C11D1Ev,_ZThn512_N9S20111C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N9S20111C11D0Ev,_ZTv0_n68_N9S20111C11D0Ev)();
extern void ABISELECT(_ZThn816_N9S20111C11D0Ev,_ZThn512_N9S20111C11D0Ev)() __attribute__((weak));
extern void _ZN9S20111C183v51Ev();
extern void ABISELECT(_ZTv0_n24_N9S20111C11D1Ev,_ZTv0_n12_N9S20111C11D1Ev)();
extern void ABISELECT(_ZThn976_N9S20111C11D1Ev,_ZThn624_N9S20111C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C11D0Ev,_ZTv0_n12_N9S20111C11D0Ev)();
extern void ABISELECT(_ZThn976_N9S20111C11D0Ev,_ZThn624_N9S20111C11D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN8S20111C83v19Ev();
static  VTBL_ENTRY vtc_S20111C11[] = {
  ABISELECT(992,632),
  ABISELECT(984,628),
  ABISELECT(976,624),
  ABISELECT(816,512),
  ABISELECT(600,376),
  ABISELECT(416,252),
  ABISELECT(192,120),
  ABISELECT(800,508),
  ABISELECT(624,384),
  ABISELECT(624,384),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  (VTBL_ENTRY)&_ZN9S20111C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v59Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v60Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v61Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v62Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v63Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v64Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v65Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v66Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v67Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v68Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v69Ev,
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  ABISELECT(-192,-120),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v55Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v56Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v57Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v58Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N9S20111C11D1Ev,_ZTv0_n84_N9S20111C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N9S20111C11D0Ev,_ZTv0_n84_N9S20111C11D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-416,-252),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
  ABISELECT(-576,-364),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  0,
  0,
  0,
  ABISELECT(-600,-376),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-384),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-800,-508),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  0,
  ABISELECT(-816,-512),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-816,-512),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C11D1Ev,_ZTv0_n68_N9S20111C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C11D0Ev,_ZTv0_n68_N9S20111C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-976,-624),
  ABISELECT(-976,-624),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C11D1Ev,_ZTv0_n12_N9S20111C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C11D0Ev,_ZTv0_n12_N9S20111C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
  0,
  0,
  0,
  ABISELECT(-984,-628),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  0,
  ABISELECT(-992,-632),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
};
extern VTBL_ENTRY _ZTV9S20111C11[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN9S20111C19D1Ev();
extern void _ZN9S20111C19D0Ev();
extern void _ZN9S20111C193v59Ev();
extern void _ZN9S20111C193v60Ev();
extern void _ZN9S20111C193v61Ev();
extern void _ZN9S20111C193v62Ev();
extern void _ZN9S20111C193v63Ev();
extern void _ZN9S20111C193v64Ev();
extern void _ZN9S20111C193v65Ev();
extern void _ZN9S20111C193v66Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C19__9S20111C11[] = {
  ABISELECT(800,508),
  ABISELECT(624,384),
  ABISELECT(624,384),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  (VTBL_ENTRY)&_ZN9S20111C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C19D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v59Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v60Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v61Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v62Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v63Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v64Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v65Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v66Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C19__A3__9S20111C11[] = {
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C19__A3__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-380),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C19__9S20111C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-624,-384),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C19__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-800,-508),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C16__A1__9S20111C19__9S20111C11[] = {
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(608,380),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN9S20111C123v52Ev();
extern void _ZN9S20111C123v53Ev();
extern void _ZN9S20111C123v54Ev();
extern void _ZN9S20111C123v55Ev();
extern void _ZN9S20111C123v56Ev();
extern void _ZN9S20111C123v57Ev();
extern void _ZN9S20111C123v58Ev();
extern void _ZN9S20111C12D1Ev();
extern void _ZN9S20111C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C12__9S20111C11[] = {
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v55Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v56Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v57Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v58Ev,
  (VTBL_ENTRY)&_ZN9S20111C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C12D0Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C14__9S20111C12__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C3__9S20111C12__9S20111C11[] = {
  0,
  0,
  0,
  ABISELECT(-408,-256),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C12__9S20111C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C12__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-388),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C69S20111C14__A2__9S20111C12__9S20111C11[] = {
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev)();
extern void ABISELECT(_ZThn624_N9S20111C12D1Ev,_ZThn392_N9S20111C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev)();
extern void ABISELECT(_ZThn624_N9S20111C12D0Ev,_ZThn392_N9S20111C12D0Ev)() __attribute__((weak));
extern void _ZN9S20111C183v51Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C18__9S20111C12__9S20111C11[] = {
  0,
  ABISELECT(-624,-392),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-624,-392),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev),
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev)();
extern void ABISELECT(_ZThn784_N9S20111C12D1Ev,_ZThn504_N9S20111C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev)();
extern void ABISELECT(_ZThn784_N9S20111C12D0Ev,_ZThn504_N9S20111C12D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C9__9S20111C12__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-504),
  ABISELECT(-784,-504),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C13__A1__9S20111C12__9S20111C11[] = {
  0,
  0,
  0,
  ABISELECT(-792,-508),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C14__9S20111C11[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C14__A1__9S20111C11[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C14__A1__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C3__9S20111C14__9S20111C11[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C14__9S20111C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C14__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C11[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C15__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C15__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C18D1Ev();
extern void _ZN9S20111C18D0Ev();
extern void _ZN9S20111C183v51Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C18__9S20111C11[] = {
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C18__A2__9S20111C11[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C18__A2__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C18__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev)();
extern void ABISELECT(_ZThn160_N9S20111C18D1Ev,_ZThn112_N9S20111C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev)();
extern void ABISELECT(_ZThn160_N9S20111C18D0Ev,_ZThn112_N9S20111C18D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C9__9S20111C18__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__A1__9S20111C18__9S20111C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C13__9S20111C18__9S20111C11[] = {
  0,
  0,
  0,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
static  VTT_ENTRY vtt_S20111C11[] = {
  {&(_ZTV9S20111C11[12]),  12,252},
  {&(_tg__ZTV9S20111C19__9S20111C11[5]),  5,23},
  {&(_tg__ZTV9S20111C169S20111C19__A3__9S20111C11[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C19__A3__9S20111C11[9]),  9,16},
  {&(_tg__ZTV9S20111C15__9S20111C19__9S20111C11[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C19__9S20111C11[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C19__9S20111C11[10]),  10,18},
  {&(_tg__ZTV9S20111C16__A1__9S20111C19__9S20111C11[10]),  10,20},
  {&(_ZTV9S20111C11[79]),  79,252},
  {&(_ZTV9S20111C11[115]),  115,252},
  {&(_ZTV9S20111C11[147]),  147,252},
  {&(_ZTV9S20111C11[165]),  165,252},
  {&(_ZTV9S20111C11[165]),  165,252},
  {&(_ZTV9S20111C11[186]),  186,252},
  {&(_ZTV9S20111C11[135]),  135,252},
  {&(_ZTV9S20111C11[212]),  212,252},
  {&(_ZTV9S20111C11[233]),  233,252},
  {&(_ZTV9S20111C11[245]),  245,252},
  {&(_ZTV9S20111C11[251]),  251,252},
  {&(_ZTV9S20111C11[43]),  43,252},
  {&(_tg__ZTV9S20111C12__9S20111C11[10]),  10,22},
  {&(_tg__ZTV9S20111C14__9S20111C12__9S20111C11[24]),  24,42},
  {&(_tg__ZTV8S20111C3__9S20111C12__9S20111C11[5]),  5,8},
  {&(_tg__ZTV9S20111C15__9S20111C12__9S20111C11[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C12__9S20111C11[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C12__9S20111C11[10]),  10,18},
  {&(_tg__ZTV8S20111C69S20111C14__A2__9S20111C12__9S20111C11[2]),  2,9},
  {&(_tg__ZTV9S20111C18__9S20111C12__9S20111C11[18]),  18,31},
  {&(_tg__ZTV8S20111C9__9S20111C12__9S20111C11[8]),  8,15},
  {&(_tg__ZTV9S20111C13__A1__9S20111C12__9S20111C11[5]),  5,8},
  {&(_tg__ZTV9S20111C14__9S20111C11[13]),  13,31},
  {&(_tg__ZTV9S20111C169S20111C14__A1__9S20111C11[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C14__A1__9S20111C11[9]),  9,16},
  {&(_tg__ZTV8S20111C3__9S20111C14__9S20111C11[5]),  5,8},
  {&(_tg__ZTV9S20111C15__9S20111C14__9S20111C11[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C14__9S20111C11[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C14__9S20111C11[10]),  10,18},
  {&(_tg__ZTV9S20111C15__9S20111C11[11]),  11,22},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C11[10]),  10,20},
  {&(_tg__ZTV9S20111C169S20111C15__9S20111C11[10]),  10,20},
  {&(_tg__ZTV9S20111C15__9S20111C11[11]),  11,22},
  {&(_tg__ZTV9S20111C17__9S20111C15__9S20111C11[10]),  10,18},
  {&(_tg__ZTV9S20111C18__9S20111C11[13]),  13,26},
  {&(_tg__ZTV9S20111C169S20111C18__A2__9S20111C11[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C18__A2__9S20111C11[9]),  9,16},
  {&(_tg__ZTV9S20111C17__9S20111C18__9S20111C11[10]),  10,18},
  {&(_tg__ZTV8S20111C9__9S20111C18__9S20111C11[8]),  8,15},
  {&(_tg__ZTV8S20111C6__A1__9S20111C18__9S20111C11[9]),  9,16},
  {&(_tg__ZTV9S20111C13__9S20111C18__9S20111C11[5]),  5,8},
};
extern VTBL_ENTRY _ZTI9S20111C11[];
extern  VTBL_ENTRY _ZTV9S20111C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C11[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20111C18D0Ev,_ZThn112_N9S20111C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20111C18D1Ev,_ZThn112_N9S20111C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S20111C12D0Ev,_ZThn504_N9S20111C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S20111C12D1Ev,_ZThn504_N9S20111C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20111C12D0Ev,_ZThn392_N9S20111C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20111C12D1Ev,_ZThn392_N9S20111C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C11D0Ev,_ZTv0_n12_N9S20111C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N9S20111C11D0Ev,_ZThn624_N9S20111C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C11D1Ev,_ZTv0_n12_N9S20111C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N9S20111C11D1Ev,_ZThn624_N9S20111C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C11D0Ev,_ZTv0_n68_N9S20111C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S20111C11D0Ev,_ZThn512_N9S20111C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C11D1Ev,_ZTv0_n68_N9S20111C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S20111C11D1Ev,_ZThn512_N9S20111C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N9S20111C11D0Ev,_ZTv0_n84_N9S20111C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20111C11D0Ev,_ZThn120_N9S20111C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N9S20111C11D1Ev,_ZTv0_n84_N9S20111C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20111C11D1Ev,_ZThn120_N9S20111C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20111C11 = {  "S20111C11", // class name
  bases_S20111C11, 21,
  &(vtc_S20111C11[0]), // expected_vtbl_contents
  &(vtt_S20111C11[0]), // expected_vtt_contents
  ABISELECT(1008,640), // object size
  NSPAIRA(_ZTI9S20111C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20111C11),252, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20111C11),49, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20111C1  : virtual S20111C2 , S20111C3 , virtual S20111C4 , S20111C11 {
  virtual  ~S20111C1(); // _ZN8S20111C1D2Ev
  virtual void  v1(); // _ZN8S20111C12v1Ev
  virtual void  v2(); // _ZN8S20111C12v2Ev
  S20111C1(); // tgen
};
//SIG(1 S20111C1) C1{ VBC2{ v3 FL} BC3{ v4 v5 v6 Fi} VBC4{ BC5{ BC3 v7 v8 v9 v10 v11} BC2 BC6{ v12 v13 v14 v15 v16 v17 v18} VBC7{ BC5 BC8{ v19 FC6} vd FC9{ vd v46 v47 v48 v49 v50}} BC10{ v20 v21 v22 v23 v24 Fi} vd v25 v26 v27 v28 v29} BC11{ VBC12{ BC13{ v30 v31 v32} VBC14{ VBC3 VBC15{ VBC6 BC16{ VBC6 v33 v34 v35 FD[9]} VBC17{ BC6 v36} v37 FD} BC16 BC6 v38 v39 v40 v41 v42 v43 v44 v45 Fp Fi} VBC18{ VBC17 VBC9 BC16 VBC13 vd v51} v52 v53 v54 v55 v56 v57 v58 FC18 Fi} VBC8 BC19{ VBC15 BC17 BC16 BC13 vd v59 v60 v61 v62 v63 v64 v65 v66} v67 v68 v69} vd v1 v2}


 S20111C1 ::~S20111C1(){ note_dtor("S20111C1", this);}
void  S20111C1 ::v1(){vfunc_called(this, "_ZN8S20111C12v1Ev");}
void  S20111C1 ::v2(){vfunc_called(this, "_ZN8S20111C12v2Ev");}
S20111C1 ::S20111C1(){ note_ctor("S20111C1", this);} // tgen

static void Test_S20111C1()
{
  extern Class_Descriptor cd_S20111C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(72,179)];
    init_test(&cd_S20111C1, buf);
    S20111C1 *dp, &lv = *(dp=new (buf) S20111C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1136,712), "sizeof(S20111C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20111C1)");
    /*is_ambiguous_... S20111C1::S20111C2 */ AMB_check_base_class_offset(lv, (S20111C2*), ABISELECT(200,128), "S20111C1");
    /*is_ambiguous_... S20111C1::S20111C3 */ AMB_check_base_class_offset(lv, (S20111C3*), 0, "S20111C1");
    /*is_ambiguous_... S20111C4::S20111C5 */ AMB_check_base_class_offset(lv, (S20111C3*)(S20111C5*)(S20111C4*), ABISELECT(216,140), "S20111C1");
    /*is_ambiguous_... S20111C4::S20111C5 */ AMB_check_base_class_offset(lv, (S20111C5*)(S20111C4*), ABISELECT(216,140), "S20111C1");
    check_base_class_offset(lv, (S20111C2*)(S20111C4*), ABISELECT(232,148), "S20111C1");
    check_base_class_offset(lv, (S20111C6*)(S20111C4*), ABISELECT(248,160), "S20111C1");
    check_base_class_offset(lv, (S20111C3*)(S20111C5*)(S20111C7*), ABISELECT(272,172), "S20111C1");
    check_base_class_offset(lv, (S20111C5*)(S20111C7*), ABISELECT(272,172), "S20111C1");
    check_base_class_offset(lv, (S20111C8*)(S20111C7*), ABISELECT(288,180), "S20111C1");
    check_base_class_offset(lv, (S20111C7*)(S20111C4*), ABISELECT(272,172), "S20111C1");
    check_base_class_offset(lv, (S20111C10*)(S20111C4*), ABISELECT(256,164), "S20111C1");
    check_base_class_offset(lv, (S20111C4*), ABISELECT(216,140), "S20111C1");
    /*is_ambiguous_... S20111C12::S20111C13 */ AMB_check_base_class_offset(lv, (S20111C13*)(S20111C12*), ABISELECT(320,192), "S20111C1");
    check_base_class_offset(lv, (S20111C3*)(S20111C14*), ABISELECT(728,448), "S20111C1");
    /*is_ambiguous_... S20111C15::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C15*), ABISELECT(752,456), "S20111C1");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C15*), ABISELECT(752,456), "S20111C1");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C14*), ABISELECT(752,456), "S20111C1");
    check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C18*), ABISELECT(752,456), "S20111C1");
    /*is_ambiguous_... S20111C19::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C16*)(S20111C19*)(S20111C11*), ABISELECT(752,456), "S20111C1");
    check_base_class_offset(lv, (S20111C16*)(S20111C15*), ABISELECT(752,456), "S20111C1");
    /*is_ambiguous_... S20111C1::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C17*), ABISELECT(928,580), "S20111C1");
    check_base_class_offset(lv, (S20111C17*)(S20111C15*), ABISELECT(928,580), "S20111C1");
    check_base_class_offset(lv, (S20111C17*)(S20111C18*), ABISELECT(928,580), "S20111C1");
    check_base_class_offset(lv, (S20111C15*)(S20111C14*), ABISELECT(752,456), "S20111C1");
    check_base_class_offset(lv, (S20111C15*)(S20111C19*)(S20111C11*), ABISELECT(752,456), "S20111C1");
    /*is_ambiguous_... S20111C14::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C16*)(S20111C14*), ABISELECT(544,324), "S20111C1");
    /*is_ambiguous_... S20111C14::S20111C6 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C14*), ABISELECT(704,436), "S20111C1");
    check_base_class_offset(lv, (S20111C14*)(S20111C12*), ABISELECT(544,324), "S20111C1");
    check_base_class_offset(lv, (S20111C9*)(S20111C18*), ABISELECT(1104,696), "S20111C1");
    check_base_class_offset(lv, (S20111C16*)(S20111C18*), ABISELECT(944,584), "S20111C1");
    check_base_class_offset(lv, (S20111C13*)(S20111C18*), ABISELECT(1112,700), "S20111C1");
    check_base_class_offset(lv, (S20111C18*)(S20111C12*), ABISELECT(944,584), "S20111C1");
    check_base_class_offset(lv, (S20111C12*)(S20111C11*), ABISELECT(320,192), "S20111C1");
    check_base_class_offset(lv, (S20111C8*)(S20111C11*), ABISELECT(1120,704), "S20111C1");
    /*is_ambiguous_... S20111C19::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C6*)(S20111C17*)(S20111C19*)(S20111C11*), ABISELECT(16,8), "S20111C1");
    /*is_ambiguous_... S20111C19::S20111C17 */ AMB_check_base_class_offset(lv, (S20111C17*)(S20111C19*)(S20111C11*), ABISELECT(16,8), "S20111C1");
    /*is_ambiguous_... S20111C19::S20111C16 */ AMB_check_base_class_offset(lv, (S20111C16*)(S20111C19*)(S20111C11*), ABISELECT(32,12), "S20111C1");
    check_base_class_offset(lv, (S20111C13*)(S20111C19*)(S20111C11*), ABISELECT(192,124), "S20111C1");
    check_base_class_offset(lv, (S20111C19*)(S20111C11*), ABISELECT(16,8), "S20111C1");
    check_base_class_offset(lv, (S20111C11*), ABISELECT(16,8), "S20111C1");
    test_class_info(&lv, &cd_S20111C1);
    dp->~S20111C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20111C1(Test_S20111C1, "S20111C1", ABISELECT(1136,712));

#else // __cplusplus

extern void _ZN8S20111C1C1Ev();
extern void _ZN8S20111C1D2Ev();
Name_Map name_map_S20111C1[] = {
  NSPAIR(_ZN8S20111C1C1Ev),
  NSPAIR(_ZN8S20111C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20111C2;
extern VTBL_ENTRY _ZTI8S20111C2[];
extern  VTBL_ENTRY _ZTV8S20111C2[];
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C5;
extern VTBL_ENTRY _ZTI8S20111C5[];
extern  VTBL_ENTRY _ZTV8S20111C5[];
extern Class_Descriptor cd_S20111C2;
extern VTBL_ENTRY _ZTI8S20111C2[];
extern  VTBL_ENTRY _ZTV8S20111C2[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C5;
extern VTBL_ENTRY _ZTI8S20111C5[];
extern  VTBL_ENTRY _ZTV8S20111C5[];
extern Class_Descriptor cd_S20111C8;
extern VTBL_ENTRY _ZTI8S20111C8[];
extern  VTBL_ENTRY _ZTV8S20111C8[];
extern Class_Descriptor cd_S20111C7;
extern VTBL_ENTRY _ZTI8S20111C7[];
extern  VTBL_ENTRY _ZTV8S20111C7[];
extern Class_Descriptor cd_S20111C10;
extern VTBL_ENTRY _ZTI9S20111C10[];
extern  VTBL_ENTRY _ZTV9S20111C10[];
extern Class_Descriptor cd_S20111C4;
extern VTBL_ENTRY _ZTI8S20111C4[];
extern  VTBL_ENTRY _ZTV8S20111C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20111C4[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C3;
extern VTBL_ENTRY _ZTI8S20111C3[];
extern  VTBL_ENTRY _ZTV8S20111C3[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C15;
extern VTBL_ENTRY _ZTI9S20111C15[];
extern  VTBL_ENTRY _ZTV9S20111C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C15[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C14;
extern VTBL_ENTRY _ZTI9S20111C14[];
extern  VTBL_ENTRY _ZTV9S20111C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C14[];
extern Class_Descriptor cd_S20111C9;
extern VTBL_ENTRY _ZTI8S20111C9[];
extern  VTBL_ENTRY _ZTV8S20111C9[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C18;
extern VTBL_ENTRY _ZTI9S20111C18[];
extern  VTBL_ENTRY _ZTV9S20111C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C18[];
extern Class_Descriptor cd_S20111C12;
extern VTBL_ENTRY _ZTI9S20111C12[];
extern  VTBL_ENTRY _ZTV9S20111C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C12[];
extern Class_Descriptor cd_S20111C8;
extern VTBL_ENTRY _ZTI8S20111C8[];
extern  VTBL_ENTRY _ZTV8S20111C8[];
extern Class_Descriptor cd_S20111C6;
extern VTBL_ENTRY _ZTI8S20111C6[];
extern  VTBL_ENTRY _ZTV8S20111C6[];
extern Class_Descriptor cd_S20111C17;
extern VTBL_ENTRY _ZTI9S20111C17[];
extern  VTBL_ENTRY _ZTV9S20111C17[];
extern Class_Descriptor cd_S20111C16;
extern VTBL_ENTRY _ZTI9S20111C16[];
extern  VTBL_ENTRY _ZTV9S20111C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C16[];
extern Class_Descriptor cd_S20111C13;
extern VTBL_ENTRY _ZTI9S20111C13[];
extern  VTBL_ENTRY _ZTV9S20111C13[];
extern Class_Descriptor cd_S20111C19;
extern VTBL_ENTRY _ZTI9S20111C19[];
extern  VTBL_ENTRY _ZTV9S20111C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C19[];
extern Class_Descriptor cd_S20111C11;
extern VTBL_ENTRY _ZTI9S20111C11[];
extern  VTBL_ENTRY _ZTV9S20111C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20111C11[];
static Base_Class bases_S20111C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20111C2,    ABISELECT(200,128), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S20111C3,    ABISELECT(216,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20111C5,    ABISELECT(216,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20111C2,    ABISELECT(232,148), //bcp->offset
    129, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(248,160), //bcp->offset
    132, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20111C3,    ABISELECT(272,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20111C5,    ABISELECT(272,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20111C8,    ABISELECT(288,180), //bcp->offset
    170, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20111C7,    ABISELECT(272,172), //bcp->offset
    148, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20111C10,    ABISELECT(256,164), //bcp->offset
    141, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20111C4,    ABISELECT(216,140), //bcp->offset
    84, //bcp->virtual_function_table_offset
    30, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20111C13,    ABISELECT(320,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20111C3,    ABISELECT(728,448), //bcp->offset
    257, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20111C6,    ABISELECT(752,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(752,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(928,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20111C17,    ABISELECT(928,580), //bcp->offset
    291, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20111C15,    ABISELECT(752,456), //bcp->offset
    265, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(544,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20111C6,    ABISELECT(704,436), //bcp->offset
    248, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20111C14,    ABISELECT(544,324), //bcp->offset
    206, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S20111C9,    ABISELECT(1104,696), //bcp->offset
    340, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20111C16,    ABISELECT(944,584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20111C13,    ABISELECT(1112,700), //bcp->offset
    355, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20111C18,    ABISELECT(944,584), //bcp->offset
    309, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S20111C12,    ABISELECT(320,192), //bcp->offset
    173, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S20111C8,    ABISELECT(1120,704), //bcp->offset
    363, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S20111C6,    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
    29, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20111C17,    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
    30, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20111C16,    ABISELECT(32,12), //bcp->offset
    55, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20111C13,    ABISELECT(192,124), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20111C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20111C11,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20111C1[];
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C1D1Ev();
extern void _ZN8S20111C1D0Ev();
extern void _ZN8S20111C12v1Ev();
extern void _ZN8S20111C12v2Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void ABISELECT(_ZThn16_N8S20111C1D1Ev,_ZThn8_N8S20111C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20111C1D0Ev,_ZThn8_N8S20111C1D0Ev)();
extern void _ZN9S20111C193v59Ev();
extern void _ZN9S20111C193v60Ev();
extern void _ZN9S20111C193v61Ev();
extern void _ZN9S20111C193v62Ev();
extern void _ZN9S20111C193v63Ev();
extern void _ZN9S20111C193v64Ev();
extern void _ZN9S20111C193v65Ev();
extern void _ZN9S20111C193v66Ev();
extern void _ZN9S20111C113v67Ev();
extern void _ZN9S20111C113v68Ev();
extern void _ZN9S20111C113v69Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN8S20111C22v3Ev();
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
extern void ABISELECT(_ZTv0_n96_N8S20111C1D1Ev,_ZTv0_n48_N8S20111C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S20111C1D1Ev,_ZThn140_N8S20111C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20111C1D0Ev,_ZTv0_n48_N8S20111C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S20111C1D0Ev,_ZThn140_N8S20111C1D0Ev)() __attribute__((weak));
extern void _ZN8S20111C43v25Ev();
extern void _ZN8S20111C43v26Ev();
extern void _ZN8S20111C43v27Ev();
extern void _ZN8S20111C43v28Ev();
extern void _ZN8S20111C43v29Ev();
extern void _ZN8S20111C22v3Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C103v20Ev();
extern void _ZN9S20111C103v21Ev();
extern void _ZN9S20111C103v22Ev();
extern void _ZN9S20111C103v23Ev();
extern void _ZN9S20111C103v24Ev();
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
extern void ABISELECT(_ZTv0_n88_N8S20111C1D1Ev,_ZTv0_n44_N8S20111C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20111C1D1Ev,_ZThn172_N8S20111C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20111C1D0Ev,_ZTv0_n44_N8S20111C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20111C1D0Ev,_ZThn172_N8S20111C1D0Ev)() __attribute__((weak));
extern void _ZN8S20111C83v19Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN9S20111C123v52Ev();
extern void _ZN9S20111C123v53Ev();
extern void _ZN9S20111C123v54Ev();
extern void _ZN9S20111C123v55Ev();
extern void _ZN9S20111C123v56Ev();
extern void _ZN9S20111C123v57Ev();
extern void _ZN9S20111C123v58Ev();
extern void ABISELECT(_ZTv0_n168_N8S20111C1D1Ev,_ZTv0_n84_N8S20111C1D1Ev)();
extern void ABISELECT(_ZThn320_N8S20111C1D1Ev,_ZThn192_N8S20111C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n168_N8S20111C1D0Ev,_ZTv0_n84_N8S20111C1D0Ev)();
extern void ABISELECT(_ZThn320_N8S20111C1D0Ev,_ZThn192_N8S20111C1D0Ev)() __attribute__((weak));
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void ABISELECT(_ZTv0_n136_N8S20111C1D1Ev,_ZTv0_n68_N8S20111C1D1Ev)();
extern void ABISELECT(_ZThn944_N8S20111C1D1Ev,_ZThn584_N8S20111C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N8S20111C1D0Ev,_ZTv0_n68_N8S20111C1D0Ev)();
extern void ABISELECT(_ZThn944_N8S20111C1D0Ev,_ZThn584_N8S20111C1D0Ev)() __attribute__((weak));
extern void _ZN9S20111C183v51Ev();
extern void ABISELECT(_ZTv0_n24_N8S20111C1D1Ev,_ZTv0_n12_N8S20111C1D1Ev)();
extern void ABISELECT(_ZThn1104_N8S20111C1D1Ev,_ZThn696_N8S20111C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20111C1D0Ev,_ZTv0_n12_N8S20111C1D0Ev)();
extern void ABISELECT(_ZThn1104_N8S20111C1D0Ev,_ZThn696_N8S20111C1D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN8S20111C83v19Ev();
static  VTBL_ENTRY vtc_S20111C1[] = {
  ABISELECT(1120,704),
  ABISELECT(1112,700),
  ABISELECT(1104,696),
  ABISELECT(944,584),
  ABISELECT(928,580),
  ABISELECT(752,456),
  ABISELECT(752,456),
  ABISELECT(728,448),
  ABISELECT(544,324),
  ABISELECT(320,192),
  ABISELECT(272,172),
  ABISELECT(216,140),
  ABISELECT(200,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20111C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20111C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20111C12v2Ev,
  ABISELECT(1104,696),
  ABISELECT(1096,692),
  ABISELECT(1088,688),
  ABISELECT(928,576),
  ABISELECT(712,440),
  ABISELECT(528,316),
  ABISELECT(304,184),
  ABISELECT(912,572),
  ABISELECT(736,448),
  ABISELECT(736,448),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20111C1D1Ev,_ZThn8_N8S20111C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20111C1D0Ev,_ZThn8_N8S20111C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20111C193v59Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v60Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v61Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v62Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v63Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v64Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v65Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v66Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v67Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v68Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v69Ev,
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  0,
  ABISELECT(-200,-128),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C22v3Ev,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-140),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20111C1D1Ev,_ZTv0_n48_N8S20111C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20111C1D0Ev,_ZTv0_n48_N8S20111C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v29Ev,
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C22v3Ev,
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN9S20111C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v23Ev,
  (VTBL_ENTRY)&_ZN9S20111C103v24Ev,
  ABISELECT(16,8),
  ABISELECT(-272,-172),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20111C1D1Ev,_ZTv0_n44_N8S20111C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20111C1D0Ev,_ZTv0_n44_N8S20111C1D0Ev),
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
  ABISELECT(-320,-192),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v55Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v56Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v57Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v58Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N8S20111C1D1Ev,_ZTv0_n84_N8S20111C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N8S20111C1D0Ev,_ZTv0_n84_N8S20111C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-544,-324),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
  ABISELECT(-704,-436),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  0,
  0,
  0,
  ABISELECT(-728,-448),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-752,-456),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-928,-580),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  0,
  ABISELECT(-944,-584),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S20111C1D1Ev,_ZTv0_n68_N8S20111C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S20111C1D0Ev,_ZTv0_n68_N8S20111C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1104,-696),
  ABISELECT(-1104,-696),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20111C1D1Ev,_ZTv0_n12_N8S20111C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20111C1D0Ev,_ZTv0_n12_N8S20111C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
  0,
  0,
  0,
  ABISELECT(-1112,-700),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  0,
  ABISELECT(-1120,-704),
  (VTBL_ENTRY)&(_ZTI8S20111C1[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
};
extern VTBL_ENTRY _ZTV8S20111C1[];
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN9S20111C11D1Ev();
extern void _ZN9S20111C11D0Ev();
extern void _ZN9S20111C193v59Ev();
extern void _ZN9S20111C193v60Ev();
extern void _ZN9S20111C193v61Ev();
extern void _ZN9S20111C193v62Ev();
extern void _ZN9S20111C193v63Ev();
extern void _ZN9S20111C193v64Ev();
extern void _ZN9S20111C193v65Ev();
extern void _ZN9S20111C193v66Ev();
extern void _ZN9S20111C113v67Ev();
extern void _ZN9S20111C113v68Ev();
extern void _ZN9S20111C113v69Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C11__8S20111C1[] = {
  ABISELECT(1104,696),
  ABISELECT(1096,692),
  ABISELECT(1088,688),
  ABISELECT(928,576),
  ABISELECT(712,440),
  ABISELECT(528,316),
  ABISELECT(304,184),
  ABISELECT(912,572),
  ABISELECT(736,448),
  ABISELECT(736,448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  (VTBL_ENTRY)&_ZN9S20111C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v59Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v60Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v61Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v62Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v63Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v64Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v65Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v66Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v67Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v68Ev,
  (VTBL_ENTRY)&_ZN9S20111C113v69Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
extern void _ZN9S20111C19D1Ev();
extern void _ZN9S20111C19D0Ev();
extern void _ZN9S20111C193v59Ev();
extern void _ZN9S20111C193v60Ev();
extern void _ZN9S20111C193v61Ev();
extern void _ZN9S20111C193v62Ev();
extern void _ZN9S20111C193v63Ev();
extern void _ZN9S20111C193v64Ev();
extern void _ZN9S20111C193v65Ev();
extern void _ZN9S20111C193v66Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C199S20111C11__8S20111C1[] = {
  ABISELECT(912,572),
  ABISELECT(736,448),
  ABISELECT(736,448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
  (VTBL_ENTRY)&_ZN9S20111C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C19D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v59Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v60Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v61Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v62Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v63Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v64Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v65Ev,
  (VTBL_ENTRY)&_ZN9S20111C193v66Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C199S20111C11__A3__8S20111C1[] = {
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C199S20111C11__A3__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-720,-444),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C199S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-736,-448),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C199S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-912,-572),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C16__A1__9S20111C199S20111C11__8S20111C1[] = {
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20111C19[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN9S20111C123v52Ev();
extern void _ZN9S20111C123v53Ev();
extern void _ZN9S20111C123v54Ev();
extern void _ZN9S20111C123v55Ev();
extern void _ZN9S20111C123v56Ev();
extern void _ZN9S20111C123v57Ev();
extern void _ZN9S20111C123v58Ev();
extern void ABISELECT(_ZTv0_n168_N9S20111C11D1Ev,_ZTv0_n84_N9S20111C11D1Ev)();
extern void ABISELECT(_ZThn304_N9S20111C11D1Ev,_ZThn184_N9S20111C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n168_N9S20111C11D0Ev,_ZTv0_n84_N9S20111C11D0Ev)();
extern void ABISELECT(_ZThn304_N9S20111C11D0Ev,_ZThn184_N9S20111C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20111C12__9S20111C11__8S20111C1[] = {
  ABISELECT(-304,-184),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v55Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v56Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v57Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v58Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N9S20111C11D1Ev,_ZTv0_n84_N9S20111C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n168_N9S20111C11D0Ev,_ZTv0_n84_N9S20111C11D0Ev),
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C14__9S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-528,-316),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C3__9S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  ABISELECT(-712,-440),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-736,-448),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-912,-572),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C69S20111C14__A2__9S20111C11__8S20111C1[] = {
  ABISELECT(-688,-428),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void ABISELECT(_ZTv0_n136_N9S20111C11D1Ev,_ZTv0_n68_N9S20111C11D1Ev)();
extern void ABISELECT(_ZThn928_N9S20111C11D1Ev,_ZThn576_N9S20111C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N9S20111C11D0Ev,_ZTv0_n68_N9S20111C11D0Ev)();
extern void ABISELECT(_ZThn928_N9S20111C11D0Ev,_ZThn576_N9S20111C11D0Ev)() __attribute__((weak));
extern void _ZN9S20111C183v51Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C18__9S20111C11__8S20111C1[] = {
  0,
  ABISELECT(-928,-576),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-928,-576),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C11D1Ev,_ZTv0_n68_N9S20111C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C11D0Ev,_ZTv0_n68_N9S20111C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20111C11D1Ev,_ZTv0_n12_N9S20111C11D1Ev)();
extern void ABISELECT(_ZThn1088_N9S20111C11D1Ev,_ZThn688_N9S20111C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C11D0Ev,_ZTv0_n12_N9S20111C11D0Ev)();
extern void ABISELECT(_ZThn1088_N9S20111C11D0Ev,_ZThn688_N9S20111C11D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C9__9S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1088,-688),
  ABISELECT(-1088,-688),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C11D1Ev,_ZTv0_n12_N9S20111C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C11D0Ev,_ZTv0_n12_N9S20111C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C13__A1__9S20111C11__8S20111C1[] = {
  0,
  0,
  0,
  ABISELECT(-1096,-692),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
extern void _ZN8S20111C83v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C8__9S20111C11__8S20111C1[] = {
  0,
  ABISELECT(-1104,-696),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C19__A3__9S20111C11__8S20111C1[] = {
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(720,444),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20111C11[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
extern void _ZN8S20111C4D1Ev();
extern void _ZN8S20111C4D0Ev();
extern void _ZN8S20111C43v25Ev();
extern void _ZN8S20111C43v26Ev();
extern void _ZN8S20111C43v27Ev();
extern void _ZN8S20111C43v28Ev();
extern void _ZN8S20111C43v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C4__8S20111C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20111C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20111C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20111C43v29Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
extern void _ZN8S20111C52v7Ev();
extern void _ZN8S20111C52v8Ev();
extern void _ZN8S20111C52v9Ev();
extern void _ZN8S20111C53v10Ev();
extern void _ZN8S20111C53v11Ev();
extern void ABISELECT(_ZTv0_n88_N8S20111C4D1Ev,_ZTv0_n44_N8S20111C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S20111C4D1Ev,_ZThn32_N8S20111C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20111C4D0Ev,_ZTv0_n44_N8S20111C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S20111C4D0Ev,_ZThn32_N8S20111C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20111C7__8S20111C4__8S20111C1[] = {
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20111C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20111C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20111C4D1Ev,_ZTv0_n44_N8S20111C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20111C4D0Ev,_ZTv0_n44_N8S20111C4D0Ev),
};
extern void _ZN8S20111C83v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C88S20111C7__8S20111C4__8S20111C1[] = {
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20111C4[0]),
  (VTBL_ENTRY)&_ZN8S20111C83v19Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
extern void _ZN9S20111C123v52Ev();
extern void _ZN9S20111C123v53Ev();
extern void _ZN9S20111C123v54Ev();
extern void _ZN9S20111C123v55Ev();
extern void _ZN9S20111C123v56Ev();
extern void _ZN9S20111C123v57Ev();
extern void _ZN9S20111C123v58Ev();
extern void _ZN9S20111C12D1Ev();
extern void _ZN9S20111C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C12__8S20111C1[] = {
  ABISELECT(792,508),
  ABISELECT(784,504),
  ABISELECT(624,392),
  ABISELECT(608,388),
  ABISELECT(432,264),
  ABISELECT(432,264),
  ABISELECT(408,256),
  ABISELECT(224,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v55Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v56Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v57Ev,
  (VTBL_ENTRY)&_ZN9S20111C123v58Ev,
  (VTBL_ENTRY)&_ZN9S20111C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C12D0Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C14__9S20111C12__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C3__9S20111C12__8S20111C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-256),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C12__8S20111C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C12__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-388),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C69S20111C14__A2__9S20111C12__8S20111C1[] = {
  ABISELECT(-384,-244),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev)();
extern void ABISELECT(_ZThn624_N9S20111C12D1Ev,_ZThn392_N9S20111C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev)();
extern void ABISELECT(_ZThn624_N9S20111C12D0Ev,_ZThn392_N9S20111C12D0Ev)() __attribute__((weak));
extern void _ZN9S20111C183v51Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C18__9S20111C12__8S20111C1[] = {
  0,
  ABISELECT(-624,-392),
  0,
  0,
  0,
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-624,-392),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev),
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev)();
extern void ABISELECT(_ZThn784_N9S20111C12D1Ev,_ZThn504_N9S20111C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev)();
extern void ABISELECT(_ZThn784_N9S20111C12D0Ev,_ZThn504_N9S20111C12D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C9__9S20111C12__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-504),
  ABISELECT(-784,-504),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C13__A1__9S20111C12__8S20111C1[] = {
  0,
  0,
  0,
  ABISELECT(-792,-508),
  (VTBL_ENTRY)&(_ZTI9S20111C12[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C143v38Ev();
extern void _ZN9S20111C143v39Ev();
extern void _ZN9S20111C143v40Ev();
extern void _ZN9S20111C143v41Ev();
extern void _ZN9S20111C143v42Ev();
extern void _ZN9S20111C143v43Ev();
extern void _ZN9S20111C143v44Ev();
extern void _ZN9S20111C143v45Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C14__8S20111C1[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v40Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v41Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v42Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v43Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v44Ev,
  (VTBL_ENTRY)&_ZN9S20111C143v45Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C14__A1__8S20111C1[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C14__A1__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C32v4Ev();
extern void _ZN8S20111C32v5Ev();
extern void _ZN8S20111C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C3__9S20111C14__8S20111C1[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20111C32v6Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__9S20111C14__8S20111C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C14__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI9S20111C14[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C153v37Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C15__8S20111C1[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C153v37Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C15__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C15__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20111C15[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
extern void _ZN9S20111C18D1Ev();
extern void _ZN9S20111C18D0Ev();
extern void _ZN9S20111C183v51Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C18__8S20111C1[] = {
  ABISELECT(168,116),
  ABISELECT(160,112),
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20111C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20111C183v51Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C163v33Ev();
extern void _ZN9S20111C163v34Ev();
extern void _ZN9S20111C163v35Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C169S20111C18__A2__8S20111C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v33Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v34Ev,
  (VTBL_ENTRY)&_ZN9S20111C163v35Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__9S20111C169S20111C18__A2__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI9S20111C16[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
extern void _ZN9S20111C173v36Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C17__9S20111C18__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
  (VTBL_ENTRY)&_ZN9S20111C173v36Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev)();
extern void ABISELECT(_ZThn160_N9S20111C18D1Ev,_ZThn112_N9S20111C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev)();
extern void ABISELECT(_ZThn160_N9S20111C18D0Ev,_ZThn112_N9S20111C18D0Ev)() __attribute__((weak));
extern void _ZN8S20111C93v46Ev();
extern void _ZN8S20111C93v47Ev();
extern void _ZN8S20111C93v48Ev();
extern void _ZN8S20111C93v49Ev();
extern void _ZN8S20111C93v50Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C9__9S20111C18__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20111C93v46Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v47Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v48Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v49Ev,
  (VTBL_ENTRY)&_ZN8S20111C93v50Ev,
};
extern void _ZN8S20111C63v12Ev();
extern void _ZN8S20111C63v13Ev();
extern void _ZN8S20111C63v14Ev();
extern void _ZN8S20111C63v15Ev();
extern void _ZN8S20111C63v16Ev();
extern void _ZN8S20111C63v17Ev();
extern void _ZN8S20111C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20111C6__A1__9S20111C18__8S20111C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN8S20111C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20111C63v18Ev,
};
extern void _ZN9S20111C133v30Ev();
extern void _ZN9S20111C133v31Ev();
extern void _ZN9S20111C133v32Ev();
static  VTBL_ENTRY _tg__ZTV9S20111C13__9S20111C18__8S20111C1[] = {
  0,
  0,
  0,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S20111C18[0]),
  (VTBL_ENTRY)&_ZN9S20111C133v30Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v31Ev,
  (VTBL_ENTRY)&_ZN9S20111C133v32Ev,
};
static  VTT_ENTRY vtt_S20111C1[] = {
  {&(_ZTV8S20111C1[15]),  15,367},
  {&(_tg__ZTV9S20111C11__8S20111C1[12]),  12,33},
  {&(_tg__ZTV9S20111C199S20111C11__8S20111C1[5]),  5,23},
  {&(_tg__ZTV9S20111C169S20111C199S20111C11__A3__8S20111C1[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C199S20111C11__A3__8S20111C1[9]),  9,16},
  {&(_tg__ZTV9S20111C15__9S20111C199S20111C11__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C199S20111C11__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C199S20111C11__8S20111C1[10]),  10,18},
  {&(_tg__ZTV9S20111C16__A1__9S20111C199S20111C11__8S20111C1[10]),  10,20},
  {&(_tg__ZTV9S20111C12__9S20111C11__8S20111C1[21]),  21,33},
  {&(_tg__ZTV9S20111C14__9S20111C11__8S20111C1[24]),  24,42},
  {&(_tg__ZTV8S20111C3__9S20111C11__8S20111C1[5]),  5,8},
  {&(_tg__ZTV9S20111C15__9S20111C11__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C11__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C11__8S20111C1[10]),  10,18},
  {&(_tg__ZTV8S20111C69S20111C14__A2__9S20111C11__8S20111C1[2]),  2,9},
  {&(_tg__ZTV9S20111C18__9S20111C11__8S20111C1[18]),  18,31},
  {&(_tg__ZTV8S20111C9__9S20111C11__8S20111C1[8]),  8,15},
  {&(_tg__ZTV9S20111C13__A1__9S20111C11__8S20111C1[5]),  5,8},
  {&(_tg__ZTV8S20111C8__9S20111C11__8S20111C1[3]),  3,4},
  {&(_tg__ZTV9S20111C169S20111C19__A3__9S20111C11__8S20111C1[10]),  10,20},
  {&(_ZTV8S20111C1[83]),  83,367},
  {&(_ZTV8S20111C1[114]),  114,367},
  {&(_ZTV8S20111C1[131]),  131,367},
  {&(_ZTV8S20111C1[134]),  134,367},
  {&(_ZTV8S20111C1[160]),  160,367},
  {&(_ZTV8S20111C1[172]),  172,367},
  {&(_ZTV8S20111C1[143]),  143,367},
  {&(_ZTV8S20111C1[34]),  34,367},
  {&(_ZTV8S20111C1[194]),  194,367},
  {&(_ZTV8S20111C1[230]),  230,367},
  {&(_ZTV8S20111C1[262]),  262,367},
  {&(_ZTV8S20111C1[280]),  280,367},
  {&(_ZTV8S20111C1[280]),  280,367},
  {&(_ZTV8S20111C1[301]),  301,367},
  {&(_ZTV8S20111C1[250]),  250,367},
  {&(_ZTV8S20111C1[327]),  327,367},
  {&(_ZTV8S20111C1[348]),  348,367},
  {&(_ZTV8S20111C1[360]),  360,367},
  {&(_ZTV8S20111C1[366]),  366,367},
  {&(_ZTV8S20111C1[65]),  65,367},
  {&(_tg__ZTV8S20111C4__8S20111C1[3]),  3,18},
  {&(_tg__ZTV8S20111C7__8S20111C4__8S20111C1[12]),  12,22},
  {&(_tg__ZTV8S20111C88S20111C7__8S20111C4__8S20111C1[2]),  2,3},
  {&(_tg__ZTV9S20111C12__8S20111C1[10]),  10,22},
  {&(_tg__ZTV9S20111C14__9S20111C12__8S20111C1[24]),  24,42},
  {&(_tg__ZTV8S20111C3__9S20111C12__8S20111C1[5]),  5,8},
  {&(_tg__ZTV9S20111C15__9S20111C12__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C12__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C12__8S20111C1[10]),  10,18},
  {&(_tg__ZTV8S20111C69S20111C14__A2__9S20111C12__8S20111C1[2]),  2,9},
  {&(_tg__ZTV9S20111C18__9S20111C12__8S20111C1[18]),  18,31},
  {&(_tg__ZTV8S20111C9__9S20111C12__8S20111C1[8]),  8,15},
  {&(_tg__ZTV9S20111C13__A1__9S20111C12__8S20111C1[5]),  5,8},
  {&(_tg__ZTV9S20111C14__8S20111C1[13]),  13,31},
  {&(_tg__ZTV9S20111C169S20111C14__A1__8S20111C1[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C14__A1__8S20111C1[9]),  9,16},
  {&(_tg__ZTV8S20111C3__9S20111C14__8S20111C1[5]),  5,8},
  {&(_tg__ZTV9S20111C15__9S20111C14__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C15__9S20111C14__8S20111C1[15]),  15,26},
  {&(_tg__ZTV9S20111C17__9S20111C14__8S20111C1[10]),  10,18},
  {&(_tg__ZTV9S20111C15__8S20111C1[11]),  11,22},
  {&(_tg__ZTV9S20111C169S20111C15__8S20111C1[10]),  10,20},
  {&(_tg__ZTV9S20111C169S20111C15__8S20111C1[10]),  10,20},
  {&(_tg__ZTV9S20111C15__8S20111C1[11]),  11,22},
  {&(_tg__ZTV9S20111C17__9S20111C15__8S20111C1[10]),  10,18},
  {&(_tg__ZTV9S20111C18__8S20111C1[13]),  13,26},
  {&(_tg__ZTV9S20111C169S20111C18__A2__8S20111C1[10]),  10,20},
  {&(_tg__ZTV8S20111C6__9S20111C169S20111C18__A2__8S20111C1[9]),  9,16},
  {&(_tg__ZTV9S20111C17__9S20111C18__8S20111C1[10]),  10,18},
  {&(_tg__ZTV8S20111C9__9S20111C18__8S20111C1[8]),  8,15},
  {&(_tg__ZTV8S20111C6__A1__9S20111C18__8S20111C1[9]),  9,16},
  {&(_tg__ZTV9S20111C13__9S20111C18__8S20111C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20111C1[];
extern  VTBL_ENTRY _ZTV8S20111C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20111C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D0Ev,_ZTv0_n12_N9S20111C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20111C18D0Ev,_ZThn112_N9S20111C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C18D1Ev,_ZTv0_n12_N9S20111C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20111C18D1Ev,_ZThn112_N9S20111C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C12D0Ev,_ZTv0_n12_N9S20111C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S20111C12D0Ev,_ZThn504_N9S20111C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C12D1Ev,_ZTv0_n12_N9S20111C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S20111C12D1Ev,_ZThn504_N9S20111C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C12D0Ev,_ZTv0_n68_N9S20111C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20111C12D0Ev,_ZThn392_N9S20111C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C12D1Ev,_ZTv0_n68_N9S20111C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20111C12D1Ev,_ZThn392_N9S20111C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20111C4D0Ev,_ZTv0_n44_N8S20111C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20111C4D0Ev,_ZThn32_N8S20111C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20111C4D1Ev,_ZTv0_n44_N8S20111C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20111C4D1Ev,_ZThn32_N8S20111C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C11D0Ev,_ZTv0_n12_N9S20111C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1088_N9S20111C11D0Ev,_ZThn688_N9S20111C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20111C11D1Ev,_ZTv0_n12_N9S20111C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1088_N9S20111C11D1Ev,_ZThn688_N9S20111C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C11D0Ev,_ZTv0_n68_N9S20111C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N9S20111C11D0Ev,_ZThn576_N9S20111C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N9S20111C11D1Ev,_ZTv0_n68_N9S20111C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N9S20111C11D1Ev,_ZThn576_N9S20111C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N9S20111C11D0Ev,_ZTv0_n84_N9S20111C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20111C11D0Ev,_ZThn184_N9S20111C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N9S20111C11D1Ev,_ZTv0_n84_N9S20111C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20111C11D1Ev,_ZThn184_N9S20111C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20111C1D0Ev,_ZTv0_n12_N8S20111C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1104_N8S20111C1D0Ev,_ZThn696_N8S20111C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20111C1D1Ev,_ZTv0_n12_N8S20111C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1104_N8S20111C1D1Ev,_ZThn696_N8S20111C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S20111C1D0Ev,_ZTv0_n68_N8S20111C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S20111C1D0Ev,_ZThn584_N8S20111C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S20111C1D1Ev,_ZTv0_n68_N8S20111C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S20111C1D1Ev,_ZThn584_N8S20111C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N8S20111C1D0Ev,_ZTv0_n84_N8S20111C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20111C1D0Ev,_ZThn192_N8S20111C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n168_N8S20111C1D1Ev,_ZTv0_n84_N8S20111C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20111C1D1Ev,_ZThn192_N8S20111C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20111C1D0Ev,_ZTv0_n44_N8S20111C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20111C1D0Ev,_ZThn172_N8S20111C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20111C1D1Ev,_ZTv0_n44_N8S20111C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20111C1D1Ev,_ZThn172_N8S20111C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20111C1D0Ev,_ZTv0_n48_N8S20111C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20111C1D0Ev,_ZThn140_N8S20111C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20111C1D1Ev,_ZTv0_n48_N8S20111C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20111C1D1Ev,_ZThn140_N8S20111C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20111C1 = {  "S20111C1", // class name
  bases_S20111C1, 34,
  &(vtc_S20111C1[0]), // expected_vtbl_contents
  &(vtt_S20111C1[0]), // expected_vtt_contents
  ABISELECT(1136,712), // object size
  NSPAIRA(_ZTI8S20111C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20111C1),367, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20111C1),73, //virtual table table var
  34, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C4_nt  {
  ::S2382C20_nt s2338c4f0;
  int s2338c4f1[2];
  char s2338c4f2;
  virtual  ~S2338C4_nt(); // _ZN10S2338C4_ntD1Ev
  virtual void  v5(); // _ZN10S2338C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2338C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2338C4_nt2v7Ev
  S2338C4_nt(); // tgen
};
//SIG(-1 S2338C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2338C4_nt ::~S2338C4_nt(){ note_dtor("S2338C4_nt", this);}
void  S2338C4_nt ::v5(){vfunc_called(this, "_ZN10S2338C4_nt2v5Ev");}
void  S2338C4_nt ::v6(){vfunc_called(this, "_ZN10S2338C4_nt2v6Ev");}
void  S2338C4_nt ::v7(){vfunc_called(this, "_ZN10S2338C4_nt2v7Ev");}
S2338C4_nt ::S2338C4_nt(){ note_ctor("S2338C4_nt", this);} // tgen

//skip512 S2338C4_nt

#else // __cplusplus

extern void _ZN10S2338C4_ntC1Ev();
extern void _ZN10S2338C4_ntD1Ev();
Name_Map name_map_S2338C4_nt[] = {
  NSPAIR(_ZN10S2338C4_ntC1Ev),
  NSPAIR(_ZN10S2338C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2338C4_nt[];
extern void _ZN10S2338C4_ntD1Ev();
extern void _ZN10S2338C4_ntD0Ev();
extern void _ZN10S2338C4_nt2v5Ev();
extern void _ZN10S2338C4_nt2v6Ev();
extern void _ZN10S2338C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S2338C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2338C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2338C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2338C4_nt[];
VTBL_ENTRY *P__ZTI10S2338C4_nt = _ZTI10S2338C4_nt; 
extern  VTBL_ENTRY _ZTV10S2338C4_nt[];
Class_Descriptor cd_S2338C4_nt = {  "S2338C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2338C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2338C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2338C4_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  S2338C7  {
  virtual  ~S2338C7(); // _ZN7S2338C7D1Ev
  virtual void  v8(); // _ZN7S2338C72v8Ev
  virtual void  v9(); // _ZN7S2338C72v9Ev
  virtual void  v10(); // _ZN7S2338C73v10Ev
  S2338C7(); // tgen
};
//SIG(-1 S2338C7) C1{ vd v1 v2 v3}


 S2338C7 ::~S2338C7(){ note_dtor("S2338C7", this);}
void  S2338C7 ::v8(){vfunc_called(this, "_ZN7S2338C72v8Ev");}
void  S2338C7 ::v9(){vfunc_called(this, "_ZN7S2338C72v9Ev");}
void  S2338C7 ::v10(){vfunc_called(this, "_ZN7S2338C73v10Ev");}
S2338C7 ::S2338C7(){ note_ctor("S2338C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2338C7C1Ev();
extern void _ZN7S2338C7D1Ev();
Name_Map name_map_S2338C7[] = {
  NSPAIR(_ZN7S2338C7C1Ev),
  NSPAIR(_ZN7S2338C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2338C7[];
extern void _ZN7S2338C7D1Ev();
extern void _ZN7S2338C7D0Ev();
extern void _ZN7S2338C72v8Ev();
extern void _ZN7S2338C72v9Ev();
extern void _ZN7S2338C73v10Ev();
static  VTBL_ENTRY vtc_S2338C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2338C7[0]),
  (VTBL_ENTRY)&_ZN7S2338C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2338C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2338C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2338C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2338C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2338C7[];
extern  VTBL_ENTRY _ZTV7S2338C7[];
Class_Descriptor cd_S2338C7 = {  "S2338C7", // class name
  0,0,//no base classes
  &(vtc_S2338C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2338C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2338C7),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  S2338C3_nt  : S2338C4_nt , S2338C7 {
  void *s2338c3f0;
  char s2338c3f1;
  int s2338c3f2;
  virtual  ~S2338C3_nt(); // _ZN10S2338C3_ntD1Ev
  virtual void  v11(); // _ZN10S2338C3_nt3v11Ev
  virtual void  v12(); // _ZN10S2338C3_nt3v12Ev
  virtual void  v13(); // _ZN10S2338C3_nt3v13Ev
  virtual void  v14(); // _ZN10S2338C3_nt3v14Ev
  virtual void  v15(); // _ZN10S2338C3_nt3v15Ev
  virtual void  v16(); // _ZN10S2338C3_nt3v16Ev
  virtual void  v17(); // _ZN10S2338C3_nt3v17Ev
  virtual void  v18(); // _ZN10S2338C3_nt3v18Ev
  virtual void  v19(); // _ZN10S2338C3_nt3v19Ev
  virtual void  v20(); // _ZN10S2338C3_nt3v20Ev
  S2338C3_nt(); // tgen
};
//SIG(-1 S2338C3_nt) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2338C3_nt ::~S2338C3_nt(){ note_dtor("S2338C3_nt", this);}
void  S2338C3_nt ::v11(){vfunc_called(this, "_ZN10S2338C3_nt3v11Ev");}
void  S2338C3_nt ::v12(){vfunc_called(this, "_ZN10S2338C3_nt3v12Ev");}
void  S2338C3_nt ::v13(){vfunc_called(this, "_ZN10S2338C3_nt3v13Ev");}
void  S2338C3_nt ::v14(){vfunc_called(this, "_ZN10S2338C3_nt3v14Ev");}
void  S2338C3_nt ::v15(){vfunc_called(this, "_ZN10S2338C3_nt3v15Ev");}
void  S2338C3_nt ::v16(){vfunc_called(this, "_ZN10S2338C3_nt3v16Ev");}
void  S2338C3_nt ::v17(){vfunc_called(this, "_ZN10S2338C3_nt3v17Ev");}
void  S2338C3_nt ::v18(){vfunc_called(this, "_ZN10S2338C3_nt3v18Ev");}
void  S2338C3_nt ::v19(){vfunc_called(this, "_ZN10S2338C3_nt3v19Ev");}
void  S2338C3_nt ::v20(){vfunc_called(this, "_ZN10S2338C3_nt3v20Ev");}
S2338C3_nt ::S2338C3_nt(){ note_ctor("S2338C3_nt", this);} // tgen

//skip512 S2338C3_nt

#else // __cplusplus

extern void _ZN10S2338C3_ntC1Ev();
extern void _ZN10S2338C3_ntD1Ev();
Name_Map name_map_S2338C3_nt[] = {
  NSPAIR(_ZN10S2338C3_ntC1Ev),
  NSPAIR(_ZN10S2338C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2338C4_nt;
extern VTBL_ENTRY _ZTI10S2338C4_nt[];
extern  VTBL_ENTRY _ZTV10S2338C4_nt[];
extern Class_Descriptor cd_S2338C7;
extern VTBL_ENTRY _ZTI7S2338C7[];
extern  VTBL_ENTRY _ZTV7S2338C7[];
static Base_Class bases_S2338C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2338C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2338C7,    ABISELECT(40,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2338C3_nt[];
extern void _ZN10S2338C3_ntD1Ev();
extern void _ZN10S2338C3_ntD0Ev();
extern void _ZN10S2338C4_nt2v5Ev();
extern void _ZN10S2338C4_nt2v6Ev();
extern void _ZN10S2338C4_nt2v7Ev();
extern void _ZN10S2338C3_nt3v11Ev();
extern void _ZN10S2338C3_nt3v12Ev();
extern void _ZN10S2338C3_nt3v13Ev();
extern void _ZN10S2338C3_nt3v14Ev();
extern void _ZN10S2338C3_nt3v15Ev();
extern void _ZN10S2338C3_nt3v16Ev();
extern void _ZN10S2338C3_nt3v17Ev();
extern void _ZN10S2338C3_nt3v18Ev();
extern void _ZN10S2338C3_nt3v19Ev();
extern void _ZN10S2338C3_nt3v20Ev();
extern void ABISELECT(_ZThn40_N10S2338C3_ntD1Ev,_ZThn28_N10S2338C3_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S2338C3_ntD0Ev,_ZThn28_N10S2338C3_ntD0Ev)();
extern void _ZN7S2338C72v8Ev();
extern void _ZN7S2338C72v9Ev();
extern void _ZN7S2338C73v10Ev();
static  VTBL_ENTRY vtc_S2338C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2338C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2338C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI10S2338C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2338C3_ntD1Ev,_ZThn28_N10S2338C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2338C3_ntD0Ev,_ZThn28_N10S2338C3_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S2338C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2338C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2338C73v10Ev,
};
extern VTBL_ENTRY _ZTI10S2338C3_nt[];
VTBL_ENTRY *P__ZTI10S2338C3_nt = _ZTI10S2338C3_nt; 
extern  VTBL_ENTRY _ZTV10S2338C3_nt[];
Class_Descriptor cd_S2338C3_nt = {  "S2338C3_nt", // class name
  bases_S2338C3_nt, 2,
  &(vtc_S2338C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI10S2338C3_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2338C3_nt),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C10  {
  virtual  ~S2338C10(); // _ZN8S2338C10D1Ev
  virtual void  v21(); // _ZN8S2338C103v21Ev
  virtual void  v22(); // _ZN8S2338C103v22Ev
  virtual void  v23(); // _ZN8S2338C103v23Ev
  S2338C10(); // tgen
};
//SIG(-1 S2338C10) C1{ vd v1 v2 v3}


 S2338C10 ::~S2338C10(){ note_dtor("S2338C10", this);}
void  S2338C10 ::v21(){vfunc_called(this, "_ZN8S2338C103v21Ev");}
void  S2338C10 ::v22(){vfunc_called(this, "_ZN8S2338C103v22Ev");}
void  S2338C10 ::v23(){vfunc_called(this, "_ZN8S2338C103v23Ev");}
S2338C10 ::S2338C10(){ note_ctor("S2338C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2338C10C1Ev();
extern void _ZN8S2338C10D1Ev();
Name_Map name_map_S2338C10[] = {
  NSPAIR(_ZN8S2338C10C1Ev),
  NSPAIR(_ZN8S2338C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2338C10[];
extern void _ZN8S2338C10D1Ev();
extern void _ZN8S2338C10D0Ev();
extern void _ZN8S2338C103v21Ev();
extern void _ZN8S2338C103v22Ev();
extern void _ZN8S2338C103v23Ev();
static  VTBL_ENTRY vtc_S2338C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2338C10[0]),
  (VTBL_ENTRY)&_ZN8S2338C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2338C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2338C10[];
extern  VTBL_ENTRY _ZTV8S2338C10[];
Class_Descriptor cd_S2338C10 = {  "S2338C10", // class name
  0,0,//no base classes
  &(vtc_S2338C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2338C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2338C10),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  S2338C14_nt  {
  long s2338c14f0[4];
};
//SIG(-1 S2338C14_nt) C1{ Fl[4]}



//skip512 S2338C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C13_nt  {
  ::S2338C14_nt s2338c13f0;
  void  mf2338c13(); // _ZN11S2338C13_nt9mf2338c13Ev
};
//SIG(-1 S2338C13_nt) C1{ m FC2{ Fl[4]}}


void  S2338C13_nt ::mf2338c13(){}

//skip512 S2338C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C9_nt  : S2338C10 {
  ::S2382C37 s2338c9f0;
  ::S2338C13_nt s2338c9f1;
  char s2338c9f2;
  virtual  ~S2338C9_nt(); // _ZN10S2338C9_ntD1Ev
  virtual void  v24(); // _ZN10S2338C9_nt3v24Ev
  virtual void  v25(); // _ZN10S2338C9_nt3v25Ev
  virtual void  v26(); // _ZN10S2338C9_nt3v26Ev
  S2338C9_nt(); // tgen
};
//SIG(-1 S2338C9_nt) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FC6{ Fl[4]}} Fc}


 S2338C9_nt ::~S2338C9_nt(){ note_dtor("S2338C9_nt", this);}
void  S2338C9_nt ::v24(){vfunc_called(this, "_ZN10S2338C9_nt3v24Ev");}
void  S2338C9_nt ::v25(){vfunc_called(this, "_ZN10S2338C9_nt3v25Ev");}
void  S2338C9_nt ::v26(){vfunc_called(this, "_ZN10S2338C9_nt3v26Ev");}
S2338C9_nt ::S2338C9_nt(){ note_ctor("S2338C9_nt", this);} // tgen

//skip512 S2338C9_nt

#else // __cplusplus

extern void _ZN10S2338C9_ntC1Ev();
extern void _ZN10S2338C9_ntD1Ev();
Name_Map name_map_S2338C9_nt[] = {
  NSPAIR(_ZN10S2338C9_ntC1Ev),
  NSPAIR(_ZN10S2338C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2338C10;
extern VTBL_ENTRY _ZTI8S2338C10[];
extern  VTBL_ENTRY _ZTV8S2338C10[];
static Base_Class bases_S2338C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2338C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2338C9_nt[];
extern void _ZN10S2338C9_ntD1Ev();
extern void _ZN10S2338C9_ntD0Ev();
extern void _ZN8S2338C103v21Ev();
extern void _ZN8S2338C103v22Ev();
extern void _ZN8S2338C103v23Ev();
extern void _ZN10S2338C9_nt3v24Ev();
extern void _ZN10S2338C9_nt3v25Ev();
extern void _ZN10S2338C9_nt3v26Ev();
static  VTBL_ENTRY vtc_S2338C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2338C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S2338C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S2338C9_nt[];
VTBL_ENTRY *P__ZTI10S2338C9_nt = _ZTI10S2338C9_nt; 
extern  VTBL_ENTRY _ZTV10S2338C9_nt[];
Class_Descriptor cd_S2338C9_nt = {  "S2338C9_nt", // class name
  bases_S2338C9_nt, 1,
  &(vtc_S2338C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI10S2338C9_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2338C9_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C8_nt  : S2338C9_nt {
  virtual  ~S2338C8_nt(); // _ZN10S2338C8_ntD1Ev
  virtual void  v27(); // _ZN10S2338C8_nt3v27Ev
  virtual void  v28(); // _ZN10S2338C8_nt3v28Ev
  virtual void  v29(); // _ZN10S2338C8_nt3v29Ev
  virtual void  v30(); // _ZN10S2338C8_nt3v30Ev
  S2338C8_nt(); // tgen
};
//SIG(-1 S2338C8_nt) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc} vd v1 v2 v3 v4}


 S2338C8_nt ::~S2338C8_nt(){ note_dtor("S2338C8_nt", this);}
void  S2338C8_nt ::v27(){vfunc_called(this, "_ZN10S2338C8_nt3v27Ev");}
void  S2338C8_nt ::v28(){vfunc_called(this, "_ZN10S2338C8_nt3v28Ev");}
void  S2338C8_nt ::v29(){vfunc_called(this, "_ZN10S2338C8_nt3v29Ev");}
void  S2338C8_nt ::v30(){vfunc_called(this, "_ZN10S2338C8_nt3v30Ev");}
S2338C8_nt ::S2338C8_nt(){ note_ctor("S2338C8_nt", this);} // tgen

//skip512 S2338C8_nt

#else // __cplusplus

extern void _ZN10S2338C8_ntC1Ev();
extern void _ZN10S2338C8_ntD1Ev();
Name_Map name_map_S2338C8_nt[] = {
  NSPAIR(_ZN10S2338C8_ntC1Ev),
  NSPAIR(_ZN10S2338C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2338C10;
extern VTBL_ENTRY _ZTI8S2338C10[];
extern  VTBL_ENTRY _ZTV8S2338C10[];
extern Class_Descriptor cd_S2338C9_nt;
extern VTBL_ENTRY _ZTI10S2338C9_nt[];
extern  VTBL_ENTRY _ZTV10S2338C9_nt[];
static Base_Class bases_S2338C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2338C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2338C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S2338C8_nt[];
extern void _ZN10S2338C8_ntD1Ev();
extern void _ZN10S2338C8_ntD0Ev();
extern void _ZN8S2338C103v21Ev();
extern void _ZN8S2338C103v22Ev();
extern void _ZN8S2338C103v23Ev();
extern void _ZN10S2338C9_nt3v24Ev();
extern void _ZN10S2338C9_nt3v25Ev();
extern void _ZN10S2338C9_nt3v26Ev();
extern void _ZN10S2338C8_nt3v27Ev();
extern void _ZN10S2338C8_nt3v28Ev();
extern void _ZN10S2338C8_nt3v29Ev();
extern void _ZN10S2338C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2338C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2338C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S2338C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2338C8_nt[];
VTBL_ENTRY *P__ZTI10S2338C8_nt = _ZTI10S2338C8_nt; 
extern  VTBL_ENTRY _ZTV10S2338C8_nt[];
Class_Descriptor cd_S2338C8_nt = {  "S2338C8_nt", // class name
  bases_S2338C8_nt, 2,
  &(vtc_S2338C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI10S2338C8_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2338C8_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C2_nt  : S2338C3_nt , S2338C8_nt {
  int s2338c2f0[3];
  char s2338c2f1;
  ::S2382C25 s2338c2f2;
  virtual  ~S2338C2_nt(); // _ZN10S2338C2_ntD1Ev
  virtual void  v31(); // _ZN10S2338C2_nt3v31Ev
  virtual void  v32(); // _ZN10S2338C2_nt3v32Ev
  virtual void  v33(); // _ZN10S2338C2_nt3v33Ev
  virtual void  v34(); // _ZN10S2338C2_nt3v34Ev
  virtual void  v35(); // _ZN10S2338C2_nt3v35Ev
  virtual void  v36(); // _ZN10S2338C2_nt3v36Ev
  S2338C2_nt(); // tgen
};
//SIG(-1 S2338C2_nt) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FC13{ Fl[4]}} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC16}}}


 S2338C2_nt ::~S2338C2_nt(){ note_dtor("S2338C2_nt", this);}
void  S2338C2_nt ::v31(){vfunc_called(this, "_ZN10S2338C2_nt3v31Ev");}
void  S2338C2_nt ::v32(){vfunc_called(this, "_ZN10S2338C2_nt3v32Ev");}
void  S2338C2_nt ::v33(){vfunc_called(this, "_ZN10S2338C2_nt3v33Ev");}
void  S2338C2_nt ::v34(){vfunc_called(this, "_ZN10S2338C2_nt3v34Ev");}
void  S2338C2_nt ::v35(){vfunc_called(this, "_ZN10S2338C2_nt3v35Ev");}
void  S2338C2_nt ::v36(){vfunc_called(this, "_ZN10S2338C2_nt3v36Ev");}
S2338C2_nt ::S2338C2_nt(){ note_ctor("S2338C2_nt", this);} // tgen

//skip512 S2338C2_nt

#else // __cplusplus

extern void _ZN10S2338C2_ntC1Ev();
extern void _ZN10S2338C2_ntD1Ev();
Name_Map name_map_S2338C2_nt[] = {
  NSPAIR(_ZN10S2338C2_ntC1Ev),
  NSPAIR(_ZN10S2338C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2338C4_nt;
extern VTBL_ENTRY _ZTI10S2338C4_nt[];
extern  VTBL_ENTRY _ZTV10S2338C4_nt[];
extern Class_Descriptor cd_S2338C7;
extern VTBL_ENTRY _ZTI7S2338C7[];
extern  VTBL_ENTRY _ZTV7S2338C7[];
extern Class_Descriptor cd_S2338C3_nt;
extern VTBL_ENTRY _ZTI10S2338C3_nt[];
extern  VTBL_ENTRY _ZTV10S2338C3_nt[];
extern Class_Descriptor cd_S2338C10;
extern VTBL_ENTRY _ZTI8S2338C10[];
extern  VTBL_ENTRY _ZTV8S2338C10[];
extern Class_Descriptor cd_S2338C9_nt;
extern VTBL_ENTRY _ZTI10S2338C9_nt[];
extern  VTBL_ENTRY _ZTV10S2338C9_nt[];
extern Class_Descriptor cd_S2338C8_nt;
extern VTBL_ENTRY _ZTI10S2338C8_nt[];
extern  VTBL_ENTRY _ZTV10S2338C8_nt[];
static Base_Class bases_S2338C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2338C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2338C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2338C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2338C10,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2338C9_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2338C8_nt,    ABISELECT(64,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2338C2_nt[];
extern void _ZN10S2338C2_ntD1Ev();
extern void _ZN10S2338C2_ntD0Ev();
extern void _ZN10S2338C4_nt2v5Ev();
extern void _ZN10S2338C4_nt2v6Ev();
extern void _ZN10S2338C4_nt2v7Ev();
extern void _ZN10S2338C3_nt3v11Ev();
extern void _ZN10S2338C3_nt3v12Ev();
extern void _ZN10S2338C3_nt3v13Ev();
extern void _ZN10S2338C3_nt3v14Ev();
extern void _ZN10S2338C3_nt3v15Ev();
extern void _ZN10S2338C3_nt3v16Ev();
extern void _ZN10S2338C3_nt3v17Ev();
extern void _ZN10S2338C3_nt3v18Ev();
extern void _ZN10S2338C3_nt3v19Ev();
extern void _ZN10S2338C3_nt3v20Ev();
extern void _ZN10S2338C2_nt3v31Ev();
extern void _ZN10S2338C2_nt3v32Ev();
extern void _ZN10S2338C2_nt3v33Ev();
extern void _ZN10S2338C2_nt3v34Ev();
extern void _ZN10S2338C2_nt3v35Ev();
extern void _ZN10S2338C2_nt3v36Ev();
extern void ABISELECT(_ZThn40_N10S2338C2_ntD1Ev,_ZThn28_N10S2338C2_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S2338C2_ntD0Ev,_ZThn28_N10S2338C2_ntD0Ev)();
extern void _ZN7S2338C72v8Ev();
extern void _ZN7S2338C72v9Ev();
extern void _ZN7S2338C73v10Ev();
extern void ABISELECT(_ZThn64_N10S2338C2_ntD1Ev,_ZThn44_N10S2338C2_ntD1Ev)();
extern void ABISELECT(_ZThn64_N10S2338C2_ntD0Ev,_ZThn44_N10S2338C2_ntD0Ev)();
extern void _ZN8S2338C103v21Ev();
extern void _ZN8S2338C103v22Ev();
extern void _ZN8S2338C103v23Ev();
extern void _ZN10S2338C9_nt3v24Ev();
extern void _ZN10S2338C9_nt3v25Ev();
extern void _ZN10S2338C9_nt3v26Ev();
extern void _ZN10S2338C8_nt3v27Ev();
extern void _ZN10S2338C8_nt3v28Ev();
extern void _ZN10S2338C8_nt3v29Ev();
extern void _ZN10S2338C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2338C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2338C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2338C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI10S2338C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2338C2_ntD1Ev,_ZThn28_N10S2338C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2338C2_ntD0Ev,_ZThn28_N10S2338C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S2338C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2338C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2338C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI10S2338C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2338C2_ntD1Ev,_ZThn44_N10S2338C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2338C2_ntD0Ev,_ZThn44_N10S2338C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S2338C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2338C2_nt[];
VTBL_ENTRY *P__ZTI10S2338C2_nt = _ZTI10S2338C2_nt; 
extern  VTBL_ENTRY _ZTV10S2338C2_nt[];
Class_Descriptor cd_S2338C2_nt = {  "S2338C2_nt", // class name
  bases_S2338C2_nt, 6,
  &(vtc_S2338C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI10S2338C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2338C2_nt),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C19_nt  {
  void *s2338c19f0;
  virtual  ~S2338C19_nt(); // _ZN11S2338C19_ntD1Ev
  virtual void  v37(); // _ZN11S2338C19_nt3v37Ev
  virtual void  v38(); // _ZN11S2338C19_nt3v38Ev
  virtual void  v39(); // _ZN11S2338C19_nt3v39Ev
  virtual void  v40(); // _ZN11S2338C19_nt3v40Ev
  virtual void  v41(); // _ZN11S2338C19_nt3v41Ev
  S2338C19_nt(); // tgen
};
//SIG(-1 S2338C19_nt) C1{ vd v1 v2 v3 v4 v5 Fp}


 S2338C19_nt ::~S2338C19_nt(){ note_dtor("S2338C19_nt", this);}
void  S2338C19_nt ::v37(){vfunc_called(this, "_ZN11S2338C19_nt3v37Ev");}
void  S2338C19_nt ::v38(){vfunc_called(this, "_ZN11S2338C19_nt3v38Ev");}
void  S2338C19_nt ::v39(){vfunc_called(this, "_ZN11S2338C19_nt3v39Ev");}
void  S2338C19_nt ::v40(){vfunc_called(this, "_ZN11S2338C19_nt3v40Ev");}
void  S2338C19_nt ::v41(){vfunc_called(this, "_ZN11S2338C19_nt3v41Ev");}
S2338C19_nt ::S2338C19_nt(){ note_ctor("S2338C19_nt", this);} // tgen

//skip512 S2338C19_nt

#else // __cplusplus

extern void _ZN11S2338C19_ntC1Ev();
extern void _ZN11S2338C19_ntD1Ev();
Name_Map name_map_S2338C19_nt[] = {
  NSPAIR(_ZN11S2338C19_ntC1Ev),
  NSPAIR(_ZN11S2338C19_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2338C19_nt[];
extern void _ZN11S2338C19_ntD1Ev();
extern void _ZN11S2338C19_ntD0Ev();
extern void _ZN11S2338C19_nt3v37Ev();
extern void _ZN11S2338C19_nt3v38Ev();
extern void _ZN11S2338C19_nt3v39Ev();
extern void _ZN11S2338C19_nt3v40Ev();
extern void _ZN11S2338C19_nt3v41Ev();
static  VTBL_ENTRY vtc_S2338C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2338C19_nt[0]),
  (VTBL_ENTRY)&_ZN11S2338C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2338C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2338C19_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S2338C19_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S2338C19_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S2338C19_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S2338C19_nt3v41Ev,
};
extern VTBL_ENTRY _ZTI11S2338C19_nt[];
VTBL_ENTRY *P__ZTI11S2338C19_nt = _ZTI11S2338C19_nt; 
extern  VTBL_ENTRY _ZTV11S2338C19_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C22_nt  {
  ::S2382C26 s2338c22f0;
  void  mf2338c22(); // _ZN11S2338C22_nt9mf2338c22Ev
};
//SIG(-1 S2338C22_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC3}}


void  S2338C22_nt ::mf2338c22(){}

//skip512 S2338C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C21_nt  {
  ::S2338C22_nt s2338c21f0;
  void *s2338c21f1[3];
  char s2338c21f2;
  virtual  ~S2338C21_nt(); // _ZN11S2338C21_ntD1Ev
  virtual void  v43(); // _ZN11S2338C21_nt3v43Ev
  S2338C21_nt(); // tgen
};
//SIG(-1 S2338C21_nt) C1{ vd v1 FC2{ m FC3{ m Fp Fi FC4{ m} FC4}} Fp[3] Fc}


 S2338C21_nt ::~S2338C21_nt(){ note_dtor("S2338C21_nt", this);}
void  S2338C21_nt ::v43(){vfunc_called(this, "_ZN11S2338C21_nt3v43Ev");}
S2338C21_nt ::S2338C21_nt(){ note_ctor("S2338C21_nt", this);} // tgen

//skip512 S2338C21_nt

#else // __cplusplus

extern void _ZN11S2338C21_ntC1Ev();
extern void _ZN11S2338C21_ntD1Ev();
Name_Map name_map_S2338C21_nt[] = {
  NSPAIR(_ZN11S2338C21_ntC1Ev),
  NSPAIR(_ZN11S2338C21_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2338C21_nt[];
extern void _ZN11S2338C21_ntD1Ev();
extern void _ZN11S2338C21_ntD0Ev();
extern void _ZN11S2338C21_nt3v43Ev();
static  VTBL_ENTRY vtc_S2338C21_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2338C21_nt[0]),
  (VTBL_ENTRY)&_ZN11S2338C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2338C21_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2338C21_nt3v43Ev,
};
extern VTBL_ENTRY _ZTI11S2338C21_nt[];
VTBL_ENTRY *P__ZTI11S2338C21_nt = _ZTI11S2338C21_nt; 
extern  VTBL_ENTRY _ZTV11S2338C21_nt[];
Class_Descriptor cd_S2338C21_nt = {  "S2338C21_nt", // class name
  0,0,//no base classes
  &(vtc_S2338C21_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI11S2338C21_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2338C21_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C20_nt  : S2338C21_nt {
  void *s2338c20f0;
  virtual void  v42(); // _ZN11S2338C20_nt3v42Ev
  ~S2338C20_nt(); // tgen
  S2338C20_nt(); // tgen
};
//SIG(-1 S2338C20_nt) C1{ BC2{ vd v2 FC3{ m FC4{ m Fp Fi FC5{ m} FC5}} Fp[3] Fc} v1 Fp}


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

//skip512 S2338C20_nt

#else // __cplusplus

extern void _ZN11S2338C20_ntC1Ev();
extern void _ZN11S2338C20_ntD1Ev();
Name_Map name_map_S2338C20_nt[] = {
  NSPAIR(_ZN11S2338C20_ntC1Ev),
  NSPAIR(_ZN11S2338C20_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2338C21_nt;
extern VTBL_ENTRY _ZTI11S2338C21_nt[];
extern  VTBL_ENTRY _ZTV11S2338C21_nt[];
static Base_Class bases_S2338C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2338C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S2338C20_nt[];
extern void _ZN11S2338C20_ntD1Ev();
extern void _ZN11S2338C20_ntD0Ev();
extern void _ZN11S2338C21_nt3v43Ev();
extern void _ZN11S2338C20_nt3v42Ev();
static  VTBL_ENTRY vtc_S2338C20_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2338C20_nt[0]),
  (VTBL_ENTRY)&_ZN11S2338C20_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2338C20_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2338C21_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S2338C20_nt3v42Ev,
};
extern VTBL_ENTRY _ZTI11S2338C20_nt[];
VTBL_ENTRY *P__ZTI11S2338C20_nt = _ZTI11S2338C20_nt; 
extern  VTBL_ENTRY _ZTV11S2338C20_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2338C1  : S2338C2_nt {
  ::S2338C19_nt s2338c1f0;
  ::S2338C20_nt s2338c1f1;
  int s2338c1f2;
  ::S2382C29_nt s2338c1f3;
  void *s2338c1f4;
  virtual  ~S2338C1(); // _ZN7S2338C1D1Ev
  virtual void  v1(); // _ZN7S2338C12v1Ev
  virtual void  v2(); // _ZN7S2338C12v2Ev
  virtual void  v3(); // _ZN7S2338C12v3Ev
  virtual void  v4(); // _ZN7S2338C12v4Ev
  S2338C1(); // tgen
};
//SIG(1 S2338C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FC14{ Fl[4]}} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC15{ BC16{ m Fp Fi FC17{ m} FC17}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 Fp} FC19{ BC20{ vd v43 FC21{ m FC16} Fp[3] Fc} v42 Fp} Fi FC22{ m Fp Fi[2] FC12} Fp}


 S2338C1 ::~S2338C1(){ note_dtor("S2338C1", this);}
void  S2338C1 ::v1(){vfunc_called(this, "_ZN7S2338C12v1Ev");}
void  S2338C1 ::v2(){vfunc_called(this, "_ZN7S2338C12v2Ev");}
void  S2338C1 ::v3(){vfunc_called(this, "_ZN7S2338C12v3Ev");}
void  S2338C1 ::v4(){vfunc_called(this, "_ZN7S2338C12v4Ev");}
S2338C1 ::S2338C1(){ note_ctor("S2338C1", this);} // tgen

static void Test_S2338C1()
{
  extern Class_Descriptor cd_S2338C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,46)];
    init_test(&cd_S2338C1, buf);
    S2338C1 *dp, &lv = *(dp=new (buf) S2338C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S2338C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2338C1)");
    check_base_class_offset(lv, (S2338C4_nt*)(S2338C3_nt*)(S2338C2_nt*), 0, "S2338C1");
    check_base_class_offset(lv, (S2338C7*)(S2338C3_nt*)(S2338C2_nt*), ABISELECT(40,28), "S2338C1");
    check_base_class_offset(lv, (S2338C3_nt*)(S2338C2_nt*), 0, "S2338C1");
    check_base_class_offset(lv, (S2338C10*)(S2338C9_nt*)(S2338C8_nt*)(S2338C2_nt*), ABISELECT(64,44), "S2338C1");
    check_base_class_offset(lv, (S2338C9_nt*)(S2338C8_nt*)(S2338C2_nt*), ABISELECT(64,44), "S2338C1");
    check_base_class_offset(lv, (S2338C8_nt*)(S2338C2_nt*), ABISELECT(64,44), "S2338C1");
    check_base_class_offset(lv, (S2338C2_nt*), 0, "S2338C1");
    check_field_offset(lv, s2338c1f0, ABISELECT(168,112), "S2338C1.s2338c1f0");
    check_field_offset(lv, s2338c1f1, ABISELECT(184,120), "S2338C1.s2338c1f1");
    check_field_offset(lv, s2338c1f2, ABISELECT(248,156), "S2338C1.s2338c1f2");
    check_field_offset(lv, s2338c1f3, ABISELECT(256,160), "S2338C1.s2338c1f3");
    check_field_offset(lv, s2338c1f4, ABISELECT(280,176), "S2338C1.s2338c1f4");
    test_class_info(&lv, &cd_S2338C1);
    dp->~S2338C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2338C1(Test_S2338C1, "S2338C1", ABISELECT(288,180));

#else // __cplusplus

extern void _ZN7S2338C1C1Ev();
extern void _ZN7S2338C1D1Ev();
Name_Map name_map_S2338C1[] = {
  NSPAIR(_ZN7S2338C1C1Ev),
  NSPAIR(_ZN7S2338C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2338C4_nt;
extern VTBL_ENTRY _ZTI10S2338C4_nt[];
extern  VTBL_ENTRY _ZTV10S2338C4_nt[];
extern Class_Descriptor cd_S2338C7;
extern VTBL_ENTRY _ZTI7S2338C7[];
extern  VTBL_ENTRY _ZTV7S2338C7[];
extern Class_Descriptor cd_S2338C3_nt;
extern VTBL_ENTRY _ZTI10S2338C3_nt[];
extern  VTBL_ENTRY _ZTV10S2338C3_nt[];
extern Class_Descriptor cd_S2338C10;
extern VTBL_ENTRY _ZTI8S2338C10[];
extern  VTBL_ENTRY _ZTV8S2338C10[];
extern Class_Descriptor cd_S2338C9_nt;
extern VTBL_ENTRY _ZTI10S2338C9_nt[];
extern  VTBL_ENTRY _ZTV10S2338C9_nt[];
extern Class_Descriptor cd_S2338C8_nt;
extern VTBL_ENTRY _ZTI10S2338C8_nt[];
extern  VTBL_ENTRY _ZTV10S2338C8_nt[];
extern Class_Descriptor cd_S2338C2_nt;
extern VTBL_ENTRY _ZTI10S2338C2_nt[];
extern  VTBL_ENTRY _ZTV10S2338C2_nt[];
static Base_Class bases_S2338C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2338C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2338C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2338C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2338C10,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2338C9_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2338C8_nt,    ABISELECT(64,44), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2338C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2338C1[];
extern void _ZN7S2338C1D1Ev();
extern void _ZN7S2338C1D0Ev();
extern void _ZN10S2338C4_nt2v5Ev();
extern void _ZN10S2338C4_nt2v6Ev();
extern void _ZN10S2338C4_nt2v7Ev();
extern void _ZN10S2338C3_nt3v11Ev();
extern void _ZN10S2338C3_nt3v12Ev();
extern void _ZN10S2338C3_nt3v13Ev();
extern void _ZN10S2338C3_nt3v14Ev();
extern void _ZN10S2338C3_nt3v15Ev();
extern void _ZN10S2338C3_nt3v16Ev();
extern void _ZN10S2338C3_nt3v17Ev();
extern void _ZN10S2338C3_nt3v18Ev();
extern void _ZN10S2338C3_nt3v19Ev();
extern void _ZN10S2338C3_nt3v20Ev();
extern void _ZN10S2338C2_nt3v31Ev();
extern void _ZN10S2338C2_nt3v32Ev();
extern void _ZN10S2338C2_nt3v33Ev();
extern void _ZN10S2338C2_nt3v34Ev();
extern void _ZN10S2338C2_nt3v35Ev();
extern void _ZN10S2338C2_nt3v36Ev();
extern void _ZN7S2338C12v1Ev();
extern void _ZN7S2338C12v2Ev();
extern void _ZN7S2338C12v3Ev();
extern void _ZN7S2338C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2338C1D1Ev,_ZThn28_N7S2338C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2338C1D0Ev,_ZThn28_N7S2338C1D0Ev)();
extern void _ZN7S2338C72v8Ev();
extern void _ZN7S2338C72v9Ev();
extern void _ZN7S2338C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2338C1D1Ev,_ZThn44_N7S2338C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2338C1D0Ev,_ZThn44_N7S2338C1D0Ev)();
extern void _ZN8S2338C103v21Ev();
extern void _ZN8S2338C103v22Ev();
extern void _ZN8S2338C103v23Ev();
extern void _ZN10S2338C9_nt3v24Ev();
extern void _ZN10S2338C9_nt3v25Ev();
extern void _ZN10S2338C9_nt3v26Ev();
extern void _ZN10S2338C8_nt3v27Ev();
extern void _ZN10S2338C8_nt3v28Ev();
extern void _ZN10S2338C8_nt3v29Ev();
extern void _ZN10S2338C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2338C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2338C1[0]),
  (VTBL_ENTRY)&_ZN7S2338C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2338C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2338C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2338C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2338C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN7S2338C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2338C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2338C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2338C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2338C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2338C1D1Ev,_ZThn28_N7S2338C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2338C1D0Ev,_ZThn28_N7S2338C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2338C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2338C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2338C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2338C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2338C1D1Ev,_ZThn44_N7S2338C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2338C1D0Ev,_ZThn44_N7S2338C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2338C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2338C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2338C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2338C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI7S2338C1[];
extern  VTBL_ENTRY _ZTV7S2338C1[];
Class_Descriptor cd_S2338C1 = {  "S2338C1", // class name
  bases_S2338C1, 7,
  &(vtc_S2338C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI7S2338C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2338C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3170C3  {
  int s3170c3f0;
  __tsi64 s3170c3f1;
  void *s3170c3f2[4];
  int s3170c3f3[2];
  void *s3170c3f4;
  ::S100C8_nt s3170c3f5;
  void *s3170c3f6[2];
  virtual  ~S3170C3(); // _ZN7S3170C3D1Ev
  virtual void  v3(); // _ZN7S3170C32v3Ev
  virtual void  v4(); // _ZN7S3170C32v4Ev
  virtual void  v5(); // _ZN7S3170C32v5Ev
  virtual void  v6(); // _ZN7S3170C32v6Ev
  virtual void  v7(); // _ZN7S3170C32v7Ev
  virtual void  v8(); // _ZN7S3170C32v8Ev
  virtual void  v9(); // _ZN7S3170C32v9Ev
  virtual void  v10(); // _ZN7S3170C33v10Ev
  virtual void  v11(); // _ZN7S3170C33v11Ev
  virtual void  v12(); // _ZN7S3170C33v12Ev
  virtual void  v13(); // _ZN7S3170C33v13Ev
  virtual void  v14(); // _ZN7S3170C33v14Ev
  virtual void  v15(); // _ZN7S3170C33v15Ev
  virtual void  v16(); // _ZN7S3170C33v16Ev
  virtual void  v17(); // _ZN7S3170C33v17Ev
  virtual void  v18(); // _ZN7S3170C33v18Ev
  virtual void  v19(); // _ZN7S3170C33v19Ev
  virtual void  v20(); // _ZN7S3170C33v20Ev
  virtual void  v21(); // _ZN7S3170C33v21Ev
  virtual void  v22(); // _ZN7S3170C33v22Ev
  virtual void  v23(); // _ZN7S3170C33v23Ev
  virtual void  v24(); // _ZN7S3170C33v24Ev
  virtual void  v25(); // _ZN7S3170C33v25Ev
  virtual void  v26(); // _ZN7S3170C33v26Ev
  virtual void  v27(); // _ZN7S3170C33v27Ev
  virtual void  v28(); // _ZN7S3170C33v28Ev
  virtual void  v29(); // _ZN7S3170C33v29Ev
  virtual void  v30(); // _ZN7S3170C33v30Ev
  virtual void  v31(); // _ZN7S3170C33v31Ev
  virtual void  v32(); // _ZN7S3170C33v32Ev
  virtual void  v33(); // _ZN7S3170C33v33Ev
  virtual void  v34(); // _ZN7S3170C33v34Ev
  virtual void  v35(); // _ZN7S3170C33v35Ev
  virtual void  v36(); // _ZN7S3170C33v36Ev
  virtual void  v37(); // _ZN7S3170C33v37Ev
  virtual void  v38(); // _ZN7S3170C33v38Ev
  virtual void  v39(); // _ZN7S3170C33v39Ev
  virtual void  v40(); // _ZN7S3170C33v40Ev
  virtual void  v41(); // _ZN7S3170C33v41Ev
  virtual void  v42(); // _ZN7S3170C33v42Ev
  virtual void  v43(); // _ZN7S3170C33v43Ev
  virtual void  v44(); // _ZN7S3170C33v44Ev
  virtual void  v45(); // _ZN7S3170C33v45Ev
  virtual void  v46(); // _ZN7S3170C33v46Ev
  virtual void  v47(); // _ZN7S3170C33v47Ev
  virtual void  v48(); // _ZN7S3170C33v48Ev
  virtual void  v49(); // _ZN7S3170C33v49Ev
  virtual void  v50(); // _ZN7S3170C33v50Ev
  virtual void  v51(); // _ZN7S3170C33v51Ev
  virtual void  v52(); // _ZN7S3170C33v52Ev
  virtual void  v53(); // _ZN7S3170C33v53Ev
  virtual void  v54(); // _ZN7S3170C33v54Ev
  virtual void  v55(); // _ZN7S3170C33v55Ev
  virtual void  v56(); // _ZN7S3170C33v56Ev
  virtual void  v57(); // _ZN7S3170C33v57Ev
  virtual void  v58(); // _ZN7S3170C33v58Ev
  virtual void  v59(); // _ZN7S3170C33v59Ev
  virtual void  v60(); // _ZN7S3170C33v60Ev
  virtual void  v61(); // _ZN7S3170C33v61Ev
  virtual void  v62(); // _ZN7S3170C33v62Ev
  virtual void  v63(); // _ZN7S3170C33v63Ev
  virtual void  v64(); // _ZN7S3170C33v64Ev
  virtual void  v65(); // _ZN7S3170C33v65Ev
  virtual void  v66(); // _ZN7S3170C33v66Ev
  S3170C3(); // tgen
};
//SIG(-1 S3170C3) 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]}


 S3170C3 ::~S3170C3(){ note_dtor("S3170C3", this);}
void  S3170C3 ::v3(){vfunc_called(this, "_ZN7S3170C32v3Ev");}
void  S3170C3 ::v4(){vfunc_called(this, "_ZN7S3170C32v4Ev");}
void  S3170C3 ::v5(){vfunc_called(this, "_ZN7S3170C32v5Ev");}
void  S3170C3 ::v6(){vfunc_called(this, "_ZN7S3170C32v6Ev");}
void  S3170C3 ::v7(){vfunc_called(this, "_ZN7S3170C32v7Ev");}
void  S3170C3 ::v8(){vfunc_called(this, "_ZN7S3170C32v8Ev");}
void  S3170C3 ::v9(){vfunc_called(this, "_ZN7S3170C32v9Ev");}
void  S3170C3 ::v10(){vfunc_called(this, "_ZN7S3170C33v10Ev");}
void  S3170C3 ::v11(){vfunc_called(this, "_ZN7S3170C33v11Ev");}
void  S3170C3 ::v12(){vfunc_called(this, "_ZN7S3170C33v12Ev");}
void  S3170C3 ::v13(){vfunc_called(this, "_ZN7S3170C33v13Ev");}
void  S3170C3 ::v14(){vfunc_called(this, "_ZN7S3170C33v14Ev");}
void  S3170C3 ::v15(){vfunc_called(this, "_ZN7S3170C33v15Ev");}
void  S3170C3 ::v16(){vfunc_called(this, "_ZN7S3170C33v16Ev");}
void  S3170C3 ::v17(){vfunc_called(this, "_ZN7S3170C33v17Ev");}
void  S3170C3 ::v18(){vfunc_called(this, "_ZN7S3170C33v18Ev");}
void  S3170C3 ::v19(){vfunc_called(this, "_ZN7S3170C33v19Ev");}
void  S3170C3 ::v20(){vfunc_called(this, "_ZN7S3170C33v20Ev");}
void  S3170C3 ::v21(){vfunc_called(this, "_ZN7S3170C33v21Ev");}
void  S3170C3 ::v22(){vfunc_called(this, "_ZN7S3170C33v22Ev");}
void  S3170C3 ::v23(){vfunc_called(this, "_ZN7S3170C33v23Ev");}
void  S3170C3 ::v24(){vfunc_called(this, "_ZN7S3170C33v24Ev");}
void  S3170C3 ::v25(){vfunc_called(this, "_ZN7S3170C33v25Ev");}
void  S3170C3 ::v26(){vfunc_called(this, "_ZN7S3170C33v26Ev");}
void  S3170C3 ::v27(){vfunc_called(this, "_ZN7S3170C33v27Ev");}
void  S3170C3 ::v28(){vfunc_called(this, "_ZN7S3170C33v28Ev");}
void  S3170C3 ::v29(){vfunc_called(this, "_ZN7S3170C33v29Ev");}
void  S3170C3 ::v30(){vfunc_called(this, "_ZN7S3170C33v30Ev");}
void  S3170C3 ::v31(){vfunc_called(this, "_ZN7S3170C33v31Ev");}
void  S3170C3 ::v32(){vfunc_called(this, "_ZN7S3170C33v32Ev");}
void  S3170C3 ::v33(){vfunc_called(this, "_ZN7S3170C33v33Ev");}
void  S3170C3 ::v34(){vfunc_called(this, "_ZN7S3170C33v34Ev");}
void  S3170C3 ::v35(){vfunc_called(this, "_ZN7S3170C33v35Ev");}
void  S3170C3 ::v36(){vfunc_called(this, "_ZN7S3170C33v36Ev");}
void  S3170C3 ::v37(){vfunc_called(this, "_ZN7S3170C33v37Ev");}
void  S3170C3 ::v38(){vfunc_called(this, "_ZN7S3170C33v38Ev");}
void  S3170C3 ::v39(){vfunc_called(this, "_ZN7S3170C33v39Ev");}
void  S3170C3 ::v40(){vfunc_called(this, "_ZN7S3170C33v40Ev");}
void  S3170C3 ::v41(){vfunc_called(this, "_ZN7S3170C33v41Ev");}
void  S3170C3 ::v42(){vfunc_called(this, "_ZN7S3170C33v42Ev");}
void  S3170C3 ::v43(){vfunc_called(this, "_ZN7S3170C33v43Ev");}
void  S3170C3 ::v44(){vfunc_called(this, "_ZN7S3170C33v44Ev");}
void  S3170C3 ::v45(){vfunc_called(this, "_ZN7S3170C33v45Ev");}
void  S3170C3 ::v46(){vfunc_called(this, "_ZN7S3170C33v46Ev");}
void  S3170C3 ::v47(){vfunc_called(this, "_ZN7S3170C33v47Ev");}
void  S3170C3 ::v48(){vfunc_called(this, "_ZN7S3170C33v48Ev");}
void  S3170C3 ::v49(){vfunc_called(this, "_ZN7S3170C33v49Ev");}
void  S3170C3 ::v50(){vfunc_called(this, "_ZN7S3170C33v50Ev");}
void  S3170C3 ::v51(){vfunc_called(this, "_ZN7S3170C33v51Ev");}
void  S3170C3 ::v52(){vfunc_called(this, "_ZN7S3170C33v52Ev");}
void  S3170C3 ::v53(){vfunc_called(this, "_ZN7S3170C33v53Ev");}
void  S3170C3 ::v54(){vfunc_called(this, "_ZN7S3170C33v54Ev");}
void  S3170C3 ::v55(){vfunc_called(this, "_ZN7S3170C33v55Ev");}
void  S3170C3 ::v56(){vfunc_called(this, "_ZN7S3170C33v56Ev");}
void  S3170C3 ::v57(){vfunc_called(this, "_ZN7S3170C33v57Ev");}
void  S3170C3 ::v58(){vfunc_called(this, "_ZN7S3170C33v58Ev");}
void  S3170C3 ::v59(){vfunc_called(this, "_ZN7S3170C33v59Ev");}
void  S3170C3 ::v60(){vfunc_called(this, "_ZN7S3170C33v60Ev");}
void  S3170C3 ::v61(){vfunc_called(this, "_ZN7S3170C33v61Ev");}
void  S3170C3 ::v62(){vfunc_called(this, "_ZN7S3170C33v62Ev");}
void  S3170C3 ::v63(){vfunc_called(this, "_ZN7S3170C33v63Ev");}
void  S3170C3 ::v64(){vfunc_called(this, "_ZN7S3170C33v64Ev");}
void  S3170C3 ::v65(){vfunc_called(this, "_ZN7S3170C33v65Ev");}
void  S3170C3 ::v66(){vfunc_called(this, "_ZN7S3170C33v66Ev");}
S3170C3 ::S3170C3(){ note_ctor("S3170C3", this);} // tgen

static void Test_S3170C3()
{
  extern Class_Descriptor cd_S3170C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3170C3, buf);
    S3170C3 *dp, &lv = *(dp=new (buf) S3170C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3170C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3170C3)");
    check_field_offset(lv, s3170c3f0, ABISELECT(8,4), "S3170C3.s3170c3f0");
    check_field_offset(lv, s3170c3f1, ABISELECT(16,8), "S3170C3.s3170c3f1");
    check_field_offset(lv, s3170c3f2, ABISELECT(24,16), "S3170C3.s3170c3f2");
    check_field_offset(lv, s3170c3f3, ABISELECT(56,32), "S3170C3.s3170c3f3");
    check_field_offset(lv, s3170c3f4, ABISELECT(64,40), "S3170C3.s3170c3f4");
    check_field_offset(lv, s3170c3f5, ABISELECT(72,44), "S3170C3.s3170c3f5");
    check_field_offset(lv, s3170c3f6, ABISELECT(80,52), "S3170C3.s3170c3f6");
    test_class_info(&lv, &cd_S3170C3);
    dp->~S3170C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3170C3(Test_S3170C3, "S3170C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3170C3C1Ev();
extern void _ZN7S3170C3D1Ev();
Name_Map name_map_S3170C3[] = {
  NSPAIR(_ZN7S3170C3C1Ev),
  NSPAIR(_ZN7S3170C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3170C3[];
extern void _ZN7S3170C3D1Ev();
extern void _ZN7S3170C3D0Ev();
extern void _ZN7S3170C32v3Ev();
extern void _ZN7S3170C32v4Ev();
extern void _ZN7S3170C32v5Ev();
extern void _ZN7S3170C32v6Ev();
extern void _ZN7S3170C32v7Ev();
extern void _ZN7S3170C32v8Ev();
extern void _ZN7S3170C32v9Ev();
extern void _ZN7S3170C33v10Ev();
extern void _ZN7S3170C33v11Ev();
extern void _ZN7S3170C33v12Ev();
extern void _ZN7S3170C33v13Ev();
extern void _ZN7S3170C33v14Ev();
extern void _ZN7S3170C33v15Ev();
extern void _ZN7S3170C33v16Ev();
extern void _ZN7S3170C33v17Ev();
extern void _ZN7S3170C33v18Ev();
extern void _ZN7S3170C33v19Ev();
extern void _ZN7S3170C33v20Ev();
extern void _ZN7S3170C33v21Ev();
extern void _ZN7S3170C33v22Ev();
extern void _ZN7S3170C33v23Ev();
extern void _ZN7S3170C33v24Ev();
extern void _ZN7S3170C33v25Ev();
extern void _ZN7S3170C33v26Ev();
extern void _ZN7S3170C33v27Ev();
extern void _ZN7S3170C33v28Ev();
extern void _ZN7S3170C33v29Ev();
extern void _ZN7S3170C33v30Ev();
extern void _ZN7S3170C33v31Ev();
extern void _ZN7S3170C33v32Ev();
extern void _ZN7S3170C33v33Ev();
extern void _ZN7S3170C33v34Ev();
extern void _ZN7S3170C33v35Ev();
extern void _ZN7S3170C33v36Ev();
extern void _ZN7S3170C33v37Ev();
extern void _ZN7S3170C33v38Ev();
extern void _ZN7S3170C33v39Ev();
extern void _ZN7S3170C33v40Ev();
extern void _ZN7S3170C33v41Ev();
extern void _ZN7S3170C33v42Ev();
extern void _ZN7S3170C33v43Ev();
extern void _ZN7S3170C33v44Ev();
extern void _ZN7S3170C33v45Ev();
extern void _ZN7S3170C33v46Ev();
extern void _ZN7S3170C33v47Ev();
extern void _ZN7S3170C33v48Ev();
extern void _ZN7S3170C33v49Ev();
extern void _ZN7S3170C33v50Ev();
extern void _ZN7S3170C33v51Ev();
extern void _ZN7S3170C33v52Ev();
extern void _ZN7S3170C33v53Ev();
extern void _ZN7S3170C33v54Ev();
extern void _ZN7S3170C33v55Ev();
extern void _ZN7S3170C33v56Ev();
extern void _ZN7S3170C33v57Ev();
extern void _ZN7S3170C33v58Ev();
extern void _ZN7S3170C33v59Ev();
extern void _ZN7S3170C33v60Ev();
extern void _ZN7S3170C33v61Ev();
extern void _ZN7S3170C33v62Ev();
extern void _ZN7S3170C33v63Ev();
extern void _ZN7S3170C33v64Ev();
extern void _ZN7S3170C33v65Ev();
extern void _ZN7S3170C33v66Ev();
static  VTBL_ENTRY vtc_S3170C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3170C3[0]),
  (VTBL_ENTRY)&_ZN7S3170C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3170C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v66Ev,
};
extern VTBL_ENTRY _ZTI7S3170C3[];
extern  VTBL_ENTRY _ZTV7S3170C3[];
Class_Descriptor cd_S3170C3 = {  "S3170C3", // class name
  0,0,//no base classes
  &(vtc_S3170C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3170C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3170C3),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  S3170C2  : S3170C3 {
  ::S100C39_nt s3170c2f0;
  ::S100C39_nt s3170c2f1;
  ::S100C39_nt s3170c2f2;
  unsigned int s3170c2f3:1;
  unsigned int s3170c2f4:1;
  unsigned int s3170c2f5:1;
  unsigned int s3170c2f6:1;
  unsigned int s3170c2f7:1;
  unsigned int s3170c2f8:1;
  unsigned int s3170c2f9:1;
  unsigned int s3170c2f10:1;
  unsigned int s3170c2f11:1;
  unsigned int s3170c2f12:1;
  unsigned int s3170c2f13:1;
  unsigned int s3170c2f14:1;
  unsigned int s3170c2f15:1;
  int s3170c2f16[8];
  void *s3170c2f17[2];
  virtual  ~S3170C2(); // _ZN7S3170C2D1Ev
  virtual void  v67(); // _ZN7S3170C23v67Ev
  virtual void  v68(); // _ZN7S3170C23v68Ev
  S3170C2(); // tgen
};
//SIG(-1 S3170C2) 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 FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 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[8] Fp[2]}


 S3170C2 ::~S3170C2(){ note_dtor("S3170C2", this);}
void  S3170C2 ::v67(){vfunc_called(this, "_ZN7S3170C23v67Ev");}
void  S3170C2 ::v68(){vfunc_called(this, "_ZN7S3170C23v68Ev");}
S3170C2 ::S3170C2(){ note_ctor("S3170C2", this);} // tgen

static void Test_S3170C2()
{
  extern Class_Descriptor cd_S3170C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S3170C2, buf);
    S3170C2 *dp, &lv = *(dp=new (buf) S3170C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S3170C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3170C2)");
    check_base_class_offset(lv, (S3170C3*), 0, "S3170C2");
    check_field_offset(lv, s3170c2f0, ABISELECT(96,60), "S3170C2.s3170c2f0");
    check_field_offset(lv, s3170c2f1, ABISELECT(112,72), "S3170C2.s3170c2f1");
    check_field_offset(lv, s3170c2f2, ABISELECT(128,84), "S3170C2.s3170c2f2");
    set_bf_and_test(lv, s3170c2f3, ABISELECT(144,96), 0, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f4, ABISELECT(144,96), 1, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f5, ABISELECT(144,96), 2, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f6, ABISELECT(144,96), 3, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f7, ABISELECT(144,96), 4, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f8, ABISELECT(144,96), 5, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f9, ABISELECT(144,96), 6, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f10, ABISELECT(144,96), 7, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f11, ABISELECT(145,97), 0, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f12, ABISELECT(145,97), 1, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f13, ABISELECT(145,97), 2, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f14, ABISELECT(145,97), 3, 1, 1, "S3170C2");
    set_bf_and_test(lv, s3170c2f15, ABISELECT(145,97), 4, 1, 1, "S3170C2");
    check_field_offset(lv, s3170c2f16, ABISELECT(148,100), "S3170C2.s3170c2f16");
    check_field_offset(lv, s3170c2f17, ABISELECT(184,132), "S3170C2.s3170c2f17");
    test_class_info(&lv, &cd_S3170C2);
    dp->~S3170C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3170C2(Test_S3170C2, "S3170C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S3170C2C1Ev();
extern void _ZN7S3170C2D1Ev();
Name_Map name_map_S3170C2[] = {
  NSPAIR(_ZN7S3170C2C1Ev),
  NSPAIR(_ZN7S3170C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3170C3;
extern VTBL_ENTRY _ZTI7S3170C3[];
extern  VTBL_ENTRY _ZTV7S3170C3[];
static Base_Class bases_S3170C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3170C2[];
extern void _ZN7S3170C2D1Ev();
extern void _ZN7S3170C2D0Ev();
extern void _ZN7S3170C32v3Ev();
extern void _ZN7S3170C32v4Ev();
extern void _ZN7S3170C32v5Ev();
extern void _ZN7S3170C32v6Ev();
extern void _ZN7S3170C32v7Ev();
extern void _ZN7S3170C32v8Ev();
extern void _ZN7S3170C32v9Ev();
extern void _ZN7S3170C33v10Ev();
extern void _ZN7S3170C33v11Ev();
extern void _ZN7S3170C33v12Ev();
extern void _ZN7S3170C33v13Ev();
extern void _ZN7S3170C33v14Ev();
extern void _ZN7S3170C33v15Ev();
extern void _ZN7S3170C33v16Ev();
extern void _ZN7S3170C33v17Ev();
extern void _ZN7S3170C33v18Ev();
extern void _ZN7S3170C33v19Ev();
extern void _ZN7S3170C33v20Ev();
extern void _ZN7S3170C33v21Ev();
extern void _ZN7S3170C33v22Ev();
extern void _ZN7S3170C33v23Ev();
extern void _ZN7S3170C33v24Ev();
extern void _ZN7S3170C33v25Ev();
extern void _ZN7S3170C33v26Ev();
extern void _ZN7S3170C33v27Ev();
extern void _ZN7S3170C33v28Ev();
extern void _ZN7S3170C33v29Ev();
extern void _ZN7S3170C33v30Ev();
extern void _ZN7S3170C33v31Ev();
extern void _ZN7S3170C33v32Ev();
extern void _ZN7S3170C33v33Ev();
extern void _ZN7S3170C33v34Ev();
extern void _ZN7S3170C33v35Ev();
extern void _ZN7S3170C33v36Ev();
extern void _ZN7S3170C33v37Ev();
extern void _ZN7S3170C33v38Ev();
extern void _ZN7S3170C33v39Ev();
extern void _ZN7S3170C33v40Ev();
extern void _ZN7S3170C33v41Ev();
extern void _ZN7S3170C33v42Ev();
extern void _ZN7S3170C33v43Ev();
extern void _ZN7S3170C33v44Ev();
extern void _ZN7S3170C33v45Ev();
extern void _ZN7S3170C33v46Ev();
extern void _ZN7S3170C33v47Ev();
extern void _ZN7S3170C33v48Ev();
extern void _ZN7S3170C33v49Ev();
extern void _ZN7S3170C33v50Ev();
extern void _ZN7S3170C33v51Ev();
extern void _ZN7S3170C33v52Ev();
extern void _ZN7S3170C33v53Ev();
extern void _ZN7S3170C33v54Ev();
extern void _ZN7S3170C33v55Ev();
extern void _ZN7S3170C33v56Ev();
extern void _ZN7S3170C33v57Ev();
extern void _ZN7S3170C33v58Ev();
extern void _ZN7S3170C33v59Ev();
extern void _ZN7S3170C33v60Ev();
extern void _ZN7S3170C33v61Ev();
extern void _ZN7S3170C33v62Ev();
extern void _ZN7S3170C33v63Ev();
extern void _ZN7S3170C33v64Ev();
extern void _ZN7S3170C33v65Ev();
extern void _ZN7S3170C33v66Ev();
extern void _ZN7S3170C23v67Ev();
extern void _ZN7S3170C23v68Ev();
static  VTBL_ENTRY vtc_S3170C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3170C2[0]),
  (VTBL_ENTRY)&_ZN7S3170C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3170C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3170C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3170C23v68Ev,
};
extern VTBL_ENTRY _ZTI7S3170C2[];
extern  VTBL_ENTRY _ZTV7S3170C2[];
Class_Descriptor cd_S3170C2 = {  "S3170C2", // class name
  bases_S3170C2, 1,
  &(vtc_S3170C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S3170C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3170C2),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  S3170C1  : S3170C2 {
  virtual  ~S3170C1(); // _ZN7S3170C1D1Ev
  virtual void  v1(); // _ZN7S3170C12v1Ev
  virtual void  v2(); // _ZN7S3170C12v2Ev
  S3170C1(); // tgen
};
//SIG(1 S3170C1) 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 FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 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[8] Fp[2]} vd v1 v2}


 S3170C1 ::~S3170C1(){ note_dtor("S3170C1", this);}
void  S3170C1 ::v1(){vfunc_called(this, "_ZN7S3170C12v1Ev");}
void  S3170C1 ::v2(){vfunc_called(this, "_ZN7S3170C12v2Ev");}
S3170C1 ::S3170C1(){ note_ctor("S3170C1", this);} // tgen

static void Test_S3170C1()
{
  extern Class_Descriptor cd_S3170C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S3170C1, buf);
    S3170C1 *dp, &lv = *(dp=new (buf) S3170C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S3170C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3170C1)");
    check_base_class_offset(lv, (S3170C3*)(S3170C2*), 0, "S3170C1");
    check_base_class_offset(lv, (S3170C2*), 0, "S3170C1");
    test_class_info(&lv, &cd_S3170C1);
    dp->~S3170C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3170C1(Test_S3170C1, "S3170C1", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S3170C1C1Ev();
extern void _ZN7S3170C1D1Ev();
Name_Map name_map_S3170C1[] = {
  NSPAIR(_ZN7S3170C1C1Ev),
  NSPAIR(_ZN7S3170C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3170C3;
extern VTBL_ENTRY _ZTI7S3170C3[];
extern  VTBL_ENTRY _ZTV7S3170C3[];
extern Class_Descriptor cd_S3170C2;
extern VTBL_ENTRY _ZTI7S3170C2[];
extern  VTBL_ENTRY _ZTV7S3170C2[];
static Base_Class bases_S3170C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3170C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3170C1[];
extern void _ZN7S3170C1D1Ev();
extern void _ZN7S3170C1D0Ev();
extern void _ZN7S3170C32v3Ev();
extern void _ZN7S3170C32v4Ev();
extern void _ZN7S3170C32v5Ev();
extern void _ZN7S3170C32v6Ev();
extern void _ZN7S3170C32v7Ev();
extern void _ZN7S3170C32v8Ev();
extern void _ZN7S3170C32v9Ev();
extern void _ZN7S3170C33v10Ev();
extern void _ZN7S3170C33v11Ev();
extern void _ZN7S3170C33v12Ev();
extern void _ZN7S3170C33v13Ev();
extern void _ZN7S3170C33v14Ev();
extern void _ZN7S3170C33v15Ev();
extern void _ZN7S3170C33v16Ev();
extern void _ZN7S3170C33v17Ev();
extern void _ZN7S3170C33v18Ev();
extern void _ZN7S3170C33v19Ev();
extern void _ZN7S3170C33v20Ev();
extern void _ZN7S3170C33v21Ev();
extern void _ZN7S3170C33v22Ev();
extern void _ZN7S3170C33v23Ev();
extern void _ZN7S3170C33v24Ev();
extern void _ZN7S3170C33v25Ev();
extern void _ZN7S3170C33v26Ev();
extern void _ZN7S3170C33v27Ev();
extern void _ZN7S3170C33v28Ev();
extern void _ZN7S3170C33v29Ev();
extern void _ZN7S3170C33v30Ev();
extern void _ZN7S3170C33v31Ev();
extern void _ZN7S3170C33v32Ev();
extern void _ZN7S3170C33v33Ev();
extern void _ZN7S3170C33v34Ev();
extern void _ZN7S3170C33v35Ev();
extern void _ZN7S3170C33v36Ev();
extern void _ZN7S3170C33v37Ev();
extern void _ZN7S3170C33v38Ev();
extern void _ZN7S3170C33v39Ev();
extern void _ZN7S3170C33v40Ev();
extern void _ZN7S3170C33v41Ev();
extern void _ZN7S3170C33v42Ev();
extern void _ZN7S3170C33v43Ev();
extern void _ZN7S3170C33v44Ev();
extern void _ZN7S3170C33v45Ev();
extern void _ZN7S3170C33v46Ev();
extern void _ZN7S3170C33v47Ev();
extern void _ZN7S3170C33v48Ev();
extern void _ZN7S3170C33v49Ev();
extern void _ZN7S3170C33v50Ev();
extern void _ZN7S3170C33v51Ev();
extern void _ZN7S3170C33v52Ev();
extern void _ZN7S3170C33v53Ev();
extern void _ZN7S3170C33v54Ev();
extern void _ZN7S3170C33v55Ev();
extern void _ZN7S3170C33v56Ev();
extern void _ZN7S3170C33v57Ev();
extern void _ZN7S3170C33v58Ev();
extern void _ZN7S3170C33v59Ev();
extern void _ZN7S3170C33v60Ev();
extern void _ZN7S3170C33v61Ev();
extern void _ZN7S3170C33v62Ev();
extern void _ZN7S3170C33v63Ev();
extern void _ZN7S3170C33v64Ev();
extern void _ZN7S3170C33v65Ev();
extern void _ZN7S3170C33v66Ev();
extern void _ZN7S3170C23v67Ev();
extern void _ZN7S3170C23v68Ev();
extern void _ZN7S3170C12v1Ev();
extern void _ZN7S3170C12v2Ev();
static  VTBL_ENTRY vtc_S3170C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3170C1[0]),
  (VTBL_ENTRY)&_ZN7S3170C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3170C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3170C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3170C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3170C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3170C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3170C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3170C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3170C1[];
extern  VTBL_ENTRY _ZTV7S3170C1[];
Class_Descriptor cd_S3170C1 = {  "S3170C1", // class name
  bases_S3170C1, 2,
  &(vtc_S3170C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S3170C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3170C1),72, //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  S21103C4_nt  {
  virtual void  v9(); // _ZN11S21103C4_nt2v9Ev
  virtual void  v10(); // _ZN11S21103C4_nt3v10Ev
  virtual void  v11(); // _ZN11S21103C4_nt3v11Ev
  virtual void  v12(); // _ZN11S21103C4_nt3v12Ev
  virtual void  v13(); // _ZN11S21103C4_nt3v13Ev
  virtual void  v14(); // _ZN11S21103C4_nt3v14Ev
  virtual void  v15(); // _ZN11S21103C4_nt3v15Ev
  virtual void  v16(); // _ZN11S21103C4_nt3v16Ev
  ~S21103C4_nt(); // tgen
  S21103C4_nt(); // tgen
};
//SIG(-1 S21103C4_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S21103C4_nt ::v9(){vfunc_called(this, "_ZN11S21103C4_nt2v9Ev");}
void  S21103C4_nt ::v10(){vfunc_called(this, "_ZN11S21103C4_nt3v10Ev");}
void  S21103C4_nt ::v11(){vfunc_called(this, "_ZN11S21103C4_nt3v11Ev");}
void  S21103C4_nt ::v12(){vfunc_called(this, "_ZN11S21103C4_nt3v12Ev");}
void  S21103C4_nt ::v13(){vfunc_called(this, "_ZN11S21103C4_nt3v13Ev");}
void  S21103C4_nt ::v14(){vfunc_called(this, "_ZN11S21103C4_nt3v14Ev");}
void  S21103C4_nt ::v15(){vfunc_called(this, "_ZN11S21103C4_nt3v15Ev");}
void  S21103C4_nt ::v16(){vfunc_called(this, "_ZN11S21103C4_nt3v16Ev");}
S21103C4_nt ::~S21103C4_nt(){ note_dtor("S21103C4_nt", this);} // tgen
S21103C4_nt ::S21103C4_nt(){ note_ctor("S21103C4_nt", this);} // tgen

//skip512 S21103C4_nt

#else // __cplusplus

extern void _ZN11S21103C4_ntC1Ev();
extern void _ZN11S21103C4_ntD1Ev();
Name_Map name_map_S21103C4_nt[] = {
  NSPAIR(_ZN11S21103C4_ntC1Ev),
  NSPAIR(_ZN11S21103C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
static  VTBL_ENTRY vtc_S21103C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S21103C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
VTBL_ENTRY *P__ZTI11S21103C4_nt = _ZTI11S21103C4_nt; 
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
Class_Descriptor cd_S21103C4_nt = {  "S21103C4_nt", // class name
  0,0,//no base classes
  &(vtc_S21103C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S21103C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S21103C4_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  S21103C3  : virtual S21103C4_nt {
  int s21103c3f0[2];
  void *s21103c3f1;
  virtual  ~S21103C3(); // _ZN8S21103C3D2Ev
  virtual void  v17(); // _ZN8S21103C33v17Ev
  virtual void  v18(); // _ZN8S21103C33v18Ev
  virtual void  v19(); // _ZN8S21103C33v19Ev
  virtual void  v20(); // _ZN8S21103C33v20Ev
  S21103C3(); // tgen
};
//SIG(-1 S21103C3) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 Fi[2] Fp}


 S21103C3 ::~S21103C3(){ note_dtor("S21103C3", this);}
void  S21103C3 ::v17(){vfunc_called(this, "_ZN8S21103C33v17Ev");}
void  S21103C3 ::v18(){vfunc_called(this, "_ZN8S21103C33v18Ev");}
void  S21103C3 ::v19(){vfunc_called(this, "_ZN8S21103C33v19Ev");}
void  S21103C3 ::v20(){vfunc_called(this, "_ZN8S21103C33v20Ev");}
S21103C3 ::S21103C3(){ note_ctor("S21103C3", this);} // tgen

static void Test_S21103C3()
{
  extern Class_Descriptor cd_S21103C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S21103C3, buf);
    S21103C3 *dp, &lv = *(dp=new (buf) S21103C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21103C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21103C3)");
    check_base_class_offset(lv, (S21103C4_nt*), 0, "S21103C3");
    check_field_offset(lv, s21103c3f0, ABISELECT(8,4), "S21103C3.s21103c3f0");
    check_field_offset(lv, s21103c3f1, ABISELECT(16,12), "S21103C3.s21103c3f1");
    test_class_info(&lv, &cd_S21103C3);
    dp->~S21103C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C3(Test_S21103C3, "S21103C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S21103C3C1Ev();
extern void _ZN8S21103C3D2Ev();
Name_Map name_map_S21103C3[] = {
  NSPAIR(_ZN8S21103C3C1Ev),
  NSPAIR(_ZN8S21103C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21103C4_nt;
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
static Base_Class bases_S21103C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21103C4_nt,    0, //bcp->offset
    -1, //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 _ZTI8S21103C3[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY vtc_S21103C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern VTBL_ENTRY _ZTV8S21103C3[];
static  VTT_ENTRY vtt_S21103C3[] = {
  {&(_ZTV8S21103C3[11]),  11,25},
  {&(_ZTV8S21103C3[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
Class_Descriptor cd_S21103C3 = {  "S21103C3", // class name
  bases_S21103C3, 1,
  &(vtc_S21103C3[0]), // expected_vtbl_contents
  &(vtt_S21103C3[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S21103C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21103C3),25, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21103C3),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  S21103C5  {
  void *s21103c5f0[5];
  virtual void  v21(); // _ZN8S21103C53v21Ev
  virtual void  v22(); // _ZN8S21103C53v22Ev
  virtual void  v23(); // _ZN8S21103C53v23Ev
  virtual void  v24(); // _ZN8S21103C53v24Ev
  virtual void  v25(); // _ZN8S21103C53v25Ev
  virtual void  v26(); // _ZN8S21103C53v26Ev
  virtual void  v27(); // _ZN8S21103C53v27Ev
  virtual void  v28(); // _ZN8S21103C53v28Ev
  virtual void  v29(); // _ZN8S21103C53v29Ev
  ~S21103C5(); // tgen
  S21103C5(); // tgen
};
//SIG(-1 S21103C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S21103C5 ::v21(){vfunc_called(this, "_ZN8S21103C53v21Ev");}
void  S21103C5 ::v22(){vfunc_called(this, "_ZN8S21103C53v22Ev");}
void  S21103C5 ::v23(){vfunc_called(this, "_ZN8S21103C53v23Ev");}
void  S21103C5 ::v24(){vfunc_called(this, "_ZN8S21103C53v24Ev");}
void  S21103C5 ::v25(){vfunc_called(this, "_ZN8S21103C53v25Ev");}
void  S21103C5 ::v26(){vfunc_called(this, "_ZN8S21103C53v26Ev");}
void  S21103C5 ::v27(){vfunc_called(this, "_ZN8S21103C53v27Ev");}
void  S21103C5 ::v28(){vfunc_called(this, "_ZN8S21103C53v28Ev");}
void  S21103C5 ::v29(){vfunc_called(this, "_ZN8S21103C53v29Ev");}
S21103C5 ::~S21103C5(){ note_dtor("S21103C5", this);} // tgen
S21103C5 ::S21103C5(){ note_ctor("S21103C5", this);} // tgen

static void Test_S21103C5()
{
  extern Class_Descriptor cd_S21103C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21103C5, buf);
    S21103C5 *dp, &lv = *(dp=new (buf) S21103C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21103C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21103C5)");
    check_field_offset(lv, s21103c5f0, ABISELECT(8,4), "S21103C5.s21103c5f0");
    test_class_info(&lv, &cd_S21103C5);
    dp->~S21103C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C5(Test_S21103C5, "S21103C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21103C5C1Ev();
extern void _ZN8S21103C5D1Ev();
Name_Map name_map_S21103C5[] = {
  NSPAIR(_ZN8S21103C5C1Ev),
  NSPAIR(_ZN8S21103C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21103C5[];
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
static  VTBL_ENTRY vtc_S21103C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C5[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
};
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
Class_Descriptor cd_S21103C5 = {  "S21103C5", // class name
  0,0,//no base classes
  &(vtc_S21103C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21103C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21103C5),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  S21103C2  : virtual S21103C3 , S21103C5 {
  int s21103c2f0;
  long double s21103c2f1;
  virtual void  v46(); // _ZN8S21103C23v46Ev
  virtual void  v47(); // _ZN8S21103C23v47Ev
  virtual void  v48(); // _ZN8S21103C23v48Ev
  virtual void  v49(); // _ZN8S21103C23v49Ev
  virtual void  v50(); // _ZN8S21103C23v50Ev
  ~S21103C2(); // tgen
  S21103C2(); // tgen
};
//SIG(-1 S21103C2) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13} vd v14 v15 v16 v17 Fi[2] Fp} BC4{ v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[5]} v1 v2 v3 v4 v5 Fi FD}


void  S21103C2 ::v46(){vfunc_called(this, "_ZN8S21103C23v46Ev");}
void  S21103C2 ::v47(){vfunc_called(this, "_ZN8S21103C23v47Ev");}
void  S21103C2 ::v48(){vfunc_called(this, "_ZN8S21103C23v48Ev");}
void  S21103C2 ::v49(){vfunc_called(this, "_ZN8S21103C23v49Ev");}
void  S21103C2 ::v50(){vfunc_called(this, "_ZN8S21103C23v50Ev");}
S21103C2 ::~S21103C2(){ note_dtor("S21103C2", this);} // tgen
S21103C2 ::S21103C2(){ note_ctor("S21103C2", this);} // tgen

static void Test_S21103C2()
{
  extern Class_Descriptor cd_S21103C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S21103C2, buf);
    S21103C2 *dp, &lv = *(dp=new (buf) S21103C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S21103C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21103C2)");
    check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*), ABISELECT(80,40), "S21103C2");
    check_base_class_offset(lv, (S21103C3*), ABISELECT(80,40), "S21103C2");
    check_base_class_offset(lv, (S21103C5*), 0, "S21103C2");
    check_field_offset(lv, s21103c2f0, ABISELECT(48,24), "S21103C2.s21103c2f0");
    check_field_offset(lv, s21103c2f1, ABISELECT(64,28), "S21103C2.s21103c2f1");
    test_class_info(&lv, &cd_S21103C2);
    dp->~S21103C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C2(Test_S21103C2, "S21103C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S21103C2C1Ev();
extern void _ZN8S21103C2D1Ev();
Name_Map name_map_S21103C2[] = {
  NSPAIR(_ZN8S21103C2C1Ev),
  NSPAIR(_ZN8S21103C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21103C4_nt;
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
static Base_Class bases_S21103C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21103C4_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S21103C3,    ABISELECT(80,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    16, //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},
  {&cd_S21103C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S21103C2[];
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void _ZN8S21103C2D1Ev();
extern void _ZN8S21103C2D0Ev();
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S21103C2D1Ev,_ZThn40_N8S21103C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S21103C2D0Ev,_ZThn40_N8S21103C2D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY vtc_S21103C2[] = {
  ABISELECT(80,40),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern VTBL_ENTRY _ZTV8S21103C2[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
static  VTT_ENTRY vtt_S21103C2[] = {
  {&(_ZTV8S21103C2[4]),  4,50},
  {&(_ZTV8S21103C2[36]),  36,50},
  {&(_ZTV8S21103C2[36]),  36,50},
  {&(_tg__ZTV8S21103C3__8S21103C2[11]),  11,25},
  {&(_tg__ZTV8S21103C3__8S21103C2[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S21103C2[];
extern  VTBL_ENTRY _ZTV8S21103C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C2[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21103C2D0Ev,_ZThn40_N8S21103C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21103C2D1Ev,_ZThn40_N8S21103C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21103C2 = {  "S21103C2", // class name
  bases_S21103C2, 3,
  &(vtc_S21103C2[0]), // expected_vtbl_contents
  &(vtt_S21103C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S21103C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21103C2),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21103C2),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21103C8  {
  long double s21103c8f0;
  virtual void  v1(); // _ZN8S21103C82v1Ev
  ~S21103C8(); // tgen
  S21103C8(); // tgen
};
//SIG(-1 S21103C8) C1{ v1 FD}


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

static void Test_S21103C8()
{
  extern Class_Descriptor cd_S21103C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S21103C8, buf);
    S21103C8 *dp, &lv = *(dp=new (buf) S21103C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21103C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21103C8)");
    check_field_offset(lv, s21103c8f0, ABISELECT(16,4), "S21103C8.s21103c8f0");
    test_class_info(&lv, &cd_S21103C8);
    dp->~S21103C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C8(Test_S21103C8, "S21103C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21103C8C1Ev();
extern void _ZN8S21103C8D1Ev();
Name_Map name_map_S21103C8[] = {
  NSPAIR(_ZN8S21103C8C1Ev),
  NSPAIR(_ZN8S21103C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21103C8[];
extern void _ZN8S21103C82v1Ev();
static  VTBL_ENTRY vtc_S21103C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C8[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
};
extern VTBL_ENTRY _ZTI8S21103C8[];
extern  VTBL_ENTRY _ZTV8S21103C8[];
Class_Descriptor cd_S21103C8 = {  "S21103C8", // class name
  0,0,//no base classes
  &(vtc_S21103C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21103C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21103C8),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

union  S21103C10  {
  long s21103c10f0;
  void  mf21103c10(); // _ZN9S21103C1010mf21103c10Ev
};
//SIG(1 S21103C10) U1{ m Fl}

#endif // __cplusplus
#ifdef __cplusplus

struct  S21103C9  {
  ::S21103C10 s21103c9f0[10];
  virtual  ~S21103C9(); // _ZN8S21103C9D1Ev
  virtual void  v2(); // _ZN8S21103C92v2Ev
  virtual void  v3(); // _ZN8S21103C92v3Ev
  virtual void  v4(); // _ZN8S21103C92v4Ev
  virtual void  v5(); // _ZN8S21103C92v5Ev
  virtual void  v6(); // _ZN8S21103C92v6Ev
  virtual void  v7(); // _ZN8S21103C92v7Ev
  virtual void  v8(); // _ZN8S21103C92v8Ev
  S21103C9(); // tgen
};
//SIG(-1 S21103C9) C1{ vd v1 v2 v3 v4 v5 v6 v7 FU2{ m Fl}[10]}


 S21103C9 ::~S21103C9(){ note_dtor("S21103C9", this);}
void  S21103C9 ::v2(){vfunc_called(this, "_ZN8S21103C92v2Ev");}
void  S21103C9 ::v3(){vfunc_called(this, "_ZN8S21103C92v3Ev");}
void  S21103C9 ::v4(){vfunc_called(this, "_ZN8S21103C92v4Ev");}
void  S21103C9 ::v5(){vfunc_called(this, "_ZN8S21103C92v5Ev");}
void  S21103C9 ::v6(){vfunc_called(this, "_ZN8S21103C92v6Ev");}
void  S21103C9 ::v7(){vfunc_called(this, "_ZN8S21103C92v7Ev");}
void  S21103C9 ::v8(){vfunc_called(this, "_ZN8S21103C92v8Ev");}
S21103C9 ::S21103C9(){ note_ctor("S21103C9", this);} // tgen

static void Test_S21103C9()
{
  extern Class_Descriptor cd_S21103C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S21103C9, buf);
    S21103C9 *dp, &lv = *(dp=new (buf) S21103C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S21103C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21103C9)");
    check_field_offset(lv, s21103c9f0, ABISELECT(8,4), "S21103C9.s21103c9f0");
    test_class_info(&lv, &cd_S21103C9);
    dp->~S21103C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C9(Test_S21103C9, "S21103C9", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S21103C9C1Ev();
extern void _ZN8S21103C9D1Ev();
Name_Map name_map_S21103C9[] = {
  NSPAIR(_ZN8S21103C9C1Ev),
  NSPAIR(_ZN8S21103C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21103C9[];
extern void _ZN8S21103C9D1Ev();
extern void _ZN8S21103C9D0Ev();
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
static  VTBL_ENTRY vtc_S21103C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C9[0]),
  (VTBL_ENTRY)&_ZN8S21103C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S21103C9[];
extern  VTBL_ENTRY _ZTV8S21103C9[];
Class_Descriptor cd_S21103C9 = {  "S21103C9", // class name
  0,0,//no base classes
  &(vtc_S21103C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S21103C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21103C9),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

union  S21103C11_nt  {
  void  mf21103c11(); // _ZN12S21103C11_nt10mf21103c11Ev
};
//SIG(1 S21103C11_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S21103C7  : virtual S21103C8 , S21103C9 , virtual S21103C3 , S21103C5 {
  ::S21103C11_nt s21103c7f0;
  virtual void  v30(); // _ZN8S21103C73v30Ev
  virtual void  v31(); // _ZN8S21103C73v31Ev
  virtual void  v32(); // _ZN8S21103C73v32Ev
  virtual void  v33(); // _ZN8S21103C73v33Ev
  virtual void  v34(); // _ZN8S21103C73v34Ev
  virtual void  v35(); // _ZN8S21103C73v35Ev
  ~S21103C7(); // tgen
  S21103C7(); // tgen
};
//SIG(-1 S21103C7) C1{ VBC2{ v7 FD} BC3{ vd v8 v9 v10 v11 v12 v13 v14 FU4{ m Fl}[10]} VBC5{ VBC6{ v15 v16 v17 v18 v19 v20 v21 v22} vd v23 v24 v25 v26 Fi[2] Fp} BC7{ v27 v28 v29 v30 v31 v32 v33 v34 v35 Fp[5]} v1 v2 v3 v4 v5 v6 FU8{ m}}


void  S21103C7 ::v30(){vfunc_called(this, "_ZN8S21103C73v30Ev");}
void  S21103C7 ::v31(){vfunc_called(this, "_ZN8S21103C73v31Ev");}
void  S21103C7 ::v32(){vfunc_called(this, "_ZN8S21103C73v32Ev");}
void  S21103C7 ::v33(){vfunc_called(this, "_ZN8S21103C73v33Ev");}
void  S21103C7 ::v34(){vfunc_called(this, "_ZN8S21103C73v34Ev");}
void  S21103C7 ::v35(){vfunc_called(this, "_ZN8S21103C73v35Ev");}
S21103C7 ::~S21103C7(){ note_dtor("S21103C7", this);} // tgen
S21103C7 ::S21103C7(){ note_ctor("S21103C7", this);} // tgen

static void Test_S21103C7()
{
  extern Class_Descriptor cd_S21103C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,27)];
    init_test(&cd_S21103C7, buf);
    S21103C7 *dp, &lv = *(dp=new (buf) S21103C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,104), "sizeof(S21103C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21103C7)");
    check_base_class_offset(lv, (S21103C8*), ABISELECT(144,72), "S21103C7");
    check_base_class_offset(lv, (S21103C9*), 0, "S21103C7");
    check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*), ABISELECT(176,88), "S21103C7");
    check_base_class_offset(lv, (S21103C3*), ABISELECT(176,88), "S21103C7");
    check_base_class_offset(lv, (S21103C5*), ABISELECT(88,44), "S21103C7");
    check_field_offset(lv, s21103c7f0, ABISELECT(136,68), "S21103C7.s21103c7f0");
    test_class_info(&lv, &cd_S21103C7);
    dp->~S21103C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C7(Test_S21103C7, "S21103C7", ABISELECT(208,104));

#else // __cplusplus

extern void _ZN8S21103C7C1Ev();
extern void _ZN8S21103C7D1Ev();
Name_Map name_map_S21103C7[] = {
  NSPAIR(_ZN8S21103C7C1Ev),
  NSPAIR(_ZN8S21103C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21103C8;
extern VTBL_ENTRY _ZTI8S21103C8[];
extern  VTBL_ENTRY _ZTV8S21103C8[];
extern Class_Descriptor cd_S21103C9;
extern VTBL_ENTRY _ZTI8S21103C9[];
extern  VTBL_ENTRY _ZTV8S21103C9[];
extern Class_Descriptor cd_S21103C4_nt;
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
static Base_Class bases_S21103C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21103C8,    ABISELECT(144,72), //bcp->offset
    31, //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_S21103C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21103C4_nt,    ABISELECT(176,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21103C3,    ABISELECT(176,88), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21103C5,    ABISELECT(88,44), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21103C7[];
extern void _ZN8S21103C7D1Ev();
extern void _ZN8S21103C7D0Ev();
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C82v1Ev();
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S21103C7D1Ev,_ZThn88_N8S21103C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev)();
extern void ABISELECT(_ZThn176_N8S21103C7D0Ev,_ZThn88_N8S21103C7D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY vtc_S21103C7[] = {
  ABISELECT(176,88),
  ABISELECT(176,88),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern VTBL_ENTRY _ZTV8S21103C7[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
static  VTT_ENTRY vtt_S21103C7[] = {
  {&(_ZTV8S21103C7[5]),  5,65},
  {&(_ZTV8S21103C7[34]),  34,65},
  {&(_ZTV8S21103C7[51]),  51,65},
  {&(_ZTV8S21103C7[51]),  51,65},
  {&(_tg__ZTV8S21103C3__8S21103C7[11]),  11,25},
  {&(_tg__ZTV8S21103C3__8S21103C7[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S21103C7[];
extern  VTBL_ENTRY _ZTV8S21103C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C7[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21103C7D0Ev,_ZThn88_N8S21103C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21103C7D1Ev,_ZThn88_N8S21103C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21103C7 = {  "S21103C7", // class name
  bases_S21103C7, 5,
  &(vtc_S21103C7[0]), // expected_vtbl_contents
  &(vtt_S21103C7[0]), // expected_vtt_contents
  ABISELECT(208,104), // object size
  NSPAIRA(_ZTI8S21103C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21103C7),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21103C7),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21103C12  : virtual S21103C7 {
  void *s21103c12f0;
  int s21103c12f1;
  ::S21103C10 s21103c12f2;
  __tsi64 s21103c12f3:24;
  virtual void  v36(); // _ZN9S21103C123v36Ev
  virtual void  v37(); // _ZN9S21103C123v37Ev
  ~S21103C12(); // tgen
  S21103C12(); // tgen
};
//SIG(-1 S21103C12) C1{ VBC2{ VBC3{ v3 FD} BC4{ vd v4 v5 v6 v7 v8 v9 v10 FU5{ m Fl}[10]} VBC6{ VBC7{ v11 v12 v13 v14 v15 v16 v17 v18} vd v19 v20 v21 v22 Fi[2] Fp} BC8{ v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp[5]} v32 v33 v34 v35 v36 v37 FU9{ m}} v1 v2 Fp Fi FU5 FL:24}


void  S21103C12 ::v36(){vfunc_called(this, "_ZN9S21103C123v36Ev");}
void  S21103C12 ::v37(){vfunc_called(this, "_ZN9S21103C123v37Ev");}
S21103C12 ::~S21103C12(){ note_dtor("S21103C12", this);} // tgen
S21103C12 ::S21103C12(){ note_ctor("S21103C12", this);} // tgen

static void Test_S21103C12()
{
  extern Class_Descriptor cd_S21103C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,32)];
    init_test(&cd_S21103C12, buf);
    S21103C12 *dp, &lv = *(dp=new (buf) S21103C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,124), "sizeof(S21103C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21103C12)");
    check_base_class_offset(lv, (S21103C8*)(S21103C7*), ABISELECT(192,92), "S21103C12");
    check_base_class_offset(lv, (S21103C9*)(S21103C7*), ABISELECT(40,20), "S21103C12");
    check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*), 0, "S21103C12");
    check_base_class_offset(lv, (S21103C3*)(S21103C7*), ABISELECT(224,108), "S21103C12");
    check_base_class_offset(lv, (S21103C5*)(S21103C7*), ABISELECT(128,64), "S21103C12");
    check_base_class_offset(lv, (S21103C7*), ABISELECT(40,20), "S21103C12");
    check_field_offset(lv, s21103c12f0, ABISELECT(8,4), "S21103C12.s21103c12f0");
    check_field_offset(lv, s21103c12f1, ABISELECT(16,8), "S21103C12.s21103c12f1");
    check_field_offset(lv, s21103c12f2, ABISELECT(24,12), "S21103C12.s21103c12f2");
    set_bf_and_test(lv, s21103c12f3, ABISELECT(32,16), 0, 24, 1, "S21103C12");
    set_bf_and_test(lv, s21103c12f3, ABISELECT(32,16), 0, 24, hide_sll(1LL<<23), "S21103C12");
    test_class_info(&lv, &cd_S21103C12);
    dp->~S21103C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C12(Test_S21103C12, "S21103C12", ABISELECT(256,124));

#else // __cplusplus

extern void _ZN9S21103C12C1Ev();
extern void _ZN9S21103C12D1Ev();
Name_Map name_map_S21103C12[] = {
  NSPAIR(_ZN9S21103C12C1Ev),
  NSPAIR(_ZN9S21103C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21103C8;
extern VTBL_ENTRY _ZTI8S21103C8[];
extern  VTBL_ENTRY _ZTV8S21103C8[];
extern Class_Descriptor cd_S21103C9;
extern VTBL_ENTRY _ZTI8S21103C9[];
extern  VTBL_ENTRY _ZTV8S21103C9[];
extern Class_Descriptor cd_S21103C4_nt;
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C7;
extern VTBL_ENTRY _ZTI8S21103C7[];
extern  VTBL_ENTRY _ZTV8S21103C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C7[];
static Base_Class bases_S21103C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21103C8,    ABISELECT(192,92), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21103C9,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21103C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S21103C3,    ABISELECT(224,108), //bcp->offset
    84, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21103C5,    ABISELECT(128,64), //bcp->offset
    69, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21103C7,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S21103C12[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN9S21103C123v36Ev();
extern void _ZN9S21103C123v37Ev();
extern void _ZN9S21103C12D1Ev();
extern void _ZN9S21103C12D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev)();
extern void ABISELECT(_ZThn40_N9S21103C12D1Ev,_ZThn20_N9S21103C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev)();
extern void ABISELECT(_ZThn40_N9S21103C12D0Ev,_ZThn20_N9S21103C12D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C82v1Ev();
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev)();
extern void ABISELECT(_ZThn224_N9S21103C12D1Ev,_ZThn108_N9S21103C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev)();
extern void ABISELECT(_ZThn224_N9S21103C12D0Ev,_ZThn108_N9S21103C12D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY vtc_S21103C12[] = {
  0,
  ABISELECT(224,108),
  ABISELECT(192,92),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v36Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v37Ev,
  (VTBL_ENTRY)&_ZN9S21103C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21103C12D0Ev,
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  0,
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern VTBL_ENTRY _ZTV9S21103C12[];
extern void _ZN8S21103C7D1Ev();
extern void _ZN8S21103C7D0Ev();
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C7__9S21103C12[] = {
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
};
extern void _ZN8S21103C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C8__8S21103C7__9S21103C12[] = {
  0,
  ABISELECT(-152,-72),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev)();
extern void ABISELECT(_ZThn184_N8S21103C7D1Ev,_ZThn88_N8S21103C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev)();
extern void ABISELECT(_ZThn184_N8S21103C7D0Ev,_ZThn88_N8S21103C7D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C7__9S21103C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-184,-88),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-184,-88),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
static  VTBL_ENTRY _tg__ZTV11S21103C4_nt__8S21103C7__9S21103C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__9S21103C12[] = {
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
static  VTBL_ENTRY _tg__ZTV11S21103C4_nt__8S21103C3__9S21103C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,108),
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
};
static  VTT_ENTRY vtt_S21103C12[] = {
  {&(_ZTV9S21103C12[14]),  14,114},
  {&(_ZTV9S21103C12[54]),  54,114},
  {&(_ZTV9S21103C12[83]),  83,114},
  {&(_ZTV9S21103C12[100]),  100,114},
  {&(_ZTV9S21103C12[14]),  14,114},
  {&(_ZTV9S21103C12[71]),  71,114},
  {&(_tg__ZTV8S21103C7__9S21103C12[5]),  5,20},
  {&(_tg__ZTV8S21103C8__8S21103C7__9S21103C12[3]),  3,4},
  {&(_tg__ZTV8S21103C3__8S21103C7__9S21103C12[16]),  16,30},
  {&(_tg__ZTV11S21103C4_nt__8S21103C7__9S21103C12[10]),  10,18},
  {&(_tg__ZTV8S21103C3__9S21103C12[11]),  11,25},
  {&(_tg__ZTV11S21103C4_nt__8S21103C3__9S21103C12[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S21103C12[];
extern  VTBL_ENTRY _ZTV9S21103C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21103C12[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S21103C7D0Ev,_ZThn88_N8S21103C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S21103C7D1Ev,_ZThn88_N8S21103C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21103C12D0Ev,_ZThn108_N9S21103C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S21103C12D1Ev,_ZThn108_N9S21103C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21103C12D0Ev,_ZThn20_N9S21103C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21103C12D1Ev,_ZThn20_N9S21103C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21103C12 = {  "S21103C12", // class name
  bases_S21103C12, 6,
  &(vtc_S21103C12[0]), // expected_vtbl_contents
  &(vtt_S21103C12[0]), // expected_vtt_contents
  ABISELECT(256,124), // object size
  NSPAIRA(_ZTI9S21103C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21103C12),114, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21103C12),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21103C13  {
  __tsi64 s21103c13f0;
  virtual void  v38(); // _ZN9S21103C133v38Ev
  virtual void  v39(); // _ZN9S21103C133v39Ev
  virtual void  v40(); // _ZN9S21103C133v40Ev
  virtual void  v41(); // _ZN9S21103C133v41Ev
  virtual void  v42(); // _ZN9S21103C133v42Ev
  virtual void  v43(); // _ZN9S21103C133v43Ev
  virtual void  v44(); // _ZN9S21103C133v44Ev
  virtual void  v45(); // _ZN9S21103C133v45Ev
  ~S21103C13(); // tgen
  S21103C13(); // tgen
};
//SIG(-1 S21103C13) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S21103C13 ::v38(){vfunc_called(this, "_ZN9S21103C133v38Ev");}
void  S21103C13 ::v39(){vfunc_called(this, "_ZN9S21103C133v39Ev");}
void  S21103C13 ::v40(){vfunc_called(this, "_ZN9S21103C133v40Ev");}
void  S21103C13 ::v41(){vfunc_called(this, "_ZN9S21103C133v41Ev");}
void  S21103C13 ::v42(){vfunc_called(this, "_ZN9S21103C133v42Ev");}
void  S21103C13 ::v43(){vfunc_called(this, "_ZN9S21103C133v43Ev");}
void  S21103C13 ::v44(){vfunc_called(this, "_ZN9S21103C133v44Ev");}
void  S21103C13 ::v45(){vfunc_called(this, "_ZN9S21103C133v45Ev");}
S21103C13 ::~S21103C13(){ note_dtor("S21103C13", this);} // tgen
S21103C13 ::S21103C13(){ note_ctor("S21103C13", this);} // tgen

static void Test_S21103C13()
{
  extern Class_Descriptor cd_S21103C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S21103C13, buf);
    S21103C13 *dp, &lv = *(dp=new (buf) S21103C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21103C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21103C13)");
    check_field_offset(lv, s21103c13f0, ABISELECT(8,4), "S21103C13.s21103c13f0");
    test_class_info(&lv, &cd_S21103C13);
    dp->~S21103C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C13(Test_S21103C13, "S21103C13", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S21103C13C1Ev();
extern void _ZN9S21103C13D1Ev();
Name_Map name_map_S21103C13[] = {
  NSPAIR(_ZN9S21103C13C1Ev),
  NSPAIR(_ZN9S21103C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21103C13[];
extern void _ZN9S21103C133v38Ev();
extern void _ZN9S21103C133v39Ev();
extern void _ZN9S21103C133v40Ev();
extern void _ZN9S21103C133v41Ev();
extern void _ZN9S21103C133v42Ev();
extern void _ZN9S21103C133v43Ev();
extern void _ZN9S21103C133v44Ev();
extern void _ZN9S21103C133v45Ev();
static  VTBL_ENTRY vtc_S21103C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21103C13[0]),
  (VTBL_ENTRY)&_ZN9S21103C133v38Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v39Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v40Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v41Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v42Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v43Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v44Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v45Ev,
};
extern VTBL_ENTRY _ZTI9S21103C13[];
extern  VTBL_ENTRY _ZTV9S21103C13[];
Class_Descriptor cd_S21103C13 = {  "S21103C13", // class name
  0,0,//no base classes
  &(vtc_S21103C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S21103C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21103C13),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  S21103C6  : virtual S21103C7 , S21103C12 , S21103C13 , virtual S21103C2 , virtual S21103C9 {
  ::S21103C11_nt s21103c6f0;
  int s21103c6f1;
  virtual void  v51(); // _ZN8S21103C63v51Ev
  virtual void  v52(); // _ZN8S21103C63v52Ev
  ~S21103C6(); // tgen
  S21103C6(); // tgen
};
//SIG(-1 S21103C6) C1{ VBC2{ VBC3{ v3 FD} BC4{ vd v4 v5 v6 v7 v8 v9 v10 FU5{ m Fl}[10]} VBC6{ VBC7{ v11 v12 v13 v14 v15 v16 v17 v18} vd v19 v20 v21 v22 Fi[2] Fp} BC8{ v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp[5]} v32 v33 v34 v35 v36 v37 FU9{ m}} BC10{ VBC2 v38 v39 Fp Fi FU5 FL:24} BC11{ v40 v41 v42 v43 v44 v45 v46 v47 FL} VBC12{ VBC6 BC8 v48 v49 v50 v51 v52 Fi FD} VBC4 v1 v2 FU9 Fi}


void  S21103C6 ::v51(){vfunc_called(this, "_ZN8S21103C63v51Ev");}
void  S21103C6 ::v52(){vfunc_called(this, "_ZN8S21103C63v52Ev");}
S21103C6 ::~S21103C6(){ note_dtor("S21103C6", this);} // tgen
S21103C6 ::S21103C6(){ note_ctor("S21103C6", this);} // tgen

static void Test_S21103C6()
{
  extern Class_Descriptor cd_S21103C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,58)];
    init_test(&cd_S21103C6, buf);
    S21103C6 *dp, &lv = *(dp=new (buf) S21103C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,228), "sizeof(S21103C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21103C6)");
    check_base_class_offset(lv, (S21103C8*)(S21103C7*), ABISELECT(208,112), "S21103C6");
    check_base_class_offset(lv, (S21103C9*)(S21103C7*), ABISELECT(64,40), "S21103C6");
    check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*), ABISELECT(240,128), "S21103C6");
    check_base_class_offset(lv, (S21103C3*)(S21103C7*), ABISELECT(240,128), "S21103C6");
    check_base_class_offset(lv, (S21103C3*)(S21103C2*), ABISELECT(240,128), "S21103C6");
    check_base_class_offset(lv, (S21103C5*)(S21103C7*), ABISELECT(152,84), "S21103C6");
    check_base_class_offset(lv, (S21103C7*), ABISELECT(64,40), "S21103C6");
    check_base_class_offset(lv, (S21103C7*)(S21103C12*), ABISELECT(64,40), "S21103C6");
    check_base_class_offset(lv, (S21103C12*), 0, "S21103C6");
    check_base_class_offset(lv, (S21103C13*), ABISELECT(40,20), "S21103C6");
    check_base_class_offset(lv, (S21103C5*)(S21103C2*), ABISELECT(272,144), "S21103C6");
    check_base_class_offset(lv, (S21103C2*), ABISELECT(272,144), "S21103C6");
    /*is_ambiguous_... S21103C6::S21103C9 */ AMB_check_base_class_offset(lv, (S21103C9*), ABISELECT(352,184), "S21103C6");
    check_field_offset(lv, s21103c6f0, ABISELECT(56,32), "S21103C6.s21103c6f0");
    check_field_offset(lv, s21103c6f1, ABISELECT(60,36), "S21103C6.s21103c6f1");
    test_class_info(&lv, &cd_S21103C6);
    dp->~S21103C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C6(Test_S21103C6, "S21103C6", ABISELECT(448,228));

#else // __cplusplus

extern void _ZN8S21103C6C1Ev();
extern void _ZN8S21103C6D1Ev();
Name_Map name_map_S21103C6[] = {
  NSPAIR(_ZN8S21103C6C1Ev),
  NSPAIR(_ZN8S21103C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21103C8;
extern VTBL_ENTRY _ZTI8S21103C8[];
extern  VTBL_ENTRY _ZTV8S21103C8[];
extern Class_Descriptor cd_S21103C9;
extern VTBL_ENTRY _ZTI8S21103C9[];
extern  VTBL_ENTRY _ZTV8S21103C9[];
extern Class_Descriptor cd_S21103C4_nt;
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C7;
extern VTBL_ENTRY _ZTI8S21103C7[];
extern  VTBL_ENTRY _ZTV8S21103C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C7[];
extern Class_Descriptor cd_S21103C12;
extern VTBL_ENTRY _ZTI9S21103C12[];
extern  VTBL_ENTRY _ZTV9S21103C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21103C12[];
extern Class_Descriptor cd_S21103C13;
extern VTBL_ENTRY _ZTI9S21103C13[];
extern  VTBL_ENTRY _ZTV9S21103C13[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C2;
extern VTBL_ENTRY _ZTI8S21103C2[];
extern  VTBL_ENTRY _ZTV8S21103C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C2[];
extern Class_Descriptor cd_S21103C9;
extern VTBL_ENTRY _ZTI8S21103C9[];
extern  VTBL_ENTRY _ZTV8S21103C9[];
static Base_Class bases_S21103C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21103C8,    ABISELECT(208,112), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21103C9,    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
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21103C4_nt,    ABISELECT(240,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21103C3,    ABISELECT(240,128), //bcp->offset
    98, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21103C5,    ABISELECT(152,84), //bcp->offset
    83, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21103C7,    ABISELECT(64,40), //bcp->offset
    40, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21103C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    14, //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_S21103C13,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21103C5,    ABISELECT(272,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21103C2,    ABISELECT(272,144), //bcp->offset
    128, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21103C9,    ABISELECT(352,184), //bcp->offset
    163, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21103C6[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN9S21103C123v36Ev();
extern void _ZN9S21103C123v37Ev();
extern void _ZN8S21103C6D1Ev();
extern void _ZN8S21103C6D0Ev();
extern void _ZN8S21103C63v51Ev();
extern void _ZN8S21103C63v52Ev();
extern void _ZN9S21103C133v38Ev();
extern void _ZN9S21103C133v39Ev();
extern void _ZN9S21103C133v40Ev();
extern void _ZN9S21103C133v41Ev();
extern void _ZN9S21103C133v42Ev();
extern void _ZN9S21103C133v43Ev();
extern void _ZN9S21103C133v44Ev();
extern void _ZN9S21103C133v45Ev();
extern void ABISELECT(_ZTv0_n48_N8S21103C6D1Ev,_ZTv0_n24_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21103C6D1Ev,_ZThn40_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21103C6D0Ev,_ZTv0_n24_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21103C6D0Ev,_ZThn40_N8S21103C6D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C82v1Ev();
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C6D1Ev,_ZTv0_n48_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn240_N8S21103C6D1Ev,_ZThn128_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C6D0Ev,_ZTv0_n48_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn240_N8S21103C6D0Ev,_ZThn128_N8S21103C6D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void ABISELECT(_ZTv0_n152_N8S21103C6D1Ev,_ZTv0_n76_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S21103C6D1Ev,_ZThn144_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N8S21103C6D0Ev,_ZTv0_n76_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn272_N8S21103C6D0Ev,_ZThn144_N8S21103C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21103C6D1Ev,_ZTv0_n12_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn352_N8S21103C6D1Ev,_ZThn184_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21103C6D0Ev,_ZTv0_n12_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn352_N8S21103C6D0Ev,_ZThn184_N8S21103C6D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
static  VTBL_ENTRY vtc_S21103C6[] = {
  ABISELECT(352,184),
  ABISELECT(272,144),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(208,112),
  ABISELECT(64,40),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v36Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v37Ev,
  (VTBL_ENTRY)&_ZN8S21103C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C63v51Ev,
  (VTBL_ENTRY)&_ZN8S21103C63v52Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN9S21103C133v38Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v39Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v40Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v41Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v42Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v43Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v44Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v45Ev,
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(176,88),
  ABISELECT(176,88),
  ABISELECT(144,72),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21103C6D1Ev,_ZTv0_n24_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21103C6D0Ev,_ZTv0_n24_N8S21103C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-128),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C6D1Ev,_ZTv0_n48_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C6D0Ev,_ZTv0_n48_N8S21103C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
  ABISELECT(-272,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S21103C6D1Ev,_ZTv0_n76_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S21103C6D0Ev,_ZTv0_n76_N8S21103C6D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21103C6D1Ev,_ZTv0_n12_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21103C6D0Ev,_ZTv0_n12_N8S21103C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
};
extern VTBL_ENTRY _ZTV8S21103C6[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN9S21103C123v36Ev();
extern void _ZN9S21103C123v37Ev();
extern void _ZN9S21103C12D1Ev();
extern void _ZN9S21103C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21103C12__8S21103C6[] = {
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(208,112),
  ABISELECT(64,40),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  ABISELECT(240,128),
  0,
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v36Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v37Ev,
  (VTBL_ENTRY)&_ZN9S21103C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21103C12D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S21103C12D1Ev,_ZThn40_N9S21103C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S21103C12D0Ev,_ZThn40_N9S21103C12D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C7__9S21103C12__8S21103C6[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(176,88),
  ABISELECT(176,88),
  ABISELECT(144,72),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
};
extern void _ZN8S21103C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C8__9S21103C12__8S21103C6[] = {
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S21103C12D1Ev,_ZThn128_N9S21103C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S21103C12D0Ev,_ZThn128_N9S21103C12D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__9S21103C12__8S21103C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-128),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C58S21103C7__9S21103C12__8S21103C6[] = {
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
};
extern void _ZN8S21103C7D1Ev();
extern void _ZN8S21103C7D0Ev();
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C7__8S21103C6[] = {
  ABISELECT(176,88),
  ABISELECT(176,88),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
};
extern void _ZN8S21103C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C8__8S21103C7__8S21103C6[] = {
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S21103C7D1Ev,_ZThn88_N8S21103C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev)();
extern void ABISELECT(_ZThn176_N8S21103C7D0Ev,_ZThn88_N8S21103C7D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C7__8S21103C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void _ZN8S21103C2D1Ev();
extern void _ZN8S21103C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C2__8S21103C6[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D0Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev)();
extern void ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev)();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C2__8S21103C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
static  VTT_ENTRY vtt_S21103C6[] = {
  {&(_ZTV8S21103C6[16]),  16,182},
  {&(_tg__ZTV9S21103C12__8S21103C6[14]),  14,26},
  {&(_tg__ZTV8S21103C7__9S21103C12__8S21103C6[28]),  28,43},
  {&(_tg__ZTV8S21103C8__9S21103C12__8S21103C6[3]),  3,4},
  {&(_tg__ZTV8S21103C3__9S21103C12__8S21103C6[16]),  16,30},
  {&(_tg__ZTV8S21103C3__9S21103C12__8S21103C6[16]),  16,30},
  {&(_tg__ZTV8S21103C58S21103C7__9S21103C12__8S21103C6[2]),  2,11},
  {&(_ZTV8S21103C6[68]),  68,182},
  {&(_ZTV8S21103C6[97]),  97,182},
  {&(_ZTV8S21103C6[114]),  114,182},
  {&(_ZTV8S21103C6[114]),  114,182},
  {&(_ZTV8S21103C6[85]),  85,182},
  {&(_ZTV8S21103C6[147]),  147,182},
  {&(_ZTV8S21103C6[173]),  173,182},
  {&(_tg__ZTV8S21103C7__8S21103C6[5]),  5,20},
  {&(_tg__ZTV8S21103C8__8S21103C7__8S21103C6[3]),  3,4},
  {&(_tg__ZTV8S21103C3__8S21103C7__8S21103C6[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C7__8S21103C6[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C6[11]),  11,25},
  {&(_tg__ZTV8S21103C3__8S21103C6[11]),  11,25},
  {&(_tg__ZTV8S21103C2__8S21103C6[4]),  4,20},
  {&(_tg__ZTV8S21103C3__8S21103C2__8S21103C6[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C2__8S21103C6[16]),  16,30},
};
extern VTBL_ENTRY _ZTI8S21103C6[];
extern  VTBL_ENTRY _ZTV8S21103C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C6[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21103C7D0Ev,_ZThn88_N8S21103C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21103C7D1Ev,_ZThn88_N8S21103C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S21103C12D0Ev,_ZThn128_N9S21103C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S21103C12D1Ev,_ZThn128_N9S21103C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21103C12D0Ev,_ZThn40_N9S21103C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21103C12D1Ev,_ZThn40_N9S21103C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21103C6D0Ev,_ZTv0_n12_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21103C6D0Ev,_ZThn184_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21103C6D1Ev,_ZTv0_n12_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S21103C6D1Ev,_ZThn184_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S21103C6D0Ev,_ZTv0_n76_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21103C6D0Ev,_ZThn144_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S21103C6D1Ev,_ZTv0_n76_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S21103C6D1Ev,_ZThn144_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C6D0Ev,_ZTv0_n48_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21103C6D0Ev,_ZThn128_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C6D1Ev,_ZTv0_n48_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21103C6D1Ev,_ZThn128_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21103C6D0Ev,_ZTv0_n24_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21103C6D0Ev,_ZThn40_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21103C6D1Ev,_ZTv0_n24_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21103C6D1Ev,_ZThn40_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21103C6 = {  "S21103C6", // class name
  bases_S21103C6, 11,
  &(vtc_S21103C6[0]), // expected_vtbl_contents
  &(vtt_S21103C6[0]), // expected_vtt_contents
  ABISELECT(448,228), // object size
  NSPAIRA(_ZTI8S21103C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21103C6),182, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21103C6),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21103C14  : S21103C5 , S21103C3 , S21103C2 {
  int s21103c14f0;
  virtual  ~S21103C14(); // _ZN9S21103C14D2Ev
  virtual void  v53(); // _ZN9S21103C143v53Ev
  virtual void  v54(); // _ZN9S21103C143v54Ev
  virtual void  v55(); // _ZN9S21103C143v55Ev
  virtual void  v56(); // _ZN9S21103C143v56Ev
  virtual void  v57(); // _ZN9S21103C143v57Ev
  virtual void  v58(); // _ZN9S21103C143v58Ev
  virtual void  v59(); // _ZN9S21103C143v59Ev
  virtual void  v60(); // _ZN9S21103C143v60Ev
  S21103C14(); // tgen
};
//SIG(-1 S21103C14) C1{ BC2{ v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5]} BC3{ VBC4{ v18 v19 v20 v21 v22 v23 v24 v25} vd v26 v27 v28 v29 Fi[2] Fp} BC5{ VBC3 BC2 v30 v31 v32 v33 v34 Fi FD} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi}


 S21103C14 ::~S21103C14(){ note_dtor("S21103C14", this);}
void  S21103C14 ::v53(){vfunc_called(this, "_ZN9S21103C143v53Ev");}
void  S21103C14 ::v54(){vfunc_called(this, "_ZN9S21103C143v54Ev");}
void  S21103C14 ::v55(){vfunc_called(this, "_ZN9S21103C143v55Ev");}
void  S21103C14 ::v56(){vfunc_called(this, "_ZN9S21103C143v56Ev");}
void  S21103C14 ::v57(){vfunc_called(this, "_ZN9S21103C143v57Ev");}
void  S21103C14 ::v58(){vfunc_called(this, "_ZN9S21103C143v58Ev");}
void  S21103C14 ::v59(){vfunc_called(this, "_ZN9S21103C143v59Ev");}
void  S21103C14 ::v60(){vfunc_called(this, "_ZN9S21103C143v60Ev");}
S21103C14 ::S21103C14(){ note_ctor("S21103C14", this);} // tgen

static void Test_S21103C14()
{
  extern Class_Descriptor cd_S21103C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,26)];
    init_test(&cd_S21103C14, buf);
    S21103C14 *dp, &lv = *(dp=new (buf) S21103C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S21103C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21103C14)");
    /*is_ambiguous_... S21103C14::S21103C5 */ AMB_check_base_class_offset(lv, (S21103C5*), 0, "S21103C14");
    /*is_ambiguous_... S21103C14::S21103C3 */ AMB_check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*), ABISELECT(48,24), "S21103C14");
    /*is_ambiguous_... S21103C14::S21103C3 */ AMB_check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*), ABISELECT(48,24), "S21103C14");
    /*is_ambiguous_... S21103C14::S21103C3 */ AMB_check_base_class_offset(lv, (S21103C3*), ABISELECT(48,24), "S21103C14");
    check_base_class_offset(lv, (S21103C3*)(S21103C2*), ABISELECT(168,84), "S21103C14");
    check_base_class_offset(lv, (S21103C5*)(S21103C2*), ABISELECT(80,40), "S21103C14");
    check_base_class_offset(lv, (S21103C2*), ABISELECT(80,40), "S21103C14");
    check_field_offset(lv, s21103c14f0, ABISELECT(160,80), "S21103C14.s21103c14f0");
    test_class_info(&lv, &cd_S21103C14);
    dp->~S21103C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C14(Test_S21103C14, "S21103C14", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN9S21103C14C1Ev();
extern void _ZN9S21103C14D2Ev();
Name_Map name_map_S21103C14[] = {
  NSPAIR(_ZN9S21103C14C1Ev),
  NSPAIR(_ZN9S21103C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C4_nt;
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C2;
extern VTBL_ENTRY _ZTI8S21103C2[];
extern  VTBL_ENTRY _ZTV8S21103C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C2[];
static Base_Class bases_S21103C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21103C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21103C4_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21103C3,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21103C3,    ABISELECT(168,84), //bcp->offset
    68, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21103C5,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21103C2,    ABISELECT(80,40), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21103C14[];
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN9S21103C14D1Ev();
extern void _ZN9S21103C14D0Ev();
extern void _ZN9S21103C143v53Ev();
extern void _ZN9S21103C143v54Ev();
extern void _ZN9S21103C143v55Ev();
extern void _ZN9S21103C143v56Ev();
extern void _ZN9S21103C143v57Ev();
extern void _ZN9S21103C143v58Ev();
extern void _ZN9S21103C143v59Ev();
extern void _ZN9S21103C143v60Ev();
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZThn48_N9S21103C14D1Ev,_ZThn24_N9S21103C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S21103C14D0Ev,_ZThn24_N9S21103C14D0Ev)();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void ABISELECT(_ZThn80_N9S21103C14D1Ev,_ZThn40_N9S21103C14D1Ev)();
extern void ABISELECT(_ZThn80_N9S21103C14D0Ev,_ZThn40_N9S21103C14D0Ev)();
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N9S21103C14D1Ev,_ZTv0_n48_N9S21103C14D1Ev)();
extern void ABISELECT(_ZThn168_N9S21103C14D1Ev,_ZThn84_N9S21103C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S21103C14D0Ev,_ZTv0_n48_N9S21103C14D0Ev)();
extern void ABISELECT(_ZThn168_N9S21103C14D0Ev,_ZThn84_N9S21103C14D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY vtc_S21103C14[] = {
  ABISELECT(168,84),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN9S21103C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21103C14D0Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v53Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v54Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v55Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v56Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v57Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v58Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v59Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v60Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S21103C14D1Ev,_ZThn24_N9S21103C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S21103C14D0Ev,_ZThn24_N9S21103C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S21103C14D1Ev,_ZThn40_N9S21103C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S21103C14D0Ev,_ZThn40_N9S21103C14D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-168,-84),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C14D1Ev,_ZTv0_n48_N9S21103C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C14D0Ev,_ZTv0_n48_N9S21103C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern VTBL_ENTRY _ZTV9S21103C14[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__A__9S21103C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void _ZN8S21103C2D1Ev();
extern void _ZN8S21103C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C2__9S21103C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D0Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev)();
extern void ABISELECT(_ZThn88_N8S21103C2D1Ev,_ZThn44_N8S21103C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev)();
extern void ABISELECT(_ZThn88_N8S21103C2D0Ev,_ZThn44_N8S21103C2D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C2__9S21103C14[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
static  VTBL_ENTRY _tg__ZTV11S21103C4_nt__8S21103C2__9S21103C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__A1__9S21103C14[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
static  VTBL_ENTRY _tg__ZTV11S21103C4_nt__8S21103C3__A1__9S21103C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
};
static  VTT_ENTRY vtt_S21103C14[] = {
  {&(_ZTV9S21103C14[4]),  4,98},
  {&(_tg__ZTV8S21103C3__A__9S21103C14[11]),  11,25},
  {&(_tg__ZTV8S21103C3__A__9S21103C14[11]),  11,25},
  {&(_tg__ZTV8S21103C2__9S21103C14[4]),  4,20},
  {&(_tg__ZTV8S21103C3__8S21103C2__9S21103C14[16]),  16,30},
  {&(_tg__ZTV11S21103C4_nt__8S21103C2__9S21103C14[10]),  10,18},
  {&(_ZTV9S21103C14[34]),  34,98},
  {&(_ZTV9S21103C14[34]),  34,98},
  {&(_ZTV9S21103C14[52]),  52,98},
  {&(_ZTV9S21103C14[84]),  84,98},
  {&(_tg__ZTV8S21103C3__A1__9S21103C14[11]),  11,25},
  {&(_tg__ZTV11S21103C4_nt__8S21103C3__A1__9S21103C14[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S21103C14[];
extern  VTBL_ENTRY _ZTV9S21103C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21103C14[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21103C2D0Ev,_ZThn44_N8S21103C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21103C2D1Ev,_ZThn44_N8S21103C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C14D0Ev,_ZTv0_n48_N9S21103C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S21103C14D0Ev,_ZThn84_N9S21103C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C14D1Ev,_ZTv0_n48_N9S21103C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S21103C14D1Ev,_ZThn84_N9S21103C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21103C14 = {  "S21103C14", // class name
  bases_S21103C14, 6,
  &(vtc_S21103C14[0]), // expected_vtbl_contents
  &(vtt_S21103C14[0]), // expected_vtt_contents
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI9S21103C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21103C14),98, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21103C14),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21103C1  : virtual S21103C2 , S21103C6 , virtual S21103C13 , virtual S21103C5 , S21103C14 {
  long double s21103c1f0[3];
  int s21103c1f1;
  virtual  ~S21103C1(); // _ZN8S21103C1D2Ev
  S21103C1(); // tgen
};
//SIG(1 S21103C1) C1{ VBC2{ VBC3{ VBC4{ v1 v2 v3 v4 v5 v6 v7 v8} vd v9 v10 v11 v12 Fi[2] Fp} BC5{ v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[5]} v22 v23 v24 v25 v26 Fi FD} BC6{ VBC7{ VBC8{ v27 FD} BC9{ vd v28 v29 v30 v31 v32 v33 v34 FU10{ m Fl}[10]} VBC3 BC5 v35 v36 v37 v38 v39 v40 FU11{ m}} BC12{ VBC7 v41 v42 Fp Fi FU10 FL:24} BC13{ v43 v44 v45 v46 v47 v48 v49 v50 FL} VBC2 VBC9 v51 v52 FU11 Fi} VBC13 VBC5 BC14{ BC5 BC3 BC2 vd v53 v54 v55 v56 v57 v58 v59 v60 Fi} vd FD[3] Fi}


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

static void Test_S21103C1()
{
  extern Class_Descriptor cd_S21103C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(48,98)];
    init_test(&cd_S21103C1, buf);
    S21103C1 *dp, &lv = *(dp=new (buf) S21103C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(752,388), "sizeof(S21103C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21103C1)");
    /*is_ambiguous_... S21103C1::S21103C3 */ AMB_check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*), ABISELECT(384,204), "S21103C1");
    /*is_ambiguous_... S21103C14::S21103C3 */ AMB_check_base_class_offset(lv, (S21103C4_nt*)(S21103C3*)(S21103C14*), ABISELECT(384,204), "S21103C1");
    /*is_ambiguous_... S21103C1::S21103C2 */ AMB_check_base_class_offset(lv, (S21103C3*)(S21103C2*), ABISELECT(384,204), "S21103C1");
    check_base_class_offset(lv, (S21103C3*)(S21103C7*), ABISELECT(384,204), "S21103C1");
    check_base_class_offset(lv, (S21103C3*)(S21103C2*)(S21103C14*), ABISELECT(384,204), "S21103C1");
    /*is_ambiguous_... S21103C1::S21103C2 */ AMB_check_base_class_offset(lv, (S21103C5*)(S21103C2*), ABISELECT(304,164), "S21103C1");
    /*is_ambiguous_... S21103C1::S21103C2 */ AMB_check_base_class_offset(lv, (S21103C2*), ABISELECT(304,164), "S21103C1");
    check_base_class_offset(lv, (S21103C2*)(S21103C6*), ABISELECT(304,164), "S21103C1");
    check_base_class_offset(lv, (S21103C8*)(S21103C7*), ABISELECT(560,292), "S21103C1");
    check_base_class_offset(lv, (S21103C9*)(S21103C7*), ABISELECT(408,220), "S21103C1");
    check_base_class_offset(lv, (S21103C5*)(S21103C7*), ABISELECT(496,264), "S21103C1");
    check_base_class_offset(lv, (S21103C7*)(S21103C6*), ABISELECT(408,220), "S21103C1");
    check_base_class_offset(lv, (S21103C7*)(S21103C12*)(S21103C6*), ABISELECT(408,220), "S21103C1");
    check_base_class_offset(lv, (S21103C12*)(S21103C6*), 0, "S21103C1");
    check_base_class_offset(lv, (S21103C13*)(S21103C6*), ABISELECT(40,20), "S21103C1");
    /*is_ambiguous_... S21103C6::S21103C9 */ AMB_check_base_class_offset(lv, (S21103C9*)(S21103C6*), ABISELECT(592,308), "S21103C1");
    check_base_class_offset(lv, (S21103C6*), 0, "S21103C1");
    /*is_ambiguous_... S21103C1::S21103C13 */ AMB_check_base_class_offset(lv, (S21103C13*), ABISELECT(680,352), "S21103C1");
    /*is_ambiguous_... S21103C1::S21103C5 */ AMB_check_base_class_offset(lv, (S21103C5*), ABISELECT(696,364), "S21103C1");
    /*is_ambiguous_... S21103C14::S21103C5 */ AMB_check_base_class_offset(lv, (S21103C5*)(S21103C14*), ABISELECT(64,40), "S21103C1");
    /*is_ambiguous_... S21103C14::S21103C3 */ AMB_check_base_class_offset(lv, (S21103C3*)(S21103C14*), ABISELECT(112,64), "S21103C1");
    check_base_class_offset(lv, (S21103C5*)(S21103C2*)(S21103C14*), ABISELECT(144,80), "S21103C1");
    check_base_class_offset(lv, (S21103C2*)(S21103C14*), ABISELECT(144,80), "S21103C1");
    check_base_class_offset(lv, (S21103C14*), ABISELECT(64,40), "S21103C1");
    check_field_offset(lv, s21103c1f0, ABISELECT(240,124), "S21103C1.s21103c1f0");
    check_field_offset(lv, s21103c1f1, ABISELECT(288,160), "S21103C1.s21103c1f1");
    test_class_info(&lv, &cd_S21103C1);
    dp->~S21103C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21103C1(Test_S21103C1, "S21103C1", ABISELECT(752,388));

#else // __cplusplus

extern void _ZN8S21103C1C1Ev();
extern void _ZN8S21103C1D2Ev();
Name_Map name_map_S21103C1[] = {
  NSPAIR(_ZN8S21103C1C1Ev),
  NSPAIR(_ZN8S21103C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21103C4_nt;
extern VTBL_ENTRY _ZTI11S21103C4_nt[];
extern  VTBL_ENTRY _ZTV11S21103C4_nt[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C2;
extern VTBL_ENTRY _ZTI8S21103C2[];
extern  VTBL_ENTRY _ZTV8S21103C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C2[];
extern Class_Descriptor cd_S21103C8;
extern VTBL_ENTRY _ZTI8S21103C8[];
extern  VTBL_ENTRY _ZTV8S21103C8[];
extern Class_Descriptor cd_S21103C9;
extern VTBL_ENTRY _ZTI8S21103C9[];
extern  VTBL_ENTRY _ZTV8S21103C9[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C7;
extern VTBL_ENTRY _ZTI8S21103C7[];
extern  VTBL_ENTRY _ZTV8S21103C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C7[];
extern Class_Descriptor cd_S21103C12;
extern VTBL_ENTRY _ZTI9S21103C12[];
extern  VTBL_ENTRY _ZTV9S21103C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21103C12[];
extern Class_Descriptor cd_S21103C13;
extern VTBL_ENTRY _ZTI9S21103C13[];
extern  VTBL_ENTRY _ZTV9S21103C13[];
extern Class_Descriptor cd_S21103C9;
extern VTBL_ENTRY _ZTI8S21103C9[];
extern  VTBL_ENTRY _ZTV8S21103C9[];
extern Class_Descriptor cd_S21103C6;
extern VTBL_ENTRY _ZTI8S21103C6[];
extern  VTBL_ENTRY _ZTV8S21103C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C6[];
extern Class_Descriptor cd_S21103C13;
extern VTBL_ENTRY _ZTI9S21103C13[];
extern  VTBL_ENTRY _ZTV9S21103C13[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C3;
extern VTBL_ENTRY _ZTI8S21103C3[];
extern  VTBL_ENTRY _ZTV8S21103C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C3[];
extern Class_Descriptor cd_S21103C5;
extern VTBL_ENTRY _ZTI8S21103C5[];
extern  VTBL_ENTRY _ZTV8S21103C5[];
extern Class_Descriptor cd_S21103C2;
extern VTBL_ENTRY _ZTI8S21103C2[];
extern  VTBL_ENTRY _ZTV8S21103C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C2[];
extern Class_Descriptor cd_S21103C14;
extern VTBL_ENTRY _ZTI9S21103C14[];
extern  VTBL_ENTRY _ZTV9S21103C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21103C14[];
static Base_Class bases_S21103C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21103C4_nt,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21103C3,    ABISELECT(384,204), //bcp->offset
    145, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21103C5,    ABISELECT(304,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21103C2,    ABISELECT(304,164), //bcp->offset
    110, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21103C8,    ABISELECT(560,292), //bcp->offset
    229, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21103C9,    ABISELECT(408,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21103C5,    ABISELECT(496,264), //bcp->offset
    218, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21103C7,    ABISELECT(408,220), //bcp->offset
    175, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21103C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21103C13,    ABISELECT(40,20), //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
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21103C9,    ABISELECT(592,308), //bcp->offset
    233, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S21103C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21103C13,    ABISELECT(680,352), //bcp->offset
    252, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21103C5,    ABISELECT(696,364), //bcp->offset
    270, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21103C5,    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
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21103C3,    ABISELECT(112,64), //bcp->offset
    65, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21103C5,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S21103C2,    ABISELECT(144,80), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21103C14,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21103C1[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN9S21103C123v36Ev();
extern void _ZN9S21103C123v37Ev();
extern void _ZN8S21103C1D1Ev();
extern void _ZN8S21103C1D0Ev();
extern void _ZN8S21103C63v51Ev();
extern void _ZN8S21103C63v52Ev();
extern void _ZN9S21103C133v38Ev();
extern void _ZN9S21103C133v39Ev();
extern void _ZN9S21103C133v40Ev();
extern void _ZN9S21103C133v41Ev();
extern void _ZN9S21103C133v42Ev();
extern void _ZN9S21103C133v43Ev();
extern void _ZN9S21103C133v44Ev();
extern void _ZN9S21103C133v45Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void ABISELECT(_ZThn64_N8S21103C1D1Ev,_ZThn40_N8S21103C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S21103C1D0Ev,_ZThn40_N8S21103C1D0Ev)();
extern void _ZN9S21103C143v53Ev();
extern void _ZN9S21103C143v54Ev();
extern void _ZN9S21103C143v55Ev();
extern void _ZN9S21103C143v56Ev();
extern void _ZN9S21103C143v57Ev();
extern void _ZN9S21103C143v58Ev();
extern void _ZN9S21103C143v59Ev();
extern void _ZN9S21103C143v60Ev();
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZThn112_N8S21103C1D1Ev,_ZThn64_N8S21103C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S21103C1D0Ev,_ZThn64_N8S21103C1D0Ev)();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void ABISELECT(_ZThn144_N8S21103C1D1Ev,_ZThn80_N8S21103C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S21103C1D0Ev,_ZThn80_N8S21103C1D0Ev)();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void ABISELECT(_ZTv0_n152_N8S21103C1D1Ev,_ZTv0_n76_N8S21103C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S21103C1D1Ev,_ZThn164_N8S21103C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N8S21103C1D0Ev,_ZTv0_n76_N8S21103C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S21103C1D0Ev,_ZThn164_N8S21103C1D0Ev)() __attribute__((weak));
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C1D1Ev,_ZTv0_n48_N8S21103C1D1Ev)();
extern void ABISELECT(_ZThn384_N8S21103C1D1Ev,_ZThn204_N8S21103C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C1D0Ev,_ZTv0_n48_N8S21103C1D0Ev)();
extern void ABISELECT(_ZThn384_N8S21103C1D0Ev,_ZThn204_N8S21103C1D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
extern void ABISELECT(_ZTv0_n48_N8S21103C1D1Ev,_ZTv0_n24_N8S21103C1D1Ev)();
extern void ABISELECT(_ZThn408_N8S21103C1D1Ev,_ZThn220_N8S21103C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21103C1D0Ev,_ZTv0_n24_N8S21103C1D0Ev)();
extern void ABISELECT(_ZThn408_N8S21103C1D0Ev,_ZThn220_N8S21103C1D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C82v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S21103C1D1Ev,_ZTv0_n12_N8S21103C1D1Ev)();
extern void ABISELECT(_ZThn592_N8S21103C1D1Ev,_ZThn308_N8S21103C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21103C1D0Ev,_ZTv0_n12_N8S21103C1D0Ev)();
extern void ABISELECT(_ZThn592_N8S21103C1D0Ev,_ZThn308_N8S21103C1D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN9S21103C133v38Ev();
extern void _ZN9S21103C133v39Ev();
extern void _ZN9S21103C133v40Ev();
extern void _ZN9S21103C133v41Ev();
extern void _ZN9S21103C133v42Ev();
extern void _ZN9S21103C133v43Ev();
extern void _ZN9S21103C133v44Ev();
extern void _ZN9S21103C133v45Ev();
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
static  VTBL_ENTRY vtc_S21103C1[] = {
  ABISELECT(696,364),
  ABISELECT(680,352),
  ABISELECT(592,308),
  ABISELECT(304,164),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(560,292),
  ABISELECT(408,220),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v36Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v37Ev,
  (VTBL_ENTRY)&_ZN8S21103C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C63v51Ev,
  (VTBL_ENTRY)&_ZN8S21103C63v52Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN9S21103C133v38Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v39Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v40Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v41Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v42Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v43Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v44Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v45Ev,
  ABISELECT(320,164),
  ABISELECT(320,164),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21103C1D1Ev,_ZThn40_N8S21103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21103C1D0Ev,_ZThn40_N8S21103C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21103C143v53Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v54Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v55Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v56Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v57Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v58Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v59Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v60Ev,
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S21103C1D1Ev,_ZThn64_N8S21103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S21103C1D0Ev,_ZThn64_N8S21103C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
  ABISELECT(240,124),
  ABISELECT(240,124),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S21103C1D1Ev,_ZThn80_N8S21103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S21103C1D0Ev,_ZThn80_N8S21103C1D0Ev),
  ABISELECT(-304,-164),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S21103C1D1Ev,_ZTv0_n76_N8S21103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S21103C1D0Ev,_ZTv0_n76_N8S21103C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C1D1Ev,_ZTv0_n48_N8S21103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C1D0Ev,_ZTv0_n48_N8S21103C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-408,-220),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(152,72),
  ABISELECT(-408,-220),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21103C1D1Ev,_ZTv0_n24_N8S21103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21103C1D0Ev,_ZTv0_n24_N8S21103C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
  ABISELECT(-496,-264),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  0,
  ABISELECT(-560,-292),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-592,-308),
  ABISELECT(-592,-308),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21103C1D1Ev,_ZTv0_n12_N8S21103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21103C1D0Ev,_ZTv0_n12_N8S21103C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-680,-352),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN9S21103C133v38Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v39Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v40Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v41Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v42Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v43Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v44Ev,
  (VTBL_ENTRY)&_ZN9S21103C133v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-696,-364),
  (VTBL_ENTRY)&(_ZTI8S21103C1[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
};
extern VTBL_ENTRY _ZTV8S21103C1[];
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN9S21103C123v36Ev();
extern void _ZN9S21103C123v37Ev();
extern void _ZN8S21103C6D1Ev();
extern void _ZN8S21103C6D0Ev();
extern void _ZN8S21103C63v51Ev();
extern void _ZN8S21103C63v52Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C6__8S21103C1[] = {
  ABISELECT(592,308),
  ABISELECT(304,164),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(560,292),
  ABISELECT(408,220),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v36Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v37Ev,
  (VTBL_ENTRY)&_ZN8S21103C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C63v51Ev,
  (VTBL_ENTRY)&_ZN8S21103C63v52Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN9S21103C123v36Ev();
extern void _ZN9S21103C123v37Ev();
extern void _ZN9S21103C12D1Ev();
extern void _ZN9S21103C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21103C128S21103C6__8S21103C1[] = {
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(560,292),
  ABISELECT(408,220),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v36Ev,
  (VTBL_ENTRY)&_ZN9S21103C123v37Ev,
  (VTBL_ENTRY)&_ZN9S21103C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21103C12D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev)();
extern void ABISELECT(_ZThn408_N9S21103C12D1Ev,_ZThn220_N9S21103C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev)();
extern void ABISELECT(_ZThn408_N9S21103C12D0Ev,_ZThn220_N9S21103C12D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C7__9S21103C128S21103C6__8S21103C1[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-408,-220),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(152,72),
  ABISELECT(-408,-220),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
};
extern void _ZN8S21103C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C8__9S21103C128S21103C6__8S21103C1[] = {
  0,
  ABISELECT(-560,-292),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev)();
extern void ABISELECT(_ZThn384_N9S21103C12D1Ev,_ZThn204_N9S21103C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev)();
extern void ABISELECT(_ZThn384_N9S21103C12D0Ev,_ZThn204_N9S21103C12D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__9S21103C128S21103C6__8S21103C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C58S21103C7__9S21103C128S21103C6__8S21103C1[] = {
  ABISELECT(-496,-264),
  (VTBL_ENTRY)&(_ZTI9S21103C12[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S21103C6D1Ev,_ZTv0_n24_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn408_N8S21103C6D1Ev,_ZThn220_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21103C6D0Ev,_ZTv0_n24_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn408_N8S21103C6D0Ev,_ZThn220_N8S21103C6D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C7__8S21103C6__8S21103C1[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-408,-220),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(152,72),
  ABISELECT(-408,-220),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21103C6D1Ev,_ZTv0_n24_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21103C6D0Ev,_ZTv0_n24_N8S21103C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
};
extern void _ZN8S21103C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C8__8S21103C6__8S21103C1[] = {
  0,
  ABISELECT(-560,-292),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C6D1Ev,_ZTv0_n48_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn384_N8S21103C6D1Ev,_ZThn204_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C6D0Ev,_ZTv0_n48_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn384_N8S21103C6D0Ev,_ZThn204_N8S21103C6D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C6__8S21103C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C6D1Ev,_ZTv0_n48_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C6D0Ev,_ZTv0_n48_N8S21103C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C58S21103C7__8S21103C6__8S21103C1[] = {
  ABISELECT(-496,-264),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void ABISELECT(_ZTv0_n152_N8S21103C6D1Ev,_ZTv0_n76_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn304_N8S21103C6D1Ev,_ZThn164_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N8S21103C6D0Ev,_ZTv0_n76_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn304_N8S21103C6D0Ev,_ZThn164_N8S21103C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21103C2__8S21103C6__8S21103C1[] = {
  ABISELECT(-304,-164),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S21103C6D1Ev,_ZTv0_n76_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S21103C6D0Ev,_ZTv0_n76_N8S21103C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21103C6D1Ev,_ZTv0_n12_N8S21103C6D1Ev)();
extern void ABISELECT(_ZThn592_N8S21103C6D1Ev,_ZThn308_N8S21103C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21103C6D0Ev,_ZTv0_n12_N8S21103C6D0Ev)();
extern void ABISELECT(_ZThn592_N8S21103C6D0Ev,_ZThn308_N8S21103C6D0Ev)() __attribute__((weak));
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C9__A1__8S21103C6__8S21103C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-592,-308),
  ABISELECT(-592,-308),
  (VTBL_ENTRY)&(_ZTI8S21103C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21103C6D1Ev,_ZTv0_n12_N8S21103C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21103C6D0Ev,_ZTv0_n12_N8S21103C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN9S21103C14D1Ev();
extern void _ZN9S21103C14D0Ev();
extern void _ZN9S21103C143v53Ev();
extern void _ZN9S21103C143v54Ev();
extern void _ZN9S21103C143v55Ev();
extern void _ZN9S21103C143v56Ev();
extern void _ZN9S21103C143v57Ev();
extern void _ZN9S21103C143v58Ev();
extern void _ZN9S21103C143v59Ev();
extern void _ZN9S21103C143v60Ev();
static  VTBL_ENTRY _tg__ZTV9S21103C14__8S21103C1[] = {
  ABISELECT(320,164),
  ABISELECT(320,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN9S21103C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21103C14D0Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v53Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v54Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v55Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v56Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v57Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v58Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v59Ev,
  (VTBL_ENTRY)&_ZN9S21103C143v60Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C39S21103C14__A1__8S21103C1[] = {
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
static  VTBL_ENTRY _tg__ZTV11S21103C4_nt__8S21103C39S21103C14__A1__8S21103C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void _ZN8S21103C2D1Ev();
extern void _ZN8S21103C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C29S21103C14__A1__8S21103C1[] = {
  ABISELECT(240,124),
  ABISELECT(240,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D0Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S21103C2D1Ev,_ZThn124_N8S21103C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S21103C2D0Ev,_ZThn124_N8S21103C2D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C29S21103C14__A1__8S21103C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZThn48_N9S21103C14D1Ev,_ZThn24_N9S21103C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S21103C14D0Ev,_ZThn24_N9S21103C14D0Ev)();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__A__9S21103C14__8S21103C1[] = {
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(272,140),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S21103C14D1Ev,_ZThn24_N9S21103C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S21103C14D0Ev,_ZThn24_N9S21103C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N9S21103C14D1Ev,_ZTv0_n48_N9S21103C14D1Ev)();
extern void ABISELECT(_ZThn320_N9S21103C14D1Ev,_ZThn164_N9S21103C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S21103C14D0Ev,_ZTv0_n48_N9S21103C14D0Ev)();
extern void ABISELECT(_ZThn320_N9S21103C14D0Ev,_ZThn164_N9S21103C14D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__A1__9S21103C14__8S21103C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-320,-164),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-164),
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C14D1Ev,_ZTv0_n48_N9S21103C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S21103C14D0Ev,_ZTv0_n48_N9S21103C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void ABISELECT(_ZThn80_N9S21103C14D1Ev,_ZThn40_N9S21103C14D1Ev)();
extern void ABISELECT(_ZThn80_N9S21103C14D0Ev,_ZThn40_N9S21103C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21103C2__9S21103C14__8S21103C1[] = {
  ABISELECT(240,124),
  ABISELECT(240,124),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S21103C14[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S21103C14D1Ev,_ZThn40_N9S21103C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S21103C14D0Ev,_ZThn40_N9S21103C14D0Ev),
};
extern void _ZN8S21103C53v21Ev();
extern void _ZN8S21103C53v22Ev();
extern void _ZN8S21103C53v23Ev();
extern void _ZN8S21103C53v24Ev();
extern void _ZN8S21103C53v25Ev();
extern void _ZN8S21103C53v26Ev();
extern void _ZN8S21103C53v27Ev();
extern void _ZN8S21103C53v28Ev();
extern void _ZN8S21103C53v29Ev();
extern void _ZN8S21103C23v46Ev();
extern void _ZN8S21103C23v47Ev();
extern void _ZN8S21103C23v48Ev();
extern void _ZN8S21103C23v49Ev();
extern void _ZN8S21103C23v50Ev();
extern void _ZN8S21103C2D1Ev();
extern void _ZN8S21103C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C2__8S21103C1[] = {
  ABISELECT(80,40),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN8S21103C53v21Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v22Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v23Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v24Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v25Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v26Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v27Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21103C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v46Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v47Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v48Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v49Ev,
  (VTBL_ENTRY)&_ZN8S21103C23v50Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C2D0Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S21103C2D1Ev,_ZThn40_N8S21103C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S21103C2D0Ev,_ZThn40_N8S21103C2D0Ev)() __attribute__((weak));
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C2__8S21103C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S21103C2[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void _ZN8S21103C3D1Ev();
extern void _ZN8S21103C3D0Ev();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C3[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
extern void _ZN8S21103C7D1Ev();
extern void _ZN8S21103C7D0Ev();
extern void _ZN8S21103C92v2Ev();
extern void _ZN8S21103C92v3Ev();
extern void _ZN8S21103C92v4Ev();
extern void _ZN8S21103C92v5Ev();
extern void _ZN8S21103C92v6Ev();
extern void _ZN8S21103C92v7Ev();
extern void _ZN8S21103C92v8Ev();
extern void _ZN8S21103C73v30Ev();
extern void _ZN8S21103C73v31Ev();
extern void _ZN8S21103C73v32Ev();
extern void _ZN8S21103C73v33Ev();
extern void _ZN8S21103C73v34Ev();
extern void _ZN8S21103C73v35Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C7__8S21103C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(152,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21103C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v2Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v3Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v4Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v5Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v6Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v7Ev,
  (VTBL_ENTRY)&_ZN8S21103C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v32Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v33Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v34Ev,
  (VTBL_ENTRY)&_ZN8S21103C73v35Ev,
};
extern void _ZN8S21103C82v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C8__8S21103C7__8S21103C1[] = {
  0,
  ABISELECT(-152,-72),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN8S21103C82v1Ev,
};
extern void _ZN11S21103C4_nt2v9Ev();
extern void _ZN11S21103C4_nt3v10Ev();
extern void _ZN11S21103C4_nt3v11Ev();
extern void _ZN11S21103C4_nt3v12Ev();
extern void _ZN11S21103C4_nt3v13Ev();
extern void _ZN11S21103C4_nt3v14Ev();
extern void _ZN11S21103C4_nt3v15Ev();
extern void _ZN11S21103C4_nt3v16Ev();
extern void ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev)();
extern void ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev)();
extern void _ZN8S21103C33v17Ev();
extern void _ZN8S21103C33v18Ev();
extern void _ZN8S21103C33v19Ev();
extern void _ZN8S21103C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21103C3__8S21103C7__8S21103C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S21103C7[0]),
  (VTBL_ENTRY)&_ZN11S21103C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21103C4_nt3v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D1Ev,_ZTv0_n48_N8S21103C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21103C7D0Ev,_ZTv0_n48_N8S21103C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21103C33v17Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v18Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v19Ev,
  (VTBL_ENTRY)&_ZN8S21103C33v20Ev,
};
static  VTT_ENTRY vtt_S21103C1[] = {
  {&(_ZTV8S21103C1[18]),  18,290},
  {&(_tg__ZTV8S21103C6__8S21103C1[16]),  16,30},
  {&(_tg__ZTV9S21103C128S21103C6__8S21103C1[14]),  14,26},
  {&(_tg__ZTV8S21103C7__9S21103C128S21103C6__8S21103C1[28]),  28,43},
  {&(_tg__ZTV8S21103C8__9S21103C128S21103C6__8S21103C1[3]),  3,4},
  {&(_tg__ZTV8S21103C3__9S21103C128S21103C6__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C3__9S21103C128S21103C6__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C58S21103C7__9S21103C128S21103C6__8S21103C1[2]),  2,11},
  {&(_tg__ZTV8S21103C7__8S21103C6__8S21103C1[28]),  28,43},
  {&(_tg__ZTV8S21103C8__8S21103C6__8S21103C1[3]),  3,4},
  {&(_tg__ZTV8S21103C3__8S21103C6__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C6__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C58S21103C7__8S21103C6__8S21103C1[2]),  2,11},
  {&(_tg__ZTV8S21103C2__8S21103C6__8S21103C1[19]),  19,35},
  {&(_tg__ZTV8S21103C9__A1__8S21103C6__8S21103C1[10]),  10,19},
  {&(_tg__ZTV9S21103C14__8S21103C1[4]),  4,23},
  {&(_tg__ZTV8S21103C39S21103C14__A1__8S21103C1[11]),  11,25},
  {&(_tg__ZTV11S21103C4_nt__8S21103C39S21103C14__A1__8S21103C1[10]),  10,18},
  {&(_tg__ZTV8S21103C29S21103C14__A1__8S21103C1[4]),  4,20},
  {&(_tg__ZTV8S21103C3__8S21103C29S21103C14__A1__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C29S21103C14__A1__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C3__A__9S21103C14__8S21103C1[11]),  11,25},
  {&(_tg__ZTV8S21103C3__A1__9S21103C14__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C2__9S21103C14__8S21103C1[4]),  4,20},
  {&(_tg__ZTV8S21103C3__A1__9S21103C14__8S21103C1[16]),  16,30},
  {&(_ZTV8S21103C1[129]),  129,290},
  {&(_ZTV8S21103C1[161]),  161,290},
  {&(_ZTV8S21103C1[161]),  161,290},
  {&(_ZTV8S21103C1[203]),  203,290},
  {&(_ZTV8S21103C1[232]),  232,290},
  {&(_ZTV8S21103C1[220]),  220,290},
  {&(_ZTV8S21103C1[243]),  243,290},
  {&(_ZTV8S21103C1[262]),  262,290},
  {&(_ZTV8S21103C1[281]),  281,290},
  {&(_ZTV8S21103C1[46]),  46,290},
  {&(_ZTV8S21103C1[76]),  76,290},
  {&(_ZTV8S21103C1[94]),  94,290},
  {&(_tg__ZTV8S21103C2__8S21103C1[4]),  4,20},
  {&(_tg__ZTV8S21103C3__8S21103C2__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C2__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C1[11]),  11,25},
  {&(_tg__ZTV8S21103C3__8S21103C1[11]),  11,25},
  {&(_tg__ZTV8S21103C7__8S21103C1[5]),  5,20},
  {&(_tg__ZTV8S21103C8__8S21103C7__8S21103C1[3]),  3,4},
  {&(_tg__ZTV8S21103C3__8S21103C7__8S21103C1[16]),  16,30},
  {&(_tg__ZTV8S21103C3__8S21103C7__8S21103C1[16]),  16,30},
};
extern VTBL_ENTRY _ZTI8S21103C1[];
extern  VTBL_ENTRY _ZTV8S21103C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21103C1[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C14D0Ev,_ZTv0_n48_N9S21103C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S21103C14D0Ev,_ZThn164_N9S21103C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C14D1Ev,_ZTv0_n48_N9S21103C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S21103C14D1Ev,_ZThn164_N9S21103C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C2D0Ev,_ZTv0_n48_N8S21103C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21103C2D0Ev,_ZThn40_N8S21103C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21103C2D0Ev,_ZThn124_N8S21103C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C2D1Ev,_ZTv0_n48_N8S21103C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21103C2D1Ev,_ZThn40_N8S21103C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21103C2D1Ev,_ZThn124_N8S21103C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21103C6D0Ev,_ZTv0_n12_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S21103C6D0Ev,_ZThn308_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21103C6D1Ev,_ZTv0_n12_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S21103C6D1Ev,_ZThn308_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S21103C6D0Ev,_ZTv0_n76_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21103C6D0Ev,_ZThn164_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S21103C6D1Ev,_ZTv0_n76_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21103C6D1Ev,_ZThn164_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C6D0Ev,_ZTv0_n48_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21103C6D0Ev,_ZThn204_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C6D1Ev,_ZTv0_n48_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21103C6D1Ev,_ZThn204_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21103C6D0Ev,_ZTv0_n24_N8S21103C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21103C6D0Ev,_ZThn220_N8S21103C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21103C6D1Ev,_ZTv0_n24_N8S21103C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21103C6D1Ev,_ZThn220_N8S21103C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C12D0Ev,_ZTv0_n48_N9S21103C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S21103C12D0Ev,_ZThn204_N9S21103C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S21103C12D1Ev,_ZTv0_n48_N9S21103C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S21103C12D1Ev,_ZThn204_N9S21103C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21103C12D0Ev,_ZTv0_n24_N9S21103C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21103C12D0Ev,_ZThn220_N9S21103C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S21103C12D1Ev,_ZTv0_n24_N9S21103C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S21103C12D1Ev,_ZThn220_N9S21103C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21103C1D0Ev,_ZTv0_n12_N8S21103C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S21103C1D0Ev,_ZThn308_N8S21103C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21103C1D1Ev,_ZTv0_n12_N8S21103C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S21103C1D1Ev,_ZThn308_N8S21103C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21103C1D0Ev,_ZTv0_n24_N8S21103C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21103C1D0Ev,_ZThn220_N8S21103C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21103C1D1Ev,_ZTv0_n24_N8S21103C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S21103C1D1Ev,_ZThn220_N8S21103C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C1D0Ev,_ZTv0_n48_N8S21103C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21103C1D0Ev,_ZThn204_N8S21103C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21103C1D1Ev,_ZTv0_n48_N8S21103C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S21103C1D1Ev,_ZThn204_N8S21103C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S21103C1D0Ev,_ZTv0_n76_N8S21103C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21103C1D0Ev,_ZThn164_N8S21103C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S21103C1D1Ev,_ZTv0_n76_N8S21103C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S21103C1D1Ev,_ZThn164_N8S21103C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21103C1 = {  "S21103C1", // class name
  bases_S21103C1, 19,
  &(vtc_S21103C1[0]), // expected_vtbl_contents
  &(vtt_S21103C1[0]), // expected_vtt_contents
  ABISELECT(752,388), // object size
  NSPAIRA(_ZTI8S21103C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21103C1),290, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21103C1),46, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4247C3  {
  void *s4247c3f0;
  ::S2382C25 s4247c3f1;
  ::S2403C17_nt s4247c3f2;
  char s4247c3f3;
  virtual  ~S4247C3(); // _ZN7S4247C3D1Ev
  virtual void  v13(); // _ZN7S4247C33v13Ev
  virtual void  v14(); // _ZN7S4247C33v14Ev
  virtual void  v15(); // _ZN7S4247C33v15Ev
  virtual void  v16(); // _ZN7S4247C33v16Ev
  virtual void  v17(); // _ZN7S4247C33v17Ev
  virtual void  v18(); // _ZN7S4247C33v18Ev
  virtual void  v19(); // _ZN7S4247C33v19Ev
  virtual void  v20(); // _ZN7S4247C33v20Ev
  virtual void  v21(); // _ZN7S4247C33v21Ev
  virtual void  v22(); // _ZN7S4247C33v22Ev
  virtual void  v23(); // _ZN7S4247C33v23Ev
  virtual void  v24(); // _ZN7S4247C33v24Ev
  S4247C3(); // tgen
};
//SIG(-1 S4247C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S4247C3 ::~S4247C3(){ note_dtor("S4247C3", this);}
void  S4247C3 ::v13(){vfunc_called(this, "_ZN7S4247C33v13Ev");}
void  S4247C3 ::v14(){vfunc_called(this, "_ZN7S4247C33v14Ev");}
void  S4247C3 ::v15(){vfunc_called(this, "_ZN7S4247C33v15Ev");}
void  S4247C3 ::v16(){vfunc_called(this, "_ZN7S4247C33v16Ev");}
void  S4247C3 ::v17(){vfunc_called(this, "_ZN7S4247C33v17Ev");}
void  S4247C3 ::v18(){vfunc_called(this, "_ZN7S4247C33v18Ev");}
void  S4247C3 ::v19(){vfunc_called(this, "_ZN7S4247C33v19Ev");}
void  S4247C3 ::v20(){vfunc_called(this, "_ZN7S4247C33v20Ev");}
void  S4247C3 ::v21(){vfunc_called(this, "_ZN7S4247C33v21Ev");}
void  S4247C3 ::v22(){vfunc_called(this, "_ZN7S4247C33v22Ev");}
void  S4247C3 ::v23(){vfunc_called(this, "_ZN7S4247C33v23Ev");}
void  S4247C3 ::v24(){vfunc_called(this, "_ZN7S4247C33v24Ev");}
S4247C3 ::S4247C3(){ note_ctor("S4247C3", this);} // tgen

static void Test_S4247C3()
{
  extern Class_Descriptor cd_S4247C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4247C3, buf);
    S4247C3 *dp, &lv = *(dp=new (buf) S4247C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4247C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4247C3)");
    check_field_offset(lv, s4247c3f0, ABISELECT(8,4), "S4247C3.s4247c3f0");
    check_field_offset(lv, s4247c3f1, ABISELECT(16,8), "S4247C3.s4247c3f1");
    check_field_offset(lv, s4247c3f2, ABISELECT(32,20), "S4247C3.s4247c3f2");
    check_field_offset(lv, s4247c3f3, ABISELECT(64,52), "S4247C3.s4247c3f3");
    test_class_info(&lv, &cd_S4247C3);
    dp->~S4247C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4247C3(Test_S4247C3, "S4247C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S4247C3C1Ev();
extern void _ZN7S4247C3D1Ev();
Name_Map name_map_S4247C3[] = {
  NSPAIR(_ZN7S4247C3C1Ev),
  NSPAIR(_ZN7S4247C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4247C3[];
extern void _ZN7S4247C3D1Ev();
extern void _ZN7S4247C3D0Ev();
extern void _ZN7S4247C33v13Ev();
extern void _ZN7S4247C33v14Ev();
extern void _ZN7S4247C33v15Ev();
extern void _ZN7S4247C33v16Ev();
extern void _ZN7S4247C33v17Ev();
extern void _ZN7S4247C33v18Ev();
extern void _ZN7S4247C33v19Ev();
extern void _ZN7S4247C33v20Ev();
extern void _ZN7S4247C33v21Ev();
extern void _ZN7S4247C33v22Ev();
extern void _ZN7S4247C33v23Ev();
extern void _ZN7S4247C33v24Ev();
static  VTBL_ENTRY vtc_S4247C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4247C3[0]),
  (VTBL_ENTRY)&_ZN7S4247C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4247C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v24Ev,
};
extern VTBL_ENTRY _ZTI7S4247C3[];
extern  VTBL_ENTRY _ZTV7S4247C3[];
Class_Descriptor cd_S4247C3 = {  "S4247C3", // class name
  0,0,//no base classes
  &(vtc_S4247C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S4247C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4247C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4247C2  : S4247C3 {
  ::S2382C37 s4247c2f0;
  virtual  ~S4247C2(); // _ZN7S4247C2D1Ev
  virtual void  v25(); // _ZN7S4247C23v25Ev
  virtual void  v26(); // _ZN7S4247C23v26Ev
  virtual void  v27(); // _ZN7S4247C23v27Ev
  virtual void  v28(); // _ZN7S4247C23v28Ev
  virtual void  v29(); // _ZN7S4247C23v29Ev
  virtual void  v30(); // _ZN7S4247C23v30Ev
  virtual void  v31(); // _ZN7S4247C23v31Ev
  S4247C2(); // tgen
};
//SIG(-1 S4247C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S4247C2 ::~S4247C2(){ note_dtor("S4247C2", this);}
void  S4247C2 ::v25(){vfunc_called(this, "_ZN7S4247C23v25Ev");}
void  S4247C2 ::v26(){vfunc_called(this, "_ZN7S4247C23v26Ev");}
void  S4247C2 ::v27(){vfunc_called(this, "_ZN7S4247C23v27Ev");}
void  S4247C2 ::v28(){vfunc_called(this, "_ZN7S4247C23v28Ev");}
void  S4247C2 ::v29(){vfunc_called(this, "_ZN7S4247C23v29Ev");}
void  S4247C2 ::v30(){vfunc_called(this, "_ZN7S4247C23v30Ev");}
void  S4247C2 ::v31(){vfunc_called(this, "_ZN7S4247C23v31Ev");}
S4247C2 ::S4247C2(){ note_ctor("S4247C2", this);} // tgen

static void Test_S4247C2()
{
  extern Class_Descriptor cd_S4247C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4247C2, buf);
    S4247C2 *dp, &lv = *(dp=new (buf) S4247C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4247C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4247C2)");
    check_base_class_offset(lv, (S4247C3*), 0, "S4247C2");
    check_field_offset(lv, s4247c2f0, ABISELECT(72,56), "S4247C2.s4247c2f0");
    test_class_info(&lv, &cd_S4247C2);
    dp->~S4247C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4247C2(Test_S4247C2, "S4247C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4247C2C1Ev();
extern void _ZN7S4247C2D1Ev();
Name_Map name_map_S4247C2[] = {
  NSPAIR(_ZN7S4247C2C1Ev),
  NSPAIR(_ZN7S4247C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4247C3;
extern VTBL_ENTRY _ZTI7S4247C3[];
extern  VTBL_ENTRY _ZTV7S4247C3[];
static Base_Class bases_S4247C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4247C2[];
extern void _ZN7S4247C2D1Ev();
extern void _ZN7S4247C2D0Ev();
extern void _ZN7S4247C33v13Ev();
extern void _ZN7S4247C33v14Ev();
extern void _ZN7S4247C33v15Ev();
extern void _ZN7S4247C33v16Ev();
extern void _ZN7S4247C33v17Ev();
extern void _ZN7S4247C33v18Ev();
extern void _ZN7S4247C33v19Ev();
extern void _ZN7S4247C33v20Ev();
extern void _ZN7S4247C33v21Ev();
extern void _ZN7S4247C33v22Ev();
extern void _ZN7S4247C33v23Ev();
extern void _ZN7S4247C33v24Ev();
extern void _ZN7S4247C23v25Ev();
extern void _ZN7S4247C23v26Ev();
extern void _ZN7S4247C23v27Ev();
extern void _ZN7S4247C23v28Ev();
extern void _ZN7S4247C23v29Ev();
extern void _ZN7S4247C23v30Ev();
extern void _ZN7S4247C23v31Ev();
static  VTBL_ENTRY vtc_S4247C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4247C2[0]),
  (VTBL_ENTRY)&_ZN7S4247C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4247C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v31Ev,
};
extern VTBL_ENTRY _ZTI7S4247C2[];
extern  VTBL_ENTRY _ZTV7S4247C2[];
Class_Descriptor cd_S4247C2 = {  "S4247C2", // class name
  bases_S4247C2, 1,
  &(vtc_S4247C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4247C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4247C2),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  S4247C13  {
  virtual  ~S4247C13(); // _ZN8S4247C13D1Ev
  virtual void  v32(); // _ZN8S4247C133v32Ev
  virtual void  v33(); // _ZN8S4247C133v33Ev
  virtual void  v34(); // _ZN8S4247C133v34Ev
  S4247C13(); // tgen
};
//SIG(-1 S4247C13) C1{ vd v1 v2 v3}


 S4247C13 ::~S4247C13(){ note_dtor("S4247C13", this);}
void  S4247C13 ::v32(){vfunc_called(this, "_ZN8S4247C133v32Ev");}
void  S4247C13 ::v33(){vfunc_called(this, "_ZN8S4247C133v33Ev");}
void  S4247C13 ::v34(){vfunc_called(this, "_ZN8S4247C133v34Ev");}
S4247C13 ::S4247C13(){ note_ctor("S4247C13", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S4247C13C1Ev();
extern void _ZN8S4247C13D1Ev();
Name_Map name_map_S4247C13[] = {
  NSPAIR(_ZN8S4247C13C1Ev),
  NSPAIR(_ZN8S4247C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4247C13[];
extern void _ZN8S4247C13D1Ev();
extern void _ZN8S4247C13D0Ev();
extern void _ZN8S4247C133v32Ev();
extern void _ZN8S4247C133v33Ev();
extern void _ZN8S4247C133v34Ev();
static  VTBL_ENTRY vtc_S4247C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4247C13[0]),
  (VTBL_ENTRY)&_ZN8S4247C13D1Ev,
  (VTBL_ENTRY)&_ZN8S4247C13D0Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v32Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v34Ev,
};
extern VTBL_ENTRY _ZTI8S4247C13[];
extern  VTBL_ENTRY _ZTV8S4247C13[];
Class_Descriptor cd_S4247C13 = {  "S4247C13", // class name
  0,0,//no base classes
  &(vtc_S4247C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4247C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4247C13),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  S4247C12  : S4247C13 {
  virtual  ~S4247C12(); // _ZN8S4247C12D1Ev
  virtual void  v35(); // _ZN8S4247C123v35Ev
  virtual void  v36(); // _ZN8S4247C123v36Ev
  virtual void  v37(); // _ZN8S4247C123v37Ev
  virtual void  v38(); // _ZN8S4247C123v38Ev
  S4247C12(); // tgen
};
//SIG(-1 S4247C12) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S4247C12 ::~S4247C12(){ note_dtor("S4247C12", this);}
void  S4247C12 ::v35(){vfunc_called(this, "_ZN8S4247C123v35Ev");}
void  S4247C12 ::v36(){vfunc_called(this, "_ZN8S4247C123v36Ev");}
void  S4247C12 ::v37(){vfunc_called(this, "_ZN8S4247C123v37Ev");}
void  S4247C12 ::v38(){vfunc_called(this, "_ZN8S4247C123v38Ev");}
S4247C12 ::S4247C12(){ note_ctor("S4247C12", this);} // tgen

static void Test_S4247C12()
{
  extern Class_Descriptor cd_S4247C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4247C12, buf);
    S4247C12 *dp, &lv = *(dp=new (buf) S4247C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4247C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4247C12)");
    check_base_class_offset(lv, (S4247C13*), 0, "S4247C12");
    test_class_info(&lv, &cd_S4247C12);
    dp->~S4247C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4247C12(Test_S4247C12, "S4247C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4247C12C1Ev();
extern void _ZN8S4247C12D1Ev();
Name_Map name_map_S4247C12[] = {
  NSPAIR(_ZN8S4247C12C1Ev),
  NSPAIR(_ZN8S4247C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4247C13;
extern VTBL_ENTRY _ZTI8S4247C13[];
extern  VTBL_ENTRY _ZTV8S4247C13[];
static Base_Class bases_S4247C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4247C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S4247C12[];
extern void _ZN8S4247C12D1Ev();
extern void _ZN8S4247C12D0Ev();
extern void _ZN8S4247C133v32Ev();
extern void _ZN8S4247C133v33Ev();
extern void _ZN8S4247C133v34Ev();
extern void _ZN8S4247C123v35Ev();
extern void _ZN8S4247C123v36Ev();
extern void _ZN8S4247C123v37Ev();
extern void _ZN8S4247C123v38Ev();
static  VTBL_ENTRY vtc_S4247C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4247C12[0]),
  (VTBL_ENTRY)&_ZN8S4247C12D1Ev,
  (VTBL_ENTRY)&_ZN8S4247C12D0Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v32Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v34Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v35Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v36Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v37Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v38Ev,
};
extern VTBL_ENTRY _ZTI8S4247C12[];
extern  VTBL_ENTRY _ZTV8S4247C12[];
Class_Descriptor cd_S4247C12 = {  "S4247C12", // class name
  bases_S4247C12, 1,
  &(vtc_S4247C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4247C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4247C12),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4247C11  : S4247C12 {
  ::S2382C29_nt s4247c11f0;
  ::S888C10_nt s4247c11f1;
  char s4247c11f2;
  virtual  ~S4247C11(); // _ZN8S4247C11D1Ev
  virtual void  v39(); // _ZN8S4247C113v39Ev
  virtual void  v40(); // _ZN8S4247C113v40Ev
  virtual void  v41(); // _ZN8S4247C113v41Ev
  S4247C11(); // tgen
};
//SIG(-1 S4247C11) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S4247C11 ::~S4247C11(){ note_dtor("S4247C11", this);}
void  S4247C11 ::v39(){vfunc_called(this, "_ZN8S4247C113v39Ev");}
void  S4247C11 ::v40(){vfunc_called(this, "_ZN8S4247C113v40Ev");}
void  S4247C11 ::v41(){vfunc_called(this, "_ZN8S4247C113v41Ev");}
S4247C11 ::S4247C11(){ note_ctor("S4247C11", this);} // tgen

static void Test_S4247C11()
{
  extern Class_Descriptor cd_S4247C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4247C11, buf);
    S4247C11 *dp, &lv = *(dp=new (buf) S4247C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4247C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4247C11)");
    check_base_class_offset(lv, (S4247C13*)(S4247C12*), 0, "S4247C11");
    check_base_class_offset(lv, (S4247C12*), 0, "S4247C11");
    check_field_offset(lv, s4247c11f0, ABISELECT(8,4), "S4247C11.s4247c11f0");
    check_field_offset(lv, s4247c11f1, ABISELECT(32,20), "S4247C11.s4247c11f1");
    check_field_offset(lv, s4247c11f2, ABISELECT(64,52), "S4247C11.s4247c11f2");
    test_class_info(&lv, &cd_S4247C11);
    dp->~S4247C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4247C11(Test_S4247C11, "S4247C11", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S4247C11C1Ev();
extern void _ZN8S4247C11D1Ev();
Name_Map name_map_S4247C11[] = {
  NSPAIR(_ZN8S4247C11C1Ev),
  NSPAIR(_ZN8S4247C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4247C13;
extern VTBL_ENTRY _ZTI8S4247C13[];
extern  VTBL_ENTRY _ZTV8S4247C13[];
extern Class_Descriptor cd_S4247C12;
extern VTBL_ENTRY _ZTI8S4247C12[];
extern  VTBL_ENTRY _ZTV8S4247C12[];
static Base_Class bases_S4247C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4247C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4247C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S4247C11[];
extern void _ZN8S4247C11D1Ev();
extern void _ZN8S4247C11D0Ev();
extern void _ZN8S4247C133v32Ev();
extern void _ZN8S4247C133v33Ev();
extern void _ZN8S4247C133v34Ev();
extern void _ZN8S4247C123v35Ev();
extern void _ZN8S4247C123v36Ev();
extern void _ZN8S4247C123v37Ev();
extern void _ZN8S4247C123v38Ev();
extern void _ZN8S4247C113v39Ev();
extern void _ZN8S4247C113v40Ev();
extern void _ZN8S4247C113v41Ev();
static  VTBL_ENTRY vtc_S4247C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4247C11[0]),
  (VTBL_ENTRY)&_ZN8S4247C11D1Ev,
  (VTBL_ENTRY)&_ZN8S4247C11D0Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v32Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v34Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v35Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v36Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v37Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v38Ev,
  (VTBL_ENTRY)&_ZN8S4247C113v39Ev,
  (VTBL_ENTRY)&_ZN8S4247C113v40Ev,
  (VTBL_ENTRY)&_ZN8S4247C113v41Ev,
};
extern VTBL_ENTRY _ZTI8S4247C11[];
extern  VTBL_ENTRY _ZTV8S4247C11[];
Class_Descriptor cd_S4247C11 = {  "S4247C11", // class name
  bases_S4247C11, 2,
  &(vtc_S4247C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S4247C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4247C11),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  S4247C17  {
  virtual  ~S4247C17(); // _ZN8S4247C17D1Ev
  virtual void  v42(); // _ZN8S4247C173v42Ev
  S4247C17(); // tgen
};
//SIG(-1 S4247C17) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN8S4247C17C1Ev();
extern void _ZN8S4247C17D1Ev();
Name_Map name_map_S4247C17[] = {
  NSPAIR(_ZN8S4247C17C1Ev),
  NSPAIR(_ZN8S4247C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4247C17[];
extern void _ZN8S4247C17D1Ev();
extern void _ZN8S4247C17D0Ev();
extern void _ZN8S4247C173v42Ev();
static  VTBL_ENTRY vtc_S4247C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4247C17[0]),
  (VTBL_ENTRY)&_ZN8S4247C17D1Ev,
  (VTBL_ENTRY)&_ZN8S4247C17D0Ev,
  (VTBL_ENTRY)&_ZN8S4247C173v42Ev,
};
extern VTBL_ENTRY _ZTI8S4247C17[];
extern  VTBL_ENTRY _ZTV8S4247C17[];
Class_Descriptor cd_S4247C17 = {  "S4247C17", // class name
  0,0,//no base classes
  &(vtc_S4247C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4247C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4247C17),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  S4247C19_nt  {
  void *s4247c19f0;
  int s4247c19f1[2];
  ::S2382C30 s4247c19f2;
  void  mf4247c19(); // _ZN11S4247C19_nt9mf4247c19Ev
};
//SIG(-1 S4247C19_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S4247C19_nt ::mf4247c19(){}

//skip512 S4247C19_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S4247C21_nt  {
  virtual  ~S4247C21_nt(); // _ZN11S4247C21_ntD1Ev
  virtual void  v45(); // _ZN11S4247C21_nt3v45Ev
  virtual void  v46(); // _ZN11S4247C21_nt3v46Ev
  S4247C21_nt(); // tgen
};
//SIG(-1 S4247C21_nt) C1{ vd v1 v2}


 S4247C21_nt ::~S4247C21_nt(){ note_dtor("S4247C21_nt", this);}
void  S4247C21_nt ::v45(){vfunc_called(this, "_ZN11S4247C21_nt3v45Ev");}
void  S4247C21_nt ::v46(){vfunc_called(this, "_ZN11S4247C21_nt3v46Ev");}
S4247C21_nt ::S4247C21_nt(){ note_ctor("S4247C21_nt", this);} // tgen

//skip512 S4247C21_nt

#else // __cplusplus

extern void _ZN11S4247C21_ntC1Ev();
extern void _ZN11S4247C21_ntD1Ev();
Name_Map name_map_S4247C21_nt[] = {
  NSPAIR(_ZN11S4247C21_ntC1Ev),
  NSPAIR(_ZN11S4247C21_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4247C21_nt[];
extern void _ZN11S4247C21_ntD1Ev();
extern void _ZN11S4247C21_ntD0Ev();
extern void _ZN11S4247C21_nt3v45Ev();
extern void _ZN11S4247C21_nt3v46Ev();
static  VTBL_ENTRY vtc_S4247C21_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4247C21_nt[0]),
  (VTBL_ENTRY)&_ZN11S4247C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4247C21_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S4247C21_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S4247C21_nt3v46Ev,
};
extern VTBL_ENTRY _ZTI11S4247C21_nt[];
VTBL_ENTRY *P__ZTI11S4247C21_nt = _ZTI11S4247C21_nt; 
extern  VTBL_ENTRY _ZTV11S4247C21_nt[];
Class_Descriptor cd_S4247C21_nt = {  "S4247C21_nt", // class name
  0,0,//no base classes
  &(vtc_S4247C21_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S4247C21_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S4247C21_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  S4247C18_nt  : S4247C19_nt , S4247C21_nt {
  virtual  ~S4247C18_nt(); // _ZN11S4247C18_ntD1Ev
  virtual void  v43(); // _ZN11S4247C18_nt3v43Ev
  virtual void  v44(); // _ZN11S4247C18_nt3v44Ev
  S4247C18_nt(); // tgen
};
//SIG(-1 S4247C18_nt) C1{ BC2{ m Fp Fi[2] FC3{ m}} BC4{ vd v3 v4} vd v1 v2}


 S4247C18_nt ::~S4247C18_nt(){ note_dtor("S4247C18_nt", this);}
void  S4247C18_nt ::v43(){vfunc_called(this, "_ZN11S4247C18_nt3v43Ev");}
void  S4247C18_nt ::v44(){vfunc_called(this, "_ZN11S4247C18_nt3v44Ev");}
S4247C18_nt ::S4247C18_nt(){ note_ctor("S4247C18_nt", this);} // tgen

//skip512 S4247C18_nt

#else // __cplusplus

extern void _ZN11S4247C18_ntC1Ev();
extern void _ZN11S4247C18_ntD1Ev();
Name_Map name_map_S4247C18_nt[] = {
  NSPAIR(_ZN11S4247C18_ntC1Ev),
  NSPAIR(_ZN11S4247C18_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4247C19_nt;
extern VTBL_ENTRY _ZTI11S4247C19_nt[];
extern Class_Descriptor cd_S4247C21_nt;
extern VTBL_ENTRY _ZTI11S4247C21_nt[];
extern  VTBL_ENTRY _ZTV11S4247C21_nt[];
static Base_Class bases_S4247C18_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4247C19_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_S4247C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S4247C18_nt[];
extern void _ZN11S4247C18_ntD1Ev();
extern void _ZN11S4247C18_ntD0Ev();
extern void _ZN11S4247C21_nt3v45Ev();
extern void _ZN11S4247C21_nt3v46Ev();
extern void _ZN11S4247C18_nt3v43Ev();
extern void _ZN11S4247C18_nt3v44Ev();
static  VTBL_ENTRY vtc_S4247C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4247C18_nt[0]),
  (VTBL_ENTRY)&_ZN11S4247C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4247C18_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S4247C21_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S4247C21_nt3v46Ev,
  (VTBL_ENTRY)&_ZN11S4247C18_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S4247C18_nt3v44Ev,
};
extern VTBL_ENTRY _ZTI11S4247C18_nt[];
VTBL_ENTRY *P__ZTI11S4247C18_nt = _ZTI11S4247C18_nt; 
extern  VTBL_ENTRY _ZTV11S4247C18_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4247C1  : S4247C2 , S4247C11 , S4247C17 {
  ::S4247C18_nt s4247c1f0;
  ::S2403C17_nt s4247c1f1;
  ::S888C23 s4247c1f2;
  int s4247c1f3;
  virtual  ~S4247C1(); // _ZN7S4247C1D1Ev
  virtual void  v1(); // _ZN7S4247C12v1Ev
  virtual void  v2(); // _ZN7S4247C12v2Ev
  virtual void  v3(); // _ZN7S4247C12v3Ev
  virtual void  v4(); // _ZN7S4247C12v4Ev
  virtual void  v5(); // _ZN7S4247C12v5Ev
  virtual void  v6(); // _ZN7S4247C12v6Ev
  virtual void  v7(); // _ZN7S4247C12v7Ev
  virtual void  v8(); // _ZN7S4247C12v8Ev
  virtual void  v9(); // _ZN7S4247C12v9Ev
  virtual void  v10(); // _ZN7S4247C13v10Ev
  virtual void  v11(); // _ZN7S4247C13v11Ev
  virtual void  v12(); // _ZN7S4247C13v12Ev
  S4247C1(); // tgen
};
//SIG(1 S4247C1) C1{ BC2{ BC3{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m FL[4]} Fc} vd v25 v26 v27 v28 v29 v30 v31 FC8{ m Fp Fi[2] FC9{ m}}} BC10{ BC11{ BC12{ vd v32 v33 v34} vd v35 v36 v37 v38} vd v39 v40 v41 FC13{ m Fp Fi[2] FC9} FC14{ m FL[4]} Fc} BC15{ vd v42} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC16{ BC17{ m Fp Fi[2] FC9} BC18{ vd v45 v46} vd v43 v44} FC7 FC19{ m Fp FC14 FC20{ m Fp FC21{ Fi[4]}} Fi Fc} Fi}


 S4247C1 ::~S4247C1(){ note_dtor("S4247C1", this);}
void  S4247C1 ::v1(){vfunc_called(this, "_ZN7S4247C12v1Ev");}
void  S4247C1 ::v2(){vfunc_called(this, "_ZN7S4247C12v2Ev");}
void  S4247C1 ::v3(){vfunc_called(this, "_ZN7S4247C12v3Ev");}
void  S4247C1 ::v4(){vfunc_called(this, "_ZN7S4247C12v4Ev");}
void  S4247C1 ::v5(){vfunc_called(this, "_ZN7S4247C12v5Ev");}
void  S4247C1 ::v6(){vfunc_called(this, "_ZN7S4247C12v6Ev");}
void  S4247C1 ::v7(){vfunc_called(this, "_ZN7S4247C12v7Ev");}
void  S4247C1 ::v8(){vfunc_called(this, "_ZN7S4247C12v8Ev");}
void  S4247C1 ::v9(){vfunc_called(this, "_ZN7S4247C12v9Ev");}
void  S4247C1 ::v10(){vfunc_called(this, "_ZN7S4247C13v10Ev");}
void  S4247C1 ::v11(){vfunc_called(this, "_ZN7S4247C13v11Ev");}
void  S4247C1 ::v12(){vfunc_called(this, "_ZN7S4247C13v12Ev");}
S4247C1 ::S4247C1(){ note_ctor("S4247C1", this);} // tgen

static void Test_S4247C1()
{
  extern Class_Descriptor cd_S4247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,64)];
    init_test(&cd_S4247C1, buf);
    S4247C1 *dp, &lv = *(dp=new (buf) S4247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,252), "sizeof(S4247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4247C1)");
    check_base_class_offset(lv, (S4247C3*)(S4247C2*), 0, "S4247C1");
    check_base_class_offset(lv, (S4247C2*), 0, "S4247C1");
    check_base_class_offset(lv, (S4247C13*)(S4247C12*)(S4247C11*), ABISELECT(96,72), "S4247C1");
    check_base_class_offset(lv, (S4247C12*)(S4247C11*), ABISELECT(96,72), "S4247C1");
    check_base_class_offset(lv, (S4247C11*), ABISELECT(96,72), "S4247C1");
    check_base_class_offset(lv, (S4247C17*), ABISELECT(168,128), "S4247C1");
    check_field_offset(lv, s4247c1f0, ABISELECT(176,132), "S4247C1.s4247c1f0");
    check_field_offset(lv, s4247c1f1, ABISELECT(208,152), "S4247C1.s4247c1f1");
    check_field_offset(lv, s4247c1f2, ABISELECT(240,184), "S4247C1.s4247c1f2");
    check_field_offset(lv, s4247c1f3, ABISELECT(312,248), "S4247C1.s4247c1f3");
    test_class_info(&lv, &cd_S4247C1);
    dp->~S4247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4247C1(Test_S4247C1, "S4247C1", ABISELECT(320,252));

#else // __cplusplus

extern void _ZN7S4247C1C1Ev();
extern void _ZN7S4247C1D1Ev();
Name_Map name_map_S4247C1[] = {
  NSPAIR(_ZN7S4247C1C1Ev),
  NSPAIR(_ZN7S4247C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4247C3;
extern VTBL_ENTRY _ZTI7S4247C3[];
extern  VTBL_ENTRY _ZTV7S4247C3[];
extern Class_Descriptor cd_S4247C2;
extern VTBL_ENTRY _ZTI7S4247C2[];
extern  VTBL_ENTRY _ZTV7S4247C2[];
extern Class_Descriptor cd_S4247C13;
extern VTBL_ENTRY _ZTI8S4247C13[];
extern  VTBL_ENTRY _ZTV8S4247C13[];
extern Class_Descriptor cd_S4247C12;
extern VTBL_ENTRY _ZTI8S4247C12[];
extern  VTBL_ENTRY _ZTV8S4247C12[];
extern Class_Descriptor cd_S4247C11;
extern VTBL_ENTRY _ZTI8S4247C11[];
extern  VTBL_ENTRY _ZTV8S4247C11[];
extern Class_Descriptor cd_S4247C17;
extern VTBL_ENTRY _ZTI8S4247C17[];
extern  VTBL_ENTRY _ZTV8S4247C17[];
static Base_Class bases_S4247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4247C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4247C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4247C12,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S4247C11,    ABISELECT(96,72), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4247C17,    ABISELECT(168,128), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4247C1[];
extern void _ZN7S4247C1D1Ev();
extern void _ZN7S4247C1D0Ev();
extern void _ZN7S4247C33v13Ev();
extern void _ZN7S4247C33v14Ev();
extern void _ZN7S4247C33v15Ev();
extern void _ZN7S4247C33v16Ev();
extern void _ZN7S4247C33v17Ev();
extern void _ZN7S4247C33v18Ev();
extern void _ZN7S4247C33v19Ev();
extern void _ZN7S4247C33v20Ev();
extern void _ZN7S4247C33v21Ev();
extern void _ZN7S4247C33v22Ev();
extern void _ZN7S4247C33v23Ev();
extern void _ZN7S4247C33v24Ev();
extern void _ZN7S4247C23v25Ev();
extern void _ZN7S4247C23v26Ev();
extern void _ZN7S4247C23v27Ev();
extern void _ZN7S4247C23v28Ev();
extern void _ZN7S4247C23v29Ev();
extern void _ZN7S4247C23v30Ev();
extern void _ZN7S4247C23v31Ev();
extern void _ZN7S4247C12v1Ev();
extern void _ZN7S4247C12v2Ev();
extern void _ZN7S4247C12v3Ev();
extern void _ZN7S4247C12v4Ev();
extern void _ZN7S4247C12v5Ev();
extern void _ZN7S4247C12v6Ev();
extern void _ZN7S4247C12v7Ev();
extern void _ZN7S4247C12v8Ev();
extern void _ZN7S4247C12v9Ev();
extern void _ZN7S4247C13v10Ev();
extern void _ZN7S4247C13v11Ev();
extern void _ZN7S4247C13v12Ev();
extern void ABISELECT(_ZThn96_N7S4247C1D1Ev,_ZThn72_N7S4247C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S4247C1D0Ev,_ZThn72_N7S4247C1D0Ev)();
extern void _ZN8S4247C133v32Ev();
extern void _ZN8S4247C133v33Ev();
extern void _ZN8S4247C133v34Ev();
extern void _ZN8S4247C123v35Ev();
extern void _ZN8S4247C123v36Ev();
extern void _ZN8S4247C123v37Ev();
extern void _ZN8S4247C123v38Ev();
extern void _ZN8S4247C113v39Ev();
extern void _ZN8S4247C113v40Ev();
extern void _ZN8S4247C113v41Ev();
extern void ABISELECT(_ZThn168_N7S4247C1D1Ev,_ZThn128_N7S4247C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4247C1D0Ev,_ZThn128_N7S4247C1D0Ev)();
extern void _ZN8S4247C173v42Ev();
static  VTBL_ENTRY vtc_S4247C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4247C1[0]),
  (VTBL_ENTRY)&_ZN7S4247C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4247C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4247C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4247C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4247C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4247C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4247C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4247C13v12Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S4247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S4247C1D1Ev,_ZThn72_N7S4247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S4247C1D0Ev,_ZThn72_N7S4247C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4247C133v32Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4247C133v34Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v35Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v36Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v37Ev,
  (VTBL_ENTRY)&_ZN8S4247C123v38Ev,
  (VTBL_ENTRY)&_ZN8S4247C113v39Ev,
  (VTBL_ENTRY)&_ZN8S4247C113v40Ev,
  (VTBL_ENTRY)&_ZN8S4247C113v41Ev,
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S4247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4247C1D1Ev,_ZThn128_N7S4247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4247C1D0Ev,_ZThn128_N7S4247C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4247C173v42Ev,
};
extern VTBL_ENTRY _ZTI7S4247C1[];
extern  VTBL_ENTRY _ZTV7S4247C1[];
Class_Descriptor cd_S4247C1 = {  "S4247C1", // class name
  bases_S4247C1, 6,
  &(vtc_S4247C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,252), // object size
  NSPAIRA(_ZTI7S4247C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4247C1),54, //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  S4257C3  {
  void *s4257c3f0;
  ::S2382C25 s4257c3f1;
  ::S2403C17_nt s4257c3f2;
  char s4257c3f3;
  virtual  ~S4257C3(); // _ZN7S4257C3D1Ev
  virtual void  v14(); // _ZN7S4257C33v14Ev
  virtual void  v15(); // _ZN7S4257C33v15Ev
  virtual void  v16(); // _ZN7S4257C33v16Ev
  virtual void  v17(); // _ZN7S4257C33v17Ev
  virtual void  v18(); // _ZN7S4257C33v18Ev
  virtual void  v19(); // _ZN7S4257C33v19Ev
  virtual void  v20(); // _ZN7S4257C33v20Ev
  virtual void  v21(); // _ZN7S4257C33v21Ev
  virtual void  v22(); // _ZN7S4257C33v22Ev
  virtual void  v23(); // _ZN7S4257C33v23Ev
  virtual void  v24(); // _ZN7S4257C33v24Ev
  virtual void  v25(); // _ZN7S4257C33v25Ev
  S4257C3(); // tgen
};
//SIG(-1 S4257C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S4257C3 ::~S4257C3(){ note_dtor("S4257C3", this);}
void  S4257C3 ::v14(){vfunc_called(this, "_ZN7S4257C33v14Ev");}
void  S4257C3 ::v15(){vfunc_called(this, "_ZN7S4257C33v15Ev");}
void  S4257C3 ::v16(){vfunc_called(this, "_ZN7S4257C33v16Ev");}
void  S4257C3 ::v17(){vfunc_called(this, "_ZN7S4257C33v17Ev");}
void  S4257C3 ::v18(){vfunc_called(this, "_ZN7S4257C33v18Ev");}
void  S4257C3 ::v19(){vfunc_called(this, "_ZN7S4257C33v19Ev");}
void  S4257C3 ::v20(){vfunc_called(this, "_ZN7S4257C33v20Ev");}
void  S4257C3 ::v21(){vfunc_called(this, "_ZN7S4257C33v21Ev");}
void  S4257C3 ::v22(){vfunc_called(this, "_ZN7S4257C33v22Ev");}
void  S4257C3 ::v23(){vfunc_called(this, "_ZN7S4257C33v23Ev");}
void  S4257C3 ::v24(){vfunc_called(this, "_ZN7S4257C33v24Ev");}
void  S4257C3 ::v25(){vfunc_called(this, "_ZN7S4257C33v25Ev");}
S4257C3 ::S4257C3(){ note_ctor("S4257C3", this);} // tgen

static void Test_S4257C3()
{
  extern Class_Descriptor cd_S4257C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4257C3, buf);
    S4257C3 *dp, &lv = *(dp=new (buf) S4257C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4257C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4257C3)");
    check_field_offset(lv, s4257c3f0, ABISELECT(8,4), "S4257C3.s4257c3f0");
    check_field_offset(lv, s4257c3f1, ABISELECT(16,8), "S4257C3.s4257c3f1");
    check_field_offset(lv, s4257c3f2, ABISELECT(32,20), "S4257C3.s4257c3f2");
    check_field_offset(lv, s4257c3f3, ABISELECT(64,52), "S4257C3.s4257c3f3");
    test_class_info(&lv, &cd_S4257C3);
    dp->~S4257C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4257C3(Test_S4257C3, "S4257C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S4257C3C1Ev();
extern void _ZN7S4257C3D1Ev();
Name_Map name_map_S4257C3[] = {
  NSPAIR(_ZN7S4257C3C1Ev),
  NSPAIR(_ZN7S4257C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4257C3[];
extern void _ZN7S4257C3D1Ev();
extern void _ZN7S4257C3D0Ev();
extern void _ZN7S4257C33v14Ev();
extern void _ZN7S4257C33v15Ev();
extern void _ZN7S4257C33v16Ev();
extern void _ZN7S4257C33v17Ev();
extern void _ZN7S4257C33v18Ev();
extern void _ZN7S4257C33v19Ev();
extern void _ZN7S4257C33v20Ev();
extern void _ZN7S4257C33v21Ev();
extern void _ZN7S4257C33v22Ev();
extern void _ZN7S4257C33v23Ev();
extern void _ZN7S4257C33v24Ev();
extern void _ZN7S4257C33v25Ev();
static  VTBL_ENTRY vtc_S4257C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4257C3[0]),
  (VTBL_ENTRY)&_ZN7S4257C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4257C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v25Ev,
};
extern VTBL_ENTRY _ZTI7S4257C3[];
extern  VTBL_ENTRY _ZTV7S4257C3[];
Class_Descriptor cd_S4257C3 = {  "S4257C3", // class name
  0,0,//no base classes
  &(vtc_S4257C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S4257C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4257C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4257C2  : S4257C3 {
  ::S4247C19_nt s4257c2f0;
  virtual  ~S4257C2(); // _ZN7S4257C2D1Ev
  virtual void  v26(); // _ZN7S4257C23v26Ev
  virtual void  v27(); // _ZN7S4257C23v27Ev
  virtual void  v28(); // _ZN7S4257C23v28Ev
  virtual void  v29(); // _ZN7S4257C23v29Ev
  virtual void  v30(); // _ZN7S4257C23v30Ev
  virtual void  v31(); // _ZN7S4257C23v31Ev
  virtual void  v32(); // _ZN7S4257C23v32Ev
  S4257C2(); // tgen
};
//SIG(-1 S4257C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S4257C2 ::~S4257C2(){ note_dtor("S4257C2", this);}
void  S4257C2 ::v26(){vfunc_called(this, "_ZN7S4257C23v26Ev");}
void  S4257C2 ::v27(){vfunc_called(this, "_ZN7S4257C23v27Ev");}
void  S4257C2 ::v28(){vfunc_called(this, "_ZN7S4257C23v28Ev");}
void  S4257C2 ::v29(){vfunc_called(this, "_ZN7S4257C23v29Ev");}
void  S4257C2 ::v30(){vfunc_called(this, "_ZN7S4257C23v30Ev");}
void  S4257C2 ::v31(){vfunc_called(this, "_ZN7S4257C23v31Ev");}
void  S4257C2 ::v32(){vfunc_called(this, "_ZN7S4257C23v32Ev");}
S4257C2 ::S4257C2(){ note_ctor("S4257C2", this);} // tgen

static void Test_S4257C2()
{
  extern Class_Descriptor cd_S4257C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4257C2, buf);
    S4257C2 *dp, &lv = *(dp=new (buf) S4257C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4257C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4257C2)");
    check_base_class_offset(lv, (S4257C3*), 0, "S4257C2");
    check_field_offset(lv, s4257c2f0, ABISELECT(72,56), "S4257C2.s4257c2f0");
    test_class_info(&lv, &cd_S4257C2);
    dp->~S4257C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4257C2(Test_S4257C2, "S4257C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4257C2C1Ev();
extern void _ZN7S4257C2D1Ev();
Name_Map name_map_S4257C2[] = {
  NSPAIR(_ZN7S4257C2C1Ev),
  NSPAIR(_ZN7S4257C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4257C3;
extern VTBL_ENTRY _ZTI7S4257C3[];
extern  VTBL_ENTRY _ZTV7S4257C3[];
static Base_Class bases_S4257C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4257C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4257C2[];
extern void _ZN7S4257C2D1Ev();
extern void _ZN7S4257C2D0Ev();
extern void _ZN7S4257C33v14Ev();
extern void _ZN7S4257C33v15Ev();
extern void _ZN7S4257C33v16Ev();
extern void _ZN7S4257C33v17Ev();
extern void _ZN7S4257C33v18Ev();
extern void _ZN7S4257C33v19Ev();
extern void _ZN7S4257C33v20Ev();
extern void _ZN7S4257C33v21Ev();
extern void _ZN7S4257C33v22Ev();
extern void _ZN7S4257C33v23Ev();
extern void _ZN7S4257C33v24Ev();
extern void _ZN7S4257C33v25Ev();
extern void _ZN7S4257C23v26Ev();
extern void _ZN7S4257C23v27Ev();
extern void _ZN7S4257C23v28Ev();
extern void _ZN7S4257C23v29Ev();
extern void _ZN7S4257C23v30Ev();
extern void _ZN7S4257C23v31Ev();
extern void _ZN7S4257C23v32Ev();
static  VTBL_ENTRY vtc_S4257C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4257C2[0]),
  (VTBL_ENTRY)&_ZN7S4257C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4257C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v32Ev,
};
extern VTBL_ENTRY _ZTI7S4257C2[];
extern  VTBL_ENTRY _ZTV7S4257C2[];
Class_Descriptor cd_S4257C2 = {  "S4257C2", // class name
  bases_S4257C2, 1,
  &(vtc_S4257C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4257C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4257C2),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  S4257C13  {
  virtual  ~S4257C13(); // _ZN8S4257C13D1Ev
  virtual void  v33(); // _ZN8S4257C133v33Ev
  virtual void  v34(); // _ZN8S4257C133v34Ev
  virtual void  v35(); // _ZN8S4257C133v35Ev
  S4257C13(); // tgen
};
//SIG(-1 S4257C13) C1{ vd v1 v2 v3}


 S4257C13 ::~S4257C13(){ note_dtor("S4257C13", this);}
void  S4257C13 ::v33(){vfunc_called(this, "_ZN8S4257C133v33Ev");}
void  S4257C13 ::v34(){vfunc_called(this, "_ZN8S4257C133v34Ev");}
void  S4257C13 ::v35(){vfunc_called(this, "_ZN8S4257C133v35Ev");}
S4257C13 ::S4257C13(){ note_ctor("S4257C13", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S4257C13C1Ev();
extern void _ZN8S4257C13D1Ev();
Name_Map name_map_S4257C13[] = {
  NSPAIR(_ZN8S4257C13C1Ev),
  NSPAIR(_ZN8S4257C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4257C13[];
extern void _ZN8S4257C13D1Ev();
extern void _ZN8S4257C13D0Ev();
extern void _ZN8S4257C133v33Ev();
extern void _ZN8S4257C133v34Ev();
extern void _ZN8S4257C133v35Ev();
static  VTBL_ENTRY vtc_S4257C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4257C13[0]),
  (VTBL_ENTRY)&_ZN8S4257C13D1Ev,
  (VTBL_ENTRY)&_ZN8S4257C13D0Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v34Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v35Ev,
};
extern VTBL_ENTRY _ZTI8S4257C13[];
extern  VTBL_ENTRY _ZTV8S4257C13[];
Class_Descriptor cd_S4257C13 = {  "S4257C13", // class name
  0,0,//no base classes
  &(vtc_S4257C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4257C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4257C13),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  S4257C12  : S4257C13 {
  virtual  ~S4257C12(); // _ZN8S4257C12D1Ev
  virtual void  v36(); // _ZN8S4257C123v36Ev
  virtual void  v37(); // _ZN8S4257C123v37Ev
  virtual void  v38(); // _ZN8S4257C123v38Ev
  virtual void  v39(); // _ZN8S4257C123v39Ev
  S4257C12(); // tgen
};
//SIG(-1 S4257C12) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S4257C12 ::~S4257C12(){ note_dtor("S4257C12", this);}
void  S4257C12 ::v36(){vfunc_called(this, "_ZN8S4257C123v36Ev");}
void  S4257C12 ::v37(){vfunc_called(this, "_ZN8S4257C123v37Ev");}
void  S4257C12 ::v38(){vfunc_called(this, "_ZN8S4257C123v38Ev");}
void  S4257C12 ::v39(){vfunc_called(this, "_ZN8S4257C123v39Ev");}
S4257C12 ::S4257C12(){ note_ctor("S4257C12", this);} // tgen

static void Test_S4257C12()
{
  extern Class_Descriptor cd_S4257C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4257C12, buf);
    S4257C12 *dp, &lv = *(dp=new (buf) S4257C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4257C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4257C12)");
    check_base_class_offset(lv, (S4257C13*), 0, "S4257C12");
    test_class_info(&lv, &cd_S4257C12);
    dp->~S4257C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4257C12(Test_S4257C12, "S4257C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4257C12C1Ev();
extern void _ZN8S4257C12D1Ev();
Name_Map name_map_S4257C12[] = {
  NSPAIR(_ZN8S4257C12C1Ev),
  NSPAIR(_ZN8S4257C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4257C13;
extern VTBL_ENTRY _ZTI8S4257C13[];
extern  VTBL_ENTRY _ZTV8S4257C13[];
static Base_Class bases_S4257C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4257C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S4257C12[];
extern void _ZN8S4257C12D1Ev();
extern void _ZN8S4257C12D0Ev();
extern void _ZN8S4257C133v33Ev();
extern void _ZN8S4257C133v34Ev();
extern void _ZN8S4257C133v35Ev();
extern void _ZN8S4257C123v36Ev();
extern void _ZN8S4257C123v37Ev();
extern void _ZN8S4257C123v38Ev();
extern void _ZN8S4257C123v39Ev();
static  VTBL_ENTRY vtc_S4257C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4257C12[0]),
  (VTBL_ENTRY)&_ZN8S4257C12D1Ev,
  (VTBL_ENTRY)&_ZN8S4257C12D0Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v34Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v35Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v36Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v37Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v38Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v39Ev,
};
extern VTBL_ENTRY _ZTI8S4257C12[];
extern  VTBL_ENTRY _ZTV8S4257C12[];
Class_Descriptor cd_S4257C12 = {  "S4257C12", // class name
  bases_S4257C12, 1,
  &(vtc_S4257C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4257C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4257C12),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4257C11  : S4257C12 {
  ::S2382C37 s4257c11f0;
  ::S888C10_nt s4257c11f1;
  char s4257c11f2;
  virtual  ~S4257C11(); // _ZN8S4257C11D1Ev
  virtual void  v40(); // _ZN8S4257C113v40Ev
  virtual void  v41(); // _ZN8S4257C113v41Ev
  virtual void  v42(); // _ZN8S4257C113v42Ev
  S4257C11(); // tgen
};
//SIG(-1 S4257C11) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S4257C11 ::~S4257C11(){ note_dtor("S4257C11", this);}
void  S4257C11 ::v40(){vfunc_called(this, "_ZN8S4257C113v40Ev");}
void  S4257C11 ::v41(){vfunc_called(this, "_ZN8S4257C113v41Ev");}
void  S4257C11 ::v42(){vfunc_called(this, "_ZN8S4257C113v42Ev");}
S4257C11 ::S4257C11(){ note_ctor("S4257C11", this);} // tgen

static void Test_S4257C11()
{
  extern Class_Descriptor cd_S4257C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4257C11, buf);
    S4257C11 *dp, &lv = *(dp=new (buf) S4257C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4257C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4257C11)");
    check_base_class_offset(lv, (S4257C13*)(S4257C12*), 0, "S4257C11");
    check_base_class_offset(lv, (S4257C12*), 0, "S4257C11");
    check_field_offset(lv, s4257c11f0, ABISELECT(8,4), "S4257C11.s4257c11f0");
    check_field_offset(lv, s4257c11f1, ABISELECT(32,20), "S4257C11.s4257c11f1");
    check_field_offset(lv, s4257c11f2, ABISELECT(64,52), "S4257C11.s4257c11f2");
    test_class_info(&lv, &cd_S4257C11);
    dp->~S4257C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4257C11(Test_S4257C11, "S4257C11", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S4257C11C1Ev();
extern void _ZN8S4257C11D1Ev();
Name_Map name_map_S4257C11[] = {
  NSPAIR(_ZN8S4257C11C1Ev),
  NSPAIR(_ZN8S4257C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4257C13;
extern VTBL_ENTRY _ZTI8S4257C13[];
extern  VTBL_ENTRY _ZTV8S4257C13[];
extern Class_Descriptor cd_S4257C12;
extern VTBL_ENTRY _ZTI8S4257C12[];
extern  VTBL_ENTRY _ZTV8S4257C12[];
static Base_Class bases_S4257C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4257C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4257C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S4257C11[];
extern void _ZN8S4257C11D1Ev();
extern void _ZN8S4257C11D0Ev();
extern void _ZN8S4257C133v33Ev();
extern void _ZN8S4257C133v34Ev();
extern void _ZN8S4257C133v35Ev();
extern void _ZN8S4257C123v36Ev();
extern void _ZN8S4257C123v37Ev();
extern void _ZN8S4257C123v38Ev();
extern void _ZN8S4257C123v39Ev();
extern void _ZN8S4257C113v40Ev();
extern void _ZN8S4257C113v41Ev();
extern void _ZN8S4257C113v42Ev();
static  VTBL_ENTRY vtc_S4257C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4257C11[0]),
  (VTBL_ENTRY)&_ZN8S4257C11D1Ev,
  (VTBL_ENTRY)&_ZN8S4257C11D0Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v34Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v35Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v36Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v37Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v38Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v39Ev,
  (VTBL_ENTRY)&_ZN8S4257C113v40Ev,
  (VTBL_ENTRY)&_ZN8S4257C113v41Ev,
  (VTBL_ENTRY)&_ZN8S4257C113v42Ev,
};
extern VTBL_ENTRY _ZTI8S4257C11[];
extern  VTBL_ENTRY _ZTV8S4257C11[];
Class_Descriptor cd_S4257C11 = {  "S4257C11", // class name
  bases_S4257C11, 2,
  &(vtc_S4257C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S4257C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4257C11),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  S4257C17_nt  : S7511C9_nt {
};
//SIG(-1 S4257C17_nt) C1{ BC2{}}



//skip512 S4257C17_nt

#else // __cplusplus

extern Class_Descriptor cd_S7511C9_nt;
static Base_Class bases_S4257C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S4257C1  : S4257C2 , S4257C11 {
  ::S4257C17_nt s4257c1f0;
  int s4257c1f1[2];
  ::S2382C5_nt s4257c1f2;
  int s4257c1f3;
  ::S2403C17_nt s4257c1f4;
  ::S888C23 s4257c1f5;
  virtual  ~S4257C1(); // _ZN7S4257C1D1Ev
  virtual void  v1(); // _ZN7S4257C12v1Ev
  virtual void  v2(); // _ZN7S4257C12v2Ev
  virtual void  v3(); // _ZN7S4257C12v3Ev
  virtual void  v4(); // _ZN7S4257C12v4Ev
  virtual void  v5(); // _ZN7S4257C12v5Ev
  virtual void  v6(); // _ZN7S4257C12v6Ev
  virtual void  v7(); // _ZN7S4257C12v7Ev
  virtual void  v8(); // _ZN7S4257C12v8Ev
  virtual void  v9(); // _ZN7S4257C12v9Ev
  virtual void  v10(); // _ZN7S4257C13v10Ev
  virtual void  v11(); // _ZN7S4257C13v11Ev
  virtual void  v12(); // _ZN7S4257C13v12Ev
  virtual void  v13(); // _ZN7S4257C13v13Ev
  S4257C1(); // tgen
};
//SIG(1 S4257C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m FL[4]} Fc} vd v26 v27 v28 v29 v30 v31 v32 FC8{ m Fp Fi[2] FC9{ m}}} BC10{ BC11{ BC12{ vd v33 v34 v35} vd v36 v37 v38 v39} vd v40 v41 v42 FC13{ m Fp Fi[2] FC9} FC14{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC15{ BC16{}} Fi[2] FC17{ BC18{ m Fp Fi FC19{ m} FC20{ m}}} Fi FC7 FC21{ m Fp FC14 FC22{ m Fp FC23{ Fi[4]}} Fi Fc}}


 S4257C1 ::~S4257C1(){ note_dtor("S4257C1", this);}
void  S4257C1 ::v1(){vfunc_called(this, "_ZN7S4257C12v1Ev");}
void  S4257C1 ::v2(){vfunc_called(this, "_ZN7S4257C12v2Ev");}
void  S4257C1 ::v3(){vfunc_called(this, "_ZN7S4257C12v3Ev");}
void  S4257C1 ::v4(){vfunc_called(this, "_ZN7S4257C12v4Ev");}
void  S4257C1 ::v5(){vfunc_called(this, "_ZN7S4257C12v5Ev");}
void  S4257C1 ::v6(){vfunc_called(this, "_ZN7S4257C12v6Ev");}
void  S4257C1 ::v7(){vfunc_called(this, "_ZN7S4257C12v7Ev");}
void  S4257C1 ::v8(){vfunc_called(this, "_ZN7S4257C12v8Ev");}
void  S4257C1 ::v9(){vfunc_called(this, "_ZN7S4257C12v9Ev");}
void  S4257C1 ::v10(){vfunc_called(this, "_ZN7S4257C13v10Ev");}
void  S4257C1 ::v11(){vfunc_called(this, "_ZN7S4257C13v11Ev");}
void  S4257C1 ::v12(){vfunc_called(this, "_ZN7S4257C13v12Ev");}
void  S4257C1 ::v13(){vfunc_called(this, "_ZN7S4257C13v13Ev");}
S4257C1 ::S4257C1(){ note_ctor("S4257C1", this);} // tgen

static void Test_S4257C1()
{
  extern Class_Descriptor cd_S4257C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,63)];
    init_test(&cd_S4257C1, buf);
    S4257C1 *dp, &lv = *(dp=new (buf) S4257C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,248), "sizeof(S4257C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4257C1)");
    check_base_class_offset(lv, (S4257C3*)(S4257C2*), 0, "S4257C1");
    check_base_class_offset(lv, (S4257C2*), 0, "S4257C1");
    check_base_class_offset(lv, (S4257C13*)(S4257C12*)(S4257C11*), ABISELECT(96,72), "S4257C1");
    check_base_class_offset(lv, (S4257C12*)(S4257C11*), ABISELECT(96,72), "S4257C1");
    check_base_class_offset(lv, (S4257C11*), ABISELECT(96,72), "S4257C1");
    check_field_offset(lv, s4257c1f0, ABISELECT(161,125), "S4257C1.s4257c1f0");
    check_field_offset(lv, s4257c1f1, ABISELECT(164,128), "S4257C1.s4257c1f1");
    check_field_offset(lv, s4257c1f2, ABISELECT(176,136), "S4257C1.s4257c1f2");
    check_field_offset(lv, s4257c1f3, ABISELECT(192,148), "S4257C1.s4257c1f3");
    check_field_offset(lv, s4257c1f4, ABISELECT(200,152), "S4257C1.s4257c1f4");
    check_field_offset(lv, s4257c1f5, ABISELECT(232,184), "S4257C1.s4257c1f5");
    test_class_info(&lv, &cd_S4257C1);
    dp->~S4257C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4257C1(Test_S4257C1, "S4257C1", ABISELECT(304,248));

#else // __cplusplus

extern void _ZN7S4257C1C1Ev();
extern void _ZN7S4257C1D1Ev();
Name_Map name_map_S4257C1[] = {
  NSPAIR(_ZN7S4257C1C1Ev),
  NSPAIR(_ZN7S4257C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4257C3;
extern VTBL_ENTRY _ZTI7S4257C3[];
extern  VTBL_ENTRY _ZTV7S4257C3[];
extern Class_Descriptor cd_S4257C2;
extern VTBL_ENTRY _ZTI7S4257C2[];
extern  VTBL_ENTRY _ZTV7S4257C2[];
extern Class_Descriptor cd_S4257C13;
extern VTBL_ENTRY _ZTI8S4257C13[];
extern  VTBL_ENTRY _ZTV8S4257C13[];
extern Class_Descriptor cd_S4257C12;
extern VTBL_ENTRY _ZTI8S4257C12[];
extern  VTBL_ENTRY _ZTV8S4257C12[];
extern Class_Descriptor cd_S4257C11;
extern VTBL_ENTRY _ZTI8S4257C11[];
extern  VTBL_ENTRY _ZTV8S4257C11[];
static Base_Class bases_S4257C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4257C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4257C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4257C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4257C12,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S4257C11,    ABISELECT(96,72), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4257C1[];
extern void _ZN7S4257C1D1Ev();
extern void _ZN7S4257C1D0Ev();
extern void _ZN7S4257C33v14Ev();
extern void _ZN7S4257C33v15Ev();
extern void _ZN7S4257C33v16Ev();
extern void _ZN7S4257C33v17Ev();
extern void _ZN7S4257C33v18Ev();
extern void _ZN7S4257C33v19Ev();
extern void _ZN7S4257C33v20Ev();
extern void _ZN7S4257C33v21Ev();
extern void _ZN7S4257C33v22Ev();
extern void _ZN7S4257C33v23Ev();
extern void _ZN7S4257C33v24Ev();
extern void _ZN7S4257C33v25Ev();
extern void _ZN7S4257C23v26Ev();
extern void _ZN7S4257C23v27Ev();
extern void _ZN7S4257C23v28Ev();
extern void _ZN7S4257C23v29Ev();
extern void _ZN7S4257C23v30Ev();
extern void _ZN7S4257C23v31Ev();
extern void _ZN7S4257C23v32Ev();
extern void _ZN7S4257C12v1Ev();
extern void _ZN7S4257C12v2Ev();
extern void _ZN7S4257C12v3Ev();
extern void _ZN7S4257C12v4Ev();
extern void _ZN7S4257C12v5Ev();
extern void _ZN7S4257C12v6Ev();
extern void _ZN7S4257C12v7Ev();
extern void _ZN7S4257C12v8Ev();
extern void _ZN7S4257C12v9Ev();
extern void _ZN7S4257C13v10Ev();
extern void _ZN7S4257C13v11Ev();
extern void _ZN7S4257C13v12Ev();
extern void _ZN7S4257C13v13Ev();
extern void ABISELECT(_ZThn96_N7S4257C1D1Ev,_ZThn72_N7S4257C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S4257C1D0Ev,_ZThn72_N7S4257C1D0Ev)();
extern void _ZN8S4257C133v33Ev();
extern void _ZN8S4257C133v34Ev();
extern void _ZN8S4257C133v35Ev();
extern void _ZN8S4257C123v36Ev();
extern void _ZN8S4257C123v37Ev();
extern void _ZN8S4257C123v38Ev();
extern void _ZN8S4257C123v39Ev();
extern void _ZN8S4257C113v40Ev();
extern void _ZN8S4257C113v41Ev();
extern void _ZN8S4257C113v42Ev();
static  VTBL_ENTRY vtc_S4257C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4257C1[0]),
  (VTBL_ENTRY)&_ZN7S4257C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4257C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4257C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4257C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4257C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4257C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4257C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4257C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4257C13v13Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S4257C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S4257C1D1Ev,_ZThn72_N7S4257C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S4257C1D0Ev,_ZThn72_N7S4257C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4257C133v33Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v34Ev,
  (VTBL_ENTRY)&_ZN8S4257C133v35Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v36Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v37Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v38Ev,
  (VTBL_ENTRY)&_ZN8S4257C123v39Ev,
  (VTBL_ENTRY)&_ZN8S4257C113v40Ev,
  (VTBL_ENTRY)&_ZN8S4257C113v41Ev,
  (VTBL_ENTRY)&_ZN8S4257C113v42Ev,
};
extern VTBL_ENTRY _ZTI7S4257C1[];
extern  VTBL_ENTRY _ZTV7S4257C1[];
Class_Descriptor cd_S4257C1 = {  "S4257C1", // class name
  bases_S4257C1, 5,
  &(vtc_S4257C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,248), // object size
  NSPAIRA(_ZTI7S4257C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4257C1),50, //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  S20353C2  {
  ::S7817C7 s20353c2f0;
  __tsi64 s20353c2f1;
  virtual void  v7(); // _ZN8S20353C22v7Ev
  virtual void  v8(); // _ZN8S20353C22v8Ev
  virtual void  v9(); // _ZN8S20353C22v9Ev
  virtual void  v10(); // _ZN8S20353C23v10Ev
  virtual void  v11(); // _ZN8S20353C23v11Ev
  virtual void  v12(); // _ZN8S20353C23v12Ev
  ~S20353C2(); // tgen
  S20353C2(); // tgen
};
//SIG(-1 S20353C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} FL}


void  S20353C2 ::v7(){vfunc_called(this, "_ZN8S20353C22v7Ev");}
void  S20353C2 ::v8(){vfunc_called(this, "_ZN8S20353C22v8Ev");}
void  S20353C2 ::v9(){vfunc_called(this, "_ZN8S20353C22v9Ev");}
void  S20353C2 ::v10(){vfunc_called(this, "_ZN8S20353C23v10Ev");}
void  S20353C2 ::v11(){vfunc_called(this, "_ZN8S20353C23v11Ev");}
void  S20353C2 ::v12(){vfunc_called(this, "_ZN8S20353C23v12Ev");}
S20353C2 ::~S20353C2(){ note_dtor("S20353C2", this);} // tgen
S20353C2 ::S20353C2(){ note_ctor("S20353C2", this);} // tgen

static void Test_S20353C2()
{
  extern Class_Descriptor cd_S20353C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,30)];
    init_test(&cd_S20353C2, buf);
    S20353C2 *dp, &lv = *(dp=new (buf) S20353C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S20353C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C2)");
    check_field_offset(lv, s20353c2f0, ABISELECT(8,4), "S20353C2.s20353c2f0");
    check_field_offset(lv, s20353c2f1, ABISELECT(152,108), "S20353C2.s20353c2f1");
    test_class_info(&lv, &cd_S20353C2);
    dp->~S20353C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C2(Test_S20353C2, "S20353C2", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN8S20353C2C1Ev();
extern void _ZN8S20353C2D1Ev();
Name_Map name_map_S20353C2[] = {
  NSPAIR(_ZN8S20353C2C1Ev),
  NSPAIR(_ZN8S20353C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20353C2[];
extern void _ZN8S20353C22v7Ev();
extern void _ZN8S20353C22v8Ev();
extern void _ZN8S20353C22v9Ev();
extern void _ZN8S20353C23v10Ev();
extern void _ZN8S20353C23v11Ev();
extern void _ZN8S20353C23v12Ev();
static  VTBL_ENTRY vtc_S20353C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C2[0]),
  (VTBL_ENTRY)&_ZN8S20353C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S20353C2[];
extern  VTBL_ENTRY _ZTV8S20353C2[];
Class_Descriptor cd_S20353C2 = {  "S20353C2", // class name
  0,0,//no base classes
  &(vtc_S20353C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI8S20353C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20353C2),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  S20353C7  {
  int s20353c7f0;
  virtual void  v13(); // _ZN8S20353C73v13Ev
  virtual void  v14(); // _ZN8S20353C73v14Ev
  virtual void  v15(); // _ZN8S20353C73v15Ev
  ~S20353C7(); // tgen
  S20353C7(); // tgen
};
//SIG(-1 S20353C7) C1{ v1 v2 v3 Fi}


void  S20353C7 ::v13(){vfunc_called(this, "_ZN8S20353C73v13Ev");}
void  S20353C7 ::v14(){vfunc_called(this, "_ZN8S20353C73v14Ev");}
void  S20353C7 ::v15(){vfunc_called(this, "_ZN8S20353C73v15Ev");}
S20353C7 ::~S20353C7(){ note_dtor("S20353C7", this);} // tgen
S20353C7 ::S20353C7(){ note_ctor("S20353C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20353C7C1Ev();
extern void _ZN8S20353C7D1Ev();
Name_Map name_map_S20353C7[] = {
  NSPAIR(_ZN8S20353C7C1Ev),
  NSPAIR(_ZN8S20353C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20353C7[];
extern void _ZN8S20353C73v13Ev();
extern void _ZN8S20353C73v14Ev();
extern void _ZN8S20353C73v15Ev();
static  VTBL_ENTRY vtc_S20353C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C7[0]),
  (VTBL_ENTRY)&_ZN8S20353C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S20353C7[];
extern  VTBL_ENTRY _ZTV8S20353C7[];
Class_Descriptor cd_S20353C7 = {  "S20353C7", // class name
  0,0,//no base classes
  &(vtc_S20353C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20353C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20353C7),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  S20353C4  {
  __tsi64 s20353c4f0;
  virtual void  v16(); // _ZN8S20353C43v16Ev
  virtual void  v17(); // _ZN8S20353C43v17Ev
  virtual void  v18(); // _ZN8S20353C43v18Ev
  virtual void  v19(); // _ZN8S20353C43v19Ev
  virtual void  v20(); // _ZN8S20353C43v20Ev
  virtual void  v21(); // _ZN8S20353C43v21Ev
  virtual void  v22(); // _ZN8S20353C43v22Ev
  virtual void  v23(); // _ZN8S20353C43v23Ev
  ~S20353C4(); // tgen
  S20353C4(); // tgen
};
//SIG(-1 S20353C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S20353C4 ::v16(){vfunc_called(this, "_ZN8S20353C43v16Ev");}
void  S20353C4 ::v17(){vfunc_called(this, "_ZN8S20353C43v17Ev");}
void  S20353C4 ::v18(){vfunc_called(this, "_ZN8S20353C43v18Ev");}
void  S20353C4 ::v19(){vfunc_called(this, "_ZN8S20353C43v19Ev");}
void  S20353C4 ::v20(){vfunc_called(this, "_ZN8S20353C43v20Ev");}
void  S20353C4 ::v21(){vfunc_called(this, "_ZN8S20353C43v21Ev");}
void  S20353C4 ::v22(){vfunc_called(this, "_ZN8S20353C43v22Ev");}
void  S20353C4 ::v23(){vfunc_called(this, "_ZN8S20353C43v23Ev");}
S20353C4 ::~S20353C4(){ note_dtor("S20353C4", this);} // tgen
S20353C4 ::S20353C4(){ note_ctor("S20353C4", this);} // tgen

static void Test_S20353C4()
{
  extern Class_Descriptor cd_S20353C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20353C4, buf);
    S20353C4 *dp, &lv = *(dp=new (buf) S20353C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20353C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C4)");
    check_field_offset(lv, s20353c4f0, ABISELECT(8,4), "S20353C4.s20353c4f0");
    test_class_info(&lv, &cd_S20353C4);
    dp->~S20353C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C4(Test_S20353C4, "S20353C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20353C4C1Ev();
extern void _ZN8S20353C4D1Ev();
Name_Map name_map_S20353C4[] = {
  NSPAIR(_ZN8S20353C4C1Ev),
  NSPAIR(_ZN8S20353C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20353C4[];
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY vtc_S20353C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C4[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
Class_Descriptor cd_S20353C4 = {  "S20353C4", // class name
  0,0,//no base classes
  &(vtc_S20353C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20353C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20353C4),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  S20353C5  : virtual S20353C4 {
  ::S20353C4 s20353c5f0;
  int s20353c5f1;
  void *s20353c5f2;
  virtual void  v24(); // _ZN8S20353C53v24Ev
  virtual void  v25(); // _ZN8S20353C53v25Ev
  virtual void  v26(); // _ZN8S20353C53v26Ev
  virtual void  v27(); // _ZN8S20353C53v27Ev
  virtual void  v28(); // _ZN8S20353C53v28Ev
  virtual void  v29(); // _ZN8S20353C53v29Ev
  ~S20353C5(); // tgen
  S20353C5(); // tgen
};
//SIG(-1 S20353C5) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S20353C5 ::v24(){vfunc_called(this, "_ZN8S20353C53v24Ev");}
void  S20353C5 ::v25(){vfunc_called(this, "_ZN8S20353C53v25Ev");}
void  S20353C5 ::v26(){vfunc_called(this, "_ZN8S20353C53v26Ev");}
void  S20353C5 ::v27(){vfunc_called(this, "_ZN8S20353C53v27Ev");}
void  S20353C5 ::v28(){vfunc_called(this, "_ZN8S20353C53v28Ev");}
void  S20353C5 ::v29(){vfunc_called(this, "_ZN8S20353C53v29Ev");}
S20353C5 ::~S20353C5(){ note_dtor("S20353C5", this);} // tgen
S20353C5 ::S20353C5(){ note_ctor("S20353C5", this);} // tgen

static void Test_S20353C5()
{
  extern Class_Descriptor cd_S20353C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20353C5, buf);
    S20353C5 *dp, &lv = *(dp=new (buf) S20353C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20353C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C5)");
    check_base_class_offset(lv, (S20353C4*), ABISELECT(40,24), "S20353C5");
    check_field_offset(lv, s20353c5f0, ABISELECT(8,4), "S20353C5.s20353c5f0");
    check_field_offset(lv, s20353c5f1, ABISELECT(24,16), "S20353C5.s20353c5f1");
    check_field_offset(lv, s20353c5f2, ABISELECT(32,20), "S20353C5.s20353c5f2");
    test_class_info(&lv, &cd_S20353C5);
    dp->~S20353C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C5(Test_S20353C5, "S20353C5", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20353C5C1Ev();
extern void _ZN8S20353C5D1Ev();
Name_Map name_map_S20353C5[] = {
  NSPAIR(_ZN8S20353C5C1Ev),
  NSPAIR(_ZN8S20353C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
static Base_Class bases_S20353C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20353C4,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI8S20353C5[];
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY vtc_S20353C5[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern VTBL_ENTRY _ZTV8S20353C5[];
static  VTT_ENTRY vtt_S20353C5[] = {
  {&(_ZTV8S20353C5[3]),  3,27},
  {&(_ZTV8S20353C5[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S20353C5[];
extern  VTBL_ENTRY _ZTV8S20353C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C5[];
Class_Descriptor cd_S20353C5 = {  "S20353C5", // class name
  bases_S20353C5, 1,
  &(vtc_S20353C5[0]), // expected_vtbl_contents
  &(vtt_S20353C5[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20353C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20353C5),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20353C5),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  S20353C6  : virtual S20353C5 {
  short s20353c6f0[6];
  int s20353c6f1;
  short s20353c6f2;
  char s20353c6f3[6];
  virtual  ~S20353C6(); // _ZN8S20353C6D2Ev
  virtual void  v30(); // _ZN8S20353C63v30Ev
  virtual void  v31(); // _ZN8S20353C63v31Ev
  virtual void  v32(); // _ZN8S20353C63v32Ev
  virtual void  v33(); // _ZN8S20353C63v33Ev
  virtual void  v34(); // _ZN8S20353C63v34Ev
  S20353C6(); // tgen
};
//SIG(-1 S20353C6) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13 FL} v14 v15 v16 v17 v18 v19 FC3 Fi Fp} vd v1 v2 v3 v4 v5 Fs[6] Fi Fs Fc[6]}


 S20353C6 ::~S20353C6(){ note_dtor("S20353C6", this);}
void  S20353C6 ::v30(){vfunc_called(this, "_ZN8S20353C63v30Ev");}
void  S20353C6 ::v31(){vfunc_called(this, "_ZN8S20353C63v31Ev");}
void  S20353C6 ::v32(){vfunc_called(this, "_ZN8S20353C63v32Ev");}
void  S20353C6 ::v33(){vfunc_called(this, "_ZN8S20353C63v33Ev");}
void  S20353C6 ::v34(){vfunc_called(this, "_ZN8S20353C63v34Ev");}
S20353C6 ::S20353C6(){ note_ctor("S20353C6", this);} // tgen

static void Test_S20353C6()
{
  extern Class_Descriptor cd_S20353C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S20353C6, buf);
    S20353C6 *dp, &lv = *(dp=new (buf) S20353C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S20353C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C6)");
    check_base_class_offset(lv, (S20353C4*)(S20353C5*), ABISELECT(72,52), "S20353C6");
    check_base_class_offset(lv, (S20353C5*), ABISELECT(32,28), "S20353C6");
    check_field_offset(lv, s20353c6f0, ABISELECT(8,4), "S20353C6.s20353c6f0");
    check_field_offset(lv, s20353c6f1, ABISELECT(20,16), "S20353C6.s20353c6f1");
    check_field_offset(lv, s20353c6f2, ABISELECT(24,20), "S20353C6.s20353c6f2");
    check_field_offset(lv, s20353c6f3, ABISELECT(26,22), "S20353C6.s20353c6f3");
    test_class_info(&lv, &cd_S20353C6);
    dp->~S20353C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C6(Test_S20353C6, "S20353C6", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN8S20353C6C1Ev();
extern void _ZN8S20353C6D2Ev();
Name_Map name_map_S20353C6[] = {
  NSPAIR(_ZN8S20353C6C1Ev),
  NSPAIR(_ZN8S20353C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C5;
extern VTBL_ENTRY _ZTI8S20353C5[];
extern  VTBL_ENTRY _ZTV8S20353C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C5[];
static Base_Class bases_S20353C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20353C4,    ABISELECT(72,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //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_S20353C5,    ABISELECT(32,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S20353C6[];
extern void _ZN8S20353C6D1Ev();
extern void _ZN8S20353C6D0Ev();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY vtc_S20353C6[] = {
  ABISELECT(72,52),
  ABISELECT(32,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern VTBL_ENTRY _ZTV8S20353C6[];
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C6[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C5__8S20353C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
static  VTT_ENTRY vtt_S20353C6[] = {
  {&(_ZTV8S20353C6[4]),  4,44},
  {&(_ZTV8S20353C6[20]),  20,44},
  {&(_ZTV8S20353C6[36]),  36,44},
  {&(_tg__ZTV8S20353C5__8S20353C6[3]),  3,9},
  {&(_tg__ZTV8S20353C4__8S20353C5__8S20353C6[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20353C6[];
extern  VTBL_ENTRY _ZTV8S20353C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C6[];
Class_Descriptor cd_S20353C6 = {  "S20353C6", // class name
  bases_S20353C6, 2,
  &(vtc_S20353C6[0]), // expected_vtbl_contents
  &(vtt_S20353C6[0]), // expected_vtt_contents
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI8S20353C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20353C6),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20353C6),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  S20353C8  : virtual S20353C5 , virtual S20353C6 {
  virtual  ~S20353C8(); // _ZN8S20353C8D2Ev
  virtual void  v35(); // _ZN8S20353C83v35Ev
  virtual void  v36(); // _ZN8S20353C83v36Ev
  S20353C8(); // tgen
};
//SIG(-1 S20353C8) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 FL} v11 v12 v13 v14 v15 v16 FC3 Fi Fp} VBC4{ VBC2 vd v17 v18 v19 v20 v21 Fs[6] Fi Fs Fc[6]} vd v1 v2}


 S20353C8 ::~S20353C8(){ note_dtor("S20353C8", this);}
void  S20353C8 ::v35(){vfunc_called(this, "_ZN8S20353C83v35Ev");}
void  S20353C8 ::v36(){vfunc_called(this, "_ZN8S20353C83v36Ev");}
S20353C8 ::S20353C8(){ note_ctor("S20353C8", this);} // tgen

static void Test_S20353C8()
{
  extern Class_Descriptor cd_S20353C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S20353C8, buf);
    S20353C8 *dp, &lv = *(dp=new (buf) S20353C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S20353C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C8)");
    check_base_class_offset(lv, (S20353C4*)(S20353C5*), ABISELECT(48,28), "S20353C8");
    check_base_class_offset(lv, (S20353C5*), ABISELECT(8,4), "S20353C8");
    check_base_class_offset(lv, (S20353C5*)(S20353C6*), ABISELECT(8,4), "S20353C8");
    check_base_class_offset(lv, (S20353C6*), ABISELECT(64,40), "S20353C8");
    test_class_info(&lv, &cd_S20353C8);
    dp->~S20353C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C8(Test_S20353C8, "S20353C8", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN8S20353C8C1Ev();
extern void _ZN8S20353C8D2Ev();
Name_Map name_map_S20353C8[] = {
  NSPAIR(_ZN8S20353C8C1Ev),
  NSPAIR(_ZN8S20353C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C5;
extern VTBL_ENTRY _ZTI8S20353C5[];
extern  VTBL_ENTRY _ZTV8S20353C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C5[];
extern Class_Descriptor cd_S20353C6;
extern VTBL_ENTRY _ZTI8S20353C6[];
extern  VTBL_ENTRY _ZTV8S20353C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C6[];
static Base_Class bases_S20353C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20353C4,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S20353C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //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_S20353C6,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S20353C8[];
extern void _ZN8S20353C8D1Ev();
extern void _ZN8S20353C8D0Ev();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20353C8D1Ev,_ZThn40_N8S20353C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20353C8D0Ev,_ZThn40_N8S20353C8D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY vtc_S20353C8[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern VTBL_ENTRY _ZTV8S20353C8[];
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C8[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C5__8S20353C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void _ZN8S20353C6D1Ev();
extern void _ZN8S20353C6D0Ev();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C6__8S20353C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C6__8S20353C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
static  VTT_ENTRY vtt_S20353C8[] = {
  {&(_ZTV8S20353C8[5]),  5,59},
  {&(_ZTV8S20353C8[18]),  18,59},
  {&(_ZTV8S20353C8[34]),  34,59},
  {&(_ZTV8S20353C8[52]),  52,59},
  {&(_tg__ZTV8S20353C5__8S20353C8[3]),  3,9},
  {&(_tg__ZTV8S20353C4__8S20353C5__8S20353C8[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C8[4]),  4,11},
  {&(_tg__ZTV8S20353C5__8S20353C6__8S20353C8[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C6__8S20353C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20353C8[];
extern  VTBL_ENTRY _ZTV8S20353C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C8[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20353C8D0Ev,_ZThn40_N8S20353C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20353C8D1Ev,_ZThn40_N8S20353C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20353C8 = {  "S20353C8", // class name
  bases_S20353C8, 3,
  &(vtc_S20353C8[0]), // expected_vtbl_contents
  &(vtt_S20353C8[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI8S20353C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20353C8),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20353C8),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20353C9  : virtual S20353C7 , S20353C4 , S20353C8 {
  char s20353c9f0[8];
  virtual  ~S20353C9(); // _ZN8S20353C9D2Ev
  virtual void  v37(); // _ZN8S20353C93v37Ev
  virtual void  v38(); // _ZN8S20353C93v38Ev
  virtual void  v39(); // _ZN8S20353C93v39Ev
  virtual void  v40(); // _ZN8S20353C93v40Ev
  virtual void  v41(); // _ZN8S20353C93v41Ev
  virtual void  v42(); // _ZN8S20353C93v42Ev
  S20353C9(); // tgen
};
//SIG(-1 S20353C9) C1{ VBC2{ v7 v8 v9 Fi} BC3{ v10 v11 v12 v13 v14 v15 v16 v17 FL} BC4{ VBC5{ VBC3 v18 v19 v20 v21 v22 v23 FC3 Fi Fp} VBC6{ VBC5 vd v24 v25 v26 v27 v28 Fs[6] Fi Fs Fc[6]} vd v29 v30} vd v1 v2 v3 v4 v5 v6 Fc[8]}


 S20353C9 ::~S20353C9(){ note_dtor("S20353C9", this);}
void  S20353C9 ::v37(){vfunc_called(this, "_ZN8S20353C93v37Ev");}
void  S20353C9 ::v38(){vfunc_called(this, "_ZN8S20353C93v38Ev");}
void  S20353C9 ::v39(){vfunc_called(this, "_ZN8S20353C93v39Ev");}
void  S20353C9 ::v40(){vfunc_called(this, "_ZN8S20353C93v40Ev");}
void  S20353C9 ::v41(){vfunc_called(this, "_ZN8S20353C93v41Ev");}
void  S20353C9 ::v42(){vfunc_called(this, "_ZN8S20353C93v42Ev");}
S20353C9 ::S20353C9(){ note_ctor("S20353C9", this);} // tgen

static void Test_S20353C9()
{
  extern Class_Descriptor cd_S20353C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S20353C9, buf);
    S20353C9 *dp, &lv = *(dp=new (buf) S20353C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S20353C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C9)");
    check_base_class_offset(lv, (S20353C7*), ABISELECT(32,24), "S20353C9");
    /*is_ambiguous_... S20353C9::S20353C4 */ AMB_check_base_class_offset(lv, (S20353C4*), 0, "S20353C9");
    check_base_class_offset(lv, (S20353C4*)(S20353C5*), ABISELECT(88,56), "S20353C9");
    check_base_class_offset(lv, (S20353C5*)(S20353C8*), ABISELECT(48,32), "S20353C9");
    check_base_class_offset(lv, (S20353C5*)(S20353C6*), ABISELECT(48,32), "S20353C9");
    check_base_class_offset(lv, (S20353C6*)(S20353C8*), ABISELECT(104,68), "S20353C9");
    check_base_class_offset(lv, (S20353C8*), ABISELECT(16,12), "S20353C9");
    check_field_offset(lv, s20353c9f0, ABISELECT(24,16), "S20353C9.s20353c9f0");
    test_class_info(&lv, &cd_S20353C9);
    dp->~S20353C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C9(Test_S20353C9, "S20353C9", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN8S20353C9C1Ev();
extern void _ZN8S20353C9D2Ev();
Name_Map name_map_S20353C9[] = {
  NSPAIR(_ZN8S20353C9C1Ev),
  NSPAIR(_ZN8S20353C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20353C7;
extern VTBL_ENTRY _ZTI8S20353C7[];
extern  VTBL_ENTRY _ZTV8S20353C7[];
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C5;
extern VTBL_ENTRY _ZTI8S20353C5[];
extern  VTBL_ENTRY _ZTV8S20353C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C5[];
extern Class_Descriptor cd_S20353C6;
extern VTBL_ENTRY _ZTI8S20353C6[];
extern  VTBL_ENTRY _ZTV8S20353C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C6[];
extern Class_Descriptor cd_S20353C8;
extern VTBL_ENTRY _ZTI8S20353C8[];
extern  VTBL_ENTRY _ZTV8S20353C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C8[];
static Base_Class bases_S20353C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20353C7,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20353C4,    ABISELECT(88,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20353C5,    ABISELECT(48,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20353C6,    ABISELECT(104,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20353C8,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20353C9[];
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void _ZN8S20353C9D1Ev();
extern void _ZN8S20353C9D0Ev();
extern void _ZN8S20353C93v37Ev();
extern void _ZN8S20353C93v38Ev();
extern void _ZN8S20353C93v39Ev();
extern void _ZN8S20353C93v40Ev();
extern void _ZN8S20353C93v41Ev();
extern void _ZN8S20353C93v42Ev();
extern void ABISELECT(_ZThn16_N8S20353C9D1Ev,_ZThn12_N8S20353C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20353C9D0Ev,_ZThn12_N8S20353C9D0Ev)();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
extern void _ZN8S20353C73v13Ev();
extern void _ZN8S20353C73v14Ev();
extern void _ZN8S20353C73v15Ev();
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N8S20353C9D1Ev,_ZTv0_n20_N8S20353C9D1Ev)();
extern void ABISELECT(_ZThn104_N8S20353C9D1Ev,_ZThn68_N8S20353C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20353C9D0Ev,_ZTv0_n20_N8S20353C9D0Ev)();
extern void ABISELECT(_ZThn104_N8S20353C9D0Ev,_ZThn68_N8S20353C9D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY vtc_S20353C9[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20353C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v38Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v39Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v40Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v42Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20353C9D1Ev,_ZThn12_N8S20353C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20353C9D0Ev,_ZThn12_N8S20353C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C9D1Ev,_ZTv0_n20_N8S20353C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C9D0Ev,_ZTv0_n20_N8S20353C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern VTBL_ENTRY _ZTV8S20353C9[];
extern void _ZN8S20353C8D1Ev();
extern void _ZN8S20353C8D0Ev();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C8__8S20353C9[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C8__8S20353C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C8__8S20353C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20353C8D1Ev,_ZThn56_N8S20353C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20353C8D0Ev,_ZThn56_N8S20353C8D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C8__8S20353C9[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C9[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C5__8S20353C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void _ZN8S20353C6D1Ev();
extern void _ZN8S20353C6D0Ev();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C9[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C6__8S20353C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C6__8S20353C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
static  VTT_ENTRY vtt_S20353C9[] = {
  {&(_ZTV8S20353C9[6]),  6,89},
  {&(_tg__ZTV8S20353C8__8S20353C9[5]),  5,9},
  {&(_tg__ZTV8S20353C5__8S20353C8__8S20353C9[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C8__8S20353C9[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C8__8S20353C9[10]),  10,17},
  {&(_ZTV8S20353C9[36]),  36,89},
  {&(_ZTV8S20353C9[27]),  27,89},
  {&(_ZTV8S20353C9[48]),  48,89},
  {&(_ZTV8S20353C9[64]),  64,89},
  {&(_ZTV8S20353C9[82]),  82,89},
  {&(_tg__ZTV8S20353C5__8S20353C9[3]),  3,9},
  {&(_tg__ZTV8S20353C4__8S20353C5__8S20353C9[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C9[4]),  4,11},
  {&(_tg__ZTV8S20353C5__8S20353C6__8S20353C9[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C6__8S20353C9[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20353C9[];
extern  VTBL_ENTRY _ZTV8S20353C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C9[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20353C8D0Ev,_ZThn56_N8S20353C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20353C8D1Ev,_ZThn56_N8S20353C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C9D0Ev,_ZTv0_n20_N8S20353C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20353C9D0Ev,_ZThn68_N8S20353C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C9D1Ev,_ZTv0_n20_N8S20353C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20353C9D1Ev,_ZThn68_N8S20353C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20353C9 = {  "S20353C9", // class name
  bases_S20353C9, 6,
  &(vtc_S20353C9[0]), // expected_vtbl_contents
  &(vtt_S20353C9[0]), // expected_vtt_contents
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI8S20353C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20353C9),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20353C9),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20353C10  : S20353C4 , virtual S20353C5 , virtual S20353C6 , virtual S20353C8 , virtual S20353C7 {
  ::S7817C7 s20353c10f0;
  void *s20353c10f1;
  virtual  ~S20353C10(); // _ZN9S20353C10D2Ev
  virtual void  v43(); // _ZN9S20353C103v43Ev
  virtual void  v44(); // _ZN9S20353C103v44Ev
  virtual void  v45(); // _ZN9S20353C103v45Ev
  virtual void  v46(); // _ZN9S20353C103v46Ev
  virtual void  v47(); // _ZN9S20353C103v47Ev
  virtual void  v48(); // _ZN9S20353C103v48Ev
  S20353C10(); // tgen
};
//SIG(-1 S20353C10) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} VBC3{ VBC2 v15 v16 v17 v18 v19 v20 FC2 Fi Fp} VBC4{ VBC3 vd v21 v22 v23 v24 v25 Fs[6] Fi Fs Fc[6]} VBC5{ VBC3 VBC4 vd v26 v27} VBC6{ v28 v29 v30 Fi} vd v1 v2 v3 v4 v5 v6 FC7{ VBC8{ v35 v36 v37 v38 v39 v40 v41 v42 FL} VBC9{ VBC8 v43 v44 v45 v46 v47 v48 FC8 Fi Fp} BC10{ VBC9 vd v49 v50 v51 v52 v53 Fs[6] Fi Fs Fc[6]} VBC11{ v54 v55 v56 Fi} BC12{ VBC9 VBC10 vd v57 v58} vd v31 v32 v33 v34} Fp}


 S20353C10 ::~S20353C10(){ note_dtor("S20353C10", this);}
void  S20353C10 ::v43(){vfunc_called(this, "_ZN9S20353C103v43Ev");}
void  S20353C10 ::v44(){vfunc_called(this, "_ZN9S20353C103v44Ev");}
void  S20353C10 ::v45(){vfunc_called(this, "_ZN9S20353C103v45Ev");}
void  S20353C10 ::v46(){vfunc_called(this, "_ZN9S20353C103v46Ev");}
void  S20353C10 ::v47(){vfunc_called(this, "_ZN9S20353C103v47Ev");}
void  S20353C10 ::v48(){vfunc_called(this, "_ZN9S20353C103v48Ev");}
S20353C10 ::S20353C10(){ note_ctor("S20353C10", this);} // tgen

static void Test_S20353C10()
{
  extern Class_Descriptor cd_S20353C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,50)];
    init_test(&cd_S20353C10, buf);
    S20353C10 *dp, &lv = *(dp=new (buf) S20353C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,196), "sizeof(S20353C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C10)");
    /*is_ambiguous_... S20353C10::S20353C4 */ AMB_check_base_class_offset(lv, (S20353C4*), 0, "S20353C10");
    check_base_class_offset(lv, (S20353C4*)(S20353C5*), ABISELECT(208,144), "S20353C10");
    check_base_class_offset(lv, (S20353C5*), ABISELECT(168,120), "S20353C10");
    check_base_class_offset(lv, (S20353C5*)(S20353C6*), ABISELECT(168,120), "S20353C10");
    check_base_class_offset(lv, (S20353C5*)(S20353C8*), ABISELECT(168,120), "S20353C10");
    check_base_class_offset(lv, (S20353C6*), ABISELECT(224,156), "S20353C10");
    check_base_class_offset(lv, (S20353C6*)(S20353C8*), ABISELECT(224,156), "S20353C10");
    check_base_class_offset(lv, (S20353C8*), ABISELECT(256,184), "S20353C10");
    check_base_class_offset(lv, (S20353C7*), ABISELECT(264,188), "S20353C10");
    check_field_offset(lv, s20353c10f0, ABISELECT(16,12), "S20353C10.s20353c10f0");
    check_field_offset(lv, s20353c10f1, ABISELECT(160,116), "S20353C10.s20353c10f1");
    test_class_info(&lv, &cd_S20353C10);
    dp->~S20353C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C10(Test_S20353C10, "S20353C10", ABISELECT(280,196));

#else // __cplusplus

extern void _ZN9S20353C10C1Ev();
extern void _ZN9S20353C10D2Ev();
Name_Map name_map_S20353C10[] = {
  NSPAIR(_ZN9S20353C10C1Ev),
  NSPAIR(_ZN9S20353C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C5;
extern VTBL_ENTRY _ZTI8S20353C5[];
extern  VTBL_ENTRY _ZTV8S20353C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C5[];
extern Class_Descriptor cd_S20353C6;
extern VTBL_ENTRY _ZTI8S20353C6[];
extern  VTBL_ENTRY _ZTV8S20353C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C6[];
extern Class_Descriptor cd_S20353C8;
extern VTBL_ENTRY _ZTI8S20353C8[];
extern  VTBL_ENTRY _ZTV8S20353C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C8[];
extern Class_Descriptor cd_S20353C7;
extern VTBL_ENTRY _ZTI8S20353C7[];
extern  VTBL_ENTRY _ZTV8S20353C7[];
static Base_Class bases_S20353C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20353C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20353C4,    ABISELECT(208,144), //bcp->offset
    38, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20353C5,    ABISELECT(168,120), //bcp->offset
    23, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C6,    ABISELECT(224,156), //bcp->offset
    56, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C8,    ABISELECT(256,184), //bcp->offset
    73, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C7,    ABISELECT(264,188), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20353C10[];
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void _ZN9S20353C10D1Ev();
extern void _ZN9S20353C10D0Ev();
extern void _ZN9S20353C103v43Ev();
extern void _ZN9S20353C103v44Ev();
extern void _ZN9S20353C103v45Ev();
extern void _ZN9S20353C103v46Ev();
extern void _ZN9S20353C103v47Ev();
extern void _ZN9S20353C103v48Ev();
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N9S20353C10D1Ev,_ZTv0_n20_N9S20353C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S20353C10D1Ev,_ZThn156_N9S20353C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20353C10D0Ev,_ZTv0_n20_N9S20353C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S20353C10D0Ev,_ZThn156_N9S20353C10D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
extern void ABISELECT(_ZTv0_n48_N9S20353C10D1Ev,_ZTv0_n24_N9S20353C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S20353C10D1Ev,_ZThn184_N9S20353C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20353C10D0Ev,_ZTv0_n24_N9S20353C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S20353C10D0Ev,_ZThn184_N9S20353C10D0Ev)() __attribute__((weak));
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
extern void _ZN8S20353C73v13Ev();
extern void _ZN8S20353C73v14Ev();
extern void _ZN8S20353C73v15Ev();
static  VTBL_ENTRY vtc_S20353C10[] = {
  ABISELECT(264,188),
  ABISELECT(256,184),
  ABISELECT(224,156),
  ABISELECT(208,144),
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  (VTBL_ENTRY)&_ZN9S20353C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20353C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v48Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C10D1Ev,_ZTv0_n20_N9S20353C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C10D0Ev,_ZTv0_n20_N9S20353C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
  0,
  0,
  ABISELECT(-256,-184),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-256,-184),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C10D1Ev,_ZTv0_n24_N9S20353C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C10D0Ev,_ZTv0_n24_N9S20353C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
  0,
  0,
  0,
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S20353C10[];
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__9S20353C10[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C5__9S20353C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void _ZN8S20353C6D1Ev();
extern void _ZN8S20353C6D0Ev();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__9S20353C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C6__9S20353C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C6__9S20353C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void _ZN8S20353C8D1Ev();
extern void _ZN8S20353C8D0Ev();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C8__9S20353C10[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C8__9S20353C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C8__9S20353C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev)();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C8__9S20353C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
static  VTT_ENTRY vtt_S20353C10[] = {
  {&(_ZTV9S20353C10[7]),  7,93},
  {&(_ZTV9S20353C10[32]),  32,93},
  {&(_ZTV9S20353C10[48]),  48,93},
  {&(_ZTV9S20353C10[66]),  66,93},
  {&(_ZTV9S20353C10[81]),  81,93},
  {&(_ZTV9S20353C10[90]),  90,93},
  {&(_tg__ZTV8S20353C5__9S20353C10[3]),  3,9},
  {&(_tg__ZTV8S20353C4__8S20353C5__9S20353C10[10]),  10,18},
  {&(_tg__ZTV8S20353C6__9S20353C10[4]),  4,11},
  {&(_tg__ZTV8S20353C5__8S20353C6__9S20353C10[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C6__9S20353C10[10]),  10,18},
  {&(_tg__ZTV8S20353C8__9S20353C10[5]),  5,9},
  {&(_tg__ZTV8S20353C5__8S20353C8__9S20353C10[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C8__9S20353C10[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C8__9S20353C10[10]),  10,17},
};
extern VTBL_ENTRY _ZTI9S20353C10[];
extern  VTBL_ENTRY _ZTV9S20353C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20353C10[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20353C10D0Ev,_ZTv0_n24_N9S20353C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20353C10D0Ev,_ZThn184_N9S20353C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20353C10D1Ev,_ZTv0_n24_N9S20353C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20353C10D1Ev,_ZThn184_N9S20353C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20353C10D0Ev,_ZTv0_n20_N9S20353C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20353C10D0Ev,_ZThn156_N9S20353C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20353C10D1Ev,_ZTv0_n20_N9S20353C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20353C10D1Ev,_ZThn156_N9S20353C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20353C10 = {  "S20353C10", // class name
  bases_S20353C10, 6,
  &(vtc_S20353C10[0]), // expected_vtbl_contents
  &(vtt_S20353C10[0]), // expected_vtt_contents
  ABISELECT(280,196), // object size
  NSPAIRA(_ZTI9S20353C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20353C10),93, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20353C10),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20353C11  : virtual S20353C8 , S20353C2 {
  void *s20353c11f0;
  virtual  ~S20353C11(); // _ZN9S20353C11D2Ev
  virtual void  v49(); // _ZN9S20353C113v49Ev
  S20353C11(); // tgen
};
//SIG(-1 S20353C11) C1{ VBC2{ VBC3{ VBC4{ v2 v3 v4 v5 v6 v7 v8 v9 FL} v10 v11 v12 v13 v14 v15 FC4 Fi Fp} VBC5{ VBC3 vd v16 v17 v18 v19 v20 Fs[6] Fi Fs Fc[6]} vd v21 v22} BC6{ v23 v24 v25 v26 v27 v28 FC7{ VBC8{ v33 v34 v35 v36 v37 v38 v39 v40 FL} VBC9{ VBC8 v41 v42 v43 v44 v45 v46 FC8 Fi Fp} BC10{ VBC9 vd v47 v48 v49 v50 v51 Fs[6] Fi Fs Fc[6]} VBC11{ v52 v53 v54 Fi} BC12{ VBC9 VBC10 vd v55 v56} vd v29 v30 v31 v32} FL} vd v1 Fp}


 S20353C11 ::~S20353C11(){ note_dtor("S20353C11", this);}
void  S20353C11 ::v49(){vfunc_called(this, "_ZN9S20353C113v49Ev");}
S20353C11 ::S20353C11(){ note_ctor("S20353C11", this);} // tgen

static void Test_S20353C11()
{
  extern Class_Descriptor cd_S20353C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,48)];
    init_test(&cd_S20353C11, buf);
    S20353C11 *dp, &lv = *(dp=new (buf) S20353C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,188), "sizeof(S20353C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C11)");
    check_base_class_offset(lv, (S20353C4*)(S20353C5*), ABISELECT(216,148), "S20353C11");
    check_base_class_offset(lv, (S20353C5*)(S20353C8*), ABISELECT(176,124), "S20353C11");
    check_base_class_offset(lv, (S20353C5*)(S20353C6*), ABISELECT(176,124), "S20353C11");
    check_base_class_offset(lv, (S20353C6*)(S20353C8*), ABISELECT(232,160), "S20353C11");
    check_base_class_offset(lv, (S20353C8*), ABISELECT(168,120), "S20353C11");
    check_base_class_offset(lv, (S20353C2*), 0, "S20353C11");
    check_field_offset(lv, s20353c11f0, ABISELECT(160,116), "S20353C11.s20353c11f0");
    test_class_info(&lv, &cd_S20353C11);
    dp->~S20353C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C11(Test_S20353C11, "S20353C11", ABISELECT(264,188));

#else // __cplusplus

extern void _ZN9S20353C11C1Ev();
extern void _ZN9S20353C11D2Ev();
Name_Map name_map_S20353C11[] = {
  NSPAIR(_ZN9S20353C11C1Ev),
  NSPAIR(_ZN9S20353C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C5;
extern VTBL_ENTRY _ZTI8S20353C5[];
extern  VTBL_ENTRY _ZTV8S20353C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C5[];
extern Class_Descriptor cd_S20353C6;
extern VTBL_ENTRY _ZTI8S20353C6[];
extern  VTBL_ENTRY _ZTV8S20353C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C6[];
extern Class_Descriptor cd_S20353C8;
extern VTBL_ENTRY _ZTI8S20353C8[];
extern  VTBL_ENTRY _ZTV8S20353C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C8[];
extern Class_Descriptor cd_S20353C2;
extern VTBL_ENTRY _ZTI8S20353C2[];
extern  VTBL_ENTRY _ZTV8S20353C2[];
static Base_Class bases_S20353C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20353C4,    ABISELECT(216,148), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20353C5,    ABISELECT(176,124), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20353C6,    ABISELECT(232,160), //bcp->offset
    60, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20353C8,    ABISELECT(168,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20353C11[];
extern void _ZN8S20353C22v7Ev();
extern void _ZN8S20353C22v8Ev();
extern void _ZN8S20353C22v9Ev();
extern void _ZN8S20353C23v10Ev();
extern void _ZN8S20353C23v11Ev();
extern void _ZN8S20353C23v12Ev();
extern void _ZN9S20353C11D1Ev();
extern void _ZN9S20353C11D0Ev();
extern void _ZN9S20353C113v49Ev();
extern void ABISELECT(_ZTv0_n48_N9S20353C11D1Ev,_ZTv0_n24_N9S20353C11D1Ev)();
extern void ABISELECT(_ZThn168_N9S20353C11D1Ev,_ZThn120_N9S20353C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20353C11D0Ev,_ZTv0_n24_N9S20353C11D0Ev)();
extern void ABISELECT(_ZThn168_N9S20353C11D0Ev,_ZThn120_N9S20353C11D0Ev)() __attribute__((weak));
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N9S20353C11D1Ev,_ZTv0_n20_N9S20353C11D1Ev)();
extern void ABISELECT(_ZThn232_N9S20353C11D1Ev,_ZThn160_N9S20353C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20353C11D0Ev,_ZTv0_n20_N9S20353C11D0Ev)();
extern void ABISELECT(_ZThn232_N9S20353C11D0Ev,_ZThn160_N9S20353C11D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY vtc_S20353C11[] = {
  ABISELECT(232,160),
  ABISELECT(216,148),
  ABISELECT(176,124),
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&_ZN8S20353C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v12Ev,
  (VTBL_ENTRY)&_ZN9S20353C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20353C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20353C113v49Ev,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C11D1Ev,_ZTv0_n24_N9S20353C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C11D0Ev,_ZTv0_n24_N9S20353C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-148),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-160),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-232,-160),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C11D1Ev,_ZTv0_n20_N9S20353C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C11D0Ev,_ZTv0_n20_N9S20353C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern VTBL_ENTRY _ZTV9S20353C11[];
extern void _ZN8S20353C8D1Ev();
extern void _ZN8S20353C8D0Ev();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C8__9S20353C11[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C8__9S20353C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C8__9S20353C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20353C8D1Ev,_ZThn40_N8S20353C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20353C8D0Ev,_ZThn40_N8S20353C8D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C8__9S20353C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__9S20353C11[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C5__9S20353C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void _ZN8S20353C6D1Ev();
extern void _ZN8S20353C6D0Ev();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__9S20353C11[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C6__9S20353C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C6__9S20353C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
static  VTT_ENTRY vtt_S20353C11[] = {
  {&(_ZTV9S20353C11[6]),  6,77},
  {&(_ZTV9S20353C11[23]),  23,77},
  {&(_ZTV9S20353C11[36]),  36,77},
  {&(_ZTV9S20353C11[52]),  52,77},
  {&(_ZTV9S20353C11[70]),  70,77},
  {&(_tg__ZTV8S20353C8__9S20353C11[5]),  5,9},
  {&(_tg__ZTV8S20353C5__8S20353C8__9S20353C11[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C8__9S20353C11[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C8__9S20353C11[10]),  10,17},
  {&(_tg__ZTV8S20353C5__9S20353C11[3]),  3,9},
  {&(_tg__ZTV8S20353C4__8S20353C5__9S20353C11[10]),  10,18},
  {&(_tg__ZTV8S20353C6__9S20353C11[4]),  4,11},
  {&(_tg__ZTV8S20353C5__8S20353C6__9S20353C11[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C6__9S20353C11[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20353C11[];
extern  VTBL_ENTRY _ZTV9S20353C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20353C11[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20353C8D0Ev,_ZThn40_N8S20353C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20353C8D1Ev,_ZThn40_N8S20353C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20353C11D0Ev,_ZTv0_n20_N9S20353C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20353C11D0Ev,_ZThn160_N9S20353C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20353C11D1Ev,_ZTv0_n20_N9S20353C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20353C11D1Ev,_ZThn160_N9S20353C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20353C11D0Ev,_ZTv0_n24_N9S20353C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20353C11D0Ev,_ZThn120_N9S20353C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20353C11D1Ev,_ZTv0_n24_N9S20353C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20353C11D1Ev,_ZThn120_N9S20353C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20353C11 = {  "S20353C11", // class name
  bases_S20353C11, 5,
  &(vtc_S20353C11[0]), // expected_vtbl_contents
  &(vtt_S20353C11[0]), // expected_vtt_contents
  ABISELECT(264,188), // object size
  NSPAIRA(_ZTI9S20353C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20353C11),77, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20353C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20353C12  {
  void *s20353c12f0;
  virtual void  v50(); // _ZN9S20353C123v50Ev
  ~S20353C12(); // tgen
  S20353C12(); // tgen
};
//SIG(-1 S20353C12) C1{ v1 Fp}


void  S20353C12 ::v50(){vfunc_called(this, "_ZN9S20353C123v50Ev");}
S20353C12 ::~S20353C12(){ note_dtor("S20353C12", this);} // tgen
S20353C12 ::S20353C12(){ note_ctor("S20353C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S20353C12C1Ev();
extern void _ZN9S20353C12D1Ev();
Name_Map name_map_S20353C12[] = {
  NSPAIR(_ZN9S20353C12C1Ev),
  NSPAIR(_ZN9S20353C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20353C12[];
extern void _ZN9S20353C123v50Ev();
static  VTBL_ENTRY vtc_S20353C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20353C12[0]),
  (VTBL_ENTRY)&_ZN9S20353C123v50Ev,
};
extern VTBL_ENTRY _ZTI9S20353C12[];
extern  VTBL_ENTRY _ZTV9S20353C12[];
Class_Descriptor cd_S20353C12 = {  "S20353C12", // class name
  0,0,//no base classes
  &(vtc_S20353C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20353C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20353C12),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  S20353C1  : virtual S20353C2 , S20353C9 , virtual S20353C10 , virtual S20353C11 , S20353C12 {
  virtual  ~S20353C1(); // _ZN8S20353C1D2Ev
  virtual void  v1(); // _ZN8S20353C12v1Ev
  virtual void  v2(); // _ZN8S20353C12v2Ev
  virtual void  v3(); // _ZN8S20353C12v3Ev
  virtual void  v4(); // _ZN8S20353C12v4Ev
  virtual void  v5(); // _ZN8S20353C12v5Ev
  virtual void  v6(); // _ZN8S20353C12v6Ev
  S20353C1(); // tgen
};
//SIG(1 S20353C1) C1{ VBC2{ v7 v8 v9 v10 v11 v12 FC3{ VBC4{ v55 v56 v57 v58 v59 v60 v61 v62 FL} VBC5{ VBC4 v63 v64 v65 v66 v67 v68 FC4 Fi Fp} BC6{ VBC5 vd v69 v70 v71 v72 v73 Fs[6] Fi Fs Fc[6]} VBC7{ v74 v75 v76 Fi} BC8{ VBC5 VBC6 vd v77 v78} vd v51 v52 v53 v54} FL} BC9{ VBC10{ v13 v14 v15 Fi} BC11{ v16 v17 v18 v19 v20 v21 v22 v23 FL} BC12{ VBC13{ VBC11 v24 v25 v26 v27 v28 v29 FC11 Fi Fp} VBC14{ VBC13 vd v30 v31 v32 v33 v34 Fs[6] Fi Fs Fc[6]} vd v35 v36} vd v37 v38 v39 v40 v41 v42 Fc[8]} VBC15{ BC11 VBC13 VBC14 VBC12 VBC10 vd v43 v44 v45 v46 v47 v48 FC3 Fp} VBC16{ VBC12 BC2 vd v49 Fp} BC17{ v50 Fp} vd v1 v2 v3 v4 v5 v6}


 S20353C1 ::~S20353C1(){ note_dtor("S20353C1", this);}
void  S20353C1 ::v1(){vfunc_called(this, "_ZN8S20353C12v1Ev");}
void  S20353C1 ::v2(){vfunc_called(this, "_ZN8S20353C12v2Ev");}
void  S20353C1 ::v3(){vfunc_called(this, "_ZN8S20353C12v3Ev");}
void  S20353C1 ::v4(){vfunc_called(this, "_ZN8S20353C12v4Ev");}
void  S20353C1 ::v5(){vfunc_called(this, "_ZN8S20353C12v5Ev");}
void  S20353C1 ::v6(){vfunc_called(this, "_ZN8S20353C12v6Ev");}
S20353C1 ::S20353C1(){ note_ctor("S20353C1", this);} // tgen

static void Test_S20353C1()
{
  extern Class_Descriptor cd_S20353C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,117)];
    init_test(&cd_S20353C1, buf);
    S20353C1 *dp, &lv = *(dp=new (buf) S20353C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,464), "sizeof(S20353C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20353C1)");
    /*is_ambiguous_... S20353C1::S20353C2 */ AMB_check_base_class_offset(lv, (S20353C2*), ABISELECT(48,32), "S20353C1");
    check_base_class_offset(lv, (S20353C7*)(S20353C9*), ABISELECT(208,148), "S20353C1");
    check_base_class_offset(lv, (S20353C7*)(S20353C10*), ABISELECT(208,148), "S20353C1");
    /*is_ambiguous_... S20353C9::S20353C4 */ AMB_check_base_class_offset(lv, (S20353C4*)(S20353C9*), 0, "S20353C1");
    check_base_class_offset(lv, (S20353C4*)(S20353C5*), ABISELECT(264,180), "S20353C1");
    check_base_class_offset(lv, (S20353C5*)(S20353C8*)(S20353C9*), ABISELECT(224,156), "S20353C1");
    check_base_class_offset(lv, (S20353C5*)(S20353C6*), ABISELECT(224,156), "S20353C1");
    check_base_class_offset(lv, (S20353C5*)(S20353C10*), ABISELECT(224,156), "S20353C1");
    /*is_ambiguous_... S20353C1::S20353C8 */ AMB_check_base_class_offset(lv, (S20353C5*)(S20353C8*), ABISELECT(224,156), "S20353C1");
    check_base_class_offset(lv, (S20353C6*)(S20353C8*)(S20353C9*), ABISELECT(280,192), "S20353C1");
    check_base_class_offset(lv, (S20353C6*)(S20353C10*), ABISELECT(280,192), "S20353C1");
    /*is_ambiguous_... S20353C1::S20353C8 */ AMB_check_base_class_offset(lv, (S20353C6*)(S20353C8*), ABISELECT(280,192), "S20353C1");
    check_base_class_offset(lv, (S20353C8*)(S20353C9*), ABISELECT(16,12), "S20353C1");
    check_base_class_offset(lv, (S20353C9*), 0, "S20353C1");
    /*is_ambiguous_... S20353C10::S20353C4 */ AMB_check_base_class_offset(lv, (S20353C4*)(S20353C10*), ABISELECT(312,220), "S20353C1");
    check_base_class_offset(lv, (S20353C8*)(S20353C10*), ABISELECT(480,340), "S20353C1");
    check_base_class_offset(lv, (S20353C8*)(S20353C11*), ABISELECT(480,340), "S20353C1");
    check_base_class_offset(lv, (S20353C10*), ABISELECT(312,220), "S20353C1");
    check_base_class_offset(lv, (S20353C2*)(S20353C11*), ABISELECT(488,344), "S20353C1");
    check_base_class_offset(lv, (S20353C11*), ABISELECT(488,344), "S20353C1");
    check_base_class_offset(lv, (S20353C12*), ABISELECT(32,24), "S20353C1");
    test_class_info(&lv, &cd_S20353C1);
    dp->~S20353C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20353C1(Test_S20353C1, "S20353C1", ABISELECT(656,464));

#else // __cplusplus

extern void _ZN8S20353C1C1Ev();
extern void _ZN8S20353C1D2Ev();
Name_Map name_map_S20353C1[] = {
  NSPAIR(_ZN8S20353C1C1Ev),
  NSPAIR(_ZN8S20353C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20353C2;
extern VTBL_ENTRY _ZTI8S20353C2[];
extern  VTBL_ENTRY _ZTV8S20353C2[];
extern Class_Descriptor cd_S20353C7;
extern VTBL_ENTRY _ZTI8S20353C7[];
extern  VTBL_ENTRY _ZTV8S20353C7[];
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C5;
extern VTBL_ENTRY _ZTI8S20353C5[];
extern  VTBL_ENTRY _ZTV8S20353C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C5[];
extern Class_Descriptor cd_S20353C6;
extern VTBL_ENTRY _ZTI8S20353C6[];
extern  VTBL_ENTRY _ZTV8S20353C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C6[];
extern Class_Descriptor cd_S20353C8;
extern VTBL_ENTRY _ZTI8S20353C8[];
extern  VTBL_ENTRY _ZTV8S20353C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C8[];
extern Class_Descriptor cd_S20353C9;
extern VTBL_ENTRY _ZTI8S20353C9[];
extern  VTBL_ENTRY _ZTV8S20353C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C9[];
extern Class_Descriptor cd_S20353C4;
extern VTBL_ENTRY _ZTI8S20353C4[];
extern  VTBL_ENTRY _ZTV8S20353C4[];
extern Class_Descriptor cd_S20353C8;
extern VTBL_ENTRY _ZTI8S20353C8[];
extern  VTBL_ENTRY _ZTV8S20353C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C8[];
extern Class_Descriptor cd_S20353C10;
extern VTBL_ENTRY _ZTI9S20353C10[];
extern  VTBL_ENTRY _ZTV9S20353C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20353C10[];
extern Class_Descriptor cd_S20353C2;
extern VTBL_ENTRY _ZTI8S20353C2[];
extern  VTBL_ENTRY _ZTV8S20353C2[];
extern Class_Descriptor cd_S20353C11;
extern VTBL_ENTRY _ZTI9S20353C11[];
extern  VTBL_ENTRY _ZTV9S20353C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20353C11[];
extern Class_Descriptor cd_S20353C12;
extern VTBL_ENTRY _ZTI9S20353C12[];
extern  VTBL_ENTRY _ZTV9S20353C12[];
static Base_Class bases_S20353C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20353C2,    ABISELECT(48,32), //bcp->offset
    44, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C7,    ABISELECT(208,148), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20353C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20353C4,    ABISELECT(264,180), //bcp->offset
    81, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20353C5,    ABISELECT(224,156), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20353C6,    ABISELECT(280,192), //bcp->offset
    99, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20353C8,    ABISELECT(16,12), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20353C9,    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_S20353C4,    ABISELECT(312,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20353C8,    ABISELECT(480,340), //bcp->offset
    154, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20353C10,    ABISELECT(312,220), //bcp->offset
    116, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C2,    ABISELECT(488,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20353C11,    ABISELECT(488,344), //bcp->offset
    166, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20353C12,    ABISELECT(32,24), //bcp->offset
    41, //bcp->virtual_function_table_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 _ZTI8S20353C1[];
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void _ZN8S20353C1D1Ev();
extern void _ZN8S20353C1D0Ev();
extern void _ZN8S20353C93v37Ev();
extern void _ZN8S20353C93v38Ev();
extern void _ZN8S20353C93v39Ev();
extern void _ZN8S20353C93v40Ev();
extern void _ZN8S20353C93v41Ev();
extern void _ZN8S20353C93v42Ev();
extern void _ZN8S20353C12v1Ev();
extern void _ZN8S20353C12v2Ev();
extern void _ZN8S20353C12v3Ev();
extern void _ZN8S20353C12v4Ev();
extern void _ZN8S20353C12v5Ev();
extern void _ZN8S20353C12v6Ev();
extern void ABISELECT(_ZThn16_N8S20353C1D1Ev,_ZThn12_N8S20353C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20353C1D0Ev,_ZThn12_N8S20353C1D0Ev)();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
extern void _ZN9S20353C123v50Ev();
extern void _ZN8S20353C22v7Ev();
extern void _ZN8S20353C22v8Ev();
extern void _ZN8S20353C22v9Ev();
extern void _ZN8S20353C23v10Ev();
extern void _ZN8S20353C23v11Ev();
extern void _ZN8S20353C23v12Ev();
extern void _ZN8S20353C73v13Ev();
extern void _ZN8S20353C73v14Ev();
extern void _ZN8S20353C73v15Ev();
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N8S20353C1D1Ev,_ZTv0_n20_N8S20353C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S20353C1D1Ev,_ZThn192_N8S20353C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20353C1D0Ev,_ZTv0_n20_N8S20353C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S20353C1D0Ev,_ZThn192_N8S20353C1D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void ABISELECT(_ZTv0_n128_N8S20353C1D1Ev,_ZTv0_n64_N8S20353C1D1Ev)();
extern void ABISELECT(_ZThn312_N8S20353C1D1Ev,_ZThn220_N8S20353C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S20353C1D0Ev,_ZTv0_n64_N8S20353C1D0Ev)();
extern void ABISELECT(_ZThn312_N8S20353C1D0Ev,_ZThn220_N8S20353C1D0Ev)() __attribute__((weak));
extern void _ZN9S20353C103v43Ev();
extern void _ZN9S20353C103v44Ev();
extern void _ZN9S20353C103v45Ev();
extern void _ZN9S20353C103v46Ev();
extern void _ZN9S20353C103v47Ev();
extern void _ZN9S20353C103v48Ev();
extern void ABISELECT(_ZTv0_n48_N8S20353C1D1Ev,_ZTv0_n24_N8S20353C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S20353C1D1Ev,_ZThn340_N8S20353C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20353C1D0Ev,_ZTv0_n24_N8S20353C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S20353C1D0Ev,_ZThn340_N8S20353C1D0Ev)() __attribute__((weak));
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
extern void _ZN8S20353C22v7Ev();
extern void _ZN8S20353C22v8Ev();
extern void _ZN8S20353C22v9Ev();
extern void _ZN8S20353C23v10Ev();
extern void _ZN8S20353C23v11Ev();
extern void _ZN8S20353C23v12Ev();
extern void ABISELECT(_ZTv0_n104_N8S20353C1D1Ev,_ZTv0_n52_N8S20353C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S20353C1D1Ev,_ZThn344_N8S20353C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20353C1D0Ev,_ZTv0_n52_N8S20353C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S20353C1D0Ev,_ZThn344_N8S20353C1D0Ev)() __attribute__((weak));
extern void _ZN9S20353C113v49Ev();
static  VTBL_ENTRY vtc_S20353C1[] = {
  ABISELECT(488,344),
  ABISELECT(480,340),
  ABISELECT(312,220),
  ABISELECT(48,32),
  ABISELECT(280,192),
  ABISELECT(264,180),
  ABISELECT(224,156),
  ABISELECT(208,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20353C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v38Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v39Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v40Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20353C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20353C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20353C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20353C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20353C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20353C12v6Ev,
  ABISELECT(264,180),
  ABISELECT(248,168),
  ABISELECT(208,144),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20353C1D1Ev,_ZThn12_N8S20353C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20353C1D0Ev,_ZThn12_N8S20353C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN9S20353C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN8S20353C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v12Ev,
  0,
  0,
  0,
  ABISELECT(-208,-148),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN8S20353C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-192),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-280,-192),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C1D1Ev,_ZTv0_n20_N8S20353C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C1D0Ev,_ZTv0_n20_N8S20353C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-220),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-72),
  ABISELECT(168,120),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-312,-220),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20353C1D1Ev,_ZTv0_n64_N8S20353C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20353C1D0Ev,_ZTv0_n64_N8S20353C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20353C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v48Ev,
  0,
  0,
  ABISELECT(-480,-340),
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  ABISELECT(-480,-340),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20353C1D1Ev,_ZTv0_n24_N8S20353C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20353C1D0Ev,_ZTv0_n24_N8S20353C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
  0,
  ABISELECT(-488,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-152),
  ABISELECT(-224,-164),
  ABISELECT(-264,-188),
  ABISELECT(-8,-4),
  ABISELECT(-488,-344),
  (VTBL_ENTRY)&(_ZTI8S20353C1[0]),
  (VTBL_ENTRY)&_ZN8S20353C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20353C1D1Ev,_ZTv0_n52_N8S20353C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20353C1D0Ev,_ZTv0_n52_N8S20353C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20353C113v49Ev,
};
extern VTBL_ENTRY _ZTV8S20353C1[];
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void _ZN8S20353C9D1Ev();
extern void _ZN8S20353C9D0Ev();
extern void _ZN8S20353C93v37Ev();
extern void _ZN8S20353C93v38Ev();
extern void _ZN8S20353C93v39Ev();
extern void _ZN8S20353C93v40Ev();
extern void _ZN8S20353C93v41Ev();
extern void _ZN8S20353C93v42Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C9__8S20353C1[] = {
  ABISELECT(280,192),
  ABISELECT(264,180),
  ABISELECT(224,156),
  ABISELECT(208,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20353C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v38Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v39Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v40Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20353C93v42Ev,
};
extern void _ZN8S20353C8D1Ev();
extern void _ZN8S20353C8D0Ev();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C88S20353C9__8S20353C1[] = {
  ABISELECT(264,180),
  ABISELECT(248,168),
  ABISELECT(208,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C88S20353C9__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C88S20353C9__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-168),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev)();
extern void ABISELECT(_ZThn264_N8S20353C8D1Ev,_ZThn180_N8S20353C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev)();
extern void ABISELECT(_ZThn264_N8S20353C8D0Ev,_ZThn180_N8S20353C8D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C88S20353C9__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-180),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C73v13Ev();
extern void _ZN8S20353C73v14Ev();
extern void _ZN8S20353C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C7__8S20353C9__8S20353C1[] = {
  0,
  0,
  0,
  ABISELECT(-208,-148),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v15Ev,
};
extern void ABISELECT(_ZThn16_N8S20353C9D1Ev,_ZThn12_N8S20353C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20353C9D0Ev,_ZThn12_N8S20353C9D0Ev)();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C8__8S20353C9__8S20353C1[] = {
  ABISELECT(264,180),
  ABISELECT(248,168),
  ABISELECT(208,144),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20353C9D1Ev,_ZThn12_N8S20353C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20353C9D0Ev,_ZThn12_N8S20353C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C9__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__A1__8S20353C9__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20353C9D1Ev,_ZTv0_n20_N8S20353C9D1Ev)();
extern void ABISELECT(_ZThn280_N8S20353C9D1Ev,_ZThn192_N8S20353C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20353C9D0Ev,_ZTv0_n20_N8S20353C9D0Ev)();
extern void ABISELECT(_ZThn280_N8S20353C9D0Ev,_ZThn192_N8S20353C9D0Ev)() __attribute__((weak));
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C9__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-192),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-280,-192),
  (VTBL_ENTRY)&(_ZTI8S20353C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C9D1Ev,_ZTv0_n20_N8S20353C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C9D0Ev,_ZTv0_n20_N8S20353C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C5__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20353C5[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void _ZN8S20353C6D1Ev();
extern void _ZN8S20353C6D0Ev();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C6__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C6__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20353C6[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
extern void _ZN9S20353C10D1Ev();
extern void _ZN9S20353C10D0Ev();
extern void _ZN9S20353C103v43Ev();
extern void _ZN9S20353C103v44Ev();
extern void _ZN9S20353C103v45Ev();
extern void _ZN9S20353C103v46Ev();
extern void _ZN9S20353C103v47Ev();
extern void _ZN9S20353C103v48Ev();
static  VTBL_ENTRY _tg__ZTV9S20353C10__8S20353C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(168,120),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
  (VTBL_ENTRY)&_ZN9S20353C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20353C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20353C103v48Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__9S20353C10__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__A1__9S20353C10__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20353C10D1Ev,_ZTv0_n20_N9S20353C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20353C10D0Ev,_ZTv0_n20_N9S20353C10D0Ev)();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__9S20353C10__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C10D1Ev,_ZTv0_n20_N9S20353C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C10D0Ev,_ZTv0_n20_N9S20353C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20353C10D1Ev,_ZTv0_n24_N9S20353C10D1Ev)();
extern void ABISELECT(_ZThn168_N9S20353C10D1Ev,_ZThn120_N9S20353C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20353C10D0Ev,_ZTv0_n24_N9S20353C10D0Ev)();
extern void ABISELECT(_ZThn168_N9S20353C10D0Ev,_ZThn120_N9S20353C10D0Ev)() __attribute__((weak));
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C8__9S20353C10__8S20353C1[] = {
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C10D1Ev,_ZTv0_n24_N9S20353C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C10D0Ev,_ZTv0_n24_N9S20353C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C73v13Ev();
extern void _ZN8S20353C73v14Ev();
extern void _ZN8S20353C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C7__9S20353C10__8S20353C1[] = {
  0,
  0,
  0,
  ABISELECT(104,72),
  (VTBL_ENTRY)&(_ZTI9S20353C10[0]),
  (VTBL_ENTRY)&_ZN8S20353C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20353C73v15Ev,
};
extern void _ZN8S20353C8D1Ev();
extern void _ZN8S20353C8D0Ev();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C8__A1__8S20353C1[] = {
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20353C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__8S20353C8__A1__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(256,184),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__8S20353C8__A1__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(216,160),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev)();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__8S20353C8__A1__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(200,148),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(200,148),
  (VTBL_ENTRY)&(_ZTI8S20353C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
extern void _ZN8S20353C22v7Ev();
extern void _ZN8S20353C22v8Ev();
extern void _ZN8S20353C22v9Ev();
extern void _ZN8S20353C23v10Ev();
extern void _ZN8S20353C23v11Ev();
extern void _ZN8S20353C23v12Ev();
extern void _ZN9S20353C11D1Ev();
extern void _ZN9S20353C11D0Ev();
extern void _ZN9S20353C113v49Ev();
static  VTBL_ENTRY _tg__ZTV9S20353C11__8S20353C1[] = {
  ABISELECT(-208,-152),
  ABISELECT(-224,-164),
  ABISELECT(-264,-188),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&_ZN8S20353C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20353C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20353C23v12Ev,
  (VTBL_ENTRY)&_ZN9S20353C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20353C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20353C113v49Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20353C11D1Ev,_ZTv0_n24_N9S20353C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20353C11D0Ev,_ZTv0_n24_N9S20353C11D0Ev)();
extern void _ZN8S20353C83v35Ev();
extern void _ZN8S20353C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C8__9S20353C11__8S20353C1[] = {
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C11D1Ev,_ZTv0_n24_N9S20353C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20353C11D0Ev,_ZTv0_n24_N9S20353C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20353C83v36Ev,
};
extern void _ZN8S20353C53v24Ev();
extern void _ZN8S20353C53v25Ev();
extern void _ZN8S20353C53v26Ev();
extern void _ZN8S20353C53v27Ev();
extern void _ZN8S20353C53v28Ev();
extern void _ZN8S20353C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C5__9S20353C11__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(264,188),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&_ZN8S20353C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20353C53v29Ev,
};
extern void _ZN8S20353C43v16Ev();
extern void _ZN8S20353C43v17Ev();
extern void _ZN8S20353C43v18Ev();
extern void _ZN8S20353C43v19Ev();
extern void _ZN8S20353C43v20Ev();
extern void _ZN8S20353C43v21Ev();
extern void _ZN8S20353C43v22Ev();
extern void _ZN8S20353C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C4__9S20353C11__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,164),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&_ZN8S20353C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20353C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20353C11D1Ev,_ZTv0_n20_N9S20353C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20353C11D0Ev,_ZTv0_n20_N9S20353C11D0Ev)();
extern void _ZN8S20353C63v30Ev();
extern void _ZN8S20353C63v31Ev();
extern void _ZN8S20353C63v32Ev();
extern void _ZN8S20353C63v33Ev();
extern void _ZN8S20353C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20353C6__9S20353C11__8S20353C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,152),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(208,152),
  (VTBL_ENTRY)&(_ZTI9S20353C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C11D1Ev,_ZTv0_n20_N9S20353C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20353C11D0Ev,_ZTv0_n20_N9S20353C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20353C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20353C63v34Ev,
};
static  VTT_ENTRY vtt_S20353C1[] = {
  {&(_ZTV8S20353C1[10]),  10,189},
  {&(_tg__ZTV8S20353C9__8S20353C1[6]),  6,22},
  {&(_tg__ZTV8S20353C88S20353C9__8S20353C1[5]),  5,9},
  {&(_tg__ZTV8S20353C5__8S20353C88S20353C9__8S20353C1[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C88S20353C9__8S20353C1[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C88S20353C9__8S20353C1[10]),  10,17},
  {&(_tg__ZTV8S20353C7__8S20353C9__8S20353C1[5]),  5,8},
  {&(_tg__ZTV8S20353C8__8S20353C9__8S20353C1[5]),  5,9},
  {&(_tg__ZTV8S20353C5__8S20353C9__8S20353C1[9]),  9,15},
  {&(_tg__ZTV8S20353C4__A1__8S20353C9__8S20353C1[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C9__8S20353C1[10]),  10,17},
  {&(_ZTV8S20353C1[52]),  52,189},
  {&(_ZTV8S20353C1[63]),  63,189},
  {&(_ZTV8S20353C1[37]),  37,189},
  {&(_ZTV8S20353C1[75]),  75,189},
  {&(_ZTV8S20353C1[91]),  91,189},
  {&(_ZTV8S20353C1[109]),  109,189},
  {&(_ZTV8S20353C1[138]),  138,189},
  {&(_ZTV8S20353C1[162]),  162,189},
  {&(_ZTV8S20353C1[180]),  180,189},
  {&(_tg__ZTV8S20353C5__8S20353C1[3]),  3,9},
  {&(_tg__ZTV8S20353C4__8S20353C5__8S20353C1[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C1[4]),  4,11},
  {&(_tg__ZTV8S20353C5__8S20353C6__8S20353C1[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C6__8S20353C1[10]),  10,18},
  {&(_tg__ZTV9S20353C10__8S20353C1[7]),  7,23},
  {&(_tg__ZTV8S20353C5__9S20353C10__8S20353C1[9]),  9,15},
  {&(_tg__ZTV8S20353C4__A1__9S20353C10__8S20353C1[10]),  10,18},
  {&(_tg__ZTV8S20353C6__9S20353C10__8S20353C1[10]),  10,17},
  {&(_tg__ZTV8S20353C8__9S20353C10__8S20353C1[8]),  8,12},
  {&(_tg__ZTV8S20353C7__9S20353C10__8S20353C1[5]),  5,8},
  {&(_tg__ZTV8S20353C8__A1__8S20353C1[5]),  5,9},
  {&(_tg__ZTV8S20353C5__8S20353C8__A1__8S20353C1[9]),  9,15},
  {&(_tg__ZTV8S20353C4__8S20353C8__A1__8S20353C1[10]),  10,18},
  {&(_tg__ZTV8S20353C6__8S20353C8__A1__8S20353C1[10]),  10,17},
  {&(_tg__ZTV9S20353C11__8S20353C1[6]),  6,15},
  {&(_tg__ZTV8S20353C8__9S20353C11__8S20353C1[8]),  8,12},
  {&(_tg__ZTV8S20353C5__9S20353C11__8S20353C1[9]),  9,15},
  {&(_tg__ZTV8S20353C4__9S20353C11__8S20353C1[10]),  10,18},
  {&(_tg__ZTV8S20353C6__9S20353C11__8S20353C1[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S20353C1[];
extern  VTBL_ENTRY _ZTV8S20353C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20353C1[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20353C10D0Ev,_ZTv0_n24_N9S20353C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20353C10D0Ev,_ZThn120_N9S20353C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20353C10D1Ev,_ZTv0_n24_N9S20353C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20353C10D1Ev,_ZThn120_N9S20353C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C9D0Ev,_ZTv0_n20_N8S20353C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20353C9D0Ev,_ZThn192_N8S20353C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C9D1Ev,_ZTv0_n20_N8S20353C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20353C9D1Ev,_ZThn192_N8S20353C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D0Ev,_ZTv0_n20_N8S20353C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20353C8D0Ev,_ZThn180_N8S20353C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C8D1Ev,_ZTv0_n20_N8S20353C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20353C8D1Ev,_ZThn180_N8S20353C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20353C1D0Ev,_ZTv0_n52_N8S20353C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20353C1D0Ev,_ZThn344_N8S20353C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20353C1D1Ev,_ZTv0_n52_N8S20353C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20353C1D1Ev,_ZThn344_N8S20353C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20353C1D0Ev,_ZTv0_n24_N8S20353C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20353C1D0Ev,_ZThn340_N8S20353C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20353C1D1Ev,_ZTv0_n24_N8S20353C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20353C1D1Ev,_ZThn340_N8S20353C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20353C1D0Ev,_ZTv0_n64_N8S20353C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20353C1D0Ev,_ZThn220_N8S20353C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20353C1D1Ev,_ZTv0_n64_N8S20353C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20353C1D1Ev,_ZThn220_N8S20353C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C1D0Ev,_ZTv0_n20_N8S20353C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20353C1D0Ev,_ZThn192_N8S20353C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20353C1D1Ev,_ZTv0_n20_N8S20353C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20353C1D1Ev,_ZThn192_N8S20353C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20353C1 = {  "S20353C1", // class name
  bases_S20353C1, 14,
  &(vtc_S20353C1[0]), // expected_vtbl_contents
  &(vtt_S20353C1[0]), // expected_vtt_contents
  ABISELECT(656,464), // object size
  NSPAIRA(_ZTI8S20353C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20353C1),189, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20353C1),40, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20352C2  {
  ::S7817C7 s20352c2f0;
  long s20352c2f1;
  virtual void  v7(); // _ZN8S20352C22v7Ev
  virtual void  v8(); // _ZN8S20352C22v8Ev
  virtual void  v9(); // _ZN8S20352C22v9Ev
  virtual void  v10(); // _ZN8S20352C23v10Ev
  virtual void  v11(); // _ZN8S20352C23v11Ev
  virtual void  v12(); // _ZN8S20352C23v12Ev
  ~S20352C2(); // tgen
  S20352C2(); // tgen
};
//SIG(-1 S20352C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} Fl}


void  S20352C2 ::v7(){vfunc_called(this, "_ZN8S20352C22v7Ev");}
void  S20352C2 ::v8(){vfunc_called(this, "_ZN8S20352C22v8Ev");}
void  S20352C2 ::v9(){vfunc_called(this, "_ZN8S20352C22v9Ev");}
void  S20352C2 ::v10(){vfunc_called(this, "_ZN8S20352C23v10Ev");}
void  S20352C2 ::v11(){vfunc_called(this, "_ZN8S20352C23v11Ev");}
void  S20352C2 ::v12(){vfunc_called(this, "_ZN8S20352C23v12Ev");}
S20352C2 ::~S20352C2(){ note_dtor("S20352C2", this);} // tgen
S20352C2 ::S20352C2(){ note_ctor("S20352C2", this);} // tgen

static void Test_S20352C2()
{
  extern Class_Descriptor cd_S20352C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20352C2, buf);
    S20352C2 *dp, &lv = *(dp=new (buf) S20352C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20352C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C2)");
    check_field_offset(lv, s20352c2f0, ABISELECT(8,4), "S20352C2.s20352c2f0");
    check_field_offset(lv, s20352c2f1, ABISELECT(152,108), "S20352C2.s20352c2f1");
    test_class_info(&lv, &cd_S20352C2);
    dp->~S20352C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C2(Test_S20352C2, "S20352C2", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S20352C2C1Ev();
extern void _ZN8S20352C2D1Ev();
Name_Map name_map_S20352C2[] = {
  NSPAIR(_ZN8S20352C2C1Ev),
  NSPAIR(_ZN8S20352C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20352C2[];
extern void _ZN8S20352C22v7Ev();
extern void _ZN8S20352C22v8Ev();
extern void _ZN8S20352C22v9Ev();
extern void _ZN8S20352C23v10Ev();
extern void _ZN8S20352C23v11Ev();
extern void _ZN8S20352C23v12Ev();
static  VTBL_ENTRY vtc_S20352C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C2[0]),
  (VTBL_ENTRY)&_ZN8S20352C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S20352C2[];
extern  VTBL_ENTRY _ZTV8S20352C2[];
Class_Descriptor cd_S20352C2 = {  "S20352C2", // class name
  0,0,//no base classes
  &(vtc_S20352C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20352C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20352C2),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  S20352C7  {
  int s20352c7f0;
  virtual void  v13(); // _ZN8S20352C73v13Ev
  virtual void  v14(); // _ZN8S20352C73v14Ev
  virtual void  v15(); // _ZN8S20352C73v15Ev
  ~S20352C7(); // tgen
  S20352C7(); // tgen
};
//SIG(-1 S20352C7) C1{ v1 v2 v3 Fi}


void  S20352C7 ::v13(){vfunc_called(this, "_ZN8S20352C73v13Ev");}
void  S20352C7 ::v14(){vfunc_called(this, "_ZN8S20352C73v14Ev");}
void  S20352C7 ::v15(){vfunc_called(this, "_ZN8S20352C73v15Ev");}
S20352C7 ::~S20352C7(){ note_dtor("S20352C7", this);} // tgen
S20352C7 ::S20352C7(){ note_ctor("S20352C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20352C7C1Ev();
extern void _ZN8S20352C7D1Ev();
Name_Map name_map_S20352C7[] = {
  NSPAIR(_ZN8S20352C7C1Ev),
  NSPAIR(_ZN8S20352C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20352C7[];
extern void _ZN8S20352C73v13Ev();
extern void _ZN8S20352C73v14Ev();
extern void _ZN8S20352C73v15Ev();
static  VTBL_ENTRY vtc_S20352C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C7[0]),
  (VTBL_ENTRY)&_ZN8S20352C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S20352C7[];
extern  VTBL_ENTRY _ZTV8S20352C7[];
Class_Descriptor cd_S20352C7 = {  "S20352C7", // class name
  0,0,//no base classes
  &(vtc_S20352C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20352C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20352C7),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  S20352C4  {
  __tsi64 s20352c4f0;
  virtual void  v16(); // _ZN8S20352C43v16Ev
  virtual void  v17(); // _ZN8S20352C43v17Ev
  virtual void  v18(); // _ZN8S20352C43v18Ev
  virtual void  v19(); // _ZN8S20352C43v19Ev
  virtual void  v20(); // _ZN8S20352C43v20Ev
  virtual void  v21(); // _ZN8S20352C43v21Ev
  virtual void  v22(); // _ZN8S20352C43v22Ev
  virtual void  v23(); // _ZN8S20352C43v23Ev
  ~S20352C4(); // tgen
  S20352C4(); // tgen
};
//SIG(-1 S20352C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S20352C4 ::v16(){vfunc_called(this, "_ZN8S20352C43v16Ev");}
void  S20352C4 ::v17(){vfunc_called(this, "_ZN8S20352C43v17Ev");}
void  S20352C4 ::v18(){vfunc_called(this, "_ZN8S20352C43v18Ev");}
void  S20352C4 ::v19(){vfunc_called(this, "_ZN8S20352C43v19Ev");}
void  S20352C4 ::v20(){vfunc_called(this, "_ZN8S20352C43v20Ev");}
void  S20352C4 ::v21(){vfunc_called(this, "_ZN8S20352C43v21Ev");}
void  S20352C4 ::v22(){vfunc_called(this, "_ZN8S20352C43v22Ev");}
void  S20352C4 ::v23(){vfunc_called(this, "_ZN8S20352C43v23Ev");}
S20352C4 ::~S20352C4(){ note_dtor("S20352C4", this);} // tgen
S20352C4 ::S20352C4(){ note_ctor("S20352C4", this);} // tgen

static void Test_S20352C4()
{
  extern Class_Descriptor cd_S20352C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20352C4, buf);
    S20352C4 *dp, &lv = *(dp=new (buf) S20352C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20352C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C4)");
    check_field_offset(lv, s20352c4f0, ABISELECT(8,4), "S20352C4.s20352c4f0");
    test_class_info(&lv, &cd_S20352C4);
    dp->~S20352C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C4(Test_S20352C4, "S20352C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20352C4C1Ev();
extern void _ZN8S20352C4D1Ev();
Name_Map name_map_S20352C4[] = {
  NSPAIR(_ZN8S20352C4C1Ev),
  NSPAIR(_ZN8S20352C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20352C4[];
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY vtc_S20352C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C4[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
Class_Descriptor cd_S20352C4 = {  "S20352C4", // class name
  0,0,//no base classes
  &(vtc_S20352C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20352C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20352C4),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  S20352C5  : virtual S20352C4 {
  ::S20352C4 s20352c5f0;
  int s20352c5f1;
  void *s20352c5f2;
  virtual void  v24(); // _ZN8S20352C53v24Ev
  virtual void  v25(); // _ZN8S20352C53v25Ev
  virtual void  v26(); // _ZN8S20352C53v26Ev
  virtual void  v27(); // _ZN8S20352C53v27Ev
  virtual void  v28(); // _ZN8S20352C53v28Ev
  virtual void  v29(); // _ZN8S20352C53v29Ev
  ~S20352C5(); // tgen
  S20352C5(); // tgen
};
//SIG(-1 S20352C5) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S20352C5 ::v24(){vfunc_called(this, "_ZN8S20352C53v24Ev");}
void  S20352C5 ::v25(){vfunc_called(this, "_ZN8S20352C53v25Ev");}
void  S20352C5 ::v26(){vfunc_called(this, "_ZN8S20352C53v26Ev");}
void  S20352C5 ::v27(){vfunc_called(this, "_ZN8S20352C53v27Ev");}
void  S20352C5 ::v28(){vfunc_called(this, "_ZN8S20352C53v28Ev");}
void  S20352C5 ::v29(){vfunc_called(this, "_ZN8S20352C53v29Ev");}
S20352C5 ::~S20352C5(){ note_dtor("S20352C5", this);} // tgen
S20352C5 ::S20352C5(){ note_ctor("S20352C5", this);} // tgen

static void Test_S20352C5()
{
  extern Class_Descriptor cd_S20352C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20352C5, buf);
    S20352C5 *dp, &lv = *(dp=new (buf) S20352C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20352C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C5)");
    check_base_class_offset(lv, (S20352C4*), ABISELECT(40,24), "S20352C5");
    check_field_offset(lv, s20352c5f0, ABISELECT(8,4), "S20352C5.s20352c5f0");
    check_field_offset(lv, s20352c5f1, ABISELECT(24,16), "S20352C5.s20352c5f1");
    check_field_offset(lv, s20352c5f2, ABISELECT(32,20), "S20352C5.s20352c5f2");
    test_class_info(&lv, &cd_S20352C5);
    dp->~S20352C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C5(Test_S20352C5, "S20352C5", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20352C5C1Ev();
extern void _ZN8S20352C5D1Ev();
Name_Map name_map_S20352C5[] = {
  NSPAIR(_ZN8S20352C5C1Ev),
  NSPAIR(_ZN8S20352C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
static Base_Class bases_S20352C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20352C4,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI8S20352C5[];
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY vtc_S20352C5[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern VTBL_ENTRY _ZTV8S20352C5[];
static  VTT_ENTRY vtt_S20352C5[] = {
  {&(_ZTV8S20352C5[3]),  3,27},
  {&(_ZTV8S20352C5[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S20352C5[];
extern  VTBL_ENTRY _ZTV8S20352C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C5[];
Class_Descriptor cd_S20352C5 = {  "S20352C5", // class name
  bases_S20352C5, 1,
  &(vtc_S20352C5[0]), // expected_vtbl_contents
  &(vtt_S20352C5[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20352C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20352C5),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20352C5),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  S20352C6  : virtual S20352C5 {
  short s20352c6f0[6];
  int s20352c6f1;
  short s20352c6f2;
  char s20352c6f3[6];
  virtual  ~S20352C6(); // _ZN8S20352C6D2Ev
  virtual void  v30(); // _ZN8S20352C63v30Ev
  virtual void  v31(); // _ZN8S20352C63v31Ev
  virtual void  v32(); // _ZN8S20352C63v32Ev
  virtual void  v33(); // _ZN8S20352C63v33Ev
  virtual void  v34(); // _ZN8S20352C63v34Ev
  S20352C6(); // tgen
};
//SIG(-1 S20352C6) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13 FL} v14 v15 v16 v17 v18 v19 FC3 Fi Fp} vd v1 v2 v3 v4 v5 Fs[6] Fi Fs Fc[6]}


 S20352C6 ::~S20352C6(){ note_dtor("S20352C6", this);}
void  S20352C6 ::v30(){vfunc_called(this, "_ZN8S20352C63v30Ev");}
void  S20352C6 ::v31(){vfunc_called(this, "_ZN8S20352C63v31Ev");}
void  S20352C6 ::v32(){vfunc_called(this, "_ZN8S20352C63v32Ev");}
void  S20352C6 ::v33(){vfunc_called(this, "_ZN8S20352C63v33Ev");}
void  S20352C6 ::v34(){vfunc_called(this, "_ZN8S20352C63v34Ev");}
S20352C6 ::S20352C6(){ note_ctor("S20352C6", this);} // tgen

static void Test_S20352C6()
{
  extern Class_Descriptor cd_S20352C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S20352C6, buf);
    S20352C6 *dp, &lv = *(dp=new (buf) S20352C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S20352C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C6)");
    check_base_class_offset(lv, (S20352C4*)(S20352C5*), ABISELECT(72,52), "S20352C6");
    check_base_class_offset(lv, (S20352C5*), ABISELECT(32,28), "S20352C6");
    check_field_offset(lv, s20352c6f0, ABISELECT(8,4), "S20352C6.s20352c6f0");
    check_field_offset(lv, s20352c6f1, ABISELECT(20,16), "S20352C6.s20352c6f1");
    check_field_offset(lv, s20352c6f2, ABISELECT(24,20), "S20352C6.s20352c6f2");
    check_field_offset(lv, s20352c6f3, ABISELECT(26,22), "S20352C6.s20352c6f3");
    test_class_info(&lv, &cd_S20352C6);
    dp->~S20352C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C6(Test_S20352C6, "S20352C6", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN8S20352C6C1Ev();
extern void _ZN8S20352C6D2Ev();
Name_Map name_map_S20352C6[] = {
  NSPAIR(_ZN8S20352C6C1Ev),
  NSPAIR(_ZN8S20352C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C5;
extern VTBL_ENTRY _ZTI8S20352C5[];
extern  VTBL_ENTRY _ZTV8S20352C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C5[];
static Base_Class bases_S20352C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20352C4,    ABISELECT(72,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //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_S20352C5,    ABISELECT(32,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S20352C6[];
extern void _ZN8S20352C6D1Ev();
extern void _ZN8S20352C6D0Ev();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY vtc_S20352C6[] = {
  ABISELECT(72,52),
  ABISELECT(32,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern VTBL_ENTRY _ZTV8S20352C6[];
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C6[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C5__8S20352C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
static  VTT_ENTRY vtt_S20352C6[] = {
  {&(_ZTV8S20352C6[4]),  4,44},
  {&(_ZTV8S20352C6[20]),  20,44},
  {&(_ZTV8S20352C6[36]),  36,44},
  {&(_tg__ZTV8S20352C5__8S20352C6[3]),  3,9},
  {&(_tg__ZTV8S20352C4__8S20352C5__8S20352C6[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20352C6[];
extern  VTBL_ENTRY _ZTV8S20352C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C6[];
Class_Descriptor cd_S20352C6 = {  "S20352C6", // class name
  bases_S20352C6, 2,
  &(vtc_S20352C6[0]), // expected_vtbl_contents
  &(vtt_S20352C6[0]), // expected_vtt_contents
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI8S20352C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20352C6),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20352C6),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  S20352C8  : virtual S20352C5 , virtual S20352C6 {
  virtual  ~S20352C8(); // _ZN8S20352C8D2Ev
  virtual void  v35(); // _ZN8S20352C83v35Ev
  virtual void  v36(); // _ZN8S20352C83v36Ev
  S20352C8(); // tgen
};
//SIG(-1 S20352C8) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 FL} v11 v12 v13 v14 v15 v16 FC3 Fi Fp} VBC4{ VBC2 vd v17 v18 v19 v20 v21 Fs[6] Fi Fs Fc[6]} vd v1 v2}


 S20352C8 ::~S20352C8(){ note_dtor("S20352C8", this);}
void  S20352C8 ::v35(){vfunc_called(this, "_ZN8S20352C83v35Ev");}
void  S20352C8 ::v36(){vfunc_called(this, "_ZN8S20352C83v36Ev");}
S20352C8 ::S20352C8(){ note_ctor("S20352C8", this);} // tgen

static void Test_S20352C8()
{
  extern Class_Descriptor cd_S20352C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S20352C8, buf);
    S20352C8 *dp, &lv = *(dp=new (buf) S20352C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S20352C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C8)");
    check_base_class_offset(lv, (S20352C4*)(S20352C5*), ABISELECT(48,28), "S20352C8");
    check_base_class_offset(lv, (S20352C5*), ABISELECT(8,4), "S20352C8");
    check_base_class_offset(lv, (S20352C5*)(S20352C6*), ABISELECT(8,4), "S20352C8");
    check_base_class_offset(lv, (S20352C6*), ABISELECT(64,40), "S20352C8");
    test_class_info(&lv, &cd_S20352C8);
    dp->~S20352C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C8(Test_S20352C8, "S20352C8", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN8S20352C8C1Ev();
extern void _ZN8S20352C8D2Ev();
Name_Map name_map_S20352C8[] = {
  NSPAIR(_ZN8S20352C8C1Ev),
  NSPAIR(_ZN8S20352C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C5;
extern VTBL_ENTRY _ZTI8S20352C5[];
extern  VTBL_ENTRY _ZTV8S20352C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C5[];
extern Class_Descriptor cd_S20352C6;
extern VTBL_ENTRY _ZTI8S20352C6[];
extern  VTBL_ENTRY _ZTV8S20352C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C6[];
static Base_Class bases_S20352C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20352C4,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S20352C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //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_S20352C6,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S20352C8[];
extern void _ZN8S20352C8D1Ev();
extern void _ZN8S20352C8D0Ev();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20352C8D1Ev,_ZThn40_N8S20352C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20352C8D0Ev,_ZThn40_N8S20352C8D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY vtc_S20352C8[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern VTBL_ENTRY _ZTV8S20352C8[];
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C8[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C5__8S20352C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void _ZN8S20352C6D1Ev();
extern void _ZN8S20352C6D0Ev();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C6__8S20352C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C6__8S20352C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
static  VTT_ENTRY vtt_S20352C8[] = {
  {&(_ZTV8S20352C8[5]),  5,59},
  {&(_ZTV8S20352C8[18]),  18,59},
  {&(_ZTV8S20352C8[34]),  34,59},
  {&(_ZTV8S20352C8[52]),  52,59},
  {&(_tg__ZTV8S20352C5__8S20352C8[3]),  3,9},
  {&(_tg__ZTV8S20352C4__8S20352C5__8S20352C8[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C8[4]),  4,11},
  {&(_tg__ZTV8S20352C5__8S20352C6__8S20352C8[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C6__8S20352C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20352C8[];
extern  VTBL_ENTRY _ZTV8S20352C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C8[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20352C8D0Ev,_ZThn40_N8S20352C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20352C8D1Ev,_ZThn40_N8S20352C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20352C8 = {  "S20352C8", // class name
  bases_S20352C8, 3,
  &(vtc_S20352C8[0]), // expected_vtbl_contents
  &(vtt_S20352C8[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI8S20352C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20352C8),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20352C8),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20352C9  : virtual S20352C7 , S20352C4 , S20352C8 {
  char s20352c9f0[8];
  virtual  ~S20352C9(); // _ZN8S20352C9D2Ev
  virtual void  v37(); // _ZN8S20352C93v37Ev
  virtual void  v38(); // _ZN8S20352C93v38Ev
  virtual void  v39(); // _ZN8S20352C93v39Ev
  virtual void  v40(); // _ZN8S20352C93v40Ev
  virtual void  v41(); // _ZN8S20352C93v41Ev
  virtual void  v42(); // _ZN8S20352C93v42Ev
  S20352C9(); // tgen
};
//SIG(-1 S20352C9) C1{ VBC2{ v7 v8 v9 Fi} BC3{ v10 v11 v12 v13 v14 v15 v16 v17 FL} BC4{ VBC5{ VBC3 v18 v19 v20 v21 v22 v23 FC3 Fi Fp} VBC6{ VBC5 vd v24 v25 v26 v27 v28 Fs[6] Fi Fs Fc[6]} vd v29 v30} vd v1 v2 v3 v4 v5 v6 Fc[8]}


 S20352C9 ::~S20352C9(){ note_dtor("S20352C9", this);}
void  S20352C9 ::v37(){vfunc_called(this, "_ZN8S20352C93v37Ev");}
void  S20352C9 ::v38(){vfunc_called(this, "_ZN8S20352C93v38Ev");}
void  S20352C9 ::v39(){vfunc_called(this, "_ZN8S20352C93v39Ev");}
void  S20352C9 ::v40(){vfunc_called(this, "_ZN8S20352C93v40Ev");}
void  S20352C9 ::v41(){vfunc_called(this, "_ZN8S20352C93v41Ev");}
void  S20352C9 ::v42(){vfunc_called(this, "_ZN8S20352C93v42Ev");}
S20352C9 ::S20352C9(){ note_ctor("S20352C9", this);} // tgen

static void Test_S20352C9()
{
  extern Class_Descriptor cd_S20352C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S20352C9, buf);
    S20352C9 *dp, &lv = *(dp=new (buf) S20352C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S20352C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C9)");
    check_base_class_offset(lv, (S20352C7*), ABISELECT(32,24), "S20352C9");
    /*is_ambiguous_... S20352C9::S20352C4 */ AMB_check_base_class_offset(lv, (S20352C4*), 0, "S20352C9");
    check_base_class_offset(lv, (S20352C4*)(S20352C5*), ABISELECT(88,56), "S20352C9");
    check_base_class_offset(lv, (S20352C5*)(S20352C8*), ABISELECT(48,32), "S20352C9");
    check_base_class_offset(lv, (S20352C5*)(S20352C6*), ABISELECT(48,32), "S20352C9");
    check_base_class_offset(lv, (S20352C6*)(S20352C8*), ABISELECT(104,68), "S20352C9");
    check_base_class_offset(lv, (S20352C8*), ABISELECT(16,12), "S20352C9");
    check_field_offset(lv, s20352c9f0, ABISELECT(24,16), "S20352C9.s20352c9f0");
    test_class_info(&lv, &cd_S20352C9);
    dp->~S20352C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C9(Test_S20352C9, "S20352C9", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN8S20352C9C1Ev();
extern void _ZN8S20352C9D2Ev();
Name_Map name_map_S20352C9[] = {
  NSPAIR(_ZN8S20352C9C1Ev),
  NSPAIR(_ZN8S20352C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20352C7;
extern VTBL_ENTRY _ZTI8S20352C7[];
extern  VTBL_ENTRY _ZTV8S20352C7[];
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C5;
extern VTBL_ENTRY _ZTI8S20352C5[];
extern  VTBL_ENTRY _ZTV8S20352C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C5[];
extern Class_Descriptor cd_S20352C6;
extern VTBL_ENTRY _ZTI8S20352C6[];
extern  VTBL_ENTRY _ZTV8S20352C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C6[];
extern Class_Descriptor cd_S20352C8;
extern VTBL_ENTRY _ZTI8S20352C8[];
extern  VTBL_ENTRY _ZTV8S20352C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C8[];
static Base_Class bases_S20352C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20352C7,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20352C4,    ABISELECT(88,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20352C5,    ABISELECT(48,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20352C6,    ABISELECT(104,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20352C8,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20352C9[];
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void _ZN8S20352C9D1Ev();
extern void _ZN8S20352C9D0Ev();
extern void _ZN8S20352C93v37Ev();
extern void _ZN8S20352C93v38Ev();
extern void _ZN8S20352C93v39Ev();
extern void _ZN8S20352C93v40Ev();
extern void _ZN8S20352C93v41Ev();
extern void _ZN8S20352C93v42Ev();
extern void ABISELECT(_ZThn16_N8S20352C9D1Ev,_ZThn12_N8S20352C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20352C9D0Ev,_ZThn12_N8S20352C9D0Ev)();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
extern void _ZN8S20352C73v13Ev();
extern void _ZN8S20352C73v14Ev();
extern void _ZN8S20352C73v15Ev();
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N8S20352C9D1Ev,_ZTv0_n20_N8S20352C9D1Ev)();
extern void ABISELECT(_ZThn104_N8S20352C9D1Ev,_ZThn68_N8S20352C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20352C9D0Ev,_ZTv0_n20_N8S20352C9D0Ev)();
extern void ABISELECT(_ZThn104_N8S20352C9D0Ev,_ZThn68_N8S20352C9D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY vtc_S20352C9[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20352C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v38Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v39Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v40Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v42Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20352C9D1Ev,_ZThn12_N8S20352C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20352C9D0Ev,_ZThn12_N8S20352C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C9D1Ev,_ZTv0_n20_N8S20352C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C9D0Ev,_ZTv0_n20_N8S20352C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern VTBL_ENTRY _ZTV8S20352C9[];
extern void _ZN8S20352C8D1Ev();
extern void _ZN8S20352C8D0Ev();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C8__8S20352C9[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C8__8S20352C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C8__8S20352C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20352C8D1Ev,_ZThn56_N8S20352C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20352C8D0Ev,_ZThn56_N8S20352C8D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C8__8S20352C9[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C9[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C5__8S20352C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void _ZN8S20352C6D1Ev();
extern void _ZN8S20352C6D0Ev();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C9[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C6__8S20352C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C6__8S20352C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
static  VTT_ENTRY vtt_S20352C9[] = {
  {&(_ZTV8S20352C9[6]),  6,89},
  {&(_tg__ZTV8S20352C8__8S20352C9[5]),  5,9},
  {&(_tg__ZTV8S20352C5__8S20352C8__8S20352C9[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C8__8S20352C9[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C8__8S20352C9[10]),  10,17},
  {&(_ZTV8S20352C9[36]),  36,89},
  {&(_ZTV8S20352C9[27]),  27,89},
  {&(_ZTV8S20352C9[48]),  48,89},
  {&(_ZTV8S20352C9[64]),  64,89},
  {&(_ZTV8S20352C9[82]),  82,89},
  {&(_tg__ZTV8S20352C5__8S20352C9[3]),  3,9},
  {&(_tg__ZTV8S20352C4__8S20352C5__8S20352C9[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C9[4]),  4,11},
  {&(_tg__ZTV8S20352C5__8S20352C6__8S20352C9[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C6__8S20352C9[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20352C9[];
extern  VTBL_ENTRY _ZTV8S20352C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C9[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20352C8D0Ev,_ZThn56_N8S20352C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20352C8D1Ev,_ZThn56_N8S20352C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C9D0Ev,_ZTv0_n20_N8S20352C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20352C9D0Ev,_ZThn68_N8S20352C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C9D1Ev,_ZTv0_n20_N8S20352C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20352C9D1Ev,_ZThn68_N8S20352C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20352C9 = {  "S20352C9", // class name
  bases_S20352C9, 6,
  &(vtc_S20352C9[0]), // expected_vtbl_contents
  &(vtt_S20352C9[0]), // expected_vtt_contents
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI8S20352C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20352C9),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20352C9),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20352C10  : S20352C4 , virtual S20352C5 , virtual S20352C6 , virtual S20352C8 , virtual S20352C7 {
  ::S7817C7 s20352c10f0;
  void *s20352c10f1;
  virtual  ~S20352C10(); // _ZN9S20352C10D2Ev
  virtual void  v43(); // _ZN9S20352C103v43Ev
  virtual void  v44(); // _ZN9S20352C103v44Ev
  virtual void  v45(); // _ZN9S20352C103v45Ev
  virtual void  v46(); // _ZN9S20352C103v46Ev
  virtual void  v47(); // _ZN9S20352C103v47Ev
  virtual void  v48(); // _ZN9S20352C103v48Ev
  S20352C10(); // tgen
};
//SIG(-1 S20352C10) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} VBC3{ VBC2 v15 v16 v17 v18 v19 v20 FC2 Fi Fp} VBC4{ VBC3 vd v21 v22 v23 v24 v25 Fs[6] Fi Fs Fc[6]} VBC5{ VBC3 VBC4 vd v26 v27} VBC6{ v28 v29 v30 Fi} vd v1 v2 v3 v4 v5 v6 FC7{ VBC8{ v35 v36 v37 v38 v39 v40 v41 v42 FL} VBC9{ VBC8 v43 v44 v45 v46 v47 v48 FC8 Fi Fp} BC10{ VBC9 vd v49 v50 v51 v52 v53 Fs[6] Fi Fs Fc[6]} VBC11{ v54 v55 v56 Fi} BC12{ VBC9 VBC10 vd v57 v58} vd v31 v32 v33 v34} Fp}


 S20352C10 ::~S20352C10(){ note_dtor("S20352C10", this);}
void  S20352C10 ::v43(){vfunc_called(this, "_ZN9S20352C103v43Ev");}
void  S20352C10 ::v44(){vfunc_called(this, "_ZN9S20352C103v44Ev");}
void  S20352C10 ::v45(){vfunc_called(this, "_ZN9S20352C103v45Ev");}
void  S20352C10 ::v46(){vfunc_called(this, "_ZN9S20352C103v46Ev");}
void  S20352C10 ::v47(){vfunc_called(this, "_ZN9S20352C103v47Ev");}
void  S20352C10 ::v48(){vfunc_called(this, "_ZN9S20352C103v48Ev");}
S20352C10 ::S20352C10(){ note_ctor("S20352C10", this);} // tgen

static void Test_S20352C10()
{
  extern Class_Descriptor cd_S20352C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,50)];
    init_test(&cd_S20352C10, buf);
    S20352C10 *dp, &lv = *(dp=new (buf) S20352C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,196), "sizeof(S20352C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C10)");
    /*is_ambiguous_... S20352C10::S20352C4 */ AMB_check_base_class_offset(lv, (S20352C4*), 0, "S20352C10");
    check_base_class_offset(lv, (S20352C4*)(S20352C5*), ABISELECT(208,144), "S20352C10");
    check_base_class_offset(lv, (S20352C5*), ABISELECT(168,120), "S20352C10");
    check_base_class_offset(lv, (S20352C5*)(S20352C6*), ABISELECT(168,120), "S20352C10");
    check_base_class_offset(lv, (S20352C5*)(S20352C8*), ABISELECT(168,120), "S20352C10");
    check_base_class_offset(lv, (S20352C6*), ABISELECT(224,156), "S20352C10");
    check_base_class_offset(lv, (S20352C6*)(S20352C8*), ABISELECT(224,156), "S20352C10");
    check_base_class_offset(lv, (S20352C8*), ABISELECT(256,184), "S20352C10");
    check_base_class_offset(lv, (S20352C7*), ABISELECT(264,188), "S20352C10");
    check_field_offset(lv, s20352c10f0, ABISELECT(16,12), "S20352C10.s20352c10f0");
    check_field_offset(lv, s20352c10f1, ABISELECT(160,116), "S20352C10.s20352c10f1");
    test_class_info(&lv, &cd_S20352C10);
    dp->~S20352C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C10(Test_S20352C10, "S20352C10", ABISELECT(280,196));

#else // __cplusplus

extern void _ZN9S20352C10C1Ev();
extern void _ZN9S20352C10D2Ev();
Name_Map name_map_S20352C10[] = {
  NSPAIR(_ZN9S20352C10C1Ev),
  NSPAIR(_ZN9S20352C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C5;
extern VTBL_ENTRY _ZTI8S20352C5[];
extern  VTBL_ENTRY _ZTV8S20352C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C5[];
extern Class_Descriptor cd_S20352C6;
extern VTBL_ENTRY _ZTI8S20352C6[];
extern  VTBL_ENTRY _ZTV8S20352C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C6[];
extern Class_Descriptor cd_S20352C8;
extern VTBL_ENTRY _ZTI8S20352C8[];
extern  VTBL_ENTRY _ZTV8S20352C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C8[];
extern Class_Descriptor cd_S20352C7;
extern VTBL_ENTRY _ZTI8S20352C7[];
extern  VTBL_ENTRY _ZTV8S20352C7[];
static Base_Class bases_S20352C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20352C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20352C4,    ABISELECT(208,144), //bcp->offset
    38, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20352C5,    ABISELECT(168,120), //bcp->offset
    23, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C6,    ABISELECT(224,156), //bcp->offset
    56, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C8,    ABISELECT(256,184), //bcp->offset
    73, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C7,    ABISELECT(264,188), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20352C10[];
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void _ZN9S20352C10D1Ev();
extern void _ZN9S20352C10D0Ev();
extern void _ZN9S20352C103v43Ev();
extern void _ZN9S20352C103v44Ev();
extern void _ZN9S20352C103v45Ev();
extern void _ZN9S20352C103v46Ev();
extern void _ZN9S20352C103v47Ev();
extern void _ZN9S20352C103v48Ev();
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N9S20352C10D1Ev,_ZTv0_n20_N9S20352C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S20352C10D1Ev,_ZThn156_N9S20352C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20352C10D0Ev,_ZTv0_n20_N9S20352C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S20352C10D0Ev,_ZThn156_N9S20352C10D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
extern void ABISELECT(_ZTv0_n48_N9S20352C10D1Ev,_ZTv0_n24_N9S20352C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S20352C10D1Ev,_ZThn184_N9S20352C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20352C10D0Ev,_ZTv0_n24_N9S20352C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S20352C10D0Ev,_ZThn184_N9S20352C10D0Ev)() __attribute__((weak));
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
extern void _ZN8S20352C73v13Ev();
extern void _ZN8S20352C73v14Ev();
extern void _ZN8S20352C73v15Ev();
static  VTBL_ENTRY vtc_S20352C10[] = {
  ABISELECT(264,188),
  ABISELECT(256,184),
  ABISELECT(224,156),
  ABISELECT(208,144),
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  (VTBL_ENTRY)&_ZN9S20352C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20352C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v48Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C10D1Ev,_ZTv0_n20_N9S20352C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C10D0Ev,_ZTv0_n20_N9S20352C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
  0,
  0,
  ABISELECT(-256,-184),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-256,-184),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C10D1Ev,_ZTv0_n24_N9S20352C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C10D0Ev,_ZTv0_n24_N9S20352C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
  0,
  0,
  0,
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v15Ev,
};
extern VTBL_ENTRY _ZTV9S20352C10[];
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__9S20352C10[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C5__9S20352C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void _ZN8S20352C6D1Ev();
extern void _ZN8S20352C6D0Ev();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__9S20352C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C6__9S20352C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C6__9S20352C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void _ZN8S20352C8D1Ev();
extern void _ZN8S20352C8D0Ev();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C8__9S20352C10[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C8__9S20352C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C8__9S20352C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev)();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C8__9S20352C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
static  VTT_ENTRY vtt_S20352C10[] = {
  {&(_ZTV9S20352C10[7]),  7,93},
  {&(_ZTV9S20352C10[32]),  32,93},
  {&(_ZTV9S20352C10[48]),  48,93},
  {&(_ZTV9S20352C10[66]),  66,93},
  {&(_ZTV9S20352C10[81]),  81,93},
  {&(_ZTV9S20352C10[90]),  90,93},
  {&(_tg__ZTV8S20352C5__9S20352C10[3]),  3,9},
  {&(_tg__ZTV8S20352C4__8S20352C5__9S20352C10[10]),  10,18},
  {&(_tg__ZTV8S20352C6__9S20352C10[4]),  4,11},
  {&(_tg__ZTV8S20352C5__8S20352C6__9S20352C10[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C6__9S20352C10[10]),  10,18},
  {&(_tg__ZTV8S20352C8__9S20352C10[5]),  5,9},
  {&(_tg__ZTV8S20352C5__8S20352C8__9S20352C10[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C8__9S20352C10[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C8__9S20352C10[10]),  10,17},
};
extern VTBL_ENTRY _ZTI9S20352C10[];
extern  VTBL_ENTRY _ZTV9S20352C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20352C10[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20352C10D0Ev,_ZTv0_n24_N9S20352C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20352C10D0Ev,_ZThn184_N9S20352C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20352C10D1Ev,_ZTv0_n24_N9S20352C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20352C10D1Ev,_ZThn184_N9S20352C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20352C10D0Ev,_ZTv0_n20_N9S20352C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20352C10D0Ev,_ZThn156_N9S20352C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20352C10D1Ev,_ZTv0_n20_N9S20352C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20352C10D1Ev,_ZThn156_N9S20352C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20352C10 = {  "S20352C10", // class name
  bases_S20352C10, 6,
  &(vtc_S20352C10[0]), // expected_vtbl_contents
  &(vtt_S20352C10[0]), // expected_vtt_contents
  ABISELECT(280,196), // object size
  NSPAIRA(_ZTI9S20352C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20352C10),93, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20352C10),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20352C11  : virtual S20352C8 , S20352C2 {
  void *s20352c11f0;
  virtual  ~S20352C11(); // _ZN9S20352C11D2Ev
  virtual void  v49(); // _ZN9S20352C113v49Ev
  S20352C11(); // tgen
};
//SIG(-1 S20352C11) C1{ VBC2{ VBC3{ VBC4{ v2 v3 v4 v5 v6 v7 v8 v9 FL} v10 v11 v12 v13 v14 v15 FC4 Fi Fp} VBC5{ VBC3 vd v16 v17 v18 v19 v20 Fs[6] Fi Fs Fc[6]} vd v21 v22} BC6{ v23 v24 v25 v26 v27 v28 FC7{ VBC8{ v33 v34 v35 v36 v37 v38 v39 v40 FL} VBC9{ VBC8 v41 v42 v43 v44 v45 v46 FC8 Fi Fp} BC10{ VBC9 vd v47 v48 v49 v50 v51 Fs[6] Fi Fs Fc[6]} VBC11{ v52 v53 v54 Fi} BC12{ VBC9 VBC10 vd v55 v56} vd v29 v30 v31 v32} Fl} vd v1 Fp}


 S20352C11 ::~S20352C11(){ note_dtor("S20352C11", this);}
void  S20352C11 ::v49(){vfunc_called(this, "_ZN9S20352C113v49Ev");}
S20352C11 ::S20352C11(){ note_ctor("S20352C11", this);} // tgen

static void Test_S20352C11()
{
  extern Class_Descriptor cd_S20352C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,47)];
    init_test(&cd_S20352C11, buf);
    S20352C11 *dp, &lv = *(dp=new (buf) S20352C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,184), "sizeof(S20352C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C11)");
    check_base_class_offset(lv, (S20352C4*)(S20352C5*), ABISELECT(216,144), "S20352C11");
    check_base_class_offset(lv, (S20352C5*)(S20352C8*), ABISELECT(176,120), "S20352C11");
    check_base_class_offset(lv, (S20352C5*)(S20352C6*), ABISELECT(176,120), "S20352C11");
    check_base_class_offset(lv, (S20352C6*)(S20352C8*), ABISELECT(232,156), "S20352C11");
    check_base_class_offset(lv, (S20352C8*), ABISELECT(168,116), "S20352C11");
    check_base_class_offset(lv, (S20352C2*), 0, "S20352C11");
    check_field_offset(lv, s20352c11f0, ABISELECT(160,112), "S20352C11.s20352c11f0");
    test_class_info(&lv, &cd_S20352C11);
    dp->~S20352C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C11(Test_S20352C11, "S20352C11", ABISELECT(264,184));

#else // __cplusplus

extern void _ZN9S20352C11C1Ev();
extern void _ZN9S20352C11D2Ev();
Name_Map name_map_S20352C11[] = {
  NSPAIR(_ZN9S20352C11C1Ev),
  NSPAIR(_ZN9S20352C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C5;
extern VTBL_ENTRY _ZTI8S20352C5[];
extern  VTBL_ENTRY _ZTV8S20352C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C5[];
extern Class_Descriptor cd_S20352C6;
extern VTBL_ENTRY _ZTI8S20352C6[];
extern  VTBL_ENTRY _ZTV8S20352C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C6[];
extern Class_Descriptor cd_S20352C8;
extern VTBL_ENTRY _ZTI8S20352C8[];
extern  VTBL_ENTRY _ZTV8S20352C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C8[];
extern Class_Descriptor cd_S20352C2;
extern VTBL_ENTRY _ZTI8S20352C2[];
extern  VTBL_ENTRY _ZTV8S20352C2[];
static Base_Class bases_S20352C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20352C4,    ABISELECT(216,144), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20352C5,    ABISELECT(176,120), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20352C6,    ABISELECT(232,156), //bcp->offset
    60, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20352C8,    ABISELECT(168,116), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20352C11[];
extern void _ZN8S20352C22v7Ev();
extern void _ZN8S20352C22v8Ev();
extern void _ZN8S20352C22v9Ev();
extern void _ZN8S20352C23v10Ev();
extern void _ZN8S20352C23v11Ev();
extern void _ZN8S20352C23v12Ev();
extern void _ZN9S20352C11D1Ev();
extern void _ZN9S20352C11D0Ev();
extern void _ZN9S20352C113v49Ev();
extern void ABISELECT(_ZTv0_n48_N9S20352C11D1Ev,_ZTv0_n24_N9S20352C11D1Ev)();
extern void ABISELECT(_ZThn168_N9S20352C11D1Ev,_ZThn116_N9S20352C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20352C11D0Ev,_ZTv0_n24_N9S20352C11D0Ev)();
extern void ABISELECT(_ZThn168_N9S20352C11D0Ev,_ZThn116_N9S20352C11D0Ev)() __attribute__((weak));
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N9S20352C11D1Ev,_ZTv0_n20_N9S20352C11D1Ev)();
extern void ABISELECT(_ZThn232_N9S20352C11D1Ev,_ZThn156_N9S20352C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20352C11D0Ev,_ZTv0_n20_N9S20352C11D0Ev)();
extern void ABISELECT(_ZThn232_N9S20352C11D0Ev,_ZThn156_N9S20352C11D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY vtc_S20352C11[] = {
  ABISELECT(232,156),
  ABISELECT(216,144),
  ABISELECT(176,120),
  ABISELECT(168,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&_ZN8S20352C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v12Ev,
  (VTBL_ENTRY)&_ZN9S20352C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20352C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20352C113v49Ev,
  0,
  0,
  ABISELECT(-168,-116),
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C11D1Ev,_ZTv0_n24_N9S20352C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C11D0Ev,_ZTv0_n24_N9S20352C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C11D1Ev,_ZTv0_n20_N9S20352C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C11D0Ev,_ZTv0_n20_N9S20352C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern VTBL_ENTRY _ZTV9S20352C11[];
extern void _ZN8S20352C8D1Ev();
extern void _ZN8S20352C8D0Ev();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C8__9S20352C11[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C8__9S20352C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C8__9S20352C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20352C8D1Ev,_ZThn40_N8S20352C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20352C8D0Ev,_ZThn40_N8S20352C8D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C8__9S20352C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__9S20352C11[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C5__9S20352C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void _ZN8S20352C6D1Ev();
extern void _ZN8S20352C6D0Ev();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__9S20352C11[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C6__9S20352C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C6__9S20352C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
static  VTT_ENTRY vtt_S20352C11[] = {
  {&(_ZTV9S20352C11[6]),  6,77},
  {&(_ZTV9S20352C11[23]),  23,77},
  {&(_ZTV9S20352C11[36]),  36,77},
  {&(_ZTV9S20352C11[52]),  52,77},
  {&(_ZTV9S20352C11[70]),  70,77},
  {&(_tg__ZTV8S20352C8__9S20352C11[5]),  5,9},
  {&(_tg__ZTV8S20352C5__8S20352C8__9S20352C11[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C8__9S20352C11[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C8__9S20352C11[10]),  10,17},
  {&(_tg__ZTV8S20352C5__9S20352C11[3]),  3,9},
  {&(_tg__ZTV8S20352C4__8S20352C5__9S20352C11[10]),  10,18},
  {&(_tg__ZTV8S20352C6__9S20352C11[4]),  4,11},
  {&(_tg__ZTV8S20352C5__8S20352C6__9S20352C11[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C6__9S20352C11[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20352C11[];
extern  VTBL_ENTRY _ZTV9S20352C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20352C11[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20352C8D0Ev,_ZThn40_N8S20352C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20352C8D1Ev,_ZThn40_N8S20352C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20352C11D0Ev,_ZTv0_n20_N9S20352C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20352C11D0Ev,_ZThn156_N9S20352C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20352C11D1Ev,_ZTv0_n20_N9S20352C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20352C11D1Ev,_ZThn156_N9S20352C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20352C11D0Ev,_ZTv0_n24_N9S20352C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20352C11D0Ev,_ZThn116_N9S20352C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20352C11D1Ev,_ZTv0_n24_N9S20352C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20352C11D1Ev,_ZThn116_N9S20352C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20352C11 = {  "S20352C11", // class name
  bases_S20352C11, 5,
  &(vtc_S20352C11[0]), // expected_vtbl_contents
  &(vtt_S20352C11[0]), // expected_vtt_contents
  ABISELECT(264,184), // object size
  NSPAIRA(_ZTI9S20352C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20352C11),77, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20352C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20352C12  {
  void *s20352c12f0;
  virtual void  v50(); // _ZN9S20352C123v50Ev
  ~S20352C12(); // tgen
  S20352C12(); // tgen
};
//SIG(-1 S20352C12) C1{ v1 Fp}


void  S20352C12 ::v50(){vfunc_called(this, "_ZN9S20352C123v50Ev");}
S20352C12 ::~S20352C12(){ note_dtor("S20352C12", this);} // tgen
S20352C12 ::S20352C12(){ note_ctor("S20352C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S20352C12C1Ev();
extern void _ZN9S20352C12D1Ev();
Name_Map name_map_S20352C12[] = {
  NSPAIR(_ZN9S20352C12C1Ev),
  NSPAIR(_ZN9S20352C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20352C12[];
extern void _ZN9S20352C123v50Ev();
static  VTBL_ENTRY vtc_S20352C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20352C12[0]),
  (VTBL_ENTRY)&_ZN9S20352C123v50Ev,
};
extern VTBL_ENTRY _ZTI9S20352C12[];
extern  VTBL_ENTRY _ZTV9S20352C12[];
Class_Descriptor cd_S20352C12 = {  "S20352C12", // class name
  0,0,//no base classes
  &(vtc_S20352C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20352C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20352C12),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  S20352C1  : virtual S20352C2 , S20352C9 , virtual S20352C10 , virtual S20352C11 , S20352C12 {
  virtual  ~S20352C1(); // _ZN8S20352C1D2Ev
  virtual void  v1(); // _ZN8S20352C12v1Ev
  virtual void  v2(); // _ZN8S20352C12v2Ev
  virtual void  v3(); // _ZN8S20352C12v3Ev
  virtual void  v4(); // _ZN8S20352C12v4Ev
  virtual void  v5(); // _ZN8S20352C12v5Ev
  virtual void  v6(); // _ZN8S20352C12v6Ev
  S20352C1(); // tgen
};
//SIG(1 S20352C1) C1{ VBC2{ v7 v8 v9 v10 v11 v12 FC3{ VBC4{ v55 v56 v57 v58 v59 v60 v61 v62 FL} VBC5{ VBC4 v63 v64 v65 v66 v67 v68 FC4 Fi Fp} BC6{ VBC5 vd v69 v70 v71 v72 v73 Fs[6] Fi Fs Fc[6]} VBC7{ v74 v75 v76 Fi} BC8{ VBC5 VBC6 vd v77 v78} vd v51 v52 v53 v54} Fl} BC9{ VBC10{ v13 v14 v15 Fi} BC11{ v16 v17 v18 v19 v20 v21 v22 v23 FL} BC12{ VBC13{ VBC11 v24 v25 v26 v27 v28 v29 FC11 Fi Fp} VBC14{ VBC13 vd v30 v31 v32 v33 v34 Fs[6] Fi Fs Fc[6]} vd v35 v36} vd v37 v38 v39 v40 v41 v42 Fc[8]} VBC15{ BC11 VBC13 VBC14 VBC12 VBC10 vd v43 v44 v45 v46 v47 v48 FC3 Fp} VBC16{ VBC12 BC2 vd v49 Fp} BC17{ v50 Fp} vd v1 v2 v3 v4 v5 v6}


 S20352C1 ::~S20352C1(){ note_dtor("S20352C1", this);}
void  S20352C1 ::v1(){vfunc_called(this, "_ZN8S20352C12v1Ev");}
void  S20352C1 ::v2(){vfunc_called(this, "_ZN8S20352C12v2Ev");}
void  S20352C1 ::v3(){vfunc_called(this, "_ZN8S20352C12v3Ev");}
void  S20352C1 ::v4(){vfunc_called(this, "_ZN8S20352C12v4Ev");}
void  S20352C1 ::v5(){vfunc_called(this, "_ZN8S20352C12v5Ev");}
void  S20352C1 ::v6(){vfunc_called(this, "_ZN8S20352C12v6Ev");}
S20352C1 ::S20352C1(){ note_ctor("S20352C1", this);} // tgen

static void Test_S20352C1()
{
  extern Class_Descriptor cd_S20352C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,115)];
    init_test(&cd_S20352C1, buf);
    S20352C1 *dp, &lv = *(dp=new (buf) S20352C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,456), "sizeof(S20352C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20352C1)");
    /*is_ambiguous_... S20352C1::S20352C2 */ AMB_check_base_class_offset(lv, (S20352C2*), ABISELECT(48,32), "S20352C1");
    check_base_class_offset(lv, (S20352C7*)(S20352C9*), ABISELECT(208,144), "S20352C1");
    check_base_class_offset(lv, (S20352C7*)(S20352C10*), ABISELECT(208,144), "S20352C1");
    /*is_ambiguous_... S20352C9::S20352C4 */ AMB_check_base_class_offset(lv, (S20352C4*)(S20352C9*), 0, "S20352C1");
    check_base_class_offset(lv, (S20352C4*)(S20352C5*), ABISELECT(264,176), "S20352C1");
    check_base_class_offset(lv, (S20352C5*)(S20352C8*)(S20352C9*), ABISELECT(224,152), "S20352C1");
    check_base_class_offset(lv, (S20352C5*)(S20352C6*), ABISELECT(224,152), "S20352C1");
    check_base_class_offset(lv, (S20352C5*)(S20352C10*), ABISELECT(224,152), "S20352C1");
    /*is_ambiguous_... S20352C1::S20352C8 */ AMB_check_base_class_offset(lv, (S20352C5*)(S20352C8*), ABISELECT(224,152), "S20352C1");
    check_base_class_offset(lv, (S20352C6*)(S20352C8*)(S20352C9*), ABISELECT(280,188), "S20352C1");
    check_base_class_offset(lv, (S20352C6*)(S20352C10*), ABISELECT(280,188), "S20352C1");
    /*is_ambiguous_... S20352C1::S20352C8 */ AMB_check_base_class_offset(lv, (S20352C6*)(S20352C8*), ABISELECT(280,188), "S20352C1");
    check_base_class_offset(lv, (S20352C8*)(S20352C9*), ABISELECT(16,12), "S20352C1");
    check_base_class_offset(lv, (S20352C9*), 0, "S20352C1");
    /*is_ambiguous_... S20352C10::S20352C4 */ AMB_check_base_class_offset(lv, (S20352C4*)(S20352C10*), ABISELECT(312,216), "S20352C1");
    check_base_class_offset(lv, (S20352C8*)(S20352C10*), ABISELECT(480,336), "S20352C1");
    check_base_class_offset(lv, (S20352C8*)(S20352C11*), ABISELECT(480,336), "S20352C1");
    check_base_class_offset(lv, (S20352C10*), ABISELECT(312,216), "S20352C1");
    check_base_class_offset(lv, (S20352C2*)(S20352C11*), ABISELECT(488,340), "S20352C1");
    check_base_class_offset(lv, (S20352C11*), ABISELECT(488,340), "S20352C1");
    check_base_class_offset(lv, (S20352C12*), ABISELECT(32,24), "S20352C1");
    test_class_info(&lv, &cd_S20352C1);
    dp->~S20352C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20352C1(Test_S20352C1, "S20352C1", ABISELECT(656,456));

#else // __cplusplus

extern void _ZN8S20352C1C1Ev();
extern void _ZN8S20352C1D2Ev();
Name_Map name_map_S20352C1[] = {
  NSPAIR(_ZN8S20352C1C1Ev),
  NSPAIR(_ZN8S20352C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20352C2;
extern VTBL_ENTRY _ZTI8S20352C2[];
extern  VTBL_ENTRY _ZTV8S20352C2[];
extern Class_Descriptor cd_S20352C7;
extern VTBL_ENTRY _ZTI8S20352C7[];
extern  VTBL_ENTRY _ZTV8S20352C7[];
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C5;
extern VTBL_ENTRY _ZTI8S20352C5[];
extern  VTBL_ENTRY _ZTV8S20352C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C5[];
extern Class_Descriptor cd_S20352C6;
extern VTBL_ENTRY _ZTI8S20352C6[];
extern  VTBL_ENTRY _ZTV8S20352C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C6[];
extern Class_Descriptor cd_S20352C8;
extern VTBL_ENTRY _ZTI8S20352C8[];
extern  VTBL_ENTRY _ZTV8S20352C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C8[];
extern Class_Descriptor cd_S20352C9;
extern VTBL_ENTRY _ZTI8S20352C9[];
extern  VTBL_ENTRY _ZTV8S20352C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C9[];
extern Class_Descriptor cd_S20352C4;
extern VTBL_ENTRY _ZTI8S20352C4[];
extern  VTBL_ENTRY _ZTV8S20352C4[];
extern Class_Descriptor cd_S20352C8;
extern VTBL_ENTRY _ZTI8S20352C8[];
extern  VTBL_ENTRY _ZTV8S20352C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C8[];
extern Class_Descriptor cd_S20352C10;
extern VTBL_ENTRY _ZTI9S20352C10[];
extern  VTBL_ENTRY _ZTV9S20352C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20352C10[];
extern Class_Descriptor cd_S20352C2;
extern VTBL_ENTRY _ZTI8S20352C2[];
extern  VTBL_ENTRY _ZTV8S20352C2[];
extern Class_Descriptor cd_S20352C11;
extern VTBL_ENTRY _ZTI9S20352C11[];
extern  VTBL_ENTRY _ZTV9S20352C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20352C11[];
extern Class_Descriptor cd_S20352C12;
extern VTBL_ENTRY _ZTI9S20352C12[];
extern  VTBL_ENTRY _ZTV9S20352C12[];
static Base_Class bases_S20352C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20352C2,    ABISELECT(48,32), //bcp->offset
    44, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C7,    ABISELECT(208,144), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20352C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20352C4,    ABISELECT(264,176), //bcp->offset
    81, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20352C5,    ABISELECT(224,152), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20352C6,    ABISELECT(280,188), //bcp->offset
    99, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20352C8,    ABISELECT(16,12), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20352C9,    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_S20352C4,    ABISELECT(312,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20352C8,    ABISELECT(480,336), //bcp->offset
    154, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20352C10,    ABISELECT(312,216), //bcp->offset
    116, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C2,    ABISELECT(488,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20352C11,    ABISELECT(488,340), //bcp->offset
    166, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20352C12,    ABISELECT(32,24), //bcp->offset
    41, //bcp->virtual_function_table_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 _ZTI8S20352C1[];
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void _ZN8S20352C1D1Ev();
extern void _ZN8S20352C1D0Ev();
extern void _ZN8S20352C93v37Ev();
extern void _ZN8S20352C93v38Ev();
extern void _ZN8S20352C93v39Ev();
extern void _ZN8S20352C93v40Ev();
extern void _ZN8S20352C93v41Ev();
extern void _ZN8S20352C93v42Ev();
extern void _ZN8S20352C12v1Ev();
extern void _ZN8S20352C12v2Ev();
extern void _ZN8S20352C12v3Ev();
extern void _ZN8S20352C12v4Ev();
extern void _ZN8S20352C12v5Ev();
extern void _ZN8S20352C12v6Ev();
extern void ABISELECT(_ZThn16_N8S20352C1D1Ev,_ZThn12_N8S20352C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20352C1D0Ev,_ZThn12_N8S20352C1D0Ev)();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
extern void _ZN9S20352C123v50Ev();
extern void _ZN8S20352C22v7Ev();
extern void _ZN8S20352C22v8Ev();
extern void _ZN8S20352C22v9Ev();
extern void _ZN8S20352C23v10Ev();
extern void _ZN8S20352C23v11Ev();
extern void _ZN8S20352C23v12Ev();
extern void _ZN8S20352C73v13Ev();
extern void _ZN8S20352C73v14Ev();
extern void _ZN8S20352C73v15Ev();
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void ABISELECT(_ZTv0_n40_N8S20352C1D1Ev,_ZTv0_n20_N8S20352C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S20352C1D1Ev,_ZThn188_N8S20352C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20352C1D0Ev,_ZTv0_n20_N8S20352C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S20352C1D0Ev,_ZThn188_N8S20352C1D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void ABISELECT(_ZTv0_n128_N8S20352C1D1Ev,_ZTv0_n64_N8S20352C1D1Ev)();
extern void ABISELECT(_ZThn312_N8S20352C1D1Ev,_ZThn216_N8S20352C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S20352C1D0Ev,_ZTv0_n64_N8S20352C1D0Ev)();
extern void ABISELECT(_ZThn312_N8S20352C1D0Ev,_ZThn216_N8S20352C1D0Ev)() __attribute__((weak));
extern void _ZN9S20352C103v43Ev();
extern void _ZN9S20352C103v44Ev();
extern void _ZN9S20352C103v45Ev();
extern void _ZN9S20352C103v46Ev();
extern void _ZN9S20352C103v47Ev();
extern void _ZN9S20352C103v48Ev();
extern void ABISELECT(_ZTv0_n48_N8S20352C1D1Ev,_ZTv0_n24_N8S20352C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S20352C1D1Ev,_ZThn336_N8S20352C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20352C1D0Ev,_ZTv0_n24_N8S20352C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S20352C1D0Ev,_ZThn336_N8S20352C1D0Ev)() __attribute__((weak));
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
extern void _ZN8S20352C22v7Ev();
extern void _ZN8S20352C22v8Ev();
extern void _ZN8S20352C22v9Ev();
extern void _ZN8S20352C23v10Ev();
extern void _ZN8S20352C23v11Ev();
extern void _ZN8S20352C23v12Ev();
extern void ABISELECT(_ZTv0_n104_N8S20352C1D1Ev,_ZTv0_n52_N8S20352C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S20352C1D1Ev,_ZThn340_N8S20352C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20352C1D0Ev,_ZTv0_n52_N8S20352C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S20352C1D0Ev,_ZThn340_N8S20352C1D0Ev)() __attribute__((weak));
extern void _ZN9S20352C113v49Ev();
static  VTBL_ENTRY vtc_S20352C1[] = {
  ABISELECT(488,340),
  ABISELECT(480,336),
  ABISELECT(312,216),
  ABISELECT(48,32),
  ABISELECT(280,188),
  ABISELECT(264,176),
  ABISELECT(224,152),
  ABISELECT(208,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20352C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v38Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v39Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v40Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20352C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20352C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20352C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20352C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20352C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20352C12v6Ev,
  ABISELECT(264,176),
  ABISELECT(248,164),
  ABISELECT(208,140),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20352C1D1Ev,_ZThn12_N8S20352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20352C1D0Ev,_ZThn12_N8S20352C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN9S20352C123v50Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN8S20352C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v12Ev,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN8S20352C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-188),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C1D1Ev,_ZTv0_n20_N8S20352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C1D0Ev,_ZTv0_n20_N8S20352C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-72),
  ABISELECT(168,120),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-312,-216),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20352C1D1Ev,_ZTv0_n64_N8S20352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20352C1D0Ev,_ZTv0_n64_N8S20352C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20352C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v48Ev,
  0,
  0,
  ABISELECT(-480,-336),
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  ABISELECT(-480,-336),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20352C1D1Ev,_ZTv0_n24_N8S20352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20352C1D0Ev,_ZTv0_n24_N8S20352C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
  0,
  ABISELECT(-488,-340),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-152),
  ABISELECT(-224,-164),
  ABISELECT(-264,-188),
  ABISELECT(-8,-4),
  ABISELECT(-488,-340),
  (VTBL_ENTRY)&(_ZTI8S20352C1[0]),
  (VTBL_ENTRY)&_ZN8S20352C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20352C1D1Ev,_ZTv0_n52_N8S20352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20352C1D0Ev,_ZTv0_n52_N8S20352C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20352C113v49Ev,
};
extern VTBL_ENTRY _ZTV8S20352C1[];
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void _ZN8S20352C9D1Ev();
extern void _ZN8S20352C9D0Ev();
extern void _ZN8S20352C93v37Ev();
extern void _ZN8S20352C93v38Ev();
extern void _ZN8S20352C93v39Ev();
extern void _ZN8S20352C93v40Ev();
extern void _ZN8S20352C93v41Ev();
extern void _ZN8S20352C93v42Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C9__8S20352C1[] = {
  ABISELECT(280,188),
  ABISELECT(264,176),
  ABISELECT(224,152),
  ABISELECT(208,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20352C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v38Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v39Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v40Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20352C93v42Ev,
};
extern void _ZN8S20352C8D1Ev();
extern void _ZN8S20352C8D0Ev();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C88S20352C9__8S20352C1[] = {
  ABISELECT(264,176),
  ABISELECT(248,164),
  ABISELECT(208,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C88S20352C9__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-208,-140),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C88S20352C9__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev)();
extern void ABISELECT(_ZThn264_N8S20352C8D1Ev,_ZThn176_N8S20352C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev)();
extern void ABISELECT(_ZThn264_N8S20352C8D0Ev,_ZThn176_N8S20352C8D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C88S20352C9__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C73v13Ev();
extern void _ZN8S20352C73v14Ev();
extern void _ZN8S20352C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C7__8S20352C9__8S20352C1[] = {
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v15Ev,
};
extern void ABISELECT(_ZThn16_N8S20352C9D1Ev,_ZThn12_N8S20352C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20352C9D0Ev,_ZThn12_N8S20352C9D0Ev)();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C8__8S20352C9__8S20352C1[] = {
  ABISELECT(264,176),
  ABISELECT(248,164),
  ABISELECT(208,140),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20352C9D1Ev,_ZThn12_N8S20352C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20352C9D0Ev,_ZThn12_N8S20352C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C9__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__A1__8S20352C9__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20352C9D1Ev,_ZTv0_n20_N8S20352C9D1Ev)();
extern void ABISELECT(_ZThn280_N8S20352C9D1Ev,_ZThn188_N8S20352C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20352C9D0Ev,_ZTv0_n20_N8S20352C9D0Ev)();
extern void ABISELECT(_ZThn280_N8S20352C9D0Ev,_ZThn188_N8S20352C9D0Ev)() __attribute__((weak));
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C9__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-188),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S20352C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C9D1Ev,_ZTv0_n20_N8S20352C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C9D0Ev,_ZTv0_n20_N8S20352C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C5__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20352C5[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void _ZN8S20352C6D1Ev();
extern void _ZN8S20352C6D0Ev();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C6__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C6__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20352C6[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
extern void _ZN9S20352C10D1Ev();
extern void _ZN9S20352C10D0Ev();
extern void _ZN9S20352C103v43Ev();
extern void _ZN9S20352C103v44Ev();
extern void _ZN9S20352C103v45Ev();
extern void _ZN9S20352C103v46Ev();
extern void _ZN9S20352C103v47Ev();
extern void _ZN9S20352C103v48Ev();
static  VTBL_ENTRY _tg__ZTV9S20352C10__8S20352C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(168,120),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
  (VTBL_ENTRY)&_ZN9S20352C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20352C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v44Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v45Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v46Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v47Ev,
  (VTBL_ENTRY)&_ZN9S20352C103v48Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__9S20352C10__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__A1__9S20352C10__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20352C10D1Ev,_ZTv0_n20_N9S20352C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20352C10D0Ev,_ZTv0_n20_N9S20352C10D0Ev)();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__9S20352C10__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C10D1Ev,_ZTv0_n20_N9S20352C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C10D0Ev,_ZTv0_n20_N9S20352C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20352C10D1Ev,_ZTv0_n24_N9S20352C10D1Ev)();
extern void ABISELECT(_ZThn168_N9S20352C10D1Ev,_ZThn120_N9S20352C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20352C10D0Ev,_ZTv0_n24_N9S20352C10D0Ev)();
extern void ABISELECT(_ZThn168_N9S20352C10D0Ev,_ZThn120_N9S20352C10D0Ev)() __attribute__((weak));
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C8__9S20352C10__8S20352C1[] = {
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C10D1Ev,_ZTv0_n24_N9S20352C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C10D0Ev,_ZTv0_n24_N9S20352C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C73v13Ev();
extern void _ZN8S20352C73v14Ev();
extern void _ZN8S20352C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C7__9S20352C10__8S20352C1[] = {
  0,
  0,
  0,
  ABISELECT(104,72),
  (VTBL_ENTRY)&(_ZTI9S20352C10[0]),
  (VTBL_ENTRY)&_ZN8S20352C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20352C73v15Ev,
};
extern void _ZN8S20352C8D1Ev();
extern void _ZN8S20352C8D0Ev();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C8__A1__8S20352C1[] = {
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20352C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__8S20352C8__A1__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(256,184),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__8S20352C8__A1__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(216,160),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev)();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__8S20352C8__A1__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(200,148),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(200,148),
  (VTBL_ENTRY)&(_ZTI8S20352C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
extern void _ZN8S20352C22v7Ev();
extern void _ZN8S20352C22v8Ev();
extern void _ZN8S20352C22v9Ev();
extern void _ZN8S20352C23v10Ev();
extern void _ZN8S20352C23v11Ev();
extern void _ZN8S20352C23v12Ev();
extern void _ZN9S20352C11D1Ev();
extern void _ZN9S20352C11D0Ev();
extern void _ZN9S20352C113v49Ev();
static  VTBL_ENTRY _tg__ZTV9S20352C11__8S20352C1[] = {
  ABISELECT(-208,-152),
  ABISELECT(-224,-164),
  ABISELECT(-264,-188),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&_ZN8S20352C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20352C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20352C23v12Ev,
  (VTBL_ENTRY)&_ZN9S20352C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20352C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20352C113v49Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20352C11D1Ev,_ZTv0_n24_N9S20352C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20352C11D0Ev,_ZTv0_n24_N9S20352C11D0Ev)();
extern void _ZN8S20352C83v35Ev();
extern void _ZN8S20352C83v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C8__9S20352C11__8S20352C1[] = {
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-200,-148),
  ABISELECT(-216,-160),
  ABISELECT(-256,-184),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C11D1Ev,_ZTv0_n24_N9S20352C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20352C11D0Ev,_ZTv0_n24_N9S20352C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C83v35Ev,
  (VTBL_ENTRY)&_ZN8S20352C83v36Ev,
};
extern void _ZN8S20352C53v24Ev();
extern void _ZN8S20352C53v25Ev();
extern void _ZN8S20352C53v26Ev();
extern void _ZN8S20352C53v27Ev();
extern void _ZN8S20352C53v28Ev();
extern void _ZN8S20352C53v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C5__9S20352C11__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(264,188),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&_ZN8S20352C53v24Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20352C53v29Ev,
};
extern void _ZN8S20352C43v16Ev();
extern void _ZN8S20352C43v17Ev();
extern void _ZN8S20352C43v18Ev();
extern void _ZN8S20352C43v19Ev();
extern void _ZN8S20352C43v20Ev();
extern void _ZN8S20352C43v21Ev();
extern void _ZN8S20352C43v22Ev();
extern void _ZN8S20352C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C4__9S20352C11__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,164),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&_ZN8S20352C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v20Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20352C43v23Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20352C11D1Ev,_ZTv0_n20_N9S20352C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20352C11D0Ev,_ZTv0_n20_N9S20352C11D0Ev)();
extern void _ZN8S20352C63v30Ev();
extern void _ZN8S20352C63v31Ev();
extern void _ZN8S20352C63v32Ev();
extern void _ZN8S20352C63v33Ev();
extern void _ZN8S20352C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S20352C6__9S20352C11__8S20352C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,152),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(208,152),
  (VTBL_ENTRY)&(_ZTI9S20352C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C11D1Ev,_ZTv0_n20_N9S20352C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20352C11D0Ev,_ZTv0_n20_N9S20352C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20352C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20352C63v34Ev,
};
static  VTT_ENTRY vtt_S20352C1[] = {
  {&(_ZTV8S20352C1[10]),  10,189},
  {&(_tg__ZTV8S20352C9__8S20352C1[6]),  6,22},
  {&(_tg__ZTV8S20352C88S20352C9__8S20352C1[5]),  5,9},
  {&(_tg__ZTV8S20352C5__8S20352C88S20352C9__8S20352C1[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C88S20352C9__8S20352C1[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C88S20352C9__8S20352C1[10]),  10,17},
  {&(_tg__ZTV8S20352C7__8S20352C9__8S20352C1[5]),  5,8},
  {&(_tg__ZTV8S20352C8__8S20352C9__8S20352C1[5]),  5,9},
  {&(_tg__ZTV8S20352C5__8S20352C9__8S20352C1[9]),  9,15},
  {&(_tg__ZTV8S20352C4__A1__8S20352C9__8S20352C1[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C9__8S20352C1[10]),  10,17},
  {&(_ZTV8S20352C1[52]),  52,189},
  {&(_ZTV8S20352C1[63]),  63,189},
  {&(_ZTV8S20352C1[37]),  37,189},
  {&(_ZTV8S20352C1[75]),  75,189},
  {&(_ZTV8S20352C1[91]),  91,189},
  {&(_ZTV8S20352C1[109]),  109,189},
  {&(_ZTV8S20352C1[138]),  138,189},
  {&(_ZTV8S20352C1[162]),  162,189},
  {&(_ZTV8S20352C1[180]),  180,189},
  {&(_tg__ZTV8S20352C5__8S20352C1[3]),  3,9},
  {&(_tg__ZTV8S20352C4__8S20352C5__8S20352C1[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C1[4]),  4,11},
  {&(_tg__ZTV8S20352C5__8S20352C6__8S20352C1[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C6__8S20352C1[10]),  10,18},
  {&(_tg__ZTV9S20352C10__8S20352C1[7]),  7,23},
  {&(_tg__ZTV8S20352C5__9S20352C10__8S20352C1[9]),  9,15},
  {&(_tg__ZTV8S20352C4__A1__9S20352C10__8S20352C1[10]),  10,18},
  {&(_tg__ZTV8S20352C6__9S20352C10__8S20352C1[10]),  10,17},
  {&(_tg__ZTV8S20352C8__9S20352C10__8S20352C1[8]),  8,12},
  {&(_tg__ZTV8S20352C7__9S20352C10__8S20352C1[5]),  5,8},
  {&(_tg__ZTV8S20352C8__A1__8S20352C1[5]),  5,9},
  {&(_tg__ZTV8S20352C5__8S20352C8__A1__8S20352C1[9]),  9,15},
  {&(_tg__ZTV8S20352C4__8S20352C8__A1__8S20352C1[10]),  10,18},
  {&(_tg__ZTV8S20352C6__8S20352C8__A1__8S20352C1[10]),  10,17},
  {&(_tg__ZTV9S20352C11__8S20352C1[6]),  6,15},
  {&(_tg__ZTV8S20352C8__9S20352C11__8S20352C1[8]),  8,12},
  {&(_tg__ZTV8S20352C5__9S20352C11__8S20352C1[9]),  9,15},
  {&(_tg__ZTV8S20352C4__9S20352C11__8S20352C1[10]),  10,18},
  {&(_tg__ZTV8S20352C6__9S20352C11__8S20352C1[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S20352C1[];
extern  VTBL_ENTRY _ZTV8S20352C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20352C1[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20352C10D0Ev,_ZTv0_n24_N9S20352C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20352C10D0Ev,_ZThn120_N9S20352C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20352C10D1Ev,_ZTv0_n24_N9S20352C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20352C10D1Ev,_ZThn120_N9S20352C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C9D0Ev,_ZTv0_n20_N8S20352C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20352C9D0Ev,_ZThn188_N8S20352C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C9D1Ev,_ZTv0_n20_N8S20352C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20352C9D1Ev,_ZThn188_N8S20352C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D0Ev,_ZTv0_n20_N8S20352C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20352C8D0Ev,_ZThn176_N8S20352C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C8D1Ev,_ZTv0_n20_N8S20352C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20352C8D1Ev,_ZThn176_N8S20352C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20352C1D0Ev,_ZTv0_n52_N8S20352C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20352C1D0Ev,_ZThn340_N8S20352C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20352C1D1Ev,_ZTv0_n52_N8S20352C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20352C1D1Ev,_ZThn340_N8S20352C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20352C1D0Ev,_ZTv0_n24_N8S20352C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20352C1D0Ev,_ZThn336_N8S20352C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20352C1D1Ev,_ZTv0_n24_N8S20352C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20352C1D1Ev,_ZThn336_N8S20352C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20352C1D0Ev,_ZTv0_n64_N8S20352C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20352C1D0Ev,_ZThn216_N8S20352C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20352C1D1Ev,_ZTv0_n64_N8S20352C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20352C1D1Ev,_ZThn216_N8S20352C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C1D0Ev,_ZTv0_n20_N8S20352C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20352C1D0Ev,_ZThn188_N8S20352C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20352C1D1Ev,_ZTv0_n20_N8S20352C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20352C1D1Ev,_ZThn188_N8S20352C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20352C1 = {  "S20352C1", // class name
  bases_S20352C1, 14,
  &(vtc_S20352C1[0]), // expected_vtbl_contents
  &(vtt_S20352C1[0]), // expected_vtt_contents
  ABISELECT(656,456), // object size
  NSPAIRA(_ZTI8S20352C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20352C1),189, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20352C1),40, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7639C3  {
  virtual void  v6(); // _ZN7S7639C32v6Ev
  virtual void  v7(); // _ZN7S7639C32v7Ev
  virtual void  v8(); // _ZN7S7639C32v8Ev
  ~S7639C3(); // tgen
  S7639C3(); // tgen
};
//SIG(-1 S7639C3) C1{ v1 v2 v3}


void  S7639C3 ::v6(){vfunc_called(this, "_ZN7S7639C32v6Ev");}
void  S7639C3 ::v7(){vfunc_called(this, "_ZN7S7639C32v7Ev");}
void  S7639C3 ::v8(){vfunc_called(this, "_ZN7S7639C32v8Ev");}
S7639C3 ::~S7639C3(){ note_dtor("S7639C3", this);} // tgen
S7639C3 ::S7639C3(){ note_ctor("S7639C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7639C3C1Ev();
extern void _ZN7S7639C3D1Ev();
Name_Map name_map_S7639C3[] = {
  NSPAIR(_ZN7S7639C3C1Ev),
  NSPAIR(_ZN7S7639C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7639C3[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY vtc_S7639C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C3[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
Class_Descriptor cd_S7639C3 = {  "S7639C3", // class name
  0,0,//no base classes
  &(vtc_S7639C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7639C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7639C3),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  S7639C5  : S7639C3 {
  virtual void  v9(); // _ZN7S7639C52v9Ev
  ~S7639C5(); // tgen
  S7639C5(); // tgen
};
//SIG(-1 S7639C5) C1{ BC2{ v2 v3 v4} v1}


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

static void Test_S7639C5()
{
  extern Class_Descriptor cd_S7639C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7639C5, buf);
    S7639C5 *dp, &lv = *(dp=new (buf) S7639C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7639C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7639C5)");
    check_base_class_offset(lv, (S7639C3*), 0, "S7639C5");
    test_class_info(&lv, &cd_S7639C5);
    dp->~S7639C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C5(Test_S7639C5, "S7639C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7639C5C1Ev();
extern void _ZN7S7639C5D1Ev();
Name_Map name_map_S7639C5[] = {
  NSPAIR(_ZN7S7639C5C1Ev),
  NSPAIR(_ZN7S7639C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
static Base_Class bases_S7639C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7639C5[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY vtc_S7639C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C5[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
Class_Descriptor cd_S7639C5 = {  "S7639C5", // class name
  bases_S7639C5, 1,
  &(vtc_S7639C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7639C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7639C5),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  S7639C4  : virtual S7639C3 , virtual S7639C5 {
  void *s7639c4f0;
  short s7639c4f1;
  int s7639c4f2;
  ~S7639C4(); // tgen
  S7639C4(); // tgen
};
//SIG(-1 S7639C4) C1{ VBC2{ v1 v2 v3} VBC3{ BC2 v4} Fp Fs Fi}


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

static void Test_S7639C4()
{
  extern Class_Descriptor cd_S7639C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7639C4, buf);
    S7639C4 *dp, &lv = *(dp=new (buf) S7639C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7639C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7639C4)");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*), 0, "S7639C4");
    check_base_class_offset(lv, (S7639C3*)(S7639C5*), ABISELECT(24,16), "S7639C4");
    check_base_class_offset(lv, (S7639C5*), ABISELECT(24,16), "S7639C4");
    check_field_offset(lv, s7639c4f0, ABISELECT(8,4), "S7639C4.s7639c4f0");
    check_field_offset(lv, s7639c4f1, ABISELECT(16,8), "S7639C4.s7639c4f1");
    check_field_offset(lv, s7639c4f2, ABISELECT(20,12), "S7639C4.s7639c4f2");
    test_class_info(&lv, &cd_S7639C4);
    dp->~S7639C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C4(Test_S7639C4, "S7639C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7639C4C1Ev();
extern void _ZN7S7639C4D1Ev();
Name_Map name_map_S7639C4[] = {
  NSPAIR(_ZN7S7639C4C1Ev),
  NSPAIR(_ZN7S7639C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
static Base_Class bases_S7639C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7639C4[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY vtc_S7639C4[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern VTBL_ENTRY _ZTV7S7639C4[];
static  VTT_ENTRY vtt_S7639C4[] = {
  {&(_ZTV7S7639C4[7]),  7,20},
  {&(_ZTV7S7639C4[7]),  7,20},
  {&(_ZTV7S7639C4[16]),  16,20},
};
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
Class_Descriptor cd_S7639C4 = {  "S7639C4", // class name
  bases_S7639C4, 3,
  &(vtc_S7639C4[0]), // expected_vtbl_contents
  &(vtt_S7639C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7639C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7639C4),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7639C4),3, //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  S7639C2  : virtual S7639C3 , virtual S7639C4 , S7639C5 {
  short s7639c2f0;
  long double s7639c2f1;
  virtual void  v10(); // _ZN7S7639C23v10Ev
  virtual void  v11(); // _ZN7S7639C23v11Ev
  virtual void  v12(); // _ZN7S7639C23v12Ev
  virtual void  v13(); // _ZN7S7639C23v13Ev
  ~S7639C2(); // tgen
  S7639C2(); // tgen
};
//SIG(-1 S7639C2) C1{ VBC2{ v5 v6 v7} VBC3{ VBC2 VBC4{ BC2 v8} Fp Fs Fi} BC4 v1 v2 v3 v4 Fs FD}


void  S7639C2 ::v10(){vfunc_called(this, "_ZN7S7639C23v10Ev");}
void  S7639C2 ::v11(){vfunc_called(this, "_ZN7S7639C23v11Ev");}
void  S7639C2 ::v12(){vfunc_called(this, "_ZN7S7639C23v12Ev");}
void  S7639C2 ::v13(){vfunc_called(this, "_ZN7S7639C23v13Ev");}
S7639C2 ::~S7639C2(){ note_dtor("S7639C2", this);} // tgen
S7639C2 ::S7639C2(){ note_ctor("S7639C2", this);} // tgen

static void Test_S7639C2()
{
  extern Class_Descriptor cd_S7639C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S7639C2, buf);
    S7639C2 *dp, &lv = *(dp=new (buf) S7639C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S7639C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7639C2)");
    /*is_ambiguous_... S7639C2::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*), ABISELECT(32,20), "S7639C2");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), ABISELECT(32,20), "S7639C2");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), ABISELECT(56,36), "S7639C2");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*), ABISELECT(56,36), "S7639C2");
    check_base_class_offset(lv, (S7639C4*), ABISELECT(32,20), "S7639C2");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), 0, "S7639C2");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*), 0, "S7639C2");
    check_field_offset(lv, s7639c2f0, ABISELECT(8,4), "S7639C2.s7639c2f0");
    check_field_offset(lv, s7639c2f1, ABISELECT(16,8), "S7639C2.s7639c2f1");
    test_class_info(&lv, &cd_S7639C2);
    dp->~S7639C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C2(Test_S7639C2, "S7639C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S7639C2C1Ev();
extern void _ZN7S7639C2D1Ev();
Name_Map name_map_S7639C2[] = {
  NSPAIR(_ZN7S7639C2C1Ev),
  NSPAIR(_ZN7S7639C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
static Base_Class bases_S7639C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(56,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7639C4,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7639C2[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY vtc_S7639C2[] = {
  ABISELECT(56,36),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern VTBL_ENTRY _ZTV7S7639C2[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C2[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__7S7639C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
static  VTT_ENTRY vtt_S7639C2[] = {
  {&(_ZTV7S7639C2[5]),  5,33},
  {&(_ZTV7S7639C2[20]),  20,33},
  {&(_ZTV7S7639C2[20]),  20,33},
  {&(_ZTV7S7639C2[29]),  29,33},
  {&(_tg__ZTV7S7639C4__7S7639C2[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C2[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C4__7S7639C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7639C2[];
extern  VTBL_ENTRY _ZTV7S7639C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C2[];
Class_Descriptor cd_S7639C2 = {  "S7639C2", // class name
  bases_S7639C2, 6,
  &(vtc_S7639C2[0]), // expected_vtbl_contents
  &(vtt_S7639C2[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S7639C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7639C2),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7639C2),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7639C7  : S7639C3 , S7639C4 {
  void *s7639c7f0;
  int s7639c7f1:19;
  long double s7639c7f2;
  virtual  ~S7639C7(); // _ZN7S7639C7D2Ev
  virtual void  v14(); // _ZN7S7639C73v14Ev
  virtual void  v15(); // _ZN7S7639C73v15Ev
  virtual void  v16(); // _ZN7S7639C73v16Ev
  virtual void  v17(); // _ZN7S7639C73v17Ev
  virtual void  v18(); // _ZN7S7639C73v18Ev
  S7639C7(); // tgen
};
//SIG(-1 S7639C7) C1{ BC2{ v6 v7 v8} BC3{ VBC2 VBC4{ BC2 v9} Fp Fs Fi} vd v1 v2 v3 v4 v5 Fp Fi:19 FD}


 S7639C7 ::~S7639C7(){ note_dtor("S7639C7", this);}
void  S7639C7 ::v14(){vfunc_called(this, "_ZN7S7639C73v14Ev");}
void  S7639C7 ::v15(){vfunc_called(this, "_ZN7S7639C73v15Ev");}
void  S7639C7 ::v16(){vfunc_called(this, "_ZN7S7639C73v16Ev");}
void  S7639C7 ::v17(){vfunc_called(this, "_ZN7S7639C73v17Ev");}
void  S7639C7 ::v18(){vfunc_called(this, "_ZN7S7639C73v18Ev");}
S7639C7 ::S7639C7(){ note_ctor("S7639C7", this);} // tgen

static void Test_S7639C7()
{
  extern Class_Descriptor cd_S7639C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7639C7, buf);
    S7639C7 *dp, &lv = *(dp=new (buf) S7639C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7639C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7639C7)");
    /*is_ambiguous_... S7639C7::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*), 0, "S7639C7");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), ABISELECT(8,4), "S7639C7");
    check_base_class_offset(lv, (S7639C3*)(S7639C5*), ABISELECT(64,40), "S7639C7");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*), ABISELECT(64,40), "S7639C7");
    check_base_class_offset(lv, (S7639C4*), ABISELECT(8,4), "S7639C7");
    check_field_offset(lv, s7639c7f0, ABISELECT(32,20), "S7639C7.s7639c7f0");
    set_bf_and_test(lv, s7639c7f1, ABISELECT(40,24), 0, 19, 1, "S7639C7");
    set_bf_and_test(lv, s7639c7f1, ABISELECT(40,24), 0, 19, hide_sll(1LL<<18), "S7639C7");
    check_field_offset(lv, s7639c7f2, ABISELECT(48,28), "S7639C7.s7639c7f2");
    test_class_info(&lv, &cd_S7639C7);
    dp->~S7639C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C7(Test_S7639C7, "S7639C7", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7639C7C1Ev();
extern void _ZN7S7639C7D2Ev();
Name_Map name_map_S7639C7[] = {
  NSPAIR(_ZN7S7639C7C1Ev),
  NSPAIR(_ZN7S7639C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
static Base_Class bases_S7639C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7639C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7639C3,    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_S7639C5,    ABISELECT(64,40), //bcp->offset
    24, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7639C4,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7639C7[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C7D1Ev();
extern void _ZN7S7639C7D0Ev();
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY vtc_S7639C7[] = {
  ABISELECT(64,40),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
  ABISELECT(56,36),
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern VTBL_ENTRY _ZTV7S7639C7[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C7[] = {
  ABISELECT(56,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__7S7639C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
static  VTT_ENTRY vtt_S7639C7[] = {
  {&(_ZTV7S7639C7[4]),  4,34},
  {&(_tg__ZTV7S7639C4__7S7639C7[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C7[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C4__7S7639C7[6]),  6,10},
  {&(_ZTV7S7639C7[21]),  21,34},
  {&(_ZTV7S7639C7[21]),  21,34},
  {&(_ZTV7S7639C7[30]),  30,34},
};
extern VTBL_ENTRY _ZTI7S7639C7[];
extern  VTBL_ENTRY _ZTV7S7639C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C7[];
Class_Descriptor cd_S7639C7 = {  "S7639C7", // class name
  bases_S7639C7, 5,
  &(vtc_S7639C7[0]), // expected_vtbl_contents
  &(vtt_S7639C7[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7639C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7639C7),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7639C7),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7639C8_nt  {
  virtual  ~S7639C8_nt(); // _ZN10S7639C8_ntD1Ev
  virtual void  v19(); // _ZN10S7639C8_nt3v19Ev
  virtual void  v20(); // _ZN10S7639C8_nt3v20Ev
  virtual void  v21(); // _ZN10S7639C8_nt3v21Ev
  virtual void  v22(); // _ZN10S7639C8_nt3v22Ev
  S7639C8_nt(); // tgen
};
//SIG(-1 S7639C8_nt) C1{ vd v1 v2 v3 v4}


 S7639C8_nt ::~S7639C8_nt(){ note_dtor("S7639C8_nt", this);}
void  S7639C8_nt ::v19(){vfunc_called(this, "_ZN10S7639C8_nt3v19Ev");}
void  S7639C8_nt ::v20(){vfunc_called(this, "_ZN10S7639C8_nt3v20Ev");}
void  S7639C8_nt ::v21(){vfunc_called(this, "_ZN10S7639C8_nt3v21Ev");}
void  S7639C8_nt ::v22(){vfunc_called(this, "_ZN10S7639C8_nt3v22Ev");}
S7639C8_nt ::S7639C8_nt(){ note_ctor("S7639C8_nt", this);} // tgen

//skip512 S7639C8_nt

#else // __cplusplus

extern void _ZN10S7639C8_ntC1Ev();
extern void _ZN10S7639C8_ntD1Ev();
Name_Map name_map_S7639C8_nt[] = {
  NSPAIR(_ZN10S7639C8_ntC1Ev),
  NSPAIR(_ZN10S7639C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7639C8_nt[];
extern void _ZN10S7639C8_ntD1Ev();
extern void _ZN10S7639C8_ntD0Ev();
extern void _ZN10S7639C8_nt3v19Ev();
extern void _ZN10S7639C8_nt3v20Ev();
extern void _ZN10S7639C8_nt3v21Ev();
extern void _ZN10S7639C8_nt3v22Ev();
static  VTBL_ENTRY vtc_S7639C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7639C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7639C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v22Ev,
};
extern VTBL_ENTRY _ZTI10S7639C8_nt[];
VTBL_ENTRY *P__ZTI10S7639C8_nt = _ZTI10S7639C8_nt; 
extern  VTBL_ENTRY _ZTV10S7639C8_nt[];
Class_Descriptor cd_S7639C8_nt = {  "S7639C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7639C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7639C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7639C8_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  S7639C13  {
  void *s7639c13f0[5];
  virtual void  v23(); // _ZN8S7639C133v23Ev
  virtual void  v24(); // _ZN8S7639C133v24Ev
  virtual void  v25(); // _ZN8S7639C133v25Ev
  virtual void  v26(); // _ZN8S7639C133v26Ev
  virtual void  v27(); // _ZN8S7639C133v27Ev
  virtual void  v28(); // _ZN8S7639C133v28Ev
  virtual void  v29(); // _ZN8S7639C133v29Ev
  virtual void  v30(); // _ZN8S7639C133v30Ev
  virtual void  v31(); // _ZN8S7639C133v31Ev
  ~S7639C13(); // tgen
  S7639C13(); // tgen
};
//SIG(-1 S7639C13) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S7639C13 ::v23(){vfunc_called(this, "_ZN8S7639C133v23Ev");}
void  S7639C13 ::v24(){vfunc_called(this, "_ZN8S7639C133v24Ev");}
void  S7639C13 ::v25(){vfunc_called(this, "_ZN8S7639C133v25Ev");}
void  S7639C13 ::v26(){vfunc_called(this, "_ZN8S7639C133v26Ev");}
void  S7639C13 ::v27(){vfunc_called(this, "_ZN8S7639C133v27Ev");}
void  S7639C13 ::v28(){vfunc_called(this, "_ZN8S7639C133v28Ev");}
void  S7639C13 ::v29(){vfunc_called(this, "_ZN8S7639C133v29Ev");}
void  S7639C13 ::v30(){vfunc_called(this, "_ZN8S7639C133v30Ev");}
void  S7639C13 ::v31(){vfunc_called(this, "_ZN8S7639C133v31Ev");}
S7639C13 ::~S7639C13(){ note_dtor("S7639C13", this);} // tgen
S7639C13 ::S7639C13(){ note_ctor("S7639C13", this);} // tgen

static void Test_S7639C13()
{
  extern Class_Descriptor cd_S7639C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7639C13, buf);
    S7639C13 *dp, &lv = *(dp=new (buf) S7639C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7639C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7639C13)");
    check_field_offset(lv, s7639c13f0, ABISELECT(8,4), "S7639C13.s7639c13f0");
    test_class_info(&lv, &cd_S7639C13);
    dp->~S7639C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C13(Test_S7639C13, "S7639C13", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S7639C13C1Ev();
extern void _ZN8S7639C13D1Ev();
Name_Map name_map_S7639C13[] = {
  NSPAIR(_ZN8S7639C13C1Ev),
  NSPAIR(_ZN8S7639C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7639C13[];
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY vtc_S7639C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C13[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
Class_Descriptor cd_S7639C13 = {  "S7639C13", // class name
  0,0,//no base classes
  &(vtc_S7639C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S7639C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7639C13),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  S7639C12  : virtual S7639C5 , S7639C13 , S7639C4 {
  void *s7639c12f0;
  virtual void  v32(); // _ZN8S7639C123v32Ev
  virtual void  v33(); // _ZN8S7639C123v33Ev
  ~S7639C12(); // tgen
  S7639C12(); // tgen
};
//SIG(-1 S7639C12) C1{ VBC2{ BC3{ v3 v4 v5} v6} BC4{ v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[5]} BC5{ VBC3 VBC2 Fp Fs Fi} v1 v2 Fp}


void  S7639C12 ::v32(){vfunc_called(this, "_ZN8S7639C123v32Ev");}
void  S7639C12 ::v33(){vfunc_called(this, "_ZN8S7639C123v33Ev");}
S7639C12 ::~S7639C12(){ note_dtor("S7639C12", this);} // tgen
S7639C12 ::S7639C12(){ note_ctor("S7639C12", this);} // tgen

static void Test_S7639C12()
{
  extern Class_Descriptor cd_S7639C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S7639C12, buf);
    S7639C12 *dp, &lv = *(dp=new (buf) S7639C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S7639C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7639C12)");
    check_base_class_offset(lv, (S7639C3*)(S7639C5*), ABISELECT(80,44), "S7639C12");
    check_base_class_offset(lv, (S7639C5*), ABISELECT(80,44), "S7639C12");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*), ABISELECT(80,44), "S7639C12");
    check_base_class_offset(lv, (S7639C13*), 0, "S7639C12");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), ABISELECT(48,24), "S7639C12");
    check_base_class_offset(lv, (S7639C4*), ABISELECT(48,24), "S7639C12");
    check_field_offset(lv, s7639c12f0, ABISELECT(72,40), "S7639C12.s7639c12f0");
    test_class_info(&lv, &cd_S7639C12);
    dp->~S7639C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C12(Test_S7639C12, "S7639C12", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S7639C12C1Ev();
extern void _ZN8S7639C12D1Ev();
Name_Map name_map_S7639C12[] = {
  NSPAIR(_ZN8S7639C12C1Ev),
  NSPAIR(_ZN8S7639C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
static Base_Class bases_S7639C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(80,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7639C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7639C4,    ABISELECT(48,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S7639C12[];
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY vtc_S7639C12[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern VTBL_ENTRY _ZTV8S7639C12[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__8S7639C12[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__8S7639C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
static  VTT_ENTRY vtt_S7639C12[] = {
  {&(_ZTV8S7639C12[4]),  4,35},
  {&(_tg__ZTV7S7639C4__8S7639C12[7]),  7,10},
  {&(_tg__ZTV7S7639C4__8S7639C12[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C4__8S7639C12[6]),  6,10},
  {&(_ZTV8S7639C12[31]),  31,35},
  {&(_ZTV8S7639C12[22]),  22,35},
  {&(_ZTV8S7639C12[22]),  22,35},
};
extern VTBL_ENTRY _ZTI8S7639C12[];
extern  VTBL_ENTRY _ZTV8S7639C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C12[];
Class_Descriptor cd_S7639C12 = {  "S7639C12", // class name
  bases_S7639C12, 5,
  &(vtc_S7639C12[0]), // expected_vtbl_contents
  &(vtt_S7639C12[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S7639C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7639C12),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7639C12),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7639C11  : virtual S7639C3 , virtual S7639C12 , S7639C5 , S7639C2 , virtual S7639C13 {
  __tsi64 s7639c11f0[10];
  int s7639c11f1;
  __tsi64 s7639c11f2;
  virtual void  v34(); // _ZN8S7639C113v34Ev
  virtual void  v35(); // _ZN8S7639C113v35Ev
  ~S7639C11(); // tgen
  S7639C11(); // tgen
};
//SIG(-1 S7639C11) C1{ VBC2{ v3 v4 v5} VBC3{ VBC4{ BC2 v6} BC5{ v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[5]} BC6{ VBC2 VBC4 Fp Fs Fi} v16 v17 Fp} BC4 BC7{ VBC2 VBC6 BC4 v18 v19 v20 v21 Fs FD} VBC5 v1 v2 FL[10] Fi FL}


void  S7639C11 ::v34(){vfunc_called(this, "_ZN8S7639C113v34Ev");}
void  S7639C11 ::v35(){vfunc_called(this, "_ZN8S7639C113v35Ev");}
S7639C11 ::~S7639C11(){ note_dtor("S7639C11", this);} // tgen
S7639C11 ::S7639C11(){ note_ctor("S7639C11", this);} // tgen

static void Test_S7639C11()
{
  extern Class_Descriptor cd_S7639C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,52)];
    init_test(&cd_S7639C11, buf);
    S7639C11 *dp, &lv = *(dp=new (buf) S7639C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,204), "sizeof(S7639C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7639C11)");
    /*is_ambiguous_... S7639C11::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*), ABISELECT(192,140), "S7639C11");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C12*), ABISELECT(192,140), "S7639C11");
    /*is_ambiguous_... S7639C2::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C2*), ABISELECT(192,140), "S7639C11");
    /*is_ambiguous_... S7639C11::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), ABISELECT(192,140), "S7639C11");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), ABISELECT(224,160), "S7639C11");
    check_base_class_offset(lv, (S7639C5*)(S7639C12*), ABISELECT(224,160), "S7639C11");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C12*), ABISELECT(224,160), "S7639C11");
    /*is_ambiguous_... S7639C11::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*), ABISELECT(224,160), "S7639C11");
    check_base_class_offset(lv, (S7639C13*)(S7639C12*), ABISELECT(144,116), "S7639C11");
    check_base_class_offset(lv, (S7639C4*)(S7639C12*), ABISELECT(192,140), "S7639C11");
    check_base_class_offset(lv, (S7639C12*), ABISELECT(144,116), "S7639C11");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), 0, "S7639C11");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*), 0, "S7639C11");
    check_base_class_offset(lv, (S7639C4*)(S7639C2*), ABISELECT(232,164), "S7639C11");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C2*), ABISELECT(16,4), "S7639C11");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C2*), ABISELECT(16,4), "S7639C11");
    check_base_class_offset(lv, (S7639C2*), ABISELECT(16,4), "S7639C11");
    /*is_ambiguous_... S7639C11::S7639C13 */ AMB_check_base_class_offset(lv, (S7639C13*), ABISELECT(256,180), "S7639C11");
    check_field_offset(lv, s7639c11f0, ABISELECT(48,24), "S7639C11.s7639c11f0");
    check_field_offset(lv, s7639c11f1, ABISELECT(128,104), "S7639C11.s7639c11f1");
    check_field_offset(lv, s7639c11f2, ABISELECT(136,108), "S7639C11.s7639c11f2");
    test_class_info(&lv, &cd_S7639C11);
    dp->~S7639C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C11(Test_S7639C11, "S7639C11", ABISELECT(304,204));

#else // __cplusplus

extern void _ZN8S7639C11C1Ev();
extern void _ZN8S7639C11D1Ev();
Name_Map name_map_S7639C11[] = {
  NSPAIR(_ZN8S7639C11C1Ev),
  NSPAIR(_ZN8S7639C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C12;
extern VTBL_ENTRY _ZTI8S7639C12[];
extern  VTBL_ENTRY _ZTV8S7639C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C12[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C2;
extern VTBL_ENTRY _ZTI7S7639C2[];
extern  VTBL_ENTRY _ZTV7S7639C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C2[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
static Base_Class bases_S7639C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    ABISELECT(192,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(224,160), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //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_S7639C13,    ABISELECT(144,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(192,140), //bcp->offset
    52, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7639C12,    ABISELECT(144,116), //bcp->offset
    26, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7639C4,    ABISELECT(232,164), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7639C5,    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
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7639C2,    ABISELECT(16,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7639C13,    ABISELECT(256,180), //bcp->offset
    82, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7639C11[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY vtc_S7639C11[] = {
  ABISELECT(256,180),
  ABISELECT(232,164),
  ABISELECT(224,160),
  ABISELECT(144,116),
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-180),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern VTBL_ENTRY _ZTV8S7639C11[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C2__8S7639C11[] = {
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C2__8S7639C11[] = {
  0,
  0,
  0,
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C2__8S7639C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C2__8S7639C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C11[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__8S7639C11[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C12__8S7639C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C12__8S7639C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__8S7639C12__8S7639C11[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A1__8S7639C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C4__A1__8S7639C11[] = {
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__A1__8S7639C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
static  VTT_ENTRY vtt_S7639C11[] = {
  {&(_ZTV8S7639C11[7]),  7,102},
  {&(_tg__ZTV7S7639C2__8S7639C11[5]),  5,13},
  {&(_tg__ZTV7S7639C3__7S7639C2__8S7639C11[5]),  5,8},
  {&(_tg__ZTV7S7639C4__7S7639C2__8S7639C11[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C2__8S7639C11[6]),  6,10},
  {&(_ZTV8S7639C11[59]),  59,102},
  {&(_ZTV8S7639C11[41]),  41,102},
  {&(_ZTV8S7639C11[68]),  68,102},
  {&(_ZTV8S7639C11[59]),  59,102},
  {&(_ZTV8S7639C11[18]),  18,102},
  {&(_ZTV8S7639C11[79]),  79,102},
  {&(_ZTV8S7639C11[93]),  93,102},
  {&(_tg__ZTV8S7639C12__8S7639C11[4]),  4,15},
  {&(_tg__ZTV7S7639C48S7639C12__8S7639C11[7]),  7,10},
  {&(_tg__ZTV7S7639C48S7639C12__8S7639C11[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C12__8S7639C11[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C12__8S7639C11[6]),  6,10},
  {&(_tg__ZTV7S7639C4__8S7639C12__8S7639C11[7]),  7,10},
  {&(_tg__ZTV7S7639C4__8S7639C12__8S7639C11[7]),  7,10},
  {&(_tg__ZTV7S7639C4__A1__8S7639C11[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C4__A1__8S7639C11[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C4__A1__8S7639C11[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S7639C11[];
extern  VTBL_ENTRY _ZTV8S7639C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C11[];
Class_Descriptor cd_S7639C11 = {  "S7639C11", // class name
  bases_S7639C11, 13,
  &(vtc_S7639C11[0]), // expected_vtbl_contents
  &(vtt_S7639C11[0]), // expected_vtt_contents
  ABISELECT(304,204), // object size
  NSPAIRA(_ZTI8S7639C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7639C11),102, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7639C11),22, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S7639C14  {
  __tsi64 s7639c14f0;
  long s7639c14f1[2];
  void  mf7639c14(); // _ZN8S7639C149mf7639c14Ev
};
//SIG(1 S7639C14) U1{ m FL Fl[2]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7639C10  : virtual S7639C5 , virtual S7639C3 , S7639C4 , virtual S7639C11 {
  ::S7639C14 s7639c10f0;
  long double s7639c10f1;
  virtual void  v36(); // _ZN8S7639C103v36Ev
  virtual void  v37(); // _ZN8S7639C103v37Ev
  virtual void  v38(); // _ZN8S7639C103v38Ev
  virtual void  v39(); // _ZN8S7639C103v39Ev
  ~S7639C10(); // tgen
  S7639C10(); // tgen
};
//SIG(-1 S7639C10) C1{ VBC2{ BC3{ v5 v6 v7} v8} VBC3 BC4{ VBC3 VBC2 Fp Fs Fi} VBC5{ VBC3 VBC6{ VBC2 BC7{ v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5]} BC4 v18 v19 Fp} BC2 BC8{ VBC3 VBC4 BC2 v20 v21 v22 v23 Fs FD} VBC7 v24 v25 FL[10] Fi FL} v1 v2 v3 v4 FU9{ m FL Fl[2]} FD}


void  S7639C10 ::v36(){vfunc_called(this, "_ZN8S7639C103v36Ev");}
void  S7639C10 ::v37(){vfunc_called(this, "_ZN8S7639C103v37Ev");}
void  S7639C10 ::v38(){vfunc_called(this, "_ZN8S7639C103v38Ev");}
void  S7639C10 ::v39(){vfunc_called(this, "_ZN8S7639C103v39Ev");}
S7639C10 ::~S7639C10(){ note_dtor("S7639C10", this);} // tgen
S7639C10 ::S7639C10(){ note_ctor("S7639C10", this);} // tgen

static void Test_S7639C10()
{
  extern Class_Descriptor cd_S7639C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,61)];
    init_test(&cd_S7639C10, buf);
    S7639C10 *dp, &lv = *(dp=new (buf) S7639C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,240), "sizeof(S7639C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7639C10)");
    /*is_ambiguous_... S7639C10::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), ABISELECT(64,36), "S7639C10");
    /*is_ambiguous_... S7639C10::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*), ABISELECT(64,36), "S7639C10");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*), ABISELECT(64,36), "S7639C10");
    check_base_class_offset(lv, (S7639C5*)(S7639C12*), ABISELECT(64,36), "S7639C10");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C12*), ABISELECT(64,36), "S7639C10");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*), ABISELECT(64,36), "S7639C10");
    /*is_ambiguous_... S7639C10::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*), 0, "S7639C10");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), 0, "S7639C10");
    /*is_ambiguous_... S7639C11::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C11*), 0, "S7639C10");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C12*), 0, "S7639C10");
    /*is_ambiguous_... S7639C2::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C2*)(S7639C11*), 0, "S7639C10");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), 0, "S7639C10");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C4*), 0, "S7639C10");
    check_base_class_offset(lv, (S7639C13*)(S7639C12*), ABISELECT(224,156), "S7639C10");
    check_base_class_offset(lv, (S7639C4*)(S7639C12*), ABISELECT(272,180), "S7639C10");
    check_base_class_offset(lv, (S7639C12*)(S7639C11*), ABISELECT(224,156), "S7639C10");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C11*), ABISELECT(80,40), "S7639C10");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C11*), ABISELECT(80,40), "S7639C10");
    check_base_class_offset(lv, (S7639C4*)(S7639C2*)(S7639C11*), ABISELECT(304,200), "S7639C10");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(96,44), "S7639C10");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(96,44), "S7639C10");
    check_base_class_offset(lv, (S7639C2*)(S7639C11*), ABISELECT(96,44), "S7639C10");
    /*is_ambiguous_... S7639C11::S7639C13 */ AMB_check_base_class_offset(lv, (S7639C13*)(S7639C11*), ABISELECT(328,216), "S7639C10");
    check_base_class_offset(lv, (S7639C11*), ABISELECT(80,40), "S7639C10");
    check_field_offset(lv, s7639c10f0, ABISELECT(24,16), "S7639C10.s7639c10f0");
    check_field_offset(lv, s7639c10f1, ABISELECT(48,24), "S7639C10.s7639c10f1");
    test_class_info(&lv, &cd_S7639C10);
    dp->~S7639C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C10(Test_S7639C10, "S7639C10", ABISELECT(384,240));

#else // __cplusplus

extern void _ZN8S7639C10C1Ev();
extern void _ZN8S7639C10D1Ev();
Name_Map name_map_S7639C10[] = {
  NSPAIR(_ZN8S7639C10C1Ev),
  NSPAIR(_ZN8S7639C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C12;
extern VTBL_ENTRY _ZTI8S7639C12[];
extern  VTBL_ENTRY _ZTV8S7639C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C12[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C2;
extern VTBL_ENTRY _ZTI7S7639C2[];
extern  VTBL_ENTRY _ZTV7S7639C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C2[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C11;
extern VTBL_ENTRY _ZTI8S7639C11[];
extern  VTBL_ENTRY _ZTV8S7639C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C11[];
static Base_Class bases_S7639C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C4,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7639C13,    ABISELECT(224,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(272,180), //bcp->offset
    90, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7639C12,    ABISELECT(224,156), //bcp->offset
    64, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(304,200), //bcp->offset
    100, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(96,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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(96,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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7639C2,    ABISELECT(96,44), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7639C13,    ABISELECT(328,216), //bcp->offset
    110, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7639C11,    ABISELECT(80,40), //bcp->offset
    28, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7639C10[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY vtc_S7639C10[] = {
  ABISELECT(328,216),
  ABISELECT(304,200),
  ABISELECT(224,156),
  ABISELECT(80,40),
  ABISELECT(64,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,176),
  ABISELECT(224,160),
  ABISELECT(-16,-4),
  ABISELECT(144,116),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
  ABISELECT(-32,-8),
  ABISELECT(208,156),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-160,-120),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern VTBL_ENTRY _ZTV8S7639C10[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A__8S7639C10[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__A__8S7639C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__8S7639C10[] = {
  ABISELECT(248,176),
  ABISELECT(224,160),
  ABISELECT(-16,-4),
  ABISELECT(144,116),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__8S7639C10[] = {
  ABISELECT(-32,-8),
  ABISELECT(208,156),
  ABISELECT(-96,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C28S7639C11__8S7639C10[] = {
  0,
  0,
  0,
  ABISELECT(96,44),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C28S7639C11__8S7639C10[] = {
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C28S7639C11__8S7639C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,8),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__8S7639C11__8S7639C10[] = {
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C11__8S7639C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-160,-120),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C11__8S7639C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__8S7639C11__8S7639C10[] = {
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C2__8S7639C11__8S7639C10[] = {
  ABISELECT(-32,-8),
  ABISELECT(208,156),
  ABISELECT(-96,-44),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A1__8S7639C11__8S7639C10[] = {
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__8S7639C11__8S7639C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-176),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C10[] = {
  ABISELECT(-224,-156),
  ABISELECT(-160,-120),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A1__8S7639C10[] = {
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C48S7639C12__A1__8S7639C10[] = {
  0,
  0,
  0,
  ABISELECT(272,180),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C12__A1__8S7639C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C12__8S7639C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,120),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__8S7639C12__8S7639C10[] = {
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__A1__8S7639C12__8S7639C10[] = {
  0,
  0,
  0,
  ABISELECT(224,156),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A2__8S7639C10[] = {
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C4__A2__8S7639C10[] = {
  0,
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__A2__8S7639C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(240,164),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
static  VTT_ENTRY vtt_S7639C10[] = {
  {&(_ZTV8S7639C10[11]),  11,130},
  {&(_tg__ZTV7S7639C4__A__8S7639C10[7]),  7,10},
  {&(_tg__ZTV7S7639C4__A__8S7639C10[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C4__A__8S7639C10[6]),  6,10},
  {&(_ZTV8S7639C10[24]),  24,130},
  {&(_ZTV8S7639C10[11]),  11,130},
  {&(_ZTV8S7639C10[45]),  45,130},
  {&(_ZTV8S7639C10[79]),  79,130},
  {&(_ZTV8S7639C10[97]),  97,130},
  {&(_ZTV8S7639C10[56]),  56,130},
  {&(_ZTV8S7639C10[107]),  107,130},
  {&(_ZTV8S7639C10[121]),  121,130},
  {&(_tg__ZTV8S7639C11__8S7639C10[7]),  7,13},
  {&(_tg__ZTV7S7639C28S7639C11__8S7639C10[5]),  5,13},
  {&(_tg__ZTV7S7639C3__7S7639C28S7639C11__8S7639C10[5]),  5,8},
  {&(_tg__ZTV7S7639C4__7S7639C28S7639C11__8S7639C10[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C28S7639C11__8S7639C10[6]),  6,10},
  {&(_tg__ZTV7S7639C3__8S7639C11__8S7639C10[5]),  5,8},
  {&(_tg__ZTV8S7639C12__8S7639C11__8S7639C10[15]),  15,26},
  {&(_tg__ZTV7S7639C5__8S7639C11__8S7639C10[6]),  6,10},
  {&(_tg__ZTV7S7639C48S7639C12__8S7639C11__8S7639C10[7]),  7,10},
  {&(_tg__ZTV7S7639C2__8S7639C11__8S7639C10[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A1__8S7639C11__8S7639C10[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__8S7639C11__8S7639C10[11]),  11,20},
  {&(_tg__ZTV8S7639C12__8S7639C10[4]),  4,15},
  {&(_tg__ZTV7S7639C48S7639C12__A1__8S7639C10[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C48S7639C12__A1__8S7639C10[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C12__A1__8S7639C10[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C12__8S7639C10[6]),  6,10},
  {&(_tg__ZTV7S7639C4__8S7639C12__8S7639C10[7]),  7,10},
  {&(_tg__ZTV7S7639C3__A1__8S7639C12__8S7639C10[5]),  5,8},
  {&(_tg__ZTV7S7639C4__A2__8S7639C10[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C4__A2__8S7639C10[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C4__A2__8S7639C10[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S7639C10[];
extern  VTBL_ENTRY _ZTV8S7639C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C10[];
Class_Descriptor cd_S7639C10 = {  "S7639C10", // class name
  bases_S7639C10, 15,
  &(vtc_S7639C10[0]), // expected_vtbl_contents
  &(vtt_S7639C10[0]), // expected_vtt_contents
  ABISELECT(384,240), // object size
  NSPAIRA(_ZTI8S7639C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7639C10),130, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7639C10),34, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7639C9  : virtual S7639C10 {
  ::S7639C14 s7639c9f0;
  virtual void  v40(); // _ZN7S7639C93v40Ev
  virtual void  v41(); // _ZN7S7639C93v41Ev
  virtual void  v42(); // _ZN7S7639C93v42Ev
  ~S7639C9(); // tgen
  S7639C9(); // tgen
};
//SIG(-1 S7639C9) C1{ VBC2{ VBC3{ BC4{ v4 v5 v6} v7} VBC4 BC5{ VBC4 VBC3 Fp Fs Fi} VBC6{ VBC4 VBC7{ VBC3 BC8{ v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp[5]} BC5 v17 v18 Fp} BC3 BC9{ VBC4 VBC5 BC3 v19 v20 v21 v22 Fs FD} VBC8 v23 v24 FL[10] Fi FL} v25 v26 v27 v28 FU10{ m FL Fl[2]} FD} v1 v2 v3 FU10}


void  S7639C9 ::v40(){vfunc_called(this, "_ZN7S7639C93v40Ev");}
void  S7639C9 ::v41(){vfunc_called(this, "_ZN7S7639C93v41Ev");}
void  S7639C9 ::v42(){vfunc_called(this, "_ZN7S7639C93v42Ev");}
S7639C9 ::~S7639C9(){ note_dtor("S7639C9", this);} // tgen
S7639C9 ::S7639C9(){ note_ctor("S7639C9", this);} // tgen

static void Test_S7639C9()
{
  extern Class_Descriptor cd_S7639C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,63)];
    init_test(&cd_S7639C9, buf);
    S7639C9 *dp, &lv = *(dp=new (buf) S7639C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,248), "sizeof(S7639C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7639C9)");
    /*is_ambiguous_... S7639C9::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), 0, "S7639C9");
    /*is_ambiguous_... S7639C10::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C10*), 0, "S7639C9");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C10*), 0, "S7639C9");
    check_base_class_offset(lv, (S7639C5*)(S7639C12*), 0, "S7639C9");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C12*), 0, "S7639C9");
    /*is_ambiguous_... S7639C9::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*), 0, "S7639C9");
    /*is_ambiguous_... S7639C10::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C10*), ABISELECT(32,12), "S7639C9");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C10*), ABISELECT(32,12), "S7639C9");
    /*is_ambiguous_... S7639C11::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C11*), ABISELECT(32,12), "S7639C9");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C12*), ABISELECT(32,12), "S7639C9");
    /*is_ambiguous_... S7639C2::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C2*)(S7639C11*), ABISELECT(32,12), "S7639C9");
    /*is_ambiguous_... S7639C9::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), ABISELECT(32,12), "S7639C9");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C4*)(S7639C10*), ABISELECT(32,12), "S7639C9");
    check_base_class_offset(lv, (S7639C13*)(S7639C12*), ABISELECT(240,164), "S7639C9");
    check_base_class_offset(lv, (S7639C4*)(S7639C12*), ABISELECT(288,188), "S7639C9");
    check_base_class_offset(lv, (S7639C12*)(S7639C11*), ABISELECT(240,164), "S7639C9");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C11*), ABISELECT(96,48), "S7639C9");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C11*), ABISELECT(96,48), "S7639C9");
    check_base_class_offset(lv, (S7639C4*)(S7639C2*)(S7639C11*), ABISELECT(320,208), "S7639C9");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(112,52), "S7639C9");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(112,52), "S7639C9");
    check_base_class_offset(lv, (S7639C2*)(S7639C11*), ABISELECT(112,52), "S7639C9");
    /*is_ambiguous_... S7639C11::S7639C13 */ AMB_check_base_class_offset(lv, (S7639C13*)(S7639C11*), ABISELECT(344,224), "S7639C9");
    check_base_class_offset(lv, (S7639C11*)(S7639C10*), ABISELECT(96,48), "S7639C9");
    check_base_class_offset(lv, (S7639C10*), ABISELECT(32,12), "S7639C9");
    check_field_offset(lv, s7639c9f0, ABISELECT(8,4), "S7639C9.s7639c9f0");
    test_class_info(&lv, &cd_S7639C9);
    dp->~S7639C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C9(Test_S7639C9, "S7639C9", ABISELECT(400,248));

#else // __cplusplus

extern void _ZN7S7639C9C1Ev();
extern void _ZN7S7639C9D1Ev();
Name_Map name_map_S7639C9[] = {
  NSPAIR(_ZN7S7639C9C1Ev),
  NSPAIR(_ZN7S7639C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C12;
extern VTBL_ENTRY _ZTI8S7639C12[];
extern  VTBL_ENTRY _ZTV8S7639C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C12[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C2;
extern VTBL_ENTRY _ZTI7S7639C2[];
extern  VTBL_ENTRY _ZTV7S7639C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C2[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C11;
extern VTBL_ENTRY _ZTI8S7639C11[];
extern  VTBL_ENTRY _ZTV8S7639C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C11[];
extern Class_Descriptor cd_S7639C10;
extern VTBL_ENTRY _ZTI8S7639C10[];
extern  VTBL_ENTRY _ZTV8S7639C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C10[];
static Base_Class bases_S7639C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7639C4,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7639C13,    ABISELECT(240,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(288,188), //bcp->offset
    104, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7639C12,    ABISELECT(240,164), //bcp->offset
    78, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7639C3,    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
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7639C5,    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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(320,208), //bcp->offset
    114, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(112,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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(112,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
    12, //immediately_derived
  0, 0},
  {&cd_S7639C2,    ABISELECT(112,52), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7639C13,    ABISELECT(344,224), //bcp->offset
    124, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7639C11,    ABISELECT(96,48), //bcp->offset
    42, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7639C10,    ABISELECT(32,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7639C9[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C93v40Ev();
extern void _ZN7S7639C93v41Ev();
extern void _ZN7S7639C93v42Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY vtc_S7639C9[] = {
  ABISELECT(344,224),
  ABISELECT(320,208),
  ABISELECT(240,164),
  ABISELECT(96,48),
  ABISELECT(32,12),
  0,
  ABISELECT(32,12),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v42Ev,
  0,
  0,
  0,
  0,
  ABISELECT(312,212),
  ABISELECT(288,196),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-32,-12),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,176),
  ABISELECT(224,160),
  ABISELECT(-96,-48),
  ABISELECT(144,116),
  ABISELECT(-64,-36),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
  ABISELECT(-112,-52),
  ABISELECT(208,156),
  ABISELECT(-80,-40),
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-152),
  ABISELECT(-240,-164),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
  ABISELECT(-288,-188),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-288,-188),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  ABISELECT(-320,-208),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-320,-208),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-224),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern VTBL_ENTRY _ZTV7S7639C9[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C10__7S7639C9[] = {
  ABISELECT(312,212),
  ABISELECT(288,196),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-32,-12),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C10__7S7639C9[] = {
  ABISELECT(-32,-12),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C10__7S7639C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C10__7S7639C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__8S7639C10__7S7639C9[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,176),
  ABISELECT(224,160),
  ABISELECT(-96,-48),
  ABISELECT(144,116),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C10__7S7639C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-152),
  ABISELECT(-240,-164),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A1__8S7639C10__7S7639C9[] = {
  ABISELECT(-288,-188),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__8S7639C10__7S7639C9[] = {
  ABISELECT(-112,-52),
  ABISELECT(208,156),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A2__8S7639C10__7S7639C9[] = {
  ABISELECT(-320,-208),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__8S7639C10__7S7639C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-212),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__7S7639C9[] = {
  ABISELECT(248,176),
  ABISELECT(224,160),
  ABISELECT(-96,-48),
  ABISELECT(144,116),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__7S7639C9[] = {
  ABISELECT(-112,-52),
  ABISELECT(208,156),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C28S7639C11__7S7639C9[] = {
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C28S7639C11__7S7639C9[] = {
  ABISELECT(-320,-208),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C28S7639C11__7S7639C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,52),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__8S7639C11__7S7639C9[] = {
  0,
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C11__7S7639C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-152),
  ABISELECT(-240,-164),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C11__7S7639C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__8S7639C11__7S7639C9[] = {
  ABISELECT(-288,-188),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C2__8S7639C11__7S7639C9[] = {
  ABISELECT(-112,-52),
  ABISELECT(208,156),
  ABISELECT(-80,-40),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A1__8S7639C11__7S7639C9[] = {
  ABISELECT(-320,-208),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__8S7639C11__7S7639C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-176),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__7S7639C9[] = {
  ABISELECT(-208,-152),
  ABISELECT(-240,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A1__7S7639C9[] = {
  ABISELECT(-288,-188),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C48S7639C12__A1__7S7639C9[] = {
  0,
  0,
  0,
  ABISELECT(256,176),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C12__A1__7S7639C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(288,188),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C12__7S7639C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(240,164),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__8S7639C12__7S7639C9[] = {
  ABISELECT(-288,-188),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-256,-176),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__A1__8S7639C12__7S7639C9[] = {
  0,
  0,
  0,
  ABISELECT(208,152),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A2__7S7639C9[] = {
  ABISELECT(-320,-208),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C4__A2__7S7639C9[] = {
  0,
  0,
  0,
  ABISELECT(288,196),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__A2__7S7639C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(320,208),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
static  VTT_ENTRY vtt_S7639C9[] = {
  {&(_ZTV7S7639C9[13]),  13,144},
  {&(_ZTV7S7639C9[35]),  35,144},
  {&(_ZTV7S7639C9[13]),  13,144},
  {&(_ZTV7S7639C9[35]),  35,144},
  {&(_ZTV7S7639C9[59]),  59,144},
  {&(_ZTV7S7639C9[93]),  93,144},
  {&(_ZTV7S7639C9[111]),  111,144},
  {&(_ZTV7S7639C9[70]),  70,144},
  {&(_ZTV7S7639C9[121]),  121,144},
  {&(_ZTV7S7639C9[135]),  135,144},
  {&(_tg__ZTV8S7639C10__7S7639C9[11]),  11,18},
  {&(_tg__ZTV7S7639C48S7639C10__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C48S7639C10__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C10__7S7639C9[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C10__7S7639C9[6]),  6,10},
  {&(_tg__ZTV8S7639C10__7S7639C9[11]),  11,18},
  {&(_tg__ZTV8S7639C11__8S7639C10__7S7639C9[17]),  17,23},
  {&(_tg__ZTV8S7639C12__8S7639C10__7S7639C9[15]),  15,26},
  {&(_tg__ZTV7S7639C48S7639C12__A1__8S7639C10__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C28S7639C11__8S7639C10__7S7639C9[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A2__8S7639C10__7S7639C9[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__8S7639C10__7S7639C9[11]),  11,20},
  {&(_tg__ZTV8S7639C11__7S7639C9[7]),  7,13},
  {&(_tg__ZTV7S7639C28S7639C11__7S7639C9[5]),  5,13},
  {&(_tg__ZTV7S7639C3__7S7639C28S7639C11__7S7639C9[5]),  5,8},
  {&(_tg__ZTV7S7639C4__7S7639C28S7639C11__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C28S7639C11__7S7639C9[6]),  6,10},
  {&(_tg__ZTV7S7639C3__8S7639C11__7S7639C9[5]),  5,8},
  {&(_tg__ZTV8S7639C12__8S7639C11__7S7639C9[15]),  15,26},
  {&(_tg__ZTV7S7639C5__8S7639C11__7S7639C9[6]),  6,10},
  {&(_tg__ZTV7S7639C48S7639C12__8S7639C11__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C2__8S7639C11__7S7639C9[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A1__8S7639C11__7S7639C9[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__8S7639C11__7S7639C9[11]),  11,20},
  {&(_tg__ZTV8S7639C12__7S7639C9[4]),  4,15},
  {&(_tg__ZTV7S7639C48S7639C12__A1__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C48S7639C12__A1__7S7639C9[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C12__A1__7S7639C9[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C12__7S7639C9[6]),  6,10},
  {&(_tg__ZTV7S7639C4__8S7639C12__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C3__A1__8S7639C12__7S7639C9[5]),  5,8},
  {&(_tg__ZTV7S7639C4__A2__7S7639C9[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C4__A2__7S7639C9[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C4__A2__7S7639C9[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7639C9[];
extern  VTBL_ENTRY _ZTV7S7639C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C9[];
Class_Descriptor cd_S7639C9 = {  "S7639C9", // class name
  bases_S7639C9, 16,
  &(vtc_S7639C9[0]), // expected_vtbl_contents
  &(vtt_S7639C9[0]), // expected_vtt_contents
  ABISELECT(400,248), // object size
  NSPAIRA(_ZTI7S7639C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7639C9),144, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7639C9),44, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7639C6  : virtual S7639C4 , virtual S7639C7 , virtual S7639C8_nt , S7639C9 {
  virtual  ~S7639C6(); // _ZN7S7639C6D2Ev
  virtual void  v43(); // _ZN7S7639C63v43Ev
  virtual void  v44(); // _ZN7S7639C63v44Ev
  virtual void  v45(); // _ZN7S7639C63v45Ev
  S7639C6(); // tgen
};
//SIG(-1 S7639C6) C1{ VBC2{ VBC3{ v4 v5 v6} VBC4{ BC3 v7} Fp Fs Fi} VBC5{ BC3 BC2 vd v8 v9 v10 v11 v12 Fp Fi:19 FD} VBC6{ vd v13 v14 v15 v16} BC7{ VBC8{ VBC4 VBC3 BC2 VBC9{ VBC3 VBC10{ VBC4 BC11{ v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp[5]} BC2 v26 v27 Fp} BC4 BC12{ VBC3 VBC2 BC4 v28 v29 v30 v31 Fs FD} VBC11 v32 v33 FL[10] Fi FL} v34 v35 v36 v37 FU13{ m FL Fl[2]} FD} v38 v39 v40 FU13} vd v1 v2 v3}


 S7639C6 ::~S7639C6(){ note_dtor("S7639C6", this);}
void  S7639C6 ::v43(){vfunc_called(this, "_ZN7S7639C63v43Ev");}
void  S7639C6 ::v44(){vfunc_called(this, "_ZN7S7639C63v44Ev");}
void  S7639C6 ::v45(){vfunc_called(this, "_ZN7S7639C63v45Ev");}
S7639C6 ::S7639C6(){ note_ctor("S7639C6", this);} // tgen

static void Test_S7639C6()
{
  extern Class_Descriptor cd_S7639C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,74)];
    init_test(&cd_S7639C6, buf);
    S7639C6 *dp, &lv = *(dp=new (buf) S7639C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,292), "sizeof(S7639C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7639C6)");
    /*is_ambiguous_... S7639C6::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C7*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C10::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C10*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C10*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C11::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C11*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C12*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C2::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C2*)(S7639C11*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C6::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), 0, "S7639C6");
    /*is_ambiguous_... S7639C6::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*), 0, "S7639C6");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C7*), 0, "S7639C6");
    /*is_ambiguous_... S7639C10::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C10*), 0, "S7639C6");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C10*), 0, "S7639C6");
    check_base_class_offset(lv, (S7639C5*)(S7639C12*), 0, "S7639C6");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C12*), 0, "S7639C6");
    /*is_ambiguous_... S7639C6::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C4*), ABISELECT(24,12), "S7639C6");
    check_base_class_offset(lv, (S7639C4*)(S7639C2*)(S7639C11*), ABISELECT(24,12), "S7639C6");
    /*is_ambiguous_... S7639C7::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C7*), ABISELECT(48,28), "S7639C6");
    check_base_class_offset(lv, (S7639C4*)(S7639C7*), ABISELECT(56,32), "S7639C6");
    check_base_class_offset(lv, (S7639C7*), ABISELECT(48,28), "S7639C6");
    check_base_class_offset(lv, (S7639C8_nt*), ABISELECT(112,68), "S7639C6");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C4*)(S7639C10*), ABISELECT(128,72), "S7639C6");
    check_base_class_offset(lv, (S7639C13*)(S7639C12*), ABISELECT(336,224), "S7639C6");
    check_base_class_offset(lv, (S7639C4*)(S7639C12*), ABISELECT(384,248), "S7639C6");
    check_base_class_offset(lv, (S7639C12*)(S7639C11*), ABISELECT(336,224), "S7639C6");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C11*), ABISELECT(192,108), "S7639C6");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C11*), ABISELECT(192,108), "S7639C6");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(208,112), "S7639C6");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(208,112), "S7639C6");
    check_base_class_offset(lv, (S7639C2*)(S7639C11*), ABISELECT(208,112), "S7639C6");
    /*is_ambiguous_... S7639C11::S7639C13 */ AMB_check_base_class_offset(lv, (S7639C13*)(S7639C11*), ABISELECT(416,268), "S7639C6");
    check_base_class_offset(lv, (S7639C11*)(S7639C10*), ABISELECT(192,108), "S7639C6");
    check_base_class_offset(lv, (S7639C10*)(S7639C9*), ABISELECT(128,72), "S7639C6");
    check_base_class_offset(lv, (S7639C9*), 0, "S7639C6");
    test_class_info(&lv, &cd_S7639C6);
    dp->~S7639C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C6(Test_S7639C6, "S7639C6", ABISELECT(464,292));

#else // __cplusplus

extern void _ZN7S7639C6C1Ev();
extern void _ZN7S7639C6D2Ev();
Name_Map name_map_S7639C6[] = {
  NSPAIR(_ZN7S7639C6C1Ev),
  NSPAIR(_ZN7S7639C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C7;
extern VTBL_ENTRY _ZTI7S7639C7[];
extern  VTBL_ENTRY _ZTV7S7639C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C7[];
extern Class_Descriptor cd_S7639C8_nt;
extern VTBL_ENTRY _ZTI10S7639C8_nt[];
extern  VTBL_ENTRY _ZTV10S7639C8_nt[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C12;
extern VTBL_ENTRY _ZTI8S7639C12[];
extern  VTBL_ENTRY _ZTV8S7639C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C12[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C2;
extern VTBL_ENTRY _ZTI7S7639C2[];
extern  VTBL_ENTRY _ZTV7S7639C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C2[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C11;
extern VTBL_ENTRY _ZTI8S7639C11[];
extern  VTBL_ENTRY _ZTV8S7639C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C11[];
extern Class_Descriptor cd_S7639C10;
extern VTBL_ENTRY _ZTI8S7639C10[];
extern  VTBL_ENTRY _ZTV8S7639C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C10[];
extern Class_Descriptor cd_S7639C9;
extern VTBL_ENTRY _ZTI7S7639C9[];
extern  VTBL_ENTRY _ZTV7S7639C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C9[];
static Base_Class bases_S7639C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7639C4,    ABISELECT(24,12), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(56,32), //bcp->offset
    60, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7639C7,    ABISELECT(48,28), //bcp->offset
    37, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C8_nt,    ABISELECT(112,68), //bcp->offset
    70, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C4,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7639C13,    ABISELECT(336,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(384,248), //bcp->offset
    167, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7639C12,    ABISELECT(336,224), //bcp->offset
    141, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(192,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(192,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7639C3,    ABISELECT(208,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(208,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7639C2,    ABISELECT(208,112), //bcp->offset
    128, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7639C13,    ABISELECT(416,268), //bcp->offset
    177, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7639C11,    ABISELECT(192,108), //bcp->offset
    105, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7639C10,    ABISELECT(128,72), //bcp->offset
    83, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7639C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7639C6[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C93v40Ev();
extern void _ZN7S7639C93v41Ev();
extern void _ZN7S7639C93v42Ev();
extern void _ZN7S7639C6D1Ev();
extern void _ZN7S7639C6D0Ev();
extern void _ZN7S7639C63v43Ev();
extern void _ZN7S7639C63v44Ev();
extern void _ZN7S7639C63v45Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7639C6D1Ev,_ZTv0_n32_N7S7639C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7639C6D1Ev,_ZThn28_N7S7639C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7639C6D0Ev,_ZTv0_n32_N7S7639C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7639C6D0Ev,_ZThn28_N7S7639C6D0Ev)() __attribute__((weak));
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void ABISELECT(_ZTv0_n24_N7S7639C6D1Ev,_ZTv0_n12_N7S7639C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7639C6D1Ev,_ZThn68_N7S7639C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7639C6D0Ev,_ZTv0_n12_N7S7639C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7639C6D0Ev,_ZThn68_N7S7639C6D0Ev)() __attribute__((weak));
extern void _ZN10S7639C8_nt3v19Ev();
extern void _ZN10S7639C8_nt3v20Ev();
extern void _ZN10S7639C8_nt3v21Ev();
extern void _ZN10S7639C8_nt3v22Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY vtc_S7639C6[] = {
  ABISELECT(112,68),
  ABISELECT(48,28),
  ABISELECT(416,268),
  ABISELECT(24,12),
  ABISELECT(336,224),
  ABISELECT(192,108),
  ABISELECT(24,12),
  0,
  ABISELECT(128,72),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7639C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7639C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v43Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v44Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v45Ev,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-24,-16),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7639C6D1Ev,_ZTv0_n32_N7S7639C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7639C6D0Ev,_ZTv0_n32_N7S7639C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7639C6D1Ev,_ZTv0_n12_N7S7639C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7639C6D0Ev,_ZTv0_n12_N7S7639C6D0Ev),
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(288,196),
  ABISELECT(-104,-60),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-128,-72),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  ABISELECT(-168,-96),
  ABISELECT(-192,-108),
  ABISELECT(144,116),
  ABISELECT(-168,-96),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
  ABISELECT(-208,-112),
  ABISELECT(-184,-100),
  ABISELECT(-184,-100),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  ABISELECT(-336,-224),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
  ABISELECT(-384,-248),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-268),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern VTBL_ENTRY _ZTV7S7639C6[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C93v40Ev();
extern void _ZN7S7639C93v41Ev();
extern void _ZN7S7639C93v42Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C9__7S7639C6[] = {
  ABISELECT(416,268),
  ABISELECT(24,12),
  ABISELECT(336,224),
  ABISELECT(192,108),
  ABISELECT(24,12),
  0,
  ABISELECT(128,72),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v42Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C10__7S7639C9__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(288,196),
  ABISELECT(-104,-60),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-128,-72),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A2__7S7639C9__7S7639C6[] = {
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__7S7639C9__7S7639C6[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  ABISELECT(-168,-96),
  ABISELECT(-192,-108),
  ABISELECT(144,116),
  ABISELECT(-168,-96),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__7S7639C9__7S7639C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  ABISELECT(-336,-224),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A1__7S7639C9__7S7639C6[] = {
  ABISELECT(-384,-248),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__7S7639C9__7S7639C6[] = {
  ABISELECT(-208,-112),
  ABISELECT(-184,-100),
  ABISELECT(-184,-100),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__7S7639C9__7S7639C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-268),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C6[] = {
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C7D1Ev();
extern void _ZN7S7639C7D0Ev();
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C7__7S7639C6[] = {
  ABISELECT(-48,-28),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C47S7639C7__A1__7S7639C6[] = {
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C47S7639C7__A1__7S7639C6[] = {
  0,
  0,
  0,
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C47S7639C7__A1__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C7__7S7639C6[] = {
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__A1__7S7639C7__7S7639C6[] = {
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C7__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C10__7S7639C6[] = {
  ABISELECT(288,196),
  ABISELECT(-104,-60),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-128,-72),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C10__A2__7S7639C6[] = {
  ABISELECT(-128,-72),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C48S7639C10__A2__7S7639C6[] = {
  0,
  0,
  0,
  ABISELECT(104,60),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C10__A2__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C10__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A2__8S7639C10__7S7639C6[] = {
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  ABISELECT(104,60),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__8S7639C10__7S7639C6[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  ABISELECT(-168,-96),
  ABISELECT(-192,-108),
  ABISELECT(144,116),
  ABISELECT(-168,-96),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C10__7S7639C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A1__8S7639C10__7S7639C6[] = {
  ABISELECT(-384,-248),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__8S7639C10__7S7639C6[] = {
  ABISELECT(-208,-112),
  ABISELECT(-184,-100),
  ABISELECT(-184,-100),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__8S7639C10__7S7639C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__7S7639C6[] = {
  ABISELECT(224,160),
  ABISELECT(-168,-96),
  ABISELECT(-192,-108),
  ABISELECT(144,116),
  ABISELECT(-168,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__7S7639C6[] = {
  ABISELECT(-208,-112),
  ABISELECT(-184,-100),
  ABISELECT(-184,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C28S7639C11__7S7639C6[] = {
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  ABISELECT(184,100),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C28S7639C11__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(208,112),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A1__8S7639C11__7S7639C6[] = {
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  ABISELECT(168,96),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C11__7S7639C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C11__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(192,108),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__8S7639C11__7S7639C6[] = {
  ABISELECT(-384,-248),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C2__8S7639C11__7S7639C6[] = {
  ABISELECT(-208,-112),
  ABISELECT(-184,-100),
  ABISELECT(-184,-100),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__8S7639C11__7S7639C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__7S7639C6[] = {
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A3__7S7639C6[] = {
  ABISELECT(-384,-248),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C48S7639C12__A3__7S7639C6[] = {
  0,
  0,
  0,
  ABISELECT(360,236),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C12__A3__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(384,248),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C12__7S7639C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(336,224),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__8S7639C12__7S7639C6[] = {
  ABISELECT(-384,-248),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__A1__8S7639C12__7S7639C6[] = {
  0,
  0,
  0,
  ABISELECT(312,212),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
static  VTT_ENTRY vtt_S7639C6[] = {
  {&(_ZTV7S7639C6[15]),  15,197},
  {&(_tg__ZTV7S7639C9__7S7639C6[13]),  13,20},
  {&(_tg__ZTV8S7639C10__7S7639C9__7S7639C6[15]),  15,22},
  {&(_tg__ZTV7S7639C9__7S7639C6[13]),  13,20},
  {&(_tg__ZTV7S7639C4__A2__7S7639C9__7S7639C6[7]),  7,10},
  {&(_tg__ZTV8S7639C11__7S7639C9__7S7639C6[17]),  17,23},
  {&(_tg__ZTV8S7639C12__7S7639C9__7S7639C6[15]),  15,26},
  {&(_tg__ZTV7S7639C48S7639C12__A1__7S7639C9__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C28S7639C11__7S7639C9__7S7639C6[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A2__7S7639C9__7S7639C6[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__7S7639C9__7S7639C6[11]),  11,20},
  {&(_ZTV7S7639C6[34]),  34,197},
  {&(_ZTV7S7639C6[34]),  34,197},
  {&(_ZTV7S7639C6[15]),  15,197},
  {&(_ZTV7S7639C6[50]),  50,197},
  {&(_ZTV7S7639C6[67]),  67,197},
  {&(_ZTV7S7639C6[77]),  77,197},
  {&(_ZTV7S7639C6[98]),  98,197},
  {&(_ZTV7S7639C6[122]),  122,197},
  {&(_ZTV7S7639C6[156]),  156,197},
  {&(_ZTV7S7639C6[174]),  174,197},
  {&(_ZTV7S7639C6[133]),  133,197},
  {&(_ZTV7S7639C6[188]),  188,197},
  {&(_tg__ZTV7S7639C4__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C4__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C7__7S7639C6[4]),  4,14},
  {&(_tg__ZTV7S7639C47S7639C7__A1__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C47S7639C7__A1__7S7639C6[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C47S7639C7__A1__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C4__7S7639C7__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C3__A1__7S7639C7__7S7639C6[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C7__7S7639C6[6]),  6,10},
  {&(_tg__ZTV8S7639C10__7S7639C6[11]),  11,18},
  {&(_tg__ZTV7S7639C48S7639C10__A2__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C48S7639C10__A2__7S7639C6[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C10__A2__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C10__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C4__A2__8S7639C10__7S7639C6[7]),  7,10},
  {&(_tg__ZTV8S7639C11__8S7639C10__7S7639C6[17]),  17,23},
  {&(_tg__ZTV8S7639C12__8S7639C10__7S7639C6[15]),  15,26},
  {&(_tg__ZTV7S7639C48S7639C12__A1__8S7639C10__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C28S7639C11__8S7639C10__7S7639C6[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A2__8S7639C10__7S7639C6[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__8S7639C10__7S7639C6[11]),  11,20},
  {&(_tg__ZTV8S7639C11__7S7639C6[7]),  7,13},
  {&(_tg__ZTV7S7639C28S7639C11__7S7639C6[5]),  5,13},
  {&(_tg__ZTV7S7639C4__7S7639C28S7639C11__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C28S7639C11__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C28S7639C11__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C4__A1__8S7639C11__7S7639C6[7]),  7,10},
  {&(_tg__ZTV8S7639C12__8S7639C11__7S7639C6[15]),  15,26},
  {&(_tg__ZTV7S7639C5__8S7639C11__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C48S7639C12__8S7639C11__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C2__8S7639C11__7S7639C6[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A1__8S7639C11__7S7639C6[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__8S7639C11__7S7639C6[11]),  11,20},
  {&(_tg__ZTV8S7639C12__7S7639C6[4]),  4,15},
  {&(_tg__ZTV7S7639C48S7639C12__A3__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C48S7639C12__A3__7S7639C6[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C12__A3__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C12__7S7639C6[6]),  6,10},
  {&(_tg__ZTV7S7639C4__8S7639C12__7S7639C6[7]),  7,10},
  {&(_tg__ZTV7S7639C3__A1__8S7639C12__7S7639C6[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7639C6[];
extern  VTBL_ENTRY _ZTV7S7639C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C6[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7639C6D0Ev,_ZTv0_n12_N7S7639C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7639C6D0Ev,_ZThn68_N7S7639C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7639C6D1Ev,_ZTv0_n12_N7S7639C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7639C6D1Ev,_ZThn68_N7S7639C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7639C6D0Ev,_ZTv0_n32_N7S7639C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7639C6D0Ev,_ZThn28_N7S7639C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7639C6D1Ev,_ZTv0_n32_N7S7639C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7639C6D1Ev,_ZThn28_N7S7639C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7639C6 = {  "S7639C6", // class name
  bases_S7639C6, 21,
  &(vtc_S7639C6[0]), // expected_vtbl_contents
  &(vtt_S7639C6[0]), // expected_vtt_contents
  ABISELECT(464,292), // object size
  NSPAIRA(_ZTI7S7639C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7639C6),197, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7639C6),64, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7639C1  : S7639C2 , virtual S7639C6 , S7639C7 {
  virtual void  v1(); // _ZN7S7639C12v1Ev
  virtual void  v2(); // _ZN7S7639C12v2Ev
  virtual void  v3(); // _ZN7S7639C12v3Ev
  virtual void  v4(); // _ZN7S7639C12v4Ev
  virtual void  v5(); // _ZN7S7639C12v5Ev
  ~S7639C1(); // tgen
  S7639C1(); // tgen
};
//SIG(1 S7639C1) C1{ BC2{ VBC3{ v6 v7 v8} VBC4{ VBC3 VBC5{ BC3 v9} Fp Fs Fi} BC5 v10 v11 v12 v13 Fs FD} VBC6{ VBC4 VBC7{ BC3 BC4 vd v14 v15 v16 v17 v18 Fp Fi:19 FD} VBC8{ vd v19 v20 v21 v22} BC9{ VBC10{ VBC5 VBC3 BC4 VBC11{ VBC3 VBC12{ VBC5 BC13{ v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp[5]} BC4 v32 v33 Fp} BC5 BC2 VBC13 v34 v35 FL[10] Fi FL} v36 v37 v38 v39 FU14{ m FL Fl[2]} FD} v40 v41 v42 FU14} vd v43 v44 v45} BC7 v1 v2 v3 v4 v5}


void  S7639C1 ::v1(){vfunc_called(this, "_ZN7S7639C12v1Ev");}
void  S7639C1 ::v2(){vfunc_called(this, "_ZN7S7639C12v2Ev");}
void  S7639C1 ::v3(){vfunc_called(this, "_ZN7S7639C12v3Ev");}
void  S7639C1 ::v4(){vfunc_called(this, "_ZN7S7639C12v4Ev");}
void  S7639C1 ::v5(){vfunc_called(this, "_ZN7S7639C12v5Ev");}
S7639C1 ::~S7639C1(){ note_dtor("S7639C1", this);} // tgen
S7639C1 ::S7639C1(){ note_ctor("S7639C1", this);} // tgen

static void Test_S7639C1()
{
  extern Class_Descriptor cd_S7639C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,89)];
    init_test(&cd_S7639C1, buf);
    S7639C1 *dp, &lv = *(dp=new (buf) S7639C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,352), "sizeof(S7639C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7639C1)");
    /*is_ambiguous_... S7639C1::S7639C2 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C2*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C7*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C10::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C10*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C10*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C11::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C11*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C4::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C12*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C2::S7639C3 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C2*)(S7639C11*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C4*)(S7639C7*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*), ABISELECT(120,76), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*), ABISELECT(120,76), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C7*), ABISELECT(120,76), "S7639C1");
    /*is_ambiguous_... S7639C10::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C10*), ABISELECT(120,76), "S7639C1");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C10*), ABISELECT(120,76), "S7639C1");
    check_base_class_offset(lv, (S7639C5*)(S7639C12*), ABISELECT(120,76), "S7639C1");
    check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C12*), ABISELECT(120,76), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C4*)(S7639C7*), ABISELECT(120,76), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C2 */ AMB_check_base_class_offset(lv, (S7639C4*)(S7639C2*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C6::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C4*)(S7639C6*), ABISELECT(96,60), "S7639C1");
    check_base_class_offset(lv, (S7639C4*)(S7639C2*)(S7639C11*), ABISELECT(96,60), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C2 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C2*), 0, "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C2 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C2*), 0, "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C2 */ AMB_check_base_class_offset(lv, (S7639C2*), 0, "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C7*), ABISELECT(144,88), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C4*)(S7639C7*), ABISELECT(152,92), "S7639C1");
    check_base_class_offset(lv, (S7639C7*)(S7639C6*), ABISELECT(144,88), "S7639C1");
    check_base_class_offset(lv, (S7639C8_nt*)(S7639C6*), ABISELECT(208,128), "S7639C1");
    /*is_ambiguous_... S7639C10::S7639C4 */ AMB_check_base_class_offset(lv, (S7639C4*)(S7639C10*), ABISELECT(224,132), "S7639C1");
    check_base_class_offset(lv, (S7639C13*)(S7639C12*), ABISELECT(432,284), "S7639C1");
    check_base_class_offset(lv, (S7639C4*)(S7639C12*), ABISELECT(480,308), "S7639C1");
    check_base_class_offset(lv, (S7639C12*)(S7639C11*), ABISELECT(432,284), "S7639C1");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C11*), ABISELECT(288,168), "S7639C1");
    /*is_ambiguous_... S7639C11::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C11*), ABISELECT(288,168), "S7639C1");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(304,172), "S7639C1");
    /*is_ambiguous_... S7639C2::S7639C5 */ AMB_check_base_class_offset(lv, (S7639C5*)(S7639C2*)(S7639C11*), ABISELECT(304,172), "S7639C1");
    check_base_class_offset(lv, (S7639C2*)(S7639C11*), ABISELECT(304,172), "S7639C1");
    /*is_ambiguous_... S7639C11::S7639C13 */ AMB_check_base_class_offset(lv, (S7639C13*)(S7639C11*), ABISELECT(512,328), "S7639C1");
    check_base_class_offset(lv, (S7639C11*)(S7639C10*), ABISELECT(288,168), "S7639C1");
    check_base_class_offset(lv, (S7639C10*)(S7639C9*)(S7639C6*), ABISELECT(224,132), "S7639C1");
    check_base_class_offset(lv, (S7639C9*)(S7639C6*), ABISELECT(120,76), "S7639C1");
    check_base_class_offset(lv, (S7639C6*), ABISELECT(120,76), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C3*)(S7639C7*), ABISELECT(32,20), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C4*)(S7639C7*), ABISELECT(40,24), "S7639C1");
    /*is_ambiguous_... S7639C1::S7639C7 */ AMB_check_base_class_offset(lv, (S7639C7*), ABISELECT(32,20), "S7639C1");
    test_class_info(&lv, &cd_S7639C1);
    dp->~S7639C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7639C1(Test_S7639C1, "S7639C1", ABISELECT(560,352));

#else // __cplusplus

extern void _ZN7S7639C1C1Ev();
extern void _ZN7S7639C1D1Ev();
Name_Map name_map_S7639C1[] = {
  NSPAIR(_ZN7S7639C1C1Ev),
  NSPAIR(_ZN7S7639C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C2;
extern VTBL_ENTRY _ZTI7S7639C2[];
extern  VTBL_ENTRY _ZTV7S7639C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C2[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C7;
extern VTBL_ENTRY _ZTI7S7639C7[];
extern  VTBL_ENTRY _ZTV7S7639C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C7[];
extern Class_Descriptor cd_S7639C8_nt;
extern VTBL_ENTRY _ZTI10S7639C8_nt[];
extern  VTBL_ENTRY _ZTV10S7639C8_nt[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C12;
extern VTBL_ENTRY _ZTI8S7639C12[];
extern  VTBL_ENTRY _ZTV8S7639C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C12[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C5;
extern VTBL_ENTRY _ZTI7S7639C5[];
extern  VTBL_ENTRY _ZTV7S7639C5[];
extern Class_Descriptor cd_S7639C2;
extern VTBL_ENTRY _ZTI7S7639C2[];
extern  VTBL_ENTRY _ZTV7S7639C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C2[];
extern Class_Descriptor cd_S7639C13;
extern VTBL_ENTRY _ZTI8S7639C13[];
extern  VTBL_ENTRY _ZTV8S7639C13[];
extern Class_Descriptor cd_S7639C11;
extern VTBL_ENTRY _ZTI8S7639C11[];
extern  VTBL_ENTRY _ZTV8S7639C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C11[];
extern Class_Descriptor cd_S7639C10;
extern VTBL_ENTRY _ZTI8S7639C10[];
extern  VTBL_ENTRY _ZTV8S7639C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7639C10[];
extern Class_Descriptor cd_S7639C9;
extern VTBL_ENTRY _ZTI7S7639C9[];
extern  VTBL_ENTRY _ZTV7S7639C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C9[];
extern Class_Descriptor cd_S7639C6;
extern VTBL_ENTRY _ZTI7S7639C6[];
extern  VTBL_ENTRY _ZTV7S7639C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C6[];
extern Class_Descriptor cd_S7639C3;
extern VTBL_ENTRY _ZTI7S7639C3[];
extern  VTBL_ENTRY _ZTV7S7639C3[];
extern Class_Descriptor cd_S7639C4;
extern VTBL_ENTRY _ZTI7S7639C4[];
extern  VTBL_ENTRY _ZTV7S7639C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C4[];
extern Class_Descriptor cd_S7639C7;
extern VTBL_ENTRY _ZTI7S7639C7[];
extern  VTBL_ENTRY _ZTV7S7639C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C7[];
static Base_Class bases_S7639C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7639C3,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7639C4,    ABISELECT(96,60), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7639C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7639C3,    ABISELECT(144,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(152,92), //bcp->offset
    118, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7639C7,    ABISELECT(144,88), //bcp->offset
    95, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7639C8_nt,    ABISELECT(208,128), //bcp->offset
    128, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7639C4,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7639C13,    ABISELECT(432,284), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(480,308), //bcp->offset
    225, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7639C12,    ABISELECT(432,284), //bcp->offset
    199, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7639C3,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(288,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7639C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7639C5,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7639C2,    ABISELECT(304,172), //bcp->offset
    186, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7639C13,    ABISELECT(512,328), //bcp->offset
    235, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7639C11,    ABISELECT(288,168), //bcp->offset
    163, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S7639C10,    ABISELECT(224,132), //bcp->offset
    141, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S7639C9,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7639C6,    ABISELECT(120,76), //bcp->offset
    61, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7639C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7639C4,    ABISELECT(40,24), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7639C7,    ABISELECT(32,20), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7639C1[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
extern void _ZN7S7639C12v1Ev();
extern void _ZN7S7639C12v2Ev();
extern void _ZN7S7639C12v3Ev();
extern void _ZN7S7639C12v4Ev();
extern void _ZN7S7639C12v5Ev();
extern void _ZN7S7639C1D1Ev();
extern void _ZN7S7639C1D0Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void ABISELECT(_ZThn32_N7S7639C1D1Ev,_ZThn20_N7S7639C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7639C1D0Ev,_ZThn20_N7S7639C1D0Ev)();
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C93v40Ev();
extern void _ZN7S7639C93v41Ev();
extern void _ZN7S7639C93v42Ev();
extern void ABISELECT(_ZTv0_n152_N7S7639C1D1Ev,_ZTv0_n76_N7S7639C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7639C1D1Ev,_ZThn76_N7S7639C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N7S7639C1D0Ev,_ZTv0_n76_N7S7639C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S7639C1D0Ev,_ZThn76_N7S7639C1D0Ev)() __attribute__((weak));
extern void _ZN7S7639C63v43Ev();
extern void _ZN7S7639C63v44Ev();
extern void _ZN7S7639C63v45Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7639C1D1Ev,_ZTv0_n32_N7S7639C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S7639C1D1Ev,_ZThn88_N7S7639C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7639C1D0Ev,_ZTv0_n32_N7S7639C1D0Ev)();
extern void ABISELECT(_ZThn144_N7S7639C1D0Ev,_ZThn88_N7S7639C1D0Ev)() __attribute__((weak));
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void ABISELECT(_ZTv0_n24_N7S7639C1D1Ev,_ZTv0_n12_N7S7639C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7639C1D1Ev,_ZThn128_N7S7639C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7639C1D0Ev,_ZTv0_n12_N7S7639C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7639C1D0Ev,_ZThn128_N7S7639C1D0Ev)() __attribute__((weak));
extern void _ZN10S7639C8_nt3v19Ev();
extern void _ZN10S7639C8_nt3v20Ev();
extern void _ZN10S7639C8_nt3v21Ev();
extern void _ZN10S7639C8_nt3v22Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY vtc_S7639C1[] = {
  ABISELECT(512,328),
  ABISELECT(432,284),
  ABISELECT(288,168),
  ABISELECT(224,132),
  ABISELECT(208,128),
  ABISELECT(144,88),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(96,60),
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7639C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7639C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7639C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7639C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7639C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7639C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7639C1D0Ev,
  ABISELECT(88,56),
  ABISELECT(64,40),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7639C1D1Ev,_ZThn20_N7S7639C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7639C1D0Ev,_ZThn20_N7S7639C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
  ABISELECT(80,52),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  0,
  0,
  0,
  ABISELECT(88,52),
  ABISELECT(24,12),
  ABISELECT(392,252),
  ABISELECT(-24,-16),
  ABISELECT(312,208),
  ABISELECT(168,92),
  ABISELECT(-24,-16),
  0,
  ABISELECT(104,56),
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v42Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7639C1D1Ev,_ZTv0_n76_N7S7639C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N7S7639C1D0Ev,_ZTv0_n76_N7S7639C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7639C63v43Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v44Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v45Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-88),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-48,-28),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7639C1D1Ev,_ZTv0_n32_N7S7639C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7639C1D0Ev,_ZTv0_n32_N7S7639C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-152,-92),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-128),
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7639C1D1Ev,_ZTv0_n12_N7S7639C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7639C1D0Ev,_ZTv0_n12_N7S7639C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(288,196),
  ABISELECT(-128,-72),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-104,-56),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  ABISELECT(-192,-108),
  ABISELECT(-168,-92),
  ABISELECT(144,116),
  ABISELECT(-192,-108),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
  ABISELECT(-184,-96),
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  ABISELECT(-312,-208),
  ABISELECT(-432,-284),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
  ABISELECT(-360,-232),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-480,-308),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-328),
  (VTBL_ENTRY)&(_ZTI7S7639C1[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern VTBL_ENTRY _ZTV7S7639C1[];
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C2__7S7639C1[] = {
  ABISELECT(120,76),
  ABISELECT(96,60),
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C2__7S7639C1[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C2__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C7D1Ev();
extern void _ZN7S7639C7D0Ev();
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C7__A__7S7639C1[] = {
  ABISELECT(88,56),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C47S7639C7__A4__7S7639C1[] = {
  ABISELECT(80,52),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C47S7639C7__A4__7S7639C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C47S7639C7__A4__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C7__A__7S7639C1[] = {
  ABISELECT(80,52),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(56,36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__A1__7S7639C7__A__7S7639C1[] = {
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C7__A__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C1[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C4__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C93v40Ev();
extern void _ZN7S7639C93v41Ev();
extern void _ZN7S7639C93v42Ev();
extern void _ZN7S7639C6D1Ev();
extern void _ZN7S7639C6D0Ev();
extern void _ZN7S7639C63v43Ev();
extern void _ZN7S7639C63v44Ev();
extern void _ZN7S7639C63v45Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C6__7S7639C1[] = {
  ABISELECT(88,52),
  ABISELECT(24,12),
  ABISELECT(392,252),
  ABISELECT(-24,-16),
  ABISELECT(312,208),
  ABISELECT(168,92),
  ABISELECT(-24,-16),
  0,
  ABISELECT(104,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7639C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7639C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v43Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v44Ev,
  (VTBL_ENTRY)&_ZN7S7639C63v45Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C93v40Ev();
extern void _ZN7S7639C93v41Ev();
extern void _ZN7S7639C93v42Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C97S7639C6__7S7639C1[] = {
  ABISELECT(392,252),
  ABISELECT(-24,-16),
  ABISELECT(312,208),
  ABISELECT(168,92),
  ABISELECT(-24,-16),
  0,
  ABISELECT(104,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7639C93v42Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C10__7S7639C97S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(288,196),
  ABISELECT(-128,-72),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-104,-56),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A2__7S7639C97S7639C6__7S7639C1[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__7S7639C97S7639C6__7S7639C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  ABISELECT(-192,-108),
  ABISELECT(-168,-92),
  ABISELECT(144,116),
  ABISELECT(-192,-108),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__7S7639C97S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  ABISELECT(-312,-208),
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A1__7S7639C97S7639C6__7S7639C1[] = {
  ABISELECT(-360,-232),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-360,-232),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__7S7639C97S7639C6__7S7639C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__7S7639C97S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-252),
  (VTBL_ENTRY)&(_ZTI7S7639C9[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C6__7S7639C1[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7639C6D1Ev,_ZTv0_n32_N7S7639C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7639C6D1Ev,_ZThn12_N7S7639C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7639C6D0Ev,_ZTv0_n32_N7S7639C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7639C6D0Ev,_ZThn12_N7S7639C6D0Ev)() __attribute__((weak));
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C7__7S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7639C6D1Ev,_ZTv0_n32_N7S7639C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7639C6D0Ev,_ZTv0_n32_N7S7639C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C47S7639C7__A1__7S7639C6__7S7639C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7639C6D1Ev,_ZTv0_n12_N7S7639C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S7639C6D1Ev,_ZThn52_N7S7639C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7639C6D0Ev,_ZTv0_n12_N7S7639C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S7639C6D0Ev,_ZThn52_N7S7639C6D0Ev)() __attribute__((weak));
extern void _ZN10S7639C8_nt3v19Ev();
extern void _ZN10S7639C8_nt3v20Ev();
extern void _ZN10S7639C8_nt3v21Ev();
extern void _ZN10S7639C8_nt3v22Ev();
static  VTBL_ENTRY _tg__ZTV10S7639C8_nt__7S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7639C6D1Ev,_ZTv0_n12_N7S7639C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7639C6D0Ev,_ZTv0_n12_N7S7639C6D0Ev),
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7639C8_nt3v22Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C10__7S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(288,196),
  ABISELECT(-128,-72),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-104,-56),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__7S7639C6__7S7639C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  ABISELECT(-192,-108),
  ABISELECT(-168,-92),
  ABISELECT(144,116),
  ABISELECT(-192,-108),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__7S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  ABISELECT(-312,-208),
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A3__7S7639C6__7S7639C1[] = {
  ABISELECT(-360,-232),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-360,-232),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__7S7639C6__7S7639C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__7S7639C6__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-252),
  (VTBL_ENTRY)&(_ZTI7S7639C6[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C7D1Ev();
extern void _ZN7S7639C7D0Ev();
extern void _ZN7S7639C73v14Ev();
extern void _ZN7S7639C73v15Ev();
extern void _ZN7S7639C73v16Ev();
extern void _ZN7S7639C73v17Ev();
extern void _ZN7S7639C73v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C7__7S7639C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7639C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7639C73v18Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C47S7639C7__A1__7S7639C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C47S7639C7__A1__7S7639C1[] = {
  0,
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C47S7639C7__A1__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C7__7S7639C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__A1__7S7639C7__7S7639C1[] = {
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C7__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7639C7[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN8S7639C103v36Ev();
extern void _ZN8S7639C103v37Ev();
extern void _ZN8S7639C103v38Ev();
extern void _ZN8S7639C103v39Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C10__7S7639C1[] = {
  ABISELECT(288,196),
  ABISELECT(-128,-72),
  ABISELECT(208,152),
  ABISELECT(64,36),
  ABISELECT(-104,-56),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7639C103v39Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C10__A2__7S7639C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C48S7639C10__A2__7S7639C1[] = {
  0,
  0,
  0,
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C10__A2__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C10__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A2__8S7639C10__7S7639C1[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__8S7639C10__7S7639C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  ABISELECT(-192,-108),
  ABISELECT(-168,-92),
  ABISELECT(144,116),
  ABISELECT(-192,-108),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C10__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  ABISELECT(-312,-208),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A1__8S7639C10__7S7639C1[] = {
  ABISELECT(-360,-232),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__8S7639C10__7S7639C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__8S7639C10__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S7639C10[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN8S7639C113v34Ev();
extern void _ZN8S7639C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C11__7S7639C1[] = {
  ABISELECT(224,160),
  ABISELECT(-192,-108),
  ABISELECT(-168,-92),
  ABISELECT(144,116),
  ABISELECT(-192,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7639C113v35Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C28S7639C11__A1__7S7639C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__7S7639C28S7639C11__A1__7S7639C1[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(208,112),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C28S7639C11__A1__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(184,96),
  (VTBL_ENTRY)&(_ZTI7S7639C2[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__A1__8S7639C11__7S7639C1[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(192,108),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__8S7639C11__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  ABISELECT(-312,-208),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C11__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(168,92),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__8S7639C11__7S7639C1[] = {
  ABISELECT(-360,-232),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
extern void _ZN7S7639C23v10Ev();
extern void _ZN7S7639C23v11Ev();
extern void _ZN7S7639C23v12Ev();
extern void _ZN7S7639C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C2__8S7639C11__7S7639C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7639C23v13Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C13__A1__8S7639C11__7S7639C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7639C11[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
};
extern void _ZN8S7639C133v23Ev();
extern void _ZN8S7639C133v24Ev();
extern void _ZN8S7639C133v25Ev();
extern void _ZN8S7639C133v26Ev();
extern void _ZN8S7639C133v27Ev();
extern void _ZN8S7639C133v28Ev();
extern void _ZN8S7639C133v29Ev();
extern void _ZN8S7639C133v30Ev();
extern void _ZN8S7639C133v31Ev();
extern void _ZN8S7639C123v32Ev();
extern void _ZN8S7639C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7639C12__7S7639C1[] = {
  ABISELECT(-336,-224),
  ABISELECT(-312,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN8S7639C133v23Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v24Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v25Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v26Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v27Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v28Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v29Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v30Ev,
  (VTBL_ENTRY)&_ZN8S7639C133v31Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v32Ev,
  (VTBL_ENTRY)&_ZN8S7639C123v33Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C48S7639C12__A3__7S7639C1[] = {
  ABISELECT(-360,-232),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__7S7639C48S7639C12__A3__7S7639C1[] = {
  0,
  0,
  0,
  ABISELECT(384,248),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__7S7639C48S7639C12__A3__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(360,232),
  (VTBL_ENTRY)&(_ZTI7S7639C4[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
extern void _ZN7S7639C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C5__8S7639C12__7S7639C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(312,208),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7639C52v9Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C4__8S7639C12__7S7639C1[] = {
  ABISELECT(-360,-232),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
extern void _ZN7S7639C32v6Ev();
extern void _ZN7S7639C32v7Ev();
extern void _ZN7S7639C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7639C3__A1__8S7639C12__7S7639C1[] = {
  0,
  0,
  0,
  ABISELECT(336,224),
  (VTBL_ENTRY)&(_ZTI8S7639C12[0]),
  (VTBL_ENTRY)&_ZN7S7639C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7639C32v8Ev,
};
static  VTT_ENTRY vtt_S7639C1[] = {
  {&(_ZTV7S7639C1[12]),  12,255},
  {&(_tg__ZTV7S7639C2__7S7639C1[5]),  5,13},
  {&(_tg__ZTV7S7639C4__7S7639C2__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C2__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C2__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C7__A__7S7639C1[4]),  4,14},
  {&(_tg__ZTV7S7639C47S7639C7__A4__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C47S7639C7__A4__7S7639C1[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C47S7639C7__A4__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C4__7S7639C7__A__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C3__A1__7S7639C7__A__7S7639C1[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C7__A__7S7639C1[6]),  6,10},
  {&(_ZTV7S7639C1[58]),  58,255},
  {&(_ZTV7S7639C1[58]),  58,255},
  {&(_ZTV7S7639C1[83]),  83,255},
  {&(_ZTV7S7639C1[83]),  83,255},
  {&(_ZTV7S7639C1[108]),  108,255},
  {&(_ZTV7S7639C1[125]),  125,255},
  {&(_ZTV7S7639C1[135]),  135,255},
  {&(_ZTV7S7639C1[156]),  156,255},
  {&(_ZTV7S7639C1[180]),  180,255},
  {&(_ZTV7S7639C1[214]),  214,255},
  {&(_ZTV7S7639C1[232]),  232,255},
  {&(_ZTV7S7639C1[191]),  191,255},
  {&(_ZTV7S7639C1[246]),  246,255},
  {&(_ZTV7S7639C1[31]),  31,255},
  {&(_ZTV7S7639C1[48]),  48,255},
  {&(_tg__ZTV7S7639C4__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C4__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C6__7S7639C1[15]),  15,27},
  {&(_tg__ZTV7S7639C97S7639C6__7S7639C1[13]),  13,20},
  {&(_tg__ZTV8S7639C10__7S7639C97S7639C6__7S7639C1[15]),  15,22},
  {&(_tg__ZTV7S7639C97S7639C6__7S7639C1[13]),  13,20},
  {&(_tg__ZTV7S7639C4__A2__7S7639C97S7639C6__7S7639C1[7]),  7,10},
  {&(_tg__ZTV8S7639C11__7S7639C97S7639C6__7S7639C1[17]),  17,23},
  {&(_tg__ZTV8S7639C12__7S7639C97S7639C6__7S7639C1[15]),  15,26},
  {&(_tg__ZTV7S7639C48S7639C12__A1__7S7639C97S7639C6__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C28S7639C11__7S7639C97S7639C6__7S7639C1[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A2__7S7639C97S7639C6__7S7639C1[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__7S7639C97S7639C6__7S7639C1[11]),  11,20},
  {&(_tg__ZTV7S7639C4__7S7639C6__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C6__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C6__7S7639C1[15]),  15,27},
  {&(_tg__ZTV7S7639C7__7S7639C6__7S7639C1[13]),  13,23},
  {&(_tg__ZTV7S7639C47S7639C7__A1__7S7639C6__7S7639C1[7]),  7,10},
  {&(_tg__ZTV10S7639C8_nt__7S7639C6__7S7639C1[7]),  7,13},
  {&(_tg__ZTV8S7639C10__7S7639C6__7S7639C1[15]),  15,22},
  {&(_tg__ZTV8S7639C11__7S7639C6__7S7639C1[17]),  17,23},
  {&(_tg__ZTV8S7639C12__7S7639C6__7S7639C1[15]),  15,26},
  {&(_tg__ZTV7S7639C48S7639C12__A3__7S7639C6__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C28S7639C11__7S7639C6__7S7639C1[5]),  5,13},
  {&(_tg__ZTV8S7639C13__A1__7S7639C6__7S7639C1[11]),  11,20},
  {&(_tg__ZTV7S7639C7__7S7639C1[4]),  4,14},
  {&(_tg__ZTV7S7639C47S7639C7__A1__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C47S7639C7__A1__7S7639C1[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C47S7639C7__A1__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C4__7S7639C7__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C3__A1__7S7639C7__7S7639C1[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C7__7S7639C1[6]),  6,10},
  {&(_tg__ZTV8S7639C10__7S7639C1[11]),  11,18},
  {&(_tg__ZTV7S7639C48S7639C10__A2__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C48S7639C10__A2__7S7639C1[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C10__A2__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C10__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C4__A2__8S7639C10__7S7639C1[7]),  7,10},
  {&(_tg__ZTV8S7639C11__8S7639C10__7S7639C1[17]),  17,23},
  {&(_tg__ZTV8S7639C12__8S7639C10__7S7639C1[15]),  15,26},
  {&(_tg__ZTV7S7639C48S7639C12__A1__8S7639C10__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C28S7639C11__8S7639C10__7S7639C1[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A2__8S7639C10__7S7639C1[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__8S7639C10__7S7639C1[11]),  11,20},
  {&(_tg__ZTV8S7639C11__7S7639C1[7]),  7,13},
  {&(_tg__ZTV7S7639C28S7639C11__A1__7S7639C1[5]),  5,13},
  {&(_tg__ZTV7S7639C4__7S7639C28S7639C11__A1__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C4__7S7639C28S7639C11__A1__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C5__7S7639C28S7639C11__A1__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C4__A1__8S7639C11__7S7639C1[7]),  7,10},
  {&(_tg__ZTV8S7639C12__8S7639C11__7S7639C1[15]),  15,26},
  {&(_tg__ZTV7S7639C5__8S7639C11__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C48S7639C12__8S7639C11__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C2__8S7639C11__7S7639C1[5]),  5,13},
  {&(_tg__ZTV7S7639C4__A1__8S7639C11__7S7639C1[7]),  7,10},
  {&(_tg__ZTV8S7639C13__A1__8S7639C11__7S7639C1[11]),  11,20},
  {&(_tg__ZTV8S7639C12__7S7639C1[4]),  4,15},
  {&(_tg__ZTV7S7639C48S7639C12__A3__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C3__7S7639C48S7639C12__A3__7S7639C1[5]),  5,8},
  {&(_tg__ZTV7S7639C5__7S7639C48S7639C12__A3__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C5__8S7639C12__7S7639C1[6]),  6,10},
  {&(_tg__ZTV7S7639C4__8S7639C12__7S7639C1[7]),  7,10},
  {&(_tg__ZTV7S7639C3__A1__8S7639C12__7S7639C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7639C1[];
extern  VTBL_ENTRY _ZTV7S7639C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7639C1[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7639C6D0Ev,_ZTv0_n12_N7S7639C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7639C6D0Ev,_ZThn52_N7S7639C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7639C6D1Ev,_ZTv0_n12_N7S7639C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7639C6D1Ev,_ZThn52_N7S7639C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7639C6D0Ev,_ZTv0_n32_N7S7639C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7639C6D0Ev,_ZThn12_N7S7639C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7639C6D1Ev,_ZTv0_n32_N7S7639C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7639C6D1Ev,_ZThn12_N7S7639C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7639C1D0Ev,_ZTv0_n12_N7S7639C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7639C1D0Ev,_ZThn128_N7S7639C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7639C1D1Ev,_ZTv0_n12_N7S7639C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7639C1D1Ev,_ZThn128_N7S7639C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7639C1D0Ev,_ZTv0_n32_N7S7639C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7639C1D0Ev,_ZThn88_N7S7639C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7639C1D1Ev,_ZTv0_n32_N7S7639C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7639C1D1Ev,_ZThn88_N7S7639C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7639C1D0Ev,_ZTv0_n76_N7S7639C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7639C1D0Ev,_ZThn76_N7S7639C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N7S7639C1D1Ev,_ZTv0_n76_N7S7639C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7639C1D1Ev,_ZThn76_N7S7639C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7639C1 = {  "S7639C1", // class name
  bases_S7639C1, 28,
  &(vtc_S7639C1[0]), // expected_vtbl_contents
  &(vtt_S7639C1[0]), // expected_vtt_contents
  ABISELECT(560,352), // object size
  NSPAIRA(_ZTI7S7639C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7639C1),255, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7639C1),91, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7776C4  {
  long double s7776c4f0;
  virtual void  v10(); // _ZN7S7776C43v10Ev
  ~S7776C4(); // tgen
  S7776C4(); // tgen
};
//SIG(-1 S7776C4) C1{ v1 FD}


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

static void Test_S7776C4()
{
  extern Class_Descriptor cd_S7776C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S7776C4, buf);
    S7776C4 *dp, &lv = *(dp=new (buf) S7776C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7776C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7776C4)");
    check_field_offset(lv, s7776c4f0, ABISELECT(16,4), "S7776C4.s7776c4f0");
    test_class_info(&lv, &cd_S7776C4);
    dp->~S7776C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C4(Test_S7776C4, "S7776C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7776C4C1Ev();
extern void _ZN7S7776C4D1Ev();
Name_Map name_map_S7776C4[] = {
  NSPAIR(_ZN7S7776C4C1Ev),
  NSPAIR(_ZN7S7776C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7776C4[];
extern void _ZN7S7776C43v10Ev();
static  VTBL_ENTRY vtc_S7776C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C4[0]),
  (VTBL_ENTRY)&_ZN7S7776C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S7776C4[];
extern  VTBL_ENTRY _ZTV7S7776C4[];
Class_Descriptor cd_S7776C4 = {  "S7776C4", // class name
  0,0,//no base classes
  &(vtc_S7776C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7776C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7776C4),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  S7776C5  {
  ::S21103C10 s7776c5f0[10];
  virtual  ~S7776C5(); // _ZN7S7776C5D1Ev
  virtual void  v11(); // _ZN7S7776C53v11Ev
  virtual void  v12(); // _ZN7S7776C53v12Ev
  virtual void  v13(); // _ZN7S7776C53v13Ev
  virtual void  v14(); // _ZN7S7776C53v14Ev
  virtual void  v15(); // _ZN7S7776C53v15Ev
  virtual void  v16(); // _ZN7S7776C53v16Ev
  virtual void  v17(); // _ZN7S7776C53v17Ev
  S7776C5(); // tgen
};
//SIG(-1 S7776C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 FU2{ m Fl}[10]}


 S7776C5 ::~S7776C5(){ note_dtor("S7776C5", this);}
void  S7776C5 ::v11(){vfunc_called(this, "_ZN7S7776C53v11Ev");}
void  S7776C5 ::v12(){vfunc_called(this, "_ZN7S7776C53v12Ev");}
void  S7776C5 ::v13(){vfunc_called(this, "_ZN7S7776C53v13Ev");}
void  S7776C5 ::v14(){vfunc_called(this, "_ZN7S7776C53v14Ev");}
void  S7776C5 ::v15(){vfunc_called(this, "_ZN7S7776C53v15Ev");}
void  S7776C5 ::v16(){vfunc_called(this, "_ZN7S7776C53v16Ev");}
void  S7776C5 ::v17(){vfunc_called(this, "_ZN7S7776C53v17Ev");}
S7776C5 ::S7776C5(){ note_ctor("S7776C5", this);} // tgen

static void Test_S7776C5()
{
  extern Class_Descriptor cd_S7776C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S7776C5, buf);
    S7776C5 *dp, &lv = *(dp=new (buf) S7776C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S7776C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7776C5)");
    check_field_offset(lv, s7776c5f0, ABISELECT(8,4), "S7776C5.s7776c5f0");
    test_class_info(&lv, &cd_S7776C5);
    dp->~S7776C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C5(Test_S7776C5, "S7776C5", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S7776C5C1Ev();
extern void _ZN7S7776C5D1Ev();
Name_Map name_map_S7776C5[] = {
  NSPAIR(_ZN7S7776C5C1Ev),
  NSPAIR(_ZN7S7776C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7776C5[];
extern void _ZN7S7776C5D1Ev();
extern void _ZN7S7776C5D0Ev();
extern void _ZN7S7776C53v11Ev();
extern void _ZN7S7776C53v12Ev();
extern void _ZN7S7776C53v13Ev();
extern void _ZN7S7776C53v14Ev();
extern void _ZN7S7776C53v15Ev();
extern void _ZN7S7776C53v16Ev();
extern void _ZN7S7776C53v17Ev();
static  VTBL_ENTRY vtc_S7776C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C5[0]),
  (VTBL_ENTRY)&_ZN7S7776C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v17Ev,
};
extern VTBL_ENTRY _ZTI7S7776C5[];
extern  VTBL_ENTRY _ZTV7S7776C5[];
Class_Descriptor cd_S7776C5 = {  "S7776C5", // class name
  0,0,//no base classes
  &(vtc_S7776C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S7776C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7776C5),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  S7776C8  {
  virtual void  v18(); // _ZN7S7776C83v18Ev
  virtual void  v19(); // _ZN7S7776C83v19Ev
  virtual void  v20(); // _ZN7S7776C83v20Ev
  virtual void  v21(); // _ZN7S7776C83v21Ev
  virtual void  v22(); // _ZN7S7776C83v22Ev
  virtual void  v23(); // _ZN7S7776C83v23Ev
  virtual void  v24(); // _ZN7S7776C83v24Ev
  virtual void  v25(); // _ZN7S7776C83v25Ev
  ~S7776C8(); // tgen
  S7776C8(); // tgen
};
//SIG(-1 S7776C8) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S7776C8 ::v18(){vfunc_called(this, "_ZN7S7776C83v18Ev");}
void  S7776C8 ::v19(){vfunc_called(this, "_ZN7S7776C83v19Ev");}
void  S7776C8 ::v20(){vfunc_called(this, "_ZN7S7776C83v20Ev");}
void  S7776C8 ::v21(){vfunc_called(this, "_ZN7S7776C83v21Ev");}
void  S7776C8 ::v22(){vfunc_called(this, "_ZN7S7776C83v22Ev");}
void  S7776C8 ::v23(){vfunc_called(this, "_ZN7S7776C83v23Ev");}
void  S7776C8 ::v24(){vfunc_called(this, "_ZN7S7776C83v24Ev");}
void  S7776C8 ::v25(){vfunc_called(this, "_ZN7S7776C83v25Ev");}
S7776C8 ::~S7776C8(){ note_dtor("S7776C8", this);} // tgen
S7776C8 ::S7776C8(){ note_ctor("S7776C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7776C8C1Ev();
extern void _ZN7S7776C8D1Ev();
Name_Map name_map_S7776C8[] = {
  NSPAIR(_ZN7S7776C8C1Ev),
  NSPAIR(_ZN7S7776C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7776C8[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY vtc_S7776C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C8[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
extern VTBL_ENTRY _ZTI7S7776C8[];
extern  VTBL_ENTRY _ZTV7S7776C8[];
Class_Descriptor cd_S7776C8 = {  "S7776C8", // class name
  0,0,//no base classes
  &(vtc_S7776C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7776C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7776C8),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  S7776C7  : virtual S7776C8 {
  int s7776c7f0;
  int s7776c7f1;
  void *s7776c7f2;
  virtual  ~S7776C7(); // _ZN7S7776C7D2Ev
  virtual void  v26(); // _ZN7S7776C73v26Ev
  virtual void  v27(); // _ZN7S7776C73v27Ev
  virtual void  v28(); // _ZN7S7776C73v28Ev
  virtual void  v29(); // _ZN7S7776C73v29Ev
  S7776C7(); // tgen
};
//SIG(-1 S7776C7) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 Fi[2] Fp}


 S7776C7 ::~S7776C7(){ note_dtor("S7776C7", this);}
void  S7776C7 ::v26(){vfunc_called(this, "_ZN7S7776C73v26Ev");}
void  S7776C7 ::v27(){vfunc_called(this, "_ZN7S7776C73v27Ev");}
void  S7776C7 ::v28(){vfunc_called(this, "_ZN7S7776C73v28Ev");}
void  S7776C7 ::v29(){vfunc_called(this, "_ZN7S7776C73v29Ev");}
S7776C7 ::S7776C7(){ note_ctor("S7776C7", this);} // tgen

static void Test_S7776C7()
{
  extern Class_Descriptor cd_S7776C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7776C7, buf);
    S7776C7 *dp, &lv = *(dp=new (buf) S7776C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7776C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7776C7)");
    check_base_class_offset(lv, (S7776C8*), 0, "S7776C7");
    check_field_offset(lv, s7776c7f0, ABISELECT(8,4), "S7776C7.s7776c7f0");
    check_field_offset(lv, s7776c7f1, ABISELECT(12,8), "S7776C7.s7776c7f1");
    check_field_offset(lv, s7776c7f2, ABISELECT(16,12), "S7776C7.s7776c7f2");
    test_class_info(&lv, &cd_S7776C7);
    dp->~S7776C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C7(Test_S7776C7, "S7776C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7776C7C1Ev();
extern void _ZN7S7776C7D2Ev();
Name_Map name_map_S7776C7[] = {
  NSPAIR(_ZN7S7776C7C1Ev),
  NSPAIR(_ZN7S7776C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7776C8;
extern VTBL_ENTRY _ZTI7S7776C8[];
extern  VTBL_ENTRY _ZTV7S7776C8[];
static Base_Class bases_S7776C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7776C8,    0, //bcp->offset
    -1, //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 _ZTI7S7776C7[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY vtc_S7776C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern VTBL_ENTRY _ZTV7S7776C7[];
static  VTT_ENTRY vtt_S7776C7[] = {
  {&(_ZTV7S7776C7[11]),  11,25},
  {&(_ZTV7S7776C7[11]),  11,25},
};
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
Class_Descriptor cd_S7776C7 = {  "S7776C7", // class name
  bases_S7776C7, 1,
  &(vtc_S7776C7[0]), // expected_vtbl_contents
  &(vtt_S7776C7[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7776C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7776C7),25, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7776C7),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  S7776C9  {
  void *s7776c9f0[5];
  virtual void  v30(); // _ZN7S7776C93v30Ev
  virtual void  v31(); // _ZN7S7776C93v31Ev
  virtual void  v32(); // _ZN7S7776C93v32Ev
  virtual void  v33(); // _ZN7S7776C93v33Ev
  virtual void  v34(); // _ZN7S7776C93v34Ev
  virtual void  v35(); // _ZN7S7776C93v35Ev
  virtual void  v36(); // _ZN7S7776C93v36Ev
  virtual void  v37(); // _ZN7S7776C93v37Ev
  virtual void  v38(); // _ZN7S7776C93v38Ev
  ~S7776C9(); // tgen
  S7776C9(); // tgen
};
//SIG(-1 S7776C9) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S7776C9 ::v30(){vfunc_called(this, "_ZN7S7776C93v30Ev");}
void  S7776C9 ::v31(){vfunc_called(this, "_ZN7S7776C93v31Ev");}
void  S7776C9 ::v32(){vfunc_called(this, "_ZN7S7776C93v32Ev");}
void  S7776C9 ::v33(){vfunc_called(this, "_ZN7S7776C93v33Ev");}
void  S7776C9 ::v34(){vfunc_called(this, "_ZN7S7776C93v34Ev");}
void  S7776C9 ::v35(){vfunc_called(this, "_ZN7S7776C93v35Ev");}
void  S7776C9 ::v36(){vfunc_called(this, "_ZN7S7776C93v36Ev");}
void  S7776C9 ::v37(){vfunc_called(this, "_ZN7S7776C93v37Ev");}
void  S7776C9 ::v38(){vfunc_called(this, "_ZN7S7776C93v38Ev");}
S7776C9 ::~S7776C9(){ note_dtor("S7776C9", this);} // tgen
S7776C9 ::S7776C9(){ note_ctor("S7776C9", this);} // tgen

static void Test_S7776C9()
{
  extern Class_Descriptor cd_S7776C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7776C9, buf);
    S7776C9 *dp, &lv = *(dp=new (buf) S7776C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7776C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7776C9)");
    check_field_offset(lv, s7776c9f0, ABISELECT(8,4), "S7776C9.s7776c9f0");
    test_class_info(&lv, &cd_S7776C9);
    dp->~S7776C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C9(Test_S7776C9, "S7776C9", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7776C9C1Ev();
extern void _ZN7S7776C9D1Ev();
Name_Map name_map_S7776C9[] = {
  NSPAIR(_ZN7S7776C9C1Ev),
  NSPAIR(_ZN7S7776C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7776C9[];
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
static  VTBL_ENTRY vtc_S7776C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C9[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
};
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
Class_Descriptor cd_S7776C9 = {  "S7776C9", // class name
  0,0,//no base classes
  &(vtc_S7776C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7776C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7776C9),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  S7776C3  : virtual S7776C4 , S7776C5 , virtual S7776C7 , S7776C9 {
  ::S21103C11_nt s7776c3f0;
  virtual void  v39(); // _ZN7S7776C33v39Ev
  virtual void  v40(); // _ZN7S7776C33v40Ev
  virtual void  v41(); // _ZN7S7776C33v41Ev
  virtual void  v42(); // _ZN7S7776C33v42Ev
  virtual void  v43(); // _ZN7S7776C33v43Ev
  virtual void  v44(); // _ZN7S7776C33v44Ev
  ~S7776C3(); // tgen
  S7776C3(); // tgen
};
//SIG(-1 S7776C3) C1{ VBC2{ v7 FD} BC3{ vd v8 v9 v10 v11 v12 v13 v14 FU4{ m Fl}[10]} VBC5{ VBC6{ v15 v16 v17 v18 v19 v20 v21 v22} vd v23 v24 v25 v26 Fi Fi Fp} BC7{ v27 v28 v29 v30 v31 v32 v33 v34 v35 Fp[5]} v1 v2 v3 v4 v5 v6 FU8{ m}}


void  S7776C3 ::v39(){vfunc_called(this, "_ZN7S7776C33v39Ev");}
void  S7776C3 ::v40(){vfunc_called(this, "_ZN7S7776C33v40Ev");}
void  S7776C3 ::v41(){vfunc_called(this, "_ZN7S7776C33v41Ev");}
void  S7776C3 ::v42(){vfunc_called(this, "_ZN7S7776C33v42Ev");}
void  S7776C3 ::v43(){vfunc_called(this, "_ZN7S7776C33v43Ev");}
void  S7776C3 ::v44(){vfunc_called(this, "_ZN7S7776C33v44Ev");}
S7776C3 ::~S7776C3(){ note_dtor("S7776C3", this);} // tgen
S7776C3 ::S7776C3(){ note_ctor("S7776C3", this);} // tgen

static void Test_S7776C3()
{
  extern Class_Descriptor cd_S7776C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,27)];
    init_test(&cd_S7776C3, buf);
    S7776C3 *dp, &lv = *(dp=new (buf) S7776C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,104), "sizeof(S7776C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7776C3)");
    check_base_class_offset(lv, (S7776C4*), ABISELECT(144,72), "S7776C3");
    check_base_class_offset(lv, (S7776C5*), 0, "S7776C3");
    check_base_class_offset(lv, (S7776C8*)(S7776C7*), ABISELECT(176,88), "S7776C3");
    check_base_class_offset(lv, (S7776C7*), ABISELECT(176,88), "S7776C3");
    check_base_class_offset(lv, (S7776C9*), ABISELECT(88,44), "S7776C3");
    check_field_offset(lv, s7776c3f0, ABISELECT(136,68), "S7776C3.s7776c3f0");
    test_class_info(&lv, &cd_S7776C3);
    dp->~S7776C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C3(Test_S7776C3, "S7776C3", ABISELECT(208,104));

#else // __cplusplus

extern void _ZN7S7776C3C1Ev();
extern void _ZN7S7776C3D1Ev();
Name_Map name_map_S7776C3[] = {
  NSPAIR(_ZN7S7776C3C1Ev),
  NSPAIR(_ZN7S7776C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7776C4;
extern VTBL_ENTRY _ZTI7S7776C4[];
extern  VTBL_ENTRY _ZTV7S7776C4[];
extern Class_Descriptor cd_S7776C5;
extern VTBL_ENTRY _ZTI7S7776C5[];
extern  VTBL_ENTRY _ZTV7S7776C5[];
extern Class_Descriptor cd_S7776C8;
extern VTBL_ENTRY _ZTI7S7776C8[];
extern  VTBL_ENTRY _ZTV7S7776C8[];
extern Class_Descriptor cd_S7776C7;
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
static Base_Class bases_S7776C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7776C4,    ABISELECT(144,72), //bcp->offset
    31, //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_S7776C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7776C8,    ABISELECT(176,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7776C7,    ABISELECT(176,88), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7776C9,    ABISELECT(88,44), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7776C3[];
extern void _ZN7S7776C3D1Ev();
extern void _ZN7S7776C3D0Ev();
extern void _ZN7S7776C53v11Ev();
extern void _ZN7S7776C53v12Ev();
extern void _ZN7S7776C53v13Ev();
extern void _ZN7S7776C53v14Ev();
extern void _ZN7S7776C53v15Ev();
extern void _ZN7S7776C53v16Ev();
extern void _ZN7S7776C53v17Ev();
extern void _ZN7S7776C33v39Ev();
extern void _ZN7S7776C33v40Ev();
extern void _ZN7S7776C33v41Ev();
extern void _ZN7S7776C33v42Ev();
extern void _ZN7S7776C33v43Ev();
extern void _ZN7S7776C33v44Ev();
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN7S7776C43v10Ev();
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev)();
extern void ABISELECT(_ZThn176_N7S7776C3D1Ev,_ZThn88_N7S7776C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev)();
extern void ABISELECT(_ZThn176_N7S7776C3D0Ev,_ZThn88_N7S7776C3D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY vtc_S7776C3[] = {
  ABISELECT(176,88),
  ABISELECT(176,88),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v39Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v40Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v41Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v42Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v43Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v44Ev,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C43v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern VTBL_ENTRY _ZTV7S7776C3[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__7S7776C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
static  VTT_ENTRY vtt_S7776C3[] = {
  {&(_ZTV7S7776C3[5]),  5,65},
  {&(_ZTV7S7776C3[34]),  34,65},
  {&(_ZTV7S7776C3[51]),  51,65},
  {&(_ZTV7S7776C3[51]),  51,65},
  {&(_tg__ZTV7S7776C7__7S7776C3[11]),  11,25},
  {&(_tg__ZTV7S7776C7__7S7776C3[11]),  11,25},
};
extern VTBL_ENTRY _ZTI7S7776C3[];
extern  VTBL_ENTRY _ZTV7S7776C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C3[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7776C3D0Ev,_ZThn88_N7S7776C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7776C3D1Ev,_ZThn88_N7S7776C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7776C3 = {  "S7776C3", // class name
  bases_S7776C3, 5,
  &(vtc_S7776C3[0]), // expected_vtbl_contents
  &(vtt_S7776C3[0]), // expected_vtt_contents
  ABISELECT(208,104), // object size
  NSPAIRA(_ZTI7S7776C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7776C3),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7776C3),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7776C2  : virtual S7776C3 {
  void *s7776c2f0;
  int s7776c2f1;
  ::S21103C10 s7776c2f2;
  __tsi64 s7776c2f3:24;
  virtual void  v45(); // _ZN7S7776C23v45Ev
  virtual void  v46(); // _ZN7S7776C23v46Ev
  ~S7776C2(); // tgen
  S7776C2(); // tgen
};
//SIG(-1 S7776C2) C1{ VBC2{ VBC3{ v3 FD} BC4{ vd v4 v5 v6 v7 v8 v9 v10 FU5{ m Fl}[10]} VBC6{ VBC7{ v11 v12 v13 v14 v15 v16 v17 v18} vd v19 v20 v21 v22 Fi Fi Fp} BC8{ v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp[5]} v32 v33 v34 v35 v36 v37 FU9{ m}} v1 v2 Fp Fi FU5 FL:24}


void  S7776C2 ::v45(){vfunc_called(this, "_ZN7S7776C23v45Ev");}
void  S7776C2 ::v46(){vfunc_called(this, "_ZN7S7776C23v46Ev");}
S7776C2 ::~S7776C2(){ note_dtor("S7776C2", this);} // tgen
S7776C2 ::S7776C2(){ note_ctor("S7776C2", this);} // tgen

static void Test_S7776C2()
{
  extern Class_Descriptor cd_S7776C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,32)];
    init_test(&cd_S7776C2, buf);
    S7776C2 *dp, &lv = *(dp=new (buf) S7776C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,124), "sizeof(S7776C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7776C2)");
    check_base_class_offset(lv, (S7776C4*)(S7776C3*), ABISELECT(192,92), "S7776C2");
    check_base_class_offset(lv, (S7776C5*)(S7776C3*), ABISELECT(40,20), "S7776C2");
    check_base_class_offset(lv, (S7776C8*)(S7776C7*), 0, "S7776C2");
    check_base_class_offset(lv, (S7776C7*)(S7776C3*), ABISELECT(224,108), "S7776C2");
    check_base_class_offset(lv, (S7776C9*)(S7776C3*), ABISELECT(128,64), "S7776C2");
    check_base_class_offset(lv, (S7776C3*), ABISELECT(40,20), "S7776C2");
    check_field_offset(lv, s7776c2f0, ABISELECT(8,4), "S7776C2.s7776c2f0");
    check_field_offset(lv, s7776c2f1, ABISELECT(16,8), "S7776C2.s7776c2f1");
    check_field_offset(lv, s7776c2f2, ABISELECT(24,12), "S7776C2.s7776c2f2");
    set_bf_and_test(lv, s7776c2f3, ABISELECT(32,16), 0, 24, 1, "S7776C2");
    set_bf_and_test(lv, s7776c2f3, ABISELECT(32,16), 0, 24, hide_sll(1LL<<23), "S7776C2");
    test_class_info(&lv, &cd_S7776C2);
    dp->~S7776C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C2(Test_S7776C2, "S7776C2", ABISELECT(256,124));

#else // __cplusplus

extern void _ZN7S7776C2C1Ev();
extern void _ZN7S7776C2D1Ev();
Name_Map name_map_S7776C2[] = {
  NSPAIR(_ZN7S7776C2C1Ev),
  NSPAIR(_ZN7S7776C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7776C4;
extern VTBL_ENTRY _ZTI7S7776C4[];
extern  VTBL_ENTRY _ZTV7S7776C4[];
extern Class_Descriptor cd_S7776C5;
extern VTBL_ENTRY _ZTI7S7776C5[];
extern  VTBL_ENTRY _ZTV7S7776C5[];
extern Class_Descriptor cd_S7776C8;
extern VTBL_ENTRY _ZTI7S7776C8[];
extern  VTBL_ENTRY _ZTV7S7776C8[];
extern Class_Descriptor cd_S7776C7;
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
extern Class_Descriptor cd_S7776C3;
extern VTBL_ENTRY _ZTI7S7776C3[];
extern  VTBL_ENTRY _ZTV7S7776C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C3[];
static Base_Class bases_S7776C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7776C4,    ABISELECT(192,92), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7776C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7776C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S7776C7,    ABISELECT(224,108), //bcp->offset
    84, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7776C9,    ABISELECT(128,64), //bcp->offset
    69, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7776C3,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7776C2[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C23v45Ev();
extern void _ZN7S7776C23v46Ev();
extern void _ZN7S7776C2D1Ev();
extern void _ZN7S7776C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S7776C2D1Ev,_ZTv0_n24_N7S7776C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7776C2D1Ev,_ZThn20_N7S7776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7776C2D0Ev,_ZTv0_n24_N7S7776C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7776C2D0Ev,_ZThn20_N7S7776C2D0Ev)() __attribute__((weak));
extern void _ZN7S7776C53v11Ev();
extern void _ZN7S7776C53v12Ev();
extern void _ZN7S7776C53v13Ev();
extern void _ZN7S7776C53v14Ev();
extern void _ZN7S7776C53v15Ev();
extern void _ZN7S7776C53v16Ev();
extern void _ZN7S7776C53v17Ev();
extern void _ZN7S7776C33v39Ev();
extern void _ZN7S7776C33v40Ev();
extern void _ZN7S7776C33v41Ev();
extern void _ZN7S7776C33v42Ev();
extern void _ZN7S7776C33v43Ev();
extern void _ZN7S7776C33v44Ev();
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN7S7776C43v10Ev();
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N7S7776C2D1Ev,_ZTv0_n48_N7S7776C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7776C2D1Ev,_ZThn108_N7S7776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7776C2D0Ev,_ZTv0_n48_N7S7776C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7776C2D0Ev,_ZThn108_N7S7776C2D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY vtc_S7776C2[] = {
  0,
  ABISELECT(224,108),
  ABISELECT(192,92),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7776C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7776C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C2D0Ev,
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7776C2D1Ev,_ZTv0_n24_N7S7776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7776C2D0Ev,_ZTv0_n24_N7S7776C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v39Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v40Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v41Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v42Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v43Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v44Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  0,
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C43v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C2D1Ev,_ZTv0_n48_N7S7776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C2D0Ev,_ZTv0_n48_N7S7776C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern VTBL_ENTRY _ZTV7S7776C2[];
extern void _ZN7S7776C3D1Ev();
extern void _ZN7S7776C3D0Ev();
extern void _ZN7S7776C53v11Ev();
extern void _ZN7S7776C53v12Ev();
extern void _ZN7S7776C53v13Ev();
extern void _ZN7S7776C53v14Ev();
extern void _ZN7S7776C53v15Ev();
extern void _ZN7S7776C53v16Ev();
extern void _ZN7S7776C53v17Ev();
extern void _ZN7S7776C33v39Ev();
extern void _ZN7S7776C33v40Ev();
extern void _ZN7S7776C33v41Ev();
extern void _ZN7S7776C33v42Ev();
extern void _ZN7S7776C33v43Ev();
extern void _ZN7S7776C33v44Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C3__7S7776C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v39Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v40Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v41Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v42Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v43Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v44Ev,
};
extern void _ZN7S7776C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C4__7S7776C3__7S7776C2[] = {
  0,
  ABISELECT(-152,-72),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C43v10Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev)();
extern void ABISELECT(_ZThn184_N7S7776C3D1Ev,_ZThn88_N7S7776C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev)();
extern void ABISELECT(_ZThn184_N7S7776C3D0Ev,_ZThn88_N7S7776C3D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__7S7776C3__7S7776C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-184,-88),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-184,-88),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__7S7776C3__7S7776C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__7S7776C2[] = {
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__7S7776C7__7S7776C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,108),
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
static  VTT_ENTRY vtt_S7776C2[] = {
  {&(_ZTV7S7776C2[14]),  14,114},
  {&(_ZTV7S7776C2[54]),  54,114},
  {&(_ZTV7S7776C2[83]),  83,114},
  {&(_ZTV7S7776C2[100]),  100,114},
  {&(_ZTV7S7776C2[14]),  14,114},
  {&(_ZTV7S7776C2[71]),  71,114},
  {&(_tg__ZTV7S7776C3__7S7776C2[5]),  5,20},
  {&(_tg__ZTV7S7776C4__7S7776C3__7S7776C2[3]),  3,4},
  {&(_tg__ZTV7S7776C7__7S7776C3__7S7776C2[16]),  16,30},
  {&(_tg__ZTV7S7776C8__7S7776C3__7S7776C2[10]),  10,18},
  {&(_tg__ZTV7S7776C7__7S7776C2[11]),  11,25},
  {&(_tg__ZTV7S7776C8__7S7776C7__7S7776C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7776C2[];
extern  VTBL_ENTRY _ZTV7S7776C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C2[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S7776C3D0Ev,_ZThn88_N7S7776C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S7776C3D1Ev,_ZThn88_N7S7776C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C2D0Ev,_ZTv0_n48_N7S7776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7776C2D0Ev,_ZThn108_N7S7776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C2D1Ev,_ZTv0_n48_N7S7776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7776C2D1Ev,_ZThn108_N7S7776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7776C2D0Ev,_ZTv0_n24_N7S7776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7776C2D0Ev,_ZThn20_N7S7776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7776C2D1Ev,_ZTv0_n24_N7S7776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7776C2D1Ev,_ZThn20_N7S7776C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7776C2 = {  "S7776C2", // class name
  bases_S7776C2, 6,
  &(vtc_S7776C2[0]), // expected_vtbl_contents
  &(vtt_S7776C2[0]), // expected_vtt_contents
  ABISELECT(256,124), // object size
  NSPAIRA(_ZTI7S7776C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7776C2),114, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7776C2),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7776C12  : virtual S7776C7 , S7776C9 {
  int s7776c12f0;
  long double s7776c12f1;
  virtual void  v47(); // _ZN8S7776C123v47Ev
  virtual void  v48(); // _ZN8S7776C123v48Ev
  virtual void  v49(); // _ZN8S7776C123v49Ev
  virtual void  v50(); // _ZN8S7776C123v50Ev
  virtual void  v51(); // _ZN8S7776C123v51Ev
  ~S7776C12(); // tgen
  S7776C12(); // tgen
};
//SIG(-1 S7776C12) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13} vd v14 v15 v16 v17 Fi[2] Fp} BC4{ v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[5]} v1 v2 v3 v4 v5 Fi FD}


void  S7776C12 ::v47(){vfunc_called(this, "_ZN8S7776C123v47Ev");}
void  S7776C12 ::v48(){vfunc_called(this, "_ZN8S7776C123v48Ev");}
void  S7776C12 ::v49(){vfunc_called(this, "_ZN8S7776C123v49Ev");}
void  S7776C12 ::v50(){vfunc_called(this, "_ZN8S7776C123v50Ev");}
void  S7776C12 ::v51(){vfunc_called(this, "_ZN8S7776C123v51Ev");}
S7776C12 ::~S7776C12(){ note_dtor("S7776C12", this);} // tgen
S7776C12 ::S7776C12(){ note_ctor("S7776C12", this);} // tgen

static void Test_S7776C12()
{
  extern Class_Descriptor cd_S7776C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S7776C12, buf);
    S7776C12 *dp, &lv = *(dp=new (buf) S7776C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7776C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7776C12)");
    check_base_class_offset(lv, (S7776C8*)(S7776C7*), ABISELECT(80,40), "S7776C12");
    check_base_class_offset(lv, (S7776C7*), ABISELECT(80,40), "S7776C12");
    check_base_class_offset(lv, (S7776C9*), 0, "S7776C12");
    check_field_offset(lv, s7776c12f0, ABISELECT(48,24), "S7776C12.s7776c12f0");
    check_field_offset(lv, s7776c12f1, ABISELECT(64,28), "S7776C12.s7776c12f1");
    test_class_info(&lv, &cd_S7776C12);
    dp->~S7776C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C12(Test_S7776C12, "S7776C12", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S7776C12C1Ev();
extern void _ZN8S7776C12D1Ev();
Name_Map name_map_S7776C12[] = {
  NSPAIR(_ZN8S7776C12C1Ev),
  NSPAIR(_ZN8S7776C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7776C8;
extern VTBL_ENTRY _ZTI7S7776C8[];
extern  VTBL_ENTRY _ZTV7S7776C8[];
extern Class_Descriptor cd_S7776C7;
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
static Base_Class bases_S7776C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7776C8,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S7776C7,    ABISELECT(80,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    16, //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},
  {&cd_S7776C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S7776C12[];
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C123v47Ev();
extern void _ZN8S7776C123v48Ev();
extern void _ZN8S7776C123v49Ev();
extern void _ZN8S7776C123v50Ev();
extern void _ZN8S7776C123v51Ev();
extern void _ZN8S7776C12D1Ev();
extern void _ZN8S7776C12D0Ev();
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev)();
extern void ABISELECT(_ZThn80_N8S7776C12D1Ev,_ZThn40_N8S7776C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev)();
extern void ABISELECT(_ZThn80_N8S7776C12D0Ev,_ZThn40_N8S7776C12D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY vtc_S7776C12[] = {
  ABISELECT(80,40),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v51Ev,
  (VTBL_ENTRY)&_ZN8S7776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7776C12D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S7776C12[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__8S7776C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
static  VTT_ENTRY vtt_S7776C12[] = {
  {&(_ZTV8S7776C12[4]),  4,50},
  {&(_ZTV8S7776C12[36]),  36,50},
  {&(_ZTV8S7776C12[36]),  36,50},
  {&(_tg__ZTV7S7776C7__8S7776C12[11]),  11,25},
  {&(_tg__ZTV7S7776C7__8S7776C12[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S7776C12[];
extern  VTBL_ENTRY _ZTV8S7776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7776C12[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7776C12D0Ev,_ZThn40_N8S7776C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7776C12D1Ev,_ZThn40_N8S7776C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7776C12 = {  "S7776C12", // class name
  bases_S7776C12, 3,
  &(vtc_S7776C12[0]), // expected_vtbl_contents
  &(vtt_S7776C12[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S7776C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7776C12),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7776C12),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7776C11  : S7776C9 , S7776C7 , S7776C12 {
  int s7776c11f0;
  virtual  ~S7776C11(); // _ZN8S7776C11D2Ev
  virtual void  v52(); // _ZN8S7776C113v52Ev
  virtual void  v53(); // _ZN8S7776C113v53Ev
  virtual void  v54(); // _ZN8S7776C113v54Ev
  virtual void  v55(); // _ZN8S7776C113v55Ev
  virtual void  v56(); // _ZN8S7776C113v56Ev
  virtual void  v57(); // _ZN8S7776C113v57Ev
  virtual void  v58(); // _ZN8S7776C113v58Ev
  virtual void  v59(); // _ZN8S7776C113v59Ev
  S7776C11(); // tgen
};
//SIG(-1 S7776C11) C1{ BC2{ v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5]} BC3{ VBC4{ v18 v19 v20 v21 v22 v23 v24 v25} vd v26 v27 v28 v29 Fi[2] Fp} BC5{ VBC3 BC2 v30 v31 v32 v33 v34 Fi FD} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi}


 S7776C11 ::~S7776C11(){ note_dtor("S7776C11", this);}
void  S7776C11 ::v52(){vfunc_called(this, "_ZN8S7776C113v52Ev");}
void  S7776C11 ::v53(){vfunc_called(this, "_ZN8S7776C113v53Ev");}
void  S7776C11 ::v54(){vfunc_called(this, "_ZN8S7776C113v54Ev");}
void  S7776C11 ::v55(){vfunc_called(this, "_ZN8S7776C113v55Ev");}
void  S7776C11 ::v56(){vfunc_called(this, "_ZN8S7776C113v56Ev");}
void  S7776C11 ::v57(){vfunc_called(this, "_ZN8S7776C113v57Ev");}
void  S7776C11 ::v58(){vfunc_called(this, "_ZN8S7776C113v58Ev");}
void  S7776C11 ::v59(){vfunc_called(this, "_ZN8S7776C113v59Ev");}
S7776C11 ::S7776C11(){ note_ctor("S7776C11", this);} // tgen

static void Test_S7776C11()
{
  extern Class_Descriptor cd_S7776C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,26)];
    init_test(&cd_S7776C11, buf);
    S7776C11 *dp, &lv = *(dp=new (buf) S7776C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S7776C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7776C11)");
    /*is_ambiguous_... S7776C11::S7776C9 */ AMB_check_base_class_offset(lv, (S7776C9*), 0, "S7776C11");
    /*is_ambiguous_... S7776C11::S7776C7 */ AMB_check_base_class_offset(lv, (S7776C8*)(S7776C7*), ABISELECT(48,24), "S7776C11");
    /*is_ambiguous_... S7776C11::S7776C7 */ AMB_check_base_class_offset(lv, (S7776C8*)(S7776C7*), ABISELECT(48,24), "S7776C11");
    /*is_ambiguous_... S7776C11::S7776C7 */ AMB_check_base_class_offset(lv, (S7776C7*), ABISELECT(48,24), "S7776C11");
    check_base_class_offset(lv, (S7776C7*)(S7776C12*), ABISELECT(168,84), "S7776C11");
    check_base_class_offset(lv, (S7776C9*)(S7776C12*), ABISELECT(80,40), "S7776C11");
    check_base_class_offset(lv, (S7776C12*), ABISELECT(80,40), "S7776C11");
    check_field_offset(lv, s7776c11f0, ABISELECT(160,80), "S7776C11.s7776c11f0");
    test_class_info(&lv, &cd_S7776C11);
    dp->~S7776C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C11(Test_S7776C11, "S7776C11", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN8S7776C11C1Ev();
extern void _ZN8S7776C11D2Ev();
Name_Map name_map_S7776C11[] = {
  NSPAIR(_ZN8S7776C11C1Ev),
  NSPAIR(_ZN8S7776C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
extern Class_Descriptor cd_S7776C8;
extern VTBL_ENTRY _ZTI7S7776C8[];
extern  VTBL_ENTRY _ZTV7S7776C8[];
extern Class_Descriptor cd_S7776C7;
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
extern Class_Descriptor cd_S7776C7;
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
extern Class_Descriptor cd_S7776C12;
extern VTBL_ENTRY _ZTI8S7776C12[];
extern  VTBL_ENTRY _ZTV8S7776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7776C12[];
static Base_Class bases_S7776C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7776C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7776C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7776C7,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7776C7,    ABISELECT(168,84), //bcp->offset
    68, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7776C9,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7776C12,    ABISELECT(80,40), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7776C11[];
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C11D1Ev();
extern void _ZN8S7776C11D0Ev();
extern void _ZN8S7776C113v52Ev();
extern void _ZN8S7776C113v53Ev();
extern void _ZN8S7776C113v54Ev();
extern void _ZN8S7776C113v55Ev();
extern void _ZN8S7776C113v56Ev();
extern void _ZN8S7776C113v57Ev();
extern void _ZN8S7776C113v58Ev();
extern void _ZN8S7776C113v59Ev();
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZThn48_N8S7776C11D1Ev,_ZThn24_N8S7776C11D1Ev)();
extern void ABISELECT(_ZThn48_N8S7776C11D0Ev,_ZThn24_N8S7776C11D0Ev)();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C123v47Ev();
extern void _ZN8S7776C123v48Ev();
extern void _ZN8S7776C123v49Ev();
extern void _ZN8S7776C123v50Ev();
extern void _ZN8S7776C123v51Ev();
extern void ABISELECT(_ZThn80_N8S7776C11D1Ev,_ZThn40_N8S7776C11D1Ev)();
extern void ABISELECT(_ZThn80_N8S7776C11D0Ev,_ZThn40_N8S7776C11D0Ev)();
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N8S7776C11D1Ev,_ZTv0_n48_N8S7776C11D1Ev)();
extern void ABISELECT(_ZThn168_N8S7776C11D1Ev,_ZThn84_N8S7776C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7776C11D0Ev,_ZTv0_n48_N8S7776C11D0Ev)();
extern void ABISELECT(_ZThn168_N8S7776C11D0Ev,_ZThn84_N8S7776C11D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY vtc_S7776C11[] = {
  ABISELECT(168,84),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7776C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v52Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v53Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v54Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v55Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v56Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v57Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v58Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v59Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S7776C11D1Ev,_ZThn24_N8S7776C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S7776C11D0Ev,_ZThn24_N8S7776C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v51Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7776C11D1Ev,_ZThn40_N8S7776C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7776C11D0Ev,_ZThn40_N8S7776C11D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-168,-84),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C11D1Ev,_ZTv0_n48_N8S7776C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C11D0Ev,_ZTv0_n48_N8S7776C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S7776C11[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__A__8S7776C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C123v47Ev();
extern void _ZN8S7776C123v48Ev();
extern void _ZN8S7776C123v49Ev();
extern void _ZN8S7776C123v50Ev();
extern void _ZN8S7776C123v51Ev();
extern void _ZN8S7776C12D1Ev();
extern void _ZN8S7776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7776C12__8S7776C11[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v51Ev,
  (VTBL_ENTRY)&_ZN8S7776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7776C12D0Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev)();
extern void ABISELECT(_ZThn88_N8S7776C12D1Ev,_ZThn44_N8S7776C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev)();
extern void ABISELECT(_ZThn88_N8S7776C12D0Ev,_ZThn44_N8S7776C12D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__8S7776C12__8S7776C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__8S7776C12__8S7776C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__A1__8S7776C11[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__7S7776C7__A1__8S7776C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
static  VTT_ENTRY vtt_S7776C11[] = {
  {&(_ZTV8S7776C11[4]),  4,98},
  {&(_tg__ZTV7S7776C7__A__8S7776C11[11]),  11,25},
  {&(_tg__ZTV7S7776C7__A__8S7776C11[11]),  11,25},
  {&(_tg__ZTV8S7776C12__8S7776C11[4]),  4,20},
  {&(_tg__ZTV7S7776C7__8S7776C12__8S7776C11[16]),  16,30},
  {&(_tg__ZTV7S7776C8__8S7776C12__8S7776C11[10]),  10,18},
  {&(_ZTV8S7776C11[34]),  34,98},
  {&(_ZTV8S7776C11[34]),  34,98},
  {&(_ZTV8S7776C11[52]),  52,98},
  {&(_ZTV8S7776C11[84]),  84,98},
  {&(_tg__ZTV7S7776C7__A1__8S7776C11[11]),  11,25},
  {&(_tg__ZTV7S7776C8__7S7776C7__A1__8S7776C11[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S7776C11[];
extern  VTBL_ENTRY _ZTV8S7776C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7776C11[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7776C12D0Ev,_ZThn44_N8S7776C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7776C12D1Ev,_ZThn44_N8S7776C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C11D0Ev,_ZTv0_n48_N8S7776C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7776C11D0Ev,_ZThn84_N8S7776C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C11D1Ev,_ZTv0_n48_N8S7776C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7776C11D1Ev,_ZThn84_N8S7776C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7776C11 = {  "S7776C11", // class name
  bases_S7776C11, 6,
  &(vtc_S7776C11[0]), // expected_vtbl_contents
  &(vtt_S7776C11[0]), // expected_vtt_contents
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI8S7776C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7776C11),98, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7776C11),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7776C1  : S7776C2 , S7776C11 {
  virtual  ~S7776C1(); // _ZN7S7776C1D2Ev
  virtual void  v1(); // _ZN7S7776C12v1Ev
  virtual void  v2(); // _ZN7S7776C12v2Ev
  virtual void  v3(); // _ZN7S7776C12v3Ev
  virtual void  v4(); // _ZN7S7776C12v4Ev
  virtual void  v5(); // _ZN7S7776C12v5Ev
  virtual void  v6(); // _ZN7S7776C12v6Ev
  virtual void  v7(); // _ZN7S7776C12v7Ev
  virtual void  v8(); // _ZN7S7776C12v8Ev
  virtual void  v9(); // _ZN7S7776C12v9Ev
  S7776C1(); // tgen
};
//SIG(1 S7776C1) C1{ BC2{ VBC3{ VBC4{ v10 FD} BC5{ vd v11 v12 v13 v14 v15 v16 v17 FU6{ m Fl}[10]} VBC7{ VBC8{ v18 v19 v20 v21 v22 v23 v24 v25} vd v26 v27 v28 v29 Fi Fi Fp} BC9{ v30 v31 v32 v33 v34 v35 v36 v37 v38 Fp[5]} v39 v40 v41 v42 v43 v44 FU10{ m}} v45 v46 Fp Fi FU6 FL:24} BC11{ BC9 BC7 BC12{ VBC7 BC9 v47 v48 v49 v50 v51 Fi FD} vd v52 v53 v54 v55 v56 v57 v58 v59 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S7776C1 ::~S7776C1(){ note_dtor("S7776C1", this);}
void  S7776C1 ::v1(){vfunc_called(this, "_ZN7S7776C12v1Ev");}
void  S7776C1 ::v2(){vfunc_called(this, "_ZN7S7776C12v2Ev");}
void  S7776C1 ::v3(){vfunc_called(this, "_ZN7S7776C12v3Ev");}
void  S7776C1 ::v4(){vfunc_called(this, "_ZN7S7776C12v4Ev");}
void  S7776C1 ::v5(){vfunc_called(this, "_ZN7S7776C12v5Ev");}
void  S7776C1 ::v6(){vfunc_called(this, "_ZN7S7776C12v6Ev");}
void  S7776C1 ::v7(){vfunc_called(this, "_ZN7S7776C12v7Ev");}
void  S7776C1 ::v8(){vfunc_called(this, "_ZN7S7776C12v8Ev");}
void  S7776C1 ::v9(){vfunc_called(this, "_ZN7S7776C12v9Ev");}
S7776C1 ::S7776C1(){ note_ctor("S7776C1", this);} // tgen

static void Test_S7776C1()
{
  extern Class_Descriptor cd_S7776C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,53)];
    init_test(&cd_S7776C1, buf);
    S7776C1 *dp, &lv = *(dp=new (buf) S7776C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,208), "sizeof(S7776C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7776C1)");
    check_base_class_offset(lv, (S7776C4*)(S7776C3*), ABISELECT(368,176), "S7776C1");
    check_base_class_offset(lv, (S7776C5*)(S7776C3*), ABISELECT(216,104), "S7776C1");
    /*is_ambiguous_... S7776C1::S7776C7 */ AMB_check_base_class_offset(lv, (S7776C8*)(S7776C7*), 0, "S7776C1");
    /*is_ambiguous_... S7776C11::S7776C7 */ AMB_check_base_class_offset(lv, (S7776C8*)(S7776C7*)(S7776C11*), 0, "S7776C1");
    check_base_class_offset(lv, (S7776C7*)(S7776C3*), ABISELECT(400,192), "S7776C1");
    check_base_class_offset(lv, (S7776C7*)(S7776C12*)(S7776C11*), ABISELECT(400,192), "S7776C1");
    check_base_class_offset(lv, (S7776C9*)(S7776C3*), ABISELECT(304,148), "S7776C1");
    check_base_class_offset(lv, (S7776C3*)(S7776C2*), ABISELECT(216,104), "S7776C1");
    check_base_class_offset(lv, (S7776C2*), 0, "S7776C1");
    /*is_ambiguous_... S7776C11::S7776C9 */ AMB_check_base_class_offset(lv, (S7776C9*)(S7776C11*), ABISELECT(48,20), "S7776C1");
    /*is_ambiguous_... S7776C11::S7776C7 */ AMB_check_base_class_offset(lv, (S7776C7*)(S7776C11*), ABISELECT(96,44), "S7776C1");
    check_base_class_offset(lv, (S7776C9*)(S7776C12*)(S7776C11*), ABISELECT(128,60), "S7776C1");
    check_base_class_offset(lv, (S7776C12*)(S7776C11*), ABISELECT(128,60), "S7776C1");
    check_base_class_offset(lv, (S7776C11*), ABISELECT(48,20), "S7776C1");
    test_class_info(&lv, &cd_S7776C1);
    dp->~S7776C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7776C1(Test_S7776C1, "S7776C1", ABISELECT(432,208));

#else // __cplusplus

extern void _ZN7S7776C1C1Ev();
extern void _ZN7S7776C1D2Ev();
Name_Map name_map_S7776C1[] = {
  NSPAIR(_ZN7S7776C1C1Ev),
  NSPAIR(_ZN7S7776C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7776C4;
extern VTBL_ENTRY _ZTI7S7776C4[];
extern  VTBL_ENTRY _ZTV7S7776C4[];
extern Class_Descriptor cd_S7776C5;
extern VTBL_ENTRY _ZTI7S7776C5[];
extern  VTBL_ENTRY _ZTV7S7776C5[];
extern Class_Descriptor cd_S7776C8;
extern VTBL_ENTRY _ZTI7S7776C8[];
extern  VTBL_ENTRY _ZTV7S7776C8[];
extern Class_Descriptor cd_S7776C7;
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
extern Class_Descriptor cd_S7776C3;
extern VTBL_ENTRY _ZTI7S7776C3[];
extern  VTBL_ENTRY _ZTV7S7776C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C3[];
extern Class_Descriptor cd_S7776C2;
extern VTBL_ENTRY _ZTI7S7776C2[];
extern  VTBL_ENTRY _ZTV7S7776C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C2[];
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
extern Class_Descriptor cd_S7776C7;
extern VTBL_ENTRY _ZTI7S7776C7[];
extern  VTBL_ENTRY _ZTV7S7776C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C7[];
extern Class_Descriptor cd_S7776C9;
extern VTBL_ENTRY _ZTI7S7776C9[];
extern  VTBL_ENTRY _ZTV7S7776C9[];
extern Class_Descriptor cd_S7776C12;
extern VTBL_ENTRY _ZTI8S7776C12[];
extern  VTBL_ENTRY _ZTV8S7776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7776C12[];
extern Class_Descriptor cd_S7776C11;
extern VTBL_ENTRY _ZTI8S7776C11[];
extern  VTBL_ENTRY _ZTV8S7776C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7776C11[];
static Base_Class bases_S7776C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7776C4,    ABISELECT(368,176), //bcp->offset
    157, //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
    5, //immediately_derived
  0, 1},
  {&cd_S7776C5,    ABISELECT(216,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7776C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7776C7,    ABISELECT(400,192), //bcp->offset
    161, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7776C9,    ABISELECT(304,148), //bcp->offset
    146, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7776C3,    ABISELECT(216,104), //bcp->offset
    103, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7776C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    14, //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_S7776C9,    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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7776C7,    ABISELECT(96,44), //bcp->offset
    58, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7776C9,    ABISELECT(128,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7776C12,    ABISELECT(128,60), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7776C11,    ABISELECT(48,20), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7776C1[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C23v45Ev();
extern void _ZN7S7776C23v46Ev();
extern void _ZN7S7776C1D1Ev();
extern void _ZN7S7776C1D0Ev();
extern void _ZN7S7776C12v1Ev();
extern void _ZN7S7776C12v2Ev();
extern void _ZN7S7776C12v3Ev();
extern void _ZN7S7776C12v4Ev();
extern void _ZN7S7776C12v5Ev();
extern void _ZN7S7776C12v6Ev();
extern void _ZN7S7776C12v7Ev();
extern void _ZN7S7776C12v8Ev();
extern void _ZN7S7776C12v9Ev();
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void ABISELECT(_ZThn48_N7S7776C1D1Ev,_ZThn20_N7S7776C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7776C1D0Ev,_ZThn20_N7S7776C1D0Ev)();
extern void _ZN8S7776C113v52Ev();
extern void _ZN8S7776C113v53Ev();
extern void _ZN8S7776C113v54Ev();
extern void _ZN8S7776C113v55Ev();
extern void _ZN8S7776C113v56Ev();
extern void _ZN8S7776C113v57Ev();
extern void _ZN8S7776C113v58Ev();
extern void _ZN8S7776C113v59Ev();
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZThn96_N7S7776C1D1Ev,_ZThn44_N7S7776C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S7776C1D0Ev,_ZThn44_N7S7776C1D0Ev)();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C123v47Ev();
extern void _ZN8S7776C123v48Ev();
extern void _ZN8S7776C123v49Ev();
extern void _ZN8S7776C123v50Ev();
extern void _ZN8S7776C123v51Ev();
extern void ABISELECT(_ZThn128_N7S7776C1D1Ev,_ZThn60_N7S7776C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7776C1D0Ev,_ZThn60_N7S7776C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7776C1D1Ev,_ZTv0_n24_N7S7776C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S7776C1D1Ev,_ZThn104_N7S7776C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7776C1D0Ev,_ZTv0_n24_N7S7776C1D0Ev)();
extern void ABISELECT(_ZThn216_N7S7776C1D0Ev,_ZThn104_N7S7776C1D0Ev)() __attribute__((weak));
extern void _ZN7S7776C53v11Ev();
extern void _ZN7S7776C53v12Ev();
extern void _ZN7S7776C53v13Ev();
extern void _ZN7S7776C53v14Ev();
extern void _ZN7S7776C53v15Ev();
extern void _ZN7S7776C53v16Ev();
extern void _ZN7S7776C53v17Ev();
extern void _ZN7S7776C33v39Ev();
extern void _ZN7S7776C33v40Ev();
extern void _ZN7S7776C33v41Ev();
extern void _ZN7S7776C33v42Ev();
extern void _ZN7S7776C33v43Ev();
extern void _ZN7S7776C33v44Ev();
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN7S7776C43v10Ev();
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N7S7776C1D1Ev,_ZTv0_n48_N7S7776C1D1Ev)();
extern void ABISELECT(_ZThn400_N7S7776C1D1Ev,_ZThn192_N7S7776C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7776C1D0Ev,_ZTv0_n48_N7S7776C1D0Ev)();
extern void ABISELECT(_ZThn400_N7S7776C1D0Ev,_ZThn192_N7S7776C1D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY vtc_S7776C1[] = {
  0,
  ABISELECT(400,192),
  ABISELECT(368,176),
  ABISELECT(216,104),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7776C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7776C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v8Ev,
  (VTBL_ENTRY)&_ZN7S7776C12v9Ev,
  ABISELECT(352,172),
  ABISELECT(-48,-20),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7776C1D1Ev,_ZThn20_N7S7776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7776C1D0Ev,_ZThn20_N7S7776C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7776C113v52Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v53Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v54Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v55Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v56Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v57Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v58Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v59Ev,
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S7776C1D1Ev,_ZThn44_N7S7776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S7776C1D0Ev,_ZThn44_N7S7776C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
  ABISELECT(-128,-60),
  ABISELECT(272,132),
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v51Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7776C1D1Ev,_ZThn60_N7S7776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7776C1D0Ev,_ZThn60_N7S7776C1D0Ev),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-104),
  ABISELECT(-216,-104),
  ABISELECT(184,88),
  ABISELECT(152,72),
  ABISELECT(-216,-104),
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7776C1D1Ev,_ZTv0_n24_N7S7776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7776C1D0Ev,_ZTv0_n24_N7S7776C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v39Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v40Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v41Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v42Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v43Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v44Ev,
  ABISELECT(-304,-148),
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  0,
  ABISELECT(-368,-176),
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&_ZN7S7776C43v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  (VTBL_ENTRY)&(_ZTI7S7776C1[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C1D1Ev,_ZTv0_n48_N7S7776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C1D0Ev,_ZTv0_n48_N7S7776C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern VTBL_ENTRY _ZTV7S7776C1[];
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C23v45Ev();
extern void _ZN7S7776C23v46Ev();
extern void _ZN7S7776C2D1Ev();
extern void _ZN7S7776C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C2__7S7776C1[] = {
  0,
  ABISELECT(400,192),
  ABISELECT(368,176),
  ABISELECT(216,104),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7776C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7776C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7776C2D1Ev,_ZTv0_n24_N7S7776C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S7776C2D1Ev,_ZThn104_N7S7776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7776C2D0Ev,_ZTv0_n24_N7S7776C2D0Ev)();
extern void ABISELECT(_ZThn216_N7S7776C2D0Ev,_ZThn104_N7S7776C2D0Ev)() __attribute__((weak));
extern void _ZN7S7776C53v11Ev();
extern void _ZN7S7776C53v12Ev();
extern void _ZN7S7776C53v13Ev();
extern void _ZN7S7776C53v14Ev();
extern void _ZN7S7776C53v15Ev();
extern void _ZN7S7776C53v16Ev();
extern void _ZN7S7776C53v17Ev();
extern void _ZN7S7776C33v39Ev();
extern void _ZN7S7776C33v40Ev();
extern void _ZN7S7776C33v41Ev();
extern void _ZN7S7776C33v42Ev();
extern void _ZN7S7776C33v43Ev();
extern void _ZN7S7776C33v44Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C3__7S7776C2__7S7776C1[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-104),
  ABISELECT(-216,-104),
  ABISELECT(184,88),
  ABISELECT(152,72),
  ABISELECT(-216,-104),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7776C2D1Ev,_ZTv0_n24_N7S7776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7776C2D0Ev,_ZTv0_n24_N7S7776C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v39Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v40Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v41Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v42Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v43Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v44Ev,
};
extern void _ZN7S7776C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C4__7S7776C2__7S7776C1[] = {
  0,
  ABISELECT(-368,-176),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C43v10Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N7S7776C2D1Ev,_ZTv0_n48_N7S7776C2D1Ev)();
extern void ABISELECT(_ZThn400_N7S7776C2D1Ev,_ZThn192_N7S7776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7776C2D0Ev,_ZTv0_n48_N7S7776C2D0Ev)();
extern void ABISELECT(_ZThn400_N7S7776C2D0Ev,_ZThn192_N7S7776C2D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__7S7776C2__7S7776C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C2D1Ev,_ZTv0_n48_N7S7776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C2D0Ev,_ZTv0_n48_N7S7776C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C97S7776C3__7S7776C2__7S7776C1[] = {
  ABISELECT(-304,-148),
  (VTBL_ENTRY)&(_ZTI7S7776C2[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
};
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C11D1Ev();
extern void _ZN8S7776C11D0Ev();
extern void _ZN8S7776C113v52Ev();
extern void _ZN8S7776C113v53Ev();
extern void _ZN8S7776C113v54Ev();
extern void _ZN8S7776C113v55Ev();
extern void _ZN8S7776C113v56Ev();
extern void _ZN8S7776C113v57Ev();
extern void _ZN8S7776C113v58Ev();
extern void _ZN8S7776C113v59Ev();
static  VTBL_ENTRY _tg__ZTV8S7776C11__7S7776C1[] = {
  ABISELECT(352,172),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7776C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v52Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v53Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v54Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v55Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v56Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v57Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v58Ev,
  (VTBL_ENTRY)&_ZN8S7776C113v59Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C78S7776C11__A1__7S7776C1[] = {
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__7S7776C78S7776C11__A1__7S7776C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,44),
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C123v47Ev();
extern void _ZN8S7776C123v48Ev();
extern void _ZN8S7776C123v49Ev();
extern void _ZN8S7776C123v50Ev();
extern void _ZN8S7776C123v51Ev();
extern void _ZN8S7776C12D1Ev();
extern void _ZN8S7776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7776C128S7776C11__7S7776C1[] = {
  ABISELECT(-128,-60),
  ABISELECT(272,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v51Ev,
  (VTBL_ENTRY)&_ZN8S7776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7776C12D0Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev)();
extern void ABISELECT(_ZThn272_N8S7776C12D1Ev,_ZThn132_N8S7776C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev)();
extern void ABISELECT(_ZThn272_N8S7776C12D0Ev,_ZThn132_N8S7776C12D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__8S7776C128S7776C11__7S7776C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-272,-132),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-272,-132),
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__8S7776C128S7776C11__7S7776C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,60),
  (VTBL_ENTRY)&(_ZTI8S7776C12[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZThn48_N8S7776C11D1Ev,_ZThn24_N8S7776C11D1Ev)();
extern void ABISELECT(_ZThn48_N8S7776C11D0Ev,_ZThn24_N8S7776C11D0Ev)();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__A__8S7776C11__7S7776C1[] = {
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S7776C11D1Ev,_ZThn24_N8S7776C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S7776C11D0Ev,_ZThn24_N8S7776C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__8S7776C11__7S7776C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
extern void _ZN7S7776C93v30Ev();
extern void _ZN7S7776C93v31Ev();
extern void _ZN7S7776C93v32Ev();
extern void _ZN7S7776C93v33Ev();
extern void _ZN7S7776C93v34Ev();
extern void _ZN7S7776C93v35Ev();
extern void _ZN7S7776C93v36Ev();
extern void _ZN7S7776C93v37Ev();
extern void _ZN7S7776C93v38Ev();
extern void _ZN8S7776C123v47Ev();
extern void _ZN8S7776C123v48Ev();
extern void _ZN8S7776C123v49Ev();
extern void _ZN8S7776C123v50Ev();
extern void _ZN8S7776C123v51Ev();
extern void ABISELECT(_ZThn80_N8S7776C11D1Ev,_ZThn40_N8S7776C11D1Ev)();
extern void ABISELECT(_ZThn80_N8S7776C11D0Ev,_ZThn40_N8S7776C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7776C12__8S7776C11__7S7776C1[] = {
  ABISELECT(-128,-60),
  ABISELECT(272,132),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7776C93v38Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v47Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v48Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7776C123v51Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7776C11D1Ev,_ZThn40_N8S7776C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7776C11D0Ev,_ZThn40_N8S7776C11D0Ev),
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N8S7776C11D1Ev,_ZTv0_n48_N8S7776C11D1Ev)();
extern void ABISELECT(_ZThn352_N8S7776C11D1Ev,_ZThn172_N8S7776C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7776C11D0Ev,_ZTv0_n48_N8S7776C11D0Ev)();
extern void ABISELECT(_ZThn352_N8S7776C11D0Ev,_ZThn172_N8S7776C11D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__A1__8S7776C11__7S7776C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-352,-172),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-352,-172),
  (VTBL_ENTRY)&(_ZTI8S7776C11[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C11D1Ev,_ZTv0_n48_N8S7776C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7776C11D0Ev,_ZTv0_n48_N8S7776C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C3D1Ev();
extern void _ZN7S7776C3D0Ev();
extern void _ZN7S7776C53v11Ev();
extern void _ZN7S7776C53v12Ev();
extern void _ZN7S7776C53v13Ev();
extern void _ZN7S7776C53v14Ev();
extern void _ZN7S7776C53v15Ev();
extern void _ZN7S7776C53v16Ev();
extern void _ZN7S7776C53v17Ev();
extern void _ZN7S7776C33v39Ev();
extern void _ZN7S7776C33v40Ev();
extern void _ZN7S7776C33v41Ev();
extern void _ZN7S7776C33v42Ev();
extern void _ZN7S7776C33v43Ev();
extern void _ZN7S7776C33v44Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C3__7S7776C1[] = {
  ABISELECT(-216,-104),
  ABISELECT(184,88),
  ABISELECT(152,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7776C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v39Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v40Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v41Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v42Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v43Ev,
  (VTBL_ENTRY)&_ZN7S7776C33v44Ev,
};
extern void _ZN7S7776C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C4__7S7776C3__7S7776C1[] = {
  0,
  ABISELECT(-152,-72),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C43v10Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev)();
extern void ABISELECT(_ZThn184_N7S7776C3D1Ev,_ZThn88_N7S7776C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev)();
extern void ABISELECT(_ZThn184_N7S7776C3D0Ev,_ZThn88_N7S7776C3D0Ev)() __attribute__((weak));
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__7S7776C3__7S7776C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-184,-88),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-184,-88),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__7S7776C3__7S7776C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(216,104),
  (VTBL_ENTRY)&(_ZTI7S7776C3[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
extern void _ZN7S7776C7D1Ev();
extern void _ZN7S7776C7D0Ev();
extern void _ZN7S7776C73v26Ev();
extern void _ZN7S7776C73v27Ev();
extern void _ZN7S7776C73v28Ev();
extern void _ZN7S7776C73v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C7__7S7776C1[] = {
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  ABISELECT(-400,-192),
  0,
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7776C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7776C73v29Ev,
};
extern void _ZN7S7776C83v18Ev();
extern void _ZN7S7776C83v19Ev();
extern void _ZN7S7776C83v20Ev();
extern void _ZN7S7776C83v21Ev();
extern void _ZN7S7776C83v22Ev();
extern void _ZN7S7776C83v23Ev();
extern void _ZN7S7776C83v24Ev();
extern void _ZN7S7776C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7776C8__7S7776C7__7S7776C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(400,192),
  (VTBL_ENTRY)&(_ZTI7S7776C7[0]),
  (VTBL_ENTRY)&_ZN7S7776C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v20Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v21Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7776C83v25Ev,
};
static  VTT_ENTRY vtt_S7776C1[] = {
  {&(_ZTV7S7776C1[14]),  14,191},
  {&(_tg__ZTV7S7776C2__7S7776C1[14]),  14,26},
  {&(_tg__ZTV7S7776C3__7S7776C2__7S7776C1[28]),  28,43},
  {&(_tg__ZTV7S7776C4__7S7776C2__7S7776C1[3]),  3,4},
  {&(_tg__ZTV7S7776C7__7S7776C2__7S7776C1[16]),  16,30},
  {&(_tg__ZTV7S7776C2__7S7776C1[14]),  14,26},
  {&(_tg__ZTV7S7776C97S7776C3__7S7776C2__7S7776C1[2]),  2,11},
  {&(_tg__ZTV8S7776C11__7S7776C1[4]),  4,23},
  {&(_tg__ZTV7S7776C78S7776C11__A1__7S7776C1[11]),  11,25},
  {&(_tg__ZTV7S7776C8__7S7776C78S7776C11__A1__7S7776C1[10]),  10,18},
  {&(_tg__ZTV8S7776C128S7776C11__7S7776C1[4]),  4,20},
  {&(_tg__ZTV7S7776C7__8S7776C128S7776C11__7S7776C1[16]),  16,30},
  {&(_tg__ZTV7S7776C8__8S7776C128S7776C11__7S7776C1[10]),  10,18},
  {&(_tg__ZTV7S7776C7__A__8S7776C11__7S7776C1[11]),  11,25},
  {&(_tg__ZTV7S7776C8__8S7776C11__7S7776C1[10]),  10,18},
  {&(_tg__ZTV8S7776C12__8S7776C11__7S7776C1[4]),  4,20},
  {&(_tg__ZTV7S7776C7__A1__8S7776C11__7S7776C1[16]),  16,30},
  {&(_ZTV7S7776C1[131]),  131,191},
  {&(_ZTV7S7776C1[160]),  160,191},
  {&(_ZTV7S7776C1[177]),  177,191},
  {&(_ZTV7S7776C1[14]),  14,191},
  {&(_ZTV7S7776C1[148]),  148,191},
  {&(_ZTV7S7776C1[39]),  39,191},
  {&(_ZTV7S7776C1[69]),  69,191},
  {&(_ZTV7S7776C1[87]),  87,191},
  {&(_tg__ZTV7S7776C3__7S7776C1[5]),  5,20},
  {&(_tg__ZTV7S7776C4__7S7776C3__7S7776C1[3]),  3,4},
  {&(_tg__ZTV7S7776C7__7S7776C3__7S7776C1[16]),  16,30},
  {&(_tg__ZTV7S7776C8__7S7776C3__7S7776C1[10]),  10,18},
  {&(_tg__ZTV7S7776C7__7S7776C1[11]),  11,25},
  {&(_tg__ZTV7S7776C8__7S7776C7__7S7776C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7776C1[];
extern  VTBL_ENTRY _ZTV7S7776C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7776C1[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C3D0Ev,_ZTv0_n48_N7S7776C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S7776C3D0Ev,_ZThn88_N7S7776C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C3D1Ev,_ZTv0_n48_N7S7776C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S7776C3D1Ev,_ZThn88_N7S7776C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C11D0Ev,_ZTv0_n48_N8S7776C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S7776C11D0Ev,_ZThn172_N8S7776C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C11D1Ev,_ZTv0_n48_N8S7776C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S7776C11D1Ev,_ZThn172_N8S7776C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C12D0Ev,_ZTv0_n48_N8S7776C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S7776C12D0Ev,_ZThn132_N8S7776C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7776C12D1Ev,_ZTv0_n48_N8S7776C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S7776C12D1Ev,_ZThn132_N8S7776C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C2D0Ev,_ZTv0_n48_N7S7776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7776C2D0Ev,_ZThn192_N7S7776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C2D1Ev,_ZTv0_n48_N7S7776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7776C2D1Ev,_ZThn192_N7S7776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7776C2D0Ev,_ZTv0_n24_N7S7776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7776C2D0Ev,_ZThn104_N7S7776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7776C2D1Ev,_ZTv0_n24_N7S7776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7776C2D1Ev,_ZThn104_N7S7776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C1D0Ev,_ZTv0_n48_N7S7776C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7776C1D0Ev,_ZThn192_N7S7776C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7776C1D1Ev,_ZTv0_n48_N7S7776C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7776C1D1Ev,_ZThn192_N7S7776C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7776C1D0Ev,_ZTv0_n24_N7S7776C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7776C1D0Ev,_ZThn104_N7S7776C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7776C1D1Ev,_ZTv0_n24_N7S7776C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7776C1D1Ev,_ZThn104_N7S7776C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7776C1 = {  "S7776C1", // class name
  bases_S7776C1, 12,
  &(vtc_S7776C1[0]), // expected_vtbl_contents
  &(vtt_S7776C1[0]), // expected_vtt_contents
  ABISELECT(432,208), // object size
  NSPAIRA(_ZTI7S7776C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7776C1),191, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7776C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20590C6  {
  int s20590c6f0;
  virtual void  v2(); // _ZN8S20590C62v2Ev
  virtual void  v3(); // _ZN8S20590C62v3Ev
  virtual void  v4(); // _ZN8S20590C62v4Ev
  ~S20590C6(); // tgen
  S20590C6(); // tgen
};
//SIG(-1 S20590C6) C1{ v1 v2 v3 Fi}


void  S20590C6 ::v2(){vfunc_called(this, "_ZN8S20590C62v2Ev");}
void  S20590C6 ::v3(){vfunc_called(this, "_ZN8S20590C62v3Ev");}
void  S20590C6 ::v4(){vfunc_called(this, "_ZN8S20590C62v4Ev");}
S20590C6 ::~S20590C6(){ note_dtor("S20590C6", this);} // tgen
S20590C6 ::S20590C6(){ note_ctor("S20590C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20590C6C1Ev();
extern void _ZN8S20590C6D1Ev();
Name_Map name_map_S20590C6[] = {
  NSPAIR(_ZN8S20590C6C1Ev),
  NSPAIR(_ZN8S20590C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20590C6[];
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY vtc_S20590C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C6[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern VTBL_ENTRY _ZTI8S20590C6[];
extern  VTBL_ENTRY _ZTV8S20590C6[];
Class_Descriptor cd_S20590C6 = {  "S20590C6", // class name
  0,0,//no base classes
  &(vtc_S20590C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20590C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20590C6),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  S20590C7  {
  __tsi64 s20590c7f0;
  virtual void  v5(); // _ZN8S20590C72v5Ev
  virtual void  v6(); // _ZN8S20590C72v6Ev
  virtual void  v7(); // _ZN8S20590C72v7Ev
  virtual void  v8(); // _ZN8S20590C72v8Ev
  virtual void  v9(); // _ZN8S20590C72v9Ev
  virtual void  v10(); // _ZN8S20590C73v10Ev
  virtual void  v11(); // _ZN8S20590C73v11Ev
  virtual void  v12(); // _ZN8S20590C73v12Ev
  ~S20590C7(); // tgen
  S20590C7(); // tgen
};
//SIG(-1 S20590C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S20590C7 ::v5(){vfunc_called(this, "_ZN8S20590C72v5Ev");}
void  S20590C7 ::v6(){vfunc_called(this, "_ZN8S20590C72v6Ev");}
void  S20590C7 ::v7(){vfunc_called(this, "_ZN8S20590C72v7Ev");}
void  S20590C7 ::v8(){vfunc_called(this, "_ZN8S20590C72v8Ev");}
void  S20590C7 ::v9(){vfunc_called(this, "_ZN8S20590C72v9Ev");}
void  S20590C7 ::v10(){vfunc_called(this, "_ZN8S20590C73v10Ev");}
void  S20590C7 ::v11(){vfunc_called(this, "_ZN8S20590C73v11Ev");}
void  S20590C7 ::v12(){vfunc_called(this, "_ZN8S20590C73v12Ev");}
S20590C7 ::~S20590C7(){ note_dtor("S20590C7", this);} // tgen
S20590C7 ::S20590C7(){ note_ctor("S20590C7", this);} // tgen

static void Test_S20590C7()
{
  extern Class_Descriptor cd_S20590C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20590C7, buf);
    S20590C7 *dp, &lv = *(dp=new (buf) S20590C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20590C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C7)");
    check_field_offset(lv, s20590c7f0, ABISELECT(8,4), "S20590C7.s20590c7f0");
    test_class_info(&lv, &cd_S20590C7);
    dp->~S20590C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C7(Test_S20590C7, "S20590C7", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20590C7C1Ev();
extern void _ZN8S20590C7D1Ev();
Name_Map name_map_S20590C7[] = {
  NSPAIR(_ZN8S20590C7C1Ev),
  NSPAIR(_ZN8S20590C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20590C7[];
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY vtc_S20590C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C7[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
Class_Descriptor cd_S20590C7 = {  "S20590C7", // class name
  0,0,//no base classes
  &(vtc_S20590C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20590C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20590C7),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  S20590C9  : virtual S20590C7 {
  ::S20590C7 s20590c9f0;
  int s20590c9f1;
  void *s20590c9f2;
  virtual void  v13(); // _ZN8S20590C93v13Ev
  virtual void  v14(); // _ZN8S20590C93v14Ev
  virtual void  v15(); // _ZN8S20590C93v15Ev
  virtual void  v16(); // _ZN8S20590C93v16Ev
  virtual void  v17(); // _ZN8S20590C93v17Ev
  virtual void  v18(); // _ZN8S20590C93v18Ev
  ~S20590C9(); // tgen
  S20590C9(); // tgen
};
//SIG(-1 S20590C9) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S20590C9 ::v13(){vfunc_called(this, "_ZN8S20590C93v13Ev");}
void  S20590C9 ::v14(){vfunc_called(this, "_ZN8S20590C93v14Ev");}
void  S20590C9 ::v15(){vfunc_called(this, "_ZN8S20590C93v15Ev");}
void  S20590C9 ::v16(){vfunc_called(this, "_ZN8S20590C93v16Ev");}
void  S20590C9 ::v17(){vfunc_called(this, "_ZN8S20590C93v17Ev");}
void  S20590C9 ::v18(){vfunc_called(this, "_ZN8S20590C93v18Ev");}
S20590C9 ::~S20590C9(){ note_dtor("S20590C9", this);} // tgen
S20590C9 ::S20590C9(){ note_ctor("S20590C9", this);} // tgen

static void Test_S20590C9()
{
  extern Class_Descriptor cd_S20590C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20590C9, buf);
    S20590C9 *dp, &lv = *(dp=new (buf) S20590C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20590C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C9)");
    check_base_class_offset(lv, (S20590C7*), ABISELECT(40,24), "S20590C9");
    check_field_offset(lv, s20590c9f0, ABISELECT(8,4), "S20590C9.s20590c9f0");
    check_field_offset(lv, s20590c9f1, ABISELECT(24,16), "S20590C9.s20590c9f1");
    check_field_offset(lv, s20590c9f2, ABISELECT(32,20), "S20590C9.s20590c9f2");
    test_class_info(&lv, &cd_S20590C9);
    dp->~S20590C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C9(Test_S20590C9, "S20590C9", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20590C9C1Ev();
extern void _ZN8S20590C9D1Ev();
Name_Map name_map_S20590C9[] = {
  NSPAIR(_ZN8S20590C9C1Ev),
  NSPAIR(_ZN8S20590C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
static Base_Class bases_S20590C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C7,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI8S20590C9[];
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY vtc_S20590C9[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern VTBL_ENTRY _ZTV8S20590C9[];
static  VTT_ENTRY vtt_S20590C9[] = {
  {&(_ZTV8S20590C9[3]),  3,27},
  {&(_ZTV8S20590C9[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
Class_Descriptor cd_S20590C9 = {  "S20590C9", // class name
  bases_S20590C9, 1,
  &(vtc_S20590C9[0]), // expected_vtbl_contents
  &(vtt_S20590C9[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20590C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20590C9),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20590C9),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  S20590C10  : virtual S20590C9 {
  short s20590c10f0[6];
  int s20590c10f1;
  short s20590c10f2;
  char s20590c10f3[6];
  virtual  ~S20590C10(); // _ZN9S20590C10D2Ev
  virtual void  v19(); // _ZN9S20590C103v19Ev
  virtual void  v20(); // _ZN9S20590C103v20Ev
  virtual void  v21(); // _ZN9S20590C103v21Ev
  virtual void  v22(); // _ZN9S20590C103v22Ev
  virtual void  v23(); // _ZN9S20590C103v23Ev
  S20590C10(); // tgen
};
//SIG(-1 S20590C10) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13 FL} v14 v15 v16 v17 v18 v19 FC3 Fi Fp} vd v1 v2 v3 v4 v5 Fs[6] Fi Fs Fc[6]}


 S20590C10 ::~S20590C10(){ note_dtor("S20590C10", this);}
void  S20590C10 ::v19(){vfunc_called(this, "_ZN9S20590C103v19Ev");}
void  S20590C10 ::v20(){vfunc_called(this, "_ZN9S20590C103v20Ev");}
void  S20590C10 ::v21(){vfunc_called(this, "_ZN9S20590C103v21Ev");}
void  S20590C10 ::v22(){vfunc_called(this, "_ZN9S20590C103v22Ev");}
void  S20590C10 ::v23(){vfunc_called(this, "_ZN9S20590C103v23Ev");}
S20590C10 ::S20590C10(){ note_ctor("S20590C10", this);} // tgen

static void Test_S20590C10()
{
  extern Class_Descriptor cd_S20590C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S20590C10, buf);
    S20590C10 *dp, &lv = *(dp=new (buf) S20590C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S20590C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C10)");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(72,52), "S20590C10");
    check_base_class_offset(lv, (S20590C9*), ABISELECT(32,28), "S20590C10");
    check_field_offset(lv, s20590c10f0, ABISELECT(8,4), "S20590C10.s20590c10f0");
    check_field_offset(lv, s20590c10f1, ABISELECT(20,16), "S20590C10.s20590c10f1");
    check_field_offset(lv, s20590c10f2, ABISELECT(24,20), "S20590C10.s20590c10f2");
    check_field_offset(lv, s20590c10f3, ABISELECT(26,22), "S20590C10.s20590c10f3");
    test_class_info(&lv, &cd_S20590C10);
    dp->~S20590C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C10(Test_S20590C10, "S20590C10", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN9S20590C10C1Ev();
extern void _ZN9S20590C10D2Ev();
Name_Map name_map_S20590C10[] = {
  NSPAIR(_ZN9S20590C10C1Ev),
  NSPAIR(_ZN9S20590C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
static Base_Class bases_S20590C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C7,    ABISELECT(72,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //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_S20590C9,    ABISELECT(32,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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 _ZTI9S20590C10[];
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY vtc_S20590C10[] = {
  ABISELECT(72,52),
  ABISELECT(32,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern VTBL_ENTRY _ZTV9S20590C10[];
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__9S20590C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
static  VTT_ENTRY vtt_S20590C10[] = {
  {&(_ZTV9S20590C10[4]),  4,44},
  {&(_ZTV9S20590C10[20]),  20,44},
  {&(_ZTV9S20590C10[36]),  36,44},
  {&(_tg__ZTV8S20590C9__9S20590C10[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__9S20590C10[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
Class_Descriptor cd_S20590C10 = {  "S20590C10", // class name
  bases_S20590C10, 2,
  &(vtc_S20590C10[0]), // expected_vtbl_contents
  &(vtt_S20590C10[0]), // expected_vtt_contents
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI9S20590C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20590C10),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20590C10),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  S20590C8  : virtual S20590C9 , virtual S20590C10 {
  virtual  ~S20590C8(); // _ZN8S20590C8D2Ev
  virtual void  v24(); // _ZN8S20590C83v24Ev
  virtual void  v25(); // _ZN8S20590C83v25Ev
  S20590C8(); // tgen
};
//SIG(-1 S20590C8) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 FL} v11 v12 v13 v14 v15 v16 FC3 Fi Fp} VBC4{ VBC2 vd v17 v18 v19 v20 v21 Fs[6] Fi Fs Fc[6]} vd v1 v2}


 S20590C8 ::~S20590C8(){ note_dtor("S20590C8", this);}
void  S20590C8 ::v24(){vfunc_called(this, "_ZN8S20590C83v24Ev");}
void  S20590C8 ::v25(){vfunc_called(this, "_ZN8S20590C83v25Ev");}
S20590C8 ::S20590C8(){ note_ctor("S20590C8", this);} // tgen

static void Test_S20590C8()
{
  extern Class_Descriptor cd_S20590C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S20590C8, buf);
    S20590C8 *dp, &lv = *(dp=new (buf) S20590C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S20590C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C8)");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(48,28), "S20590C8");
    check_base_class_offset(lv, (S20590C9*), ABISELECT(8,4), "S20590C8");
    check_base_class_offset(lv, (S20590C9*)(S20590C10*), ABISELECT(8,4), "S20590C8");
    check_base_class_offset(lv, (S20590C10*), ABISELECT(64,40), "S20590C8");
    test_class_info(&lv, &cd_S20590C8);
    dp->~S20590C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C8(Test_S20590C8, "S20590C8", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN8S20590C8C1Ev();
extern void _ZN8S20590C8D2Ev();
Name_Map name_map_S20590C8[] = {
  NSPAIR(_ZN8S20590C8C1Ev),
  NSPAIR(_ZN8S20590C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
extern Class_Descriptor cd_S20590C10;
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
static Base_Class bases_S20590C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C7,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S20590C9,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //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_S20590C10,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S20590C8[];
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20590C8D1Ev,_ZThn40_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20590C8D0Ev,_ZThn40_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY vtc_S20590C8[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20590C8[];
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C8[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__8S20590C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10__8S20590C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C10__8S20590C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
static  VTT_ENTRY vtt_S20590C8[] = {
  {&(_ZTV8S20590C8[5]),  5,59},
  {&(_ZTV8S20590C8[18]),  18,59},
  {&(_ZTV8S20590C8[34]),  34,59},
  {&(_ZTV8S20590C8[52]),  52,59},
  {&(_tg__ZTV8S20590C9__8S20590C8[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__8S20590C8[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C8[4]),  4,11},
  {&(_tg__ZTV8S20590C9__9S20590C10__8S20590C8[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C10__8S20590C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20590C8D0Ev,_ZThn40_N8S20590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20590C8D1Ev,_ZThn40_N8S20590C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20590C8 = {  "S20590C8", // class name
  bases_S20590C8, 3,
  &(vtc_S20590C8[0]), // expected_vtbl_contents
  &(vtt_S20590C8[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI8S20590C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20590C8),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20590C8),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20590C5  : virtual S20590C6 , S20590C7 , S20590C8 {
  char s20590c5f0[8];
  virtual  ~S20590C5(); // _ZN8S20590C5D2Ev
  virtual void  v26(); // _ZN8S20590C53v26Ev
  virtual void  v27(); // _ZN8S20590C53v27Ev
  virtual void  v28(); // _ZN8S20590C53v28Ev
  virtual void  v29(); // _ZN8S20590C53v29Ev
  virtual void  v30(); // _ZN8S20590C53v30Ev
  virtual void  v31(); // _ZN8S20590C53v31Ev
  S20590C5(); // tgen
};
//SIG(-1 S20590C5) C1{ VBC2{ v7 v8 v9 Fi} BC3{ v10 v11 v12 v13 v14 v15 v16 v17 FL} BC4{ VBC5{ VBC3 v18 v19 v20 v21 v22 v23 FC3 Fi Fp} VBC6{ VBC5 vd v24 v25 v26 v27 v28 Fs[6] Fi Fs Fc[6]} vd v29 v30} vd v1 v2 v3 v4 v5 v6 Fc[8]}


 S20590C5 ::~S20590C5(){ note_dtor("S20590C5", this);}
void  S20590C5 ::v26(){vfunc_called(this, "_ZN8S20590C53v26Ev");}
void  S20590C5 ::v27(){vfunc_called(this, "_ZN8S20590C53v27Ev");}
void  S20590C5 ::v28(){vfunc_called(this, "_ZN8S20590C53v28Ev");}
void  S20590C5 ::v29(){vfunc_called(this, "_ZN8S20590C53v29Ev");}
void  S20590C5 ::v30(){vfunc_called(this, "_ZN8S20590C53v30Ev");}
void  S20590C5 ::v31(){vfunc_called(this, "_ZN8S20590C53v31Ev");}
S20590C5 ::S20590C5(){ note_ctor("S20590C5", this);} // tgen

static void Test_S20590C5()
{
  extern Class_Descriptor cd_S20590C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S20590C5, buf);
    S20590C5 *dp, &lv = *(dp=new (buf) S20590C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S20590C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C5)");
    check_base_class_offset(lv, (S20590C6*), ABISELECT(32,24), "S20590C5");
    /*is_ambiguous_... S20590C5::S20590C7 */ AMB_check_base_class_offset(lv, (S20590C7*), 0, "S20590C5");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(88,56), "S20590C5");
    check_base_class_offset(lv, (S20590C9*)(S20590C8*), ABISELECT(48,32), "S20590C5");
    check_base_class_offset(lv, (S20590C9*)(S20590C10*), ABISELECT(48,32), "S20590C5");
    check_base_class_offset(lv, (S20590C10*)(S20590C8*), ABISELECT(104,68), "S20590C5");
    check_base_class_offset(lv, (S20590C8*), ABISELECT(16,12), "S20590C5");
    check_field_offset(lv, s20590c5f0, ABISELECT(24,16), "S20590C5.s20590c5f0");
    test_class_info(&lv, &cd_S20590C5);
    dp->~S20590C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C5(Test_S20590C5, "S20590C5", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN8S20590C5C1Ev();
extern void _ZN8S20590C5D2Ev();
Name_Map name_map_S20590C5[] = {
  NSPAIR(_ZN8S20590C5C1Ev),
  NSPAIR(_ZN8S20590C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C6;
extern VTBL_ENTRY _ZTI8S20590C6[];
extern  VTBL_ENTRY _ZTV8S20590C6[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
extern Class_Descriptor cd_S20590C10;
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
static Base_Class bases_S20590C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C6,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20590C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20590C7,    ABISELECT(88,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20590C9,    ABISELECT(48,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20590C10,    ABISELECT(104,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20590C8,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20590C5[];
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void _ZN8S20590C5D1Ev();
extern void _ZN8S20590C5D0Ev();
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
extern void ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY vtc_S20590C5[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20590C5[];
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__8S20590C5[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C8__8S20590C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C8__8S20590C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C8__8S20590C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C5[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__8S20590C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C5[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10__8S20590C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C10__8S20590C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
static  VTT_ENTRY vtt_S20590C5[] = {
  {&(_ZTV8S20590C5[6]),  6,89},
  {&(_tg__ZTV8S20590C8__8S20590C5[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C8__8S20590C5[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C8__8S20590C5[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C8__8S20590C5[10]),  10,17},
  {&(_ZTV8S20590C5[36]),  36,89},
  {&(_ZTV8S20590C5[27]),  27,89},
  {&(_ZTV8S20590C5[48]),  48,89},
  {&(_ZTV8S20590C5[64]),  64,89},
  {&(_ZTV8S20590C5[82]),  82,89},
  {&(_tg__ZTV8S20590C9__8S20590C5[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__8S20590C5[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C5[4]),  4,11},
  {&(_tg__ZTV8S20590C9__9S20590C10__8S20590C5[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C10__8S20590C5[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20590C5[];
extern  VTBL_ENTRY _ZTV8S20590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C5[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20590C5 = {  "S20590C5", // class name
  bases_S20590C5, 6,
  &(vtc_S20590C5[0]), // expected_vtbl_contents
  &(vtt_S20590C5[0]), // expected_vtt_contents
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI8S20590C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20590C5),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20590C5),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20590C4  : virtual S20590C5 {
  long s20590c4f0;
  void *s20590c4f1;
  virtual void  v32(); // _ZN8S20590C43v32Ev
  ~S20590C4(); // tgen
  S20590C4(); // tgen
};
//SIG(-1 S20590C4) C1{ VBC2{ VBC3{ v2 v3 v4 Fi} BC4{ v5 v6 v7 v8 v9 v10 v11 v12 FL} BC5{ VBC6{ VBC4 v13 v14 v15 v16 v17 v18 FC4 Fi Fp} VBC7{ VBC6 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} vd v24 v25} vd v26 v27 v28 v29 v30 v31 Fc[8]} v1 Fl Fp}


void  S20590C4 ::v32(){vfunc_called(this, "_ZN8S20590C43v32Ev");}
S20590C4 ::~S20590C4(){ note_dtor("S20590C4", this);} // tgen
S20590C4 ::S20590C4(){ note_ctor("S20590C4", this);} // tgen

static void Test_S20590C4()
{
  extern Class_Descriptor cd_S20590C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,28)];
    init_test(&cd_S20590C4, buf);
    S20590C4 *dp, &lv = *(dp=new (buf) S20590C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20590C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C4)");
    check_base_class_offset(lv, (S20590C6*)(S20590C5*), ABISELECT(56,36), "S20590C4");
    /*is_ambiguous_... S20590C5::S20590C7 */ AMB_check_base_class_offset(lv, (S20590C7*)(S20590C5*), ABISELECT(24,12), "S20590C4");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(112,68), "S20590C4");
    check_base_class_offset(lv, (S20590C9*)(S20590C8*)(S20590C5*), ABISELECT(72,44), "S20590C4");
    check_base_class_offset(lv, (S20590C9*)(S20590C10*), ABISELECT(72,44), "S20590C4");
    check_base_class_offset(lv, (S20590C10*)(S20590C8*)(S20590C5*), ABISELECT(128,80), "S20590C4");
    check_base_class_offset(lv, (S20590C8*)(S20590C5*), ABISELECT(40,24), "S20590C4");
    check_base_class_offset(lv, (S20590C5*), ABISELECT(24,12), "S20590C4");
    check_field_offset(lv, s20590c4f0, ABISELECT(8,4), "S20590C4.s20590c4f0");
    check_field_offset(lv, s20590c4f1, ABISELECT(16,8), "S20590C4.s20590c4f1");
    test_class_info(&lv, &cd_S20590C4);
    dp->~S20590C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C4(Test_S20590C4, "S20590C4", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20590C4C1Ev();
extern void _ZN8S20590C4D1Ev();
Name_Map name_map_S20590C4[] = {
  NSPAIR(_ZN8S20590C4C1Ev),
  NSPAIR(_ZN8S20590C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C6;
extern VTBL_ENTRY _ZTI8S20590C6[];
extern  VTBL_ENTRY _ZTV8S20590C6[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
extern Class_Descriptor cd_S20590C10;
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
extern Class_Descriptor cd_S20590C5;
extern VTBL_ENTRY _ZTI8S20590C5[];
extern  VTBL_ENTRY _ZTV8S20590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C5[];
static Base_Class bases_S20590C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C6,    ABISELECT(56,36), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20590C7,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C7,    ABISELECT(112,68), //bcp->offset
    81, //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_S20590C9,    ABISELECT(72,44), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20590C10,    ABISELECT(128,80), //bcp->offset
    99, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20590C8,    ABISELECT(40,24), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C5,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20590C4[];
extern void _ZN8S20590C43v32Ev();
extern void _ZN8S20590C4D1Ev();
extern void _ZN8S20590C4D0Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY vtc_S20590C4[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D0Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20590C4[];
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void _ZN8S20590C5D1Ev();
extern void _ZN8S20590C5D0Ev();
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C4[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C4[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C5__8S20590C4[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__8S20590C5__8S20590C4[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C5__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C5__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C5__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C4[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C4[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C10__8S20590C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
static  VTT_ENTRY vtt_S20590C4[] = {
  {&(_ZTV8S20590C4[7]),  7,116},
  {&(_ZTV8S20590C4[33]),  33,116},
  {&(_ZTV8S20590C4[63]),  63,116},
  {&(_ZTV8S20590C4[54]),  54,116},
  {&(_ZTV8S20590C4[75]),  75,116},
  {&(_ZTV8S20590C4[91]),  91,116},
  {&(_ZTV8S20590C4[109]),  109,116},
  {&(_tg__ZTV8S20590C5__8S20590C4[6]),  6,22},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C4[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C4[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C4[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C4[10]),  10,17},
  {&(_tg__ZTV8S20590C6__8S20590C5__8S20590C4[5]),  5,8},
  {&(_tg__ZTV8S20590C8__8S20590C5__8S20590C4[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C5__8S20590C4[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C5__8S20590C4[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C5__8S20590C4[10]),  10,17},
  {&(_tg__ZTV8S20590C9__8S20590C4[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__8S20590C4[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C4[4]),  4,11},
  {&(_tg__ZTV8S20590C9__9S20590C10__8S20590C4[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C10__8S20590C4[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20590C4[];
extern  VTBL_ENTRY _ZTV8S20590C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C4[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20590C4 = {  "S20590C4", // class name
  bases_S20590C4, 7,
  &(vtc_S20590C4[0]), // expected_vtbl_contents
  &(vtt_S20590C4[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20590C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20590C4),116, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20590C4),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20590C3  : S20590C4 {
  virtual  ~S20590C3(); // _ZN8S20590C3D2Ev
  virtual void  v33(); // _ZN8S20590C33v33Ev
  S20590C3(); // tgen
};
//SIG(-1 S20590C3) C1{ BC2{ VBC3{ VBC4{ v2 v3 v4 Fi} BC5{ v5 v6 v7 v8 v9 v10 v11 v12 FL} BC6{ VBC7{ VBC5 v13 v14 v15 v16 v17 v18 FC5 Fi Fp} VBC8{ VBC7 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} vd v24 v25} vd v26 v27 v28 v29 v30 v31 Fc[8]} v32 Fl Fp} vd v1}


 S20590C3 ::~S20590C3(){ note_dtor("S20590C3", this);}
void  S20590C3 ::v33(){vfunc_called(this, "_ZN8S20590C33v33Ev");}
S20590C3 ::S20590C3(){ note_ctor("S20590C3", this);} // tgen

static void Test_S20590C3()
{
  extern Class_Descriptor cd_S20590C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,28)];
    init_test(&cd_S20590C3, buf);
    S20590C3 *dp, &lv = *(dp=new (buf) S20590C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20590C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C3)");
    check_base_class_offset(lv, (S20590C6*)(S20590C5*), ABISELECT(56,36), "S20590C3");
    /*is_ambiguous_... S20590C5::S20590C7 */ AMB_check_base_class_offset(lv, (S20590C7*)(S20590C5*), ABISELECT(24,12), "S20590C3");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(112,68), "S20590C3");
    check_base_class_offset(lv, (S20590C9*)(S20590C8*)(S20590C5*), ABISELECT(72,44), "S20590C3");
    check_base_class_offset(lv, (S20590C9*)(S20590C10*), ABISELECT(72,44), "S20590C3");
    check_base_class_offset(lv, (S20590C10*)(S20590C8*)(S20590C5*), ABISELECT(128,80), "S20590C3");
    check_base_class_offset(lv, (S20590C8*)(S20590C5*), ABISELECT(40,24), "S20590C3");
    check_base_class_offset(lv, (S20590C5*)(S20590C4*), ABISELECT(24,12), "S20590C3");
    check_base_class_offset(lv, (S20590C4*), 0, "S20590C3");
    test_class_info(&lv, &cd_S20590C3);
    dp->~S20590C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C3(Test_S20590C3, "S20590C3", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20590C3C1Ev();
extern void _ZN8S20590C3D2Ev();
Name_Map name_map_S20590C3[] = {
  NSPAIR(_ZN8S20590C3C1Ev),
  NSPAIR(_ZN8S20590C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C6;
extern VTBL_ENTRY _ZTI8S20590C6[];
extern  VTBL_ENTRY _ZTV8S20590C6[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
extern Class_Descriptor cd_S20590C10;
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
extern Class_Descriptor cd_S20590C5;
extern VTBL_ENTRY _ZTI8S20590C5[];
extern  VTBL_ENTRY _ZTV8S20590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C5[];
extern Class_Descriptor cd_S20590C4;
extern VTBL_ENTRY _ZTI8S20590C4[];
extern  VTBL_ENTRY _ZTV8S20590C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C4[];
static Base_Class bases_S20590C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C6,    ABISELECT(56,36), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20590C7,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C7,    ABISELECT(112,68), //bcp->offset
    82, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20590C9,    ABISELECT(72,44), //bcp->offset
    67, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20590C10,    ABISELECT(128,80), //bcp->offset
    100, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20590C8,    ABISELECT(40,24), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C5,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20590C4,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20590C3[];
extern void _ZN8S20590C43v32Ev();
extern void _ZN8S20590C3D1Ev();
extern void _ZN8S20590C3D0Ev();
extern void _ZN8S20590C33v33Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20590C3D1Ev,_ZThn12_N8S20590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20590C3D0Ev,_ZThn12_N8S20590C3D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20590C3D1Ev,_ZTvn12_n60_N8S20590C3D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C3D0Ev,_ZTvn12_n60_N8S20590C3D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S20590C3D1Ev,_ZThn80_N8S20590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S20590C3D0Ev,_ZThn80_N8S20590C3D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY vtc_S20590C3[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C33v33Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C3D1Ev,_ZTvn12_n60_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C3D0Ev,_ZTvn12_n60_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20590C3[];
extern void _ZN8S20590C43v32Ev();
extern void _ZN8S20590C4D1Ev();
extern void _ZN8S20590C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C4__8S20590C3[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D0Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C4__8S20590C3[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C4__8S20590C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C4__8S20590C3[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C4__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C4__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C4__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void _ZN8S20590C5D1Ev();
extern void _ZN8S20590C5D0Ev();
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C3[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C3[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C5__8S20590C3[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__8S20590C5__8S20590C3[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C5__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C5__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C5__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C3[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C10__8S20590C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
static  VTT_ENTRY vtt_S20590C3[] = {
  {&(_ZTV8S20590C3[7]),  7,117},
  {&(_tg__ZTV8S20590C4__8S20590C3[7]),  7,10},
  {&(_tg__ZTV8S20590C5__8S20590C4__8S20590C3[23]),  23,39},
  {&(_tg__ZTV8S20590C6__8S20590C4__8S20590C3[5]),  5,8},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C4__8S20590C3[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C4__8S20590C3[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C4__8S20590C3[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C4__8S20590C3[10]),  10,17},
  {&(_ZTV8S20590C3[34]),  34,117},
  {&(_ZTV8S20590C3[64]),  64,117},
  {&(_ZTV8S20590C3[55]),  55,117},
  {&(_ZTV8S20590C3[76]),  76,117},
  {&(_ZTV8S20590C3[92]),  92,117},
  {&(_ZTV8S20590C3[110]),  110,117},
  {&(_tg__ZTV8S20590C5__8S20590C3[6]),  6,22},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C3[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C3[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C3[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C3[10]),  10,17},
  {&(_tg__ZTV8S20590C6__8S20590C5__8S20590C3[5]),  5,8},
  {&(_tg__ZTV8S20590C8__8S20590C5__8S20590C3[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C5__8S20590C3[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C5__8S20590C3[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C5__8S20590C3[10]),  10,17},
  {&(_tg__ZTV8S20590C9__8S20590C3[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__8S20590C3[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C3[4]),  4,11},
  {&(_tg__ZTV8S20590C9__9S20590C10__8S20590C3[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C10__8S20590C3[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20590C3[];
extern  VTBL_ENTRY _ZTV8S20590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C3[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C3D0Ev,_ZThn80_N8S20590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C3D1Ev,_ZThn80_N8S20590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C3D0Ev,_ZThn12_N8S20590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C3D1Ev,_ZThn12_N8S20590C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20590C3 = {  "S20590C3", // class name
  bases_S20590C3, 8,
  &(vtc_S20590C3[0]), // expected_vtbl_contents
  &(vtt_S20590C3[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20590C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20590C3),117, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20590C3),29, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20590C12  {
  ::S7817C7 s20590c12f0;
  __tsi64 s20590c12f1;
  virtual void  v34(); // _ZN9S20590C123v34Ev
  virtual void  v35(); // _ZN9S20590C123v35Ev
  virtual void  v36(); // _ZN9S20590C123v36Ev
  virtual void  v37(); // _ZN9S20590C123v37Ev
  virtual void  v38(); // _ZN9S20590C123v38Ev
  virtual void  v39(); // _ZN9S20590C123v39Ev
  ~S20590C12(); // tgen
  S20590C12(); // tgen
};
//SIG(-1 S20590C12) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} FL}


void  S20590C12 ::v34(){vfunc_called(this, "_ZN9S20590C123v34Ev");}
void  S20590C12 ::v35(){vfunc_called(this, "_ZN9S20590C123v35Ev");}
void  S20590C12 ::v36(){vfunc_called(this, "_ZN9S20590C123v36Ev");}
void  S20590C12 ::v37(){vfunc_called(this, "_ZN9S20590C123v37Ev");}
void  S20590C12 ::v38(){vfunc_called(this, "_ZN9S20590C123v38Ev");}
void  S20590C12 ::v39(){vfunc_called(this, "_ZN9S20590C123v39Ev");}
S20590C12 ::~S20590C12(){ note_dtor("S20590C12", this);} // tgen
S20590C12 ::S20590C12(){ note_ctor("S20590C12", this);} // tgen

static void Test_S20590C12()
{
  extern Class_Descriptor cd_S20590C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,30)];
    init_test(&cd_S20590C12, buf);
    S20590C12 *dp, &lv = *(dp=new (buf) S20590C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S20590C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C12)");
    check_field_offset(lv, s20590c12f0, ABISELECT(8,4), "S20590C12.s20590c12f0");
    check_field_offset(lv, s20590c12f1, ABISELECT(152,108), "S20590C12.s20590c12f1");
    test_class_info(&lv, &cd_S20590C12);
    dp->~S20590C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C12(Test_S20590C12, "S20590C12", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN9S20590C12C1Ev();
extern void _ZN9S20590C12D1Ev();
Name_Map name_map_S20590C12[] = {
  NSPAIR(_ZN9S20590C12C1Ev),
  NSPAIR(_ZN9S20590C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20590C12[];
extern void _ZN9S20590C123v34Ev();
extern void _ZN9S20590C123v35Ev();
extern void _ZN9S20590C123v36Ev();
extern void _ZN9S20590C123v37Ev();
extern void _ZN9S20590C123v38Ev();
extern void _ZN9S20590C123v39Ev();
static  VTBL_ENTRY vtc_S20590C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C12[0]),
  (VTBL_ENTRY)&_ZN9S20590C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v39Ev,
};
extern VTBL_ENTRY _ZTI9S20590C12[];
extern  VTBL_ENTRY _ZTV9S20590C12[];
Class_Descriptor cd_S20590C12 = {  "S20590C12", // class name
  0,0,//no base classes
  &(vtc_S20590C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI9S20590C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20590C12),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  S20590C11  : virtual S20590C8 , S20590C12 {
  void *s20590c11f0;
  virtual  ~S20590C11(); // _ZN9S20590C11D2Ev
  virtual void  v40(); // _ZN9S20590C113v40Ev
  S20590C11(); // tgen
};
//SIG(-1 S20590C11) C1{ VBC2{ VBC3{ VBC4{ v2 v3 v4 v5 v6 v7 v8 v9 FL} v10 v11 v12 v13 v14 v15 FC4 Fi Fp} VBC5{ VBC3 vd v16 v17 v18 v19 v20 Fs[6] Fi Fs Fc[6]} vd v21 v22} BC6{ v23 v24 v25 v26 v27 v28 FC7{ VBC8{ v33 v34 v35 v36 v37 v38 v39 v40 FL} VBC9{ VBC8 v41 v42 v43 v44 v45 v46 FC8 Fi Fp} BC10{ VBC9 vd v47 v48 v49 v50 v51 Fs[6] Fi Fs Fc[6]} VBC11{ v52 v53 v54 Fi} BC12{ VBC9 VBC10 vd v55 v56} vd v29 v30 v31 v32} FL} vd v1 Fp}


 S20590C11 ::~S20590C11(){ note_dtor("S20590C11", this);}
void  S20590C11 ::v40(){vfunc_called(this, "_ZN9S20590C113v40Ev");}
S20590C11 ::S20590C11(){ note_ctor("S20590C11", this);} // tgen

static void Test_S20590C11()
{
  extern Class_Descriptor cd_S20590C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,48)];
    init_test(&cd_S20590C11, buf);
    S20590C11 *dp, &lv = *(dp=new (buf) S20590C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,188), "sizeof(S20590C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C11)");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(216,148), "S20590C11");
    check_base_class_offset(lv, (S20590C9*)(S20590C8*), ABISELECT(176,124), "S20590C11");
    check_base_class_offset(lv, (S20590C9*)(S20590C10*), ABISELECT(176,124), "S20590C11");
    check_base_class_offset(lv, (S20590C10*)(S20590C8*), ABISELECT(232,160), "S20590C11");
    check_base_class_offset(lv, (S20590C8*), ABISELECT(168,120), "S20590C11");
    check_base_class_offset(lv, (S20590C12*), 0, "S20590C11");
    check_field_offset(lv, s20590c11f0, ABISELECT(160,116), "S20590C11.s20590c11f0");
    test_class_info(&lv, &cd_S20590C11);
    dp->~S20590C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C11(Test_S20590C11, "S20590C11", ABISELECT(264,188));

#else // __cplusplus

extern void _ZN9S20590C11C1Ev();
extern void _ZN9S20590C11D2Ev();
Name_Map name_map_S20590C11[] = {
  NSPAIR(_ZN9S20590C11C1Ev),
  NSPAIR(_ZN9S20590C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
extern Class_Descriptor cd_S20590C10;
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
extern Class_Descriptor cd_S20590C12;
extern VTBL_ENTRY _ZTI9S20590C12[];
extern  VTBL_ENTRY _ZTV9S20590C12[];
static Base_Class bases_S20590C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C7,    ABISELECT(216,148), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20590C9,    ABISELECT(176,124), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20590C10,    ABISELECT(232,160), //bcp->offset
    60, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20590C8,    ABISELECT(168,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20590C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20590C11[];
extern void _ZN9S20590C123v34Ev();
extern void _ZN9S20590C123v35Ev();
extern void _ZN9S20590C123v36Ev();
extern void _ZN9S20590C123v37Ev();
extern void _ZN9S20590C123v38Ev();
extern void _ZN9S20590C123v39Ev();
extern void _ZN9S20590C11D1Ev();
extern void _ZN9S20590C11D0Ev();
extern void _ZN9S20590C113v40Ev();
extern void ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev)();
extern void ABISELECT(_ZThn168_N9S20590C11D1Ev,_ZThn120_N9S20590C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev)();
extern void ABISELECT(_ZThn168_N9S20590C11D0Ev,_ZThn120_N9S20590C11D0Ev)() __attribute__((weak));
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev)();
extern void ABISELECT(_ZThn232_N9S20590C11D1Ev,_ZThn160_N9S20590C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev)();
extern void ABISELECT(_ZThn232_N9S20590C11D0Ev,_ZThn160_N9S20590C11D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY vtc_S20590C11[] = {
  ABISELECT(232,160),
  ABISELECT(216,148),
  ABISELECT(176,124),
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN9S20590C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20590C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C113v40Ev,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-148),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-160),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-232,-160),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern VTBL_ENTRY _ZTV9S20590C11[];
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__9S20590C11[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C8__9S20590C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C8__9S20590C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20590C8D1Ev,_ZThn40_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20590C8D0Ev,_ZThn40_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C8__9S20590C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C11[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__9S20590C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__9S20590C11[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10__9S20590C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C10__9S20590C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
static  VTT_ENTRY vtt_S20590C11[] = {
  {&(_ZTV9S20590C11[6]),  6,77},
  {&(_ZTV9S20590C11[23]),  23,77},
  {&(_ZTV9S20590C11[36]),  36,77},
  {&(_ZTV9S20590C11[52]),  52,77},
  {&(_ZTV9S20590C11[70]),  70,77},
  {&(_tg__ZTV8S20590C8__9S20590C11[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C8__9S20590C11[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C8__9S20590C11[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C8__9S20590C11[10]),  10,17},
  {&(_tg__ZTV8S20590C9__9S20590C11[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__9S20590C11[10]),  10,18},
  {&(_tg__ZTV9S20590C10__9S20590C11[4]),  4,11},
  {&(_tg__ZTV8S20590C9__9S20590C10__9S20590C11[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C10__9S20590C11[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20590C11[];
extern  VTBL_ENTRY _ZTV9S20590C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C11[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20590C8D0Ev,_ZThn40_N8S20590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20590C8D1Ev,_ZThn40_N8S20590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20590C11D0Ev,_ZThn160_N9S20590C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20590C11D1Ev,_ZThn160_N9S20590C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20590C11D0Ev,_ZThn120_N9S20590C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20590C11D1Ev,_ZThn120_N9S20590C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20590C11 = {  "S20590C11", // class name
  bases_S20590C11, 5,
  &(vtc_S20590C11[0]), // expected_vtbl_contents
  &(vtt_S20590C11[0]), // expected_vtt_contents
  ABISELECT(264,188), // object size
  NSPAIRA(_ZTI9S20590C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20590C11),77, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20590C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20590C2  : virtual S20590C3 , S20590C11 , S20590C7 {
  int s20590c2f0;
  virtual  ~S20590C2(); // _ZN8S20590C2D2Ev
  virtual void  v41(); // _ZN8S20590C23v41Ev
  virtual void  v42(); // _ZN8S20590C23v42Ev
  virtual void  v43(); // _ZN8S20590C23v43Ev
  virtual void  v44(); // _ZN8S20590C23v44Ev
  S20590C2(); // tgen
};
//SIG(-1 S20590C2) C1{ VBC2{ BC3{ VBC4{ VBC5{ v5 v6 v7 Fi} BC6{ v8 v9 v10 v11 v12 v13 v14 v15 FL} BC7{ VBC8{ VBC6 v16 v17 v18 v19 v20 v21 FC6 Fi Fp} VBC9{ VBC8 vd v22 v23 v24 v25 v26 Fs[6] Fi Fs Fc[6]} vd v27 v28} vd v29 v30 v31 v32 v33 v34 Fc[8]} v35 Fl Fp} vd v36} BC10{ VBC7 BC11{ v37 v38 v39 v40 v41 v42 FC12{ VBC13{ v48 v49 v50 v51 v52 v53 v54 v55 FL} VBC14{ VBC13 v56 v57 v58 v59 v60 v61 FC13 Fi Fp} BC15{ VBC14 vd v62 v63 v64 v65 v66 Fs[6] Fi Fs Fc[6]} VBC16{ v67 v68 v69 Fi} BC17{ VBC14 VBC15 vd v70 v71} vd v44 v45 v46 v47} FL} vd v43 Fp} BC6 vd v1 v2 v3 v4 Fi}


 S20590C2 ::~S20590C2(){ note_dtor("S20590C2", this);}
void  S20590C2 ::v41(){vfunc_called(this, "_ZN8S20590C23v41Ev");}
void  S20590C2 ::v42(){vfunc_called(this, "_ZN8S20590C23v42Ev");}
void  S20590C2 ::v43(){vfunc_called(this, "_ZN8S20590C23v43Ev");}
void  S20590C2 ::v44(){vfunc_called(this, "_ZN8S20590C23v44Ev");}
S20590C2 ::S20590C2(){ note_ctor("S20590C2", this);} // tgen

static void Test_S20590C2()
{
  extern Class_Descriptor cd_S20590C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,63)];
    init_test(&cd_S20590C2, buf);
    S20590C2 *dp, &lv = *(dp=new (buf) S20590C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,248), "sizeof(S20590C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C2)");
    check_base_class_offset(lv, (S20590C6*)(S20590C5*), ABISELECT(248,172), "S20590C2");
    /*is_ambiguous_... S20590C5::S20590C7 */ AMB_check_base_class_offset(lv, (S20590C7*)(S20590C5*), ABISELECT(216,148), "S20590C2");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(304,204), "S20590C2");
    check_base_class_offset(lv, (S20590C9*)(S20590C8*)(S20590C5*), ABISELECT(264,180), "S20590C2");
    check_base_class_offset(lv, (S20590C9*)(S20590C10*), ABISELECT(264,180), "S20590C2");
    /*is_ambiguous_... S20590C2::S20590C8 */ AMB_check_base_class_offset(lv, (S20590C9*)(S20590C8*), ABISELECT(264,180), "S20590C2");
    check_base_class_offset(lv, (S20590C10*)(S20590C8*)(S20590C5*), ABISELECT(320,216), "S20590C2");
    /*is_ambiguous_... S20590C2::S20590C8 */ AMB_check_base_class_offset(lv, (S20590C10*)(S20590C8*), ABISELECT(320,216), "S20590C2");
    check_base_class_offset(lv, (S20590C8*)(S20590C5*), ABISELECT(232,160), "S20590C2");
    check_base_class_offset(lv, (S20590C5*)(S20590C4*)(S20590C3*), ABISELECT(216,148), "S20590C2");
    check_base_class_offset(lv, (S20590C4*)(S20590C3*), ABISELECT(192,136), "S20590C2");
    check_base_class_offset(lv, (S20590C3*), ABISELECT(192,136), "S20590C2");
    check_base_class_offset(lv, (S20590C8*)(S20590C11*), ABISELECT(352,244), "S20590C2");
    check_base_class_offset(lv, (S20590C12*)(S20590C11*), 0, "S20590C2");
    check_base_class_offset(lv, (S20590C11*), 0, "S20590C2");
    /*is_ambiguous_... S20590C2::S20590C7 */ AMB_check_base_class_offset(lv, (S20590C7*), ABISELECT(168,120), "S20590C2");
    check_field_offset(lv, s20590c2f0, ABISELECT(184,132), "S20590C2.s20590c2f0");
    test_class_info(&lv, &cd_S20590C2);
    dp->~S20590C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C2(Test_S20590C2, "S20590C2", ABISELECT(360,248));

#else // __cplusplus

extern void _ZN8S20590C2C1Ev();
extern void _ZN8S20590C2D2Ev();
Name_Map name_map_S20590C2[] = {
  NSPAIR(_ZN8S20590C2C1Ev),
  NSPAIR(_ZN8S20590C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C6;
extern VTBL_ENTRY _ZTI8S20590C6[];
extern  VTBL_ENTRY _ZTV8S20590C6[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
extern Class_Descriptor cd_S20590C10;
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
extern Class_Descriptor cd_S20590C5;
extern VTBL_ENTRY _ZTI8S20590C5[];
extern  VTBL_ENTRY _ZTV8S20590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C5[];
extern Class_Descriptor cd_S20590C4;
extern VTBL_ENTRY _ZTI8S20590C4[];
extern  VTBL_ENTRY _ZTV8S20590C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C4[];
extern Class_Descriptor cd_S20590C3;
extern VTBL_ENTRY _ZTI8S20590C3[];
extern  VTBL_ENTRY _ZTV8S20590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C3[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
extern Class_Descriptor cd_S20590C12;
extern VTBL_ENTRY _ZTI9S20590C12[];
extern  VTBL_ENTRY _ZTV9S20590C12[];
extern Class_Descriptor cd_S20590C11;
extern VTBL_ENTRY _ZTI9S20590C11[];
extern  VTBL_ENTRY _ZTV9S20590C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C11[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
static Base_Class bases_S20590C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C6,    ABISELECT(248,172), //bcp->offset
    94, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20590C7,    ABISELECT(216,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C7,    ABISELECT(304,204), //bcp->offset
    117, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20590C9,    ABISELECT(264,180), //bcp->offset
    102, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20590C10,    ABISELECT(320,216), //bcp->offset
    135, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20590C8,    ABISELECT(232,160), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C5,    ABISELECT(216,148), //bcp->offset
    46, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20590C4,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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
    8, //immediately_derived
  0, 0},
  {&cd_S20590C3,    ABISELECT(192,136), //bcp->offset
    32, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20590C8,    ABISELECT(352,244), //bcp->offset
    152, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20590C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20590C11,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20590C7,    ABISELECT(168,120), //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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20590C2[];
extern void _ZN9S20590C123v34Ev();
extern void _ZN9S20590C123v35Ev();
extern void _ZN9S20590C123v36Ev();
extern void _ZN9S20590C123v37Ev();
extern void _ZN9S20590C123v38Ev();
extern void _ZN9S20590C123v39Ev();
extern void _ZN8S20590C2D1Ev();
extern void _ZN8S20590C2D0Ev();
extern void _ZN9S20590C113v40Ev();
extern void _ZN8S20590C23v41Ev();
extern void _ZN8S20590C23v42Ev();
extern void _ZN8S20590C23v43Ev();
extern void _ZN8S20590C23v44Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void _ZN8S20590C43v32Ev();
extern void ABISELECT(_ZTv0_n72_N8S20590C2D1Ev,_ZTv0_n36_N8S20590C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S20590C2D1Ev,_ZThn136_N8S20590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20590C2D0Ev,_ZTv0_n36_N8S20590C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S20590C2D0Ev,_ZThn136_N8S20590C2D0Ev)() __attribute__((weak));
extern void _ZN8S20590C33v33Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C2D1Ev,_ZTv0_n60_N8S20590C2D1Ev)();
extern void ABISELECT(_ZThn216_N8S20590C2D1Ev,_ZThn148_N8S20590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C2D0Ev,_ZTv0_n60_N8S20590C2D0Ev)();
extern void ABISELECT(_ZThn216_N8S20590C2D0Ev,_ZThn148_N8S20590C2D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20590C2D1Ev,_ZTvn12_n60_N8S20590C2D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C2D0Ev,_ZTvn12_n60_N8S20590C2D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20590C2D1Ev,_ZTv0_n20_N8S20590C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20590C2D1Ev,_ZThn216_N8S20590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C2D0Ev,_ZTv0_n20_N8S20590C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20590C2D0Ev,_ZThn216_N8S20590C2D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
extern void ABISELECT(_ZTv0_n48_N8S20590C2D1Ev,_ZTv0_n24_N8S20590C2D1Ev)();
extern void ABISELECT(_ZThn352_N8S20590C2D1Ev,_ZThn244_N8S20590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20590C2D0Ev,_ZTv0_n24_N8S20590C2D0Ev)();
extern void ABISELECT(_ZThn352_N8S20590C2D0Ev,_ZThn244_N8S20590C2D0Ev)() __attribute__((weak));
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY vtc_S20590C2[] = {
  ABISELECT(248,172),
  ABISELECT(216,148),
  ABISELECT(192,136),
  ABISELECT(320,216),
  ABISELECT(304,204),
  ABISELECT(264,180),
  ABISELECT(352,244),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN9S20590C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v39Ev,
  (VTBL_ENTRY)&_ZN8S20590C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C2D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C113v40Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v41Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v42Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v43Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v44Ev,
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  ABISELECT(-192,-136),
  0,
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20590C2D1Ev,_ZTv0_n36_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20590C2D0Ev,_ZTv0_n36_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C33v33Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-148),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-216,-148),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C2D1Ev,_ZTv0_n60_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C2D0Ev,_ZTv0_n60_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-232,-160),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C2D1Ev,_ZTvn12_n60_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C2D0Ev,_ZTvn12_n60_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-248,-172),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-216),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-216),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C2D1Ev,_ZTv0_n20_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C2D0Ev,_ZTv0_n20_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
  0,
  0,
  ABISELECT(-352,-244),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-352,-244),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20590C2D1Ev,_ZTv0_n24_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20590C2D0Ev,_ZTv0_n24_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern VTBL_ENTRY _ZTV8S20590C2[];
extern void _ZN9S20590C123v34Ev();
extern void _ZN9S20590C123v35Ev();
extern void _ZN9S20590C123v36Ev();
extern void _ZN9S20590C123v37Ev();
extern void _ZN9S20590C123v38Ev();
extern void _ZN9S20590C123v39Ev();
extern void _ZN9S20590C11D1Ev();
extern void _ZN9S20590C11D0Ev();
extern void _ZN9S20590C113v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C11__8S20590C2[] = {
  ABISELECT(320,216),
  ABISELECT(304,204),
  ABISELECT(264,180),
  ABISELECT(352,244),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN9S20590C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20590C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C113v40Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev)();
extern void ABISELECT(_ZThn352_N9S20590C11D1Ev,_ZThn244_N9S20590C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev)();
extern void ABISELECT(_ZThn352_N9S20590C11D0Ev,_ZThn244_N9S20590C11D0Ev)() __attribute__((weak));
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__9S20590C11__8S20590C2[] = {
  0,
  0,
  ABISELECT(-352,-244),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-352,-244),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C11__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C11__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev)();
extern void ABISELECT(_ZThn320_N9S20590C11D1Ev,_ZThn216_N9S20590C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev)();
extern void ABISELECT(_ZThn320_N9S20590C11D0Ev,_ZThn216_N9S20590C11D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__9S20590C11__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-216),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-216),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C43v32Ev();
extern void _ZN8S20590C3D1Ev();
extern void _ZN8S20590C3D0Ev();
extern void _ZN8S20590C33v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C3__8S20590C2[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C33v33Ev,
};
extern void _ZN8S20590C43v32Ev();
extern void _ZN8S20590C4D1Ev();
extern void _ZN8S20590C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C48S20590C3__8S20590C2[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D0Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C48S20590C3__8S20590C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C48S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C48S20590C3__8S20590C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C48S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C48S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C48S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20590C3D1Ev,_ZThn12_N8S20590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20590C3D0Ev,_ZThn12_N8S20590C3D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C3__8S20590C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20590C3D1Ev,_ZTvn12_n60_N8S20590C3D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C3D0Ev,_ZTvn12_n60_N8S20590C3D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C3__8S20590C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C3D1Ev,_ZTvn12_n60_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C3D0Ev,_ZTvn12_n60_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S20590C3D1Ev,_ZThn80_N8S20590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S20590C3D0Ev,_ZThn80_N8S20590C3D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C3__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void _ZN8S20590C5D1Ev();
extern void _ZN8S20590C5D0Ev();
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C2[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C5__8S20590C2[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__8S20590C5__8S20590C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C5__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C5__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C5__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C10__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__A1__8S20590C2[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C8__A1__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C8__A1__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C8__A1__8S20590C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
static  VTT_ENTRY vtt_S20590C2[] = {
  {&(_ZTV8S20590C2[9]),  9,164},
  {&(_tg__ZTV9S20590C11__8S20590C2[6]),  6,15},
  {&(_tg__ZTV8S20590C8__9S20590C11__8S20590C2[8]),  8,12},
  {&(_tg__ZTV8S20590C9__9S20590C11__8S20590C2[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C11__8S20590C2[10]),  10,18},
  {&(_tg__ZTV9S20590C10__9S20590C11__8S20590C2[10]),  10,17},
  {&(_ZTV8S20590C2[42]),  42,164},
  {&(_ZTV8S20590C2[69]),  69,164},
  {&(_ZTV8S20590C2[99]),  99,164},
  {&(_ZTV8S20590C2[90]),  90,164},
  {&(_ZTV8S20590C2[111]),  111,164},
  {&(_ZTV8S20590C2[127]),  127,164},
  {&(_ZTV8S20590C2[145]),  145,164},
  {&(_ZTV8S20590C2[160]),  160,164},
  {&(_tg__ZTV8S20590C3__8S20590C2[7]),  7,11},
  {&(_tg__ZTV8S20590C48S20590C3__8S20590C2[7]),  7,10},
  {&(_tg__ZTV8S20590C5__8S20590C48S20590C3__8S20590C2[23]),  23,39},
  {&(_tg__ZTV8S20590C6__8S20590C48S20590C3__8S20590C2[5]),  5,8},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C48S20590C3__8S20590C2[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C48S20590C3__8S20590C2[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C48S20590C3__8S20590C2[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C48S20590C3__8S20590C2[10]),  10,17},
  {&(_tg__ZTV8S20590C5__8S20590C3__8S20590C2[23]),  23,39},
  {&(_tg__ZTV8S20590C6__8S20590C3__8S20590C2[5]),  5,8},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C3__8S20590C2[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C3__8S20590C2[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C3__8S20590C2[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C3__8S20590C2[10]),  10,17},
  {&(_tg__ZTV8S20590C5__8S20590C2[6]),  6,22},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C2[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C2[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C2[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C2[10]),  10,17},
  {&(_tg__ZTV8S20590C6__8S20590C5__8S20590C2[5]),  5,8},
  {&(_tg__ZTV8S20590C8__8S20590C5__8S20590C2[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C5__8S20590C2[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C5__8S20590C2[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C5__8S20590C2[10]),  10,17},
  {&(_tg__ZTV8S20590C9__8S20590C2[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__8S20590C2[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C2[4]),  4,11},
  {&(_tg__ZTV8S20590C9__9S20590C10__8S20590C2[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C10__8S20590C2[10]),  10,18},
  {&(_tg__ZTV8S20590C8__A1__8S20590C2[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C8__A1__8S20590C2[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C8__A1__8S20590C2[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C8__A1__8S20590C2[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S20590C2[];
extern  VTBL_ENTRY _ZTV8S20590C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C2[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C3D0Ev,_ZThn80_N8S20590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C3D1Ev,_ZThn80_N8S20590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C3D0Ev,_ZThn12_N8S20590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C3D1Ev,_ZThn12_N8S20590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20590C11D0Ev,_ZThn216_N9S20590C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20590C11D1Ev,_ZThn216_N9S20590C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S20590C11D0Ev,_ZThn244_N9S20590C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S20590C11D1Ev,_ZThn244_N9S20590C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20590C2D0Ev,_ZTv0_n24_N8S20590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20590C2D0Ev,_ZThn244_N8S20590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20590C2D1Ev,_ZTv0_n24_N8S20590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20590C2D1Ev,_ZThn244_N8S20590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C2D0Ev,_ZTv0_n20_N8S20590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20590C2D0Ev,_ZThn216_N8S20590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C2D1Ev,_ZTv0_n20_N8S20590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20590C2D1Ev,_ZThn216_N8S20590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C2D0Ev,_ZTv0_n60_N8S20590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20590C2D0Ev,_ZThn148_N8S20590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C2D1Ev,_ZTv0_n60_N8S20590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20590C2D1Ev,_ZThn148_N8S20590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20590C2D0Ev,_ZTv0_n36_N8S20590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20590C2D0Ev,_ZThn136_N8S20590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20590C2D1Ev,_ZTv0_n36_N8S20590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20590C2D1Ev,_ZThn136_N8S20590C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20590C2 = {  "S20590C2", // class name
  bases_S20590C2, 13,
  &(vtc_S20590C2[0]), // expected_vtbl_contents
  &(vtt_S20590C2[0]), // expected_vtt_contents
  ABISELECT(360,248), // object size
  NSPAIRA(_ZTI8S20590C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20590C2),164, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20590C2),47, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20590C1  : virtual S20590C2 {
  virtual  ~S20590C1(); // _ZN8S20590C1D2Ev
  virtual void  v1(); // _ZN8S20590C12v1Ev
  S20590C1(); // tgen
};
//SIG(1 S20590C1) C1{ VBC2{ VBC3{ BC4{ VBC5{ VBC6{ v2 v3 v4 Fi} BC7{ v5 v6 v7 v8 v9 v10 v11 v12 FL} BC8{ VBC9{ VBC7 v13 v14 v15 v16 v17 v18 FC7 Fi Fp} VBC10{ VBC9 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} vd v24 v25} vd v26 v27 v28 v29 v30 v31 Fc[8]} v32 Fl Fp} vd v33} BC11{ VBC8 BC12{ v34 v35 v36 v37 v38 v39 FC13{ VBC14{ v49 v50 v51 v52 v53 v54 v55 v56 FL} VBC15{ VBC14 v57 v58 v59 v60 v61 v62 FC14 Fi Fp} BC16{ VBC15 vd v63 v64 v65 v66 v67 Fs[6] Fi Fs Fc[6]} VBC17{ v68 v69 v70 Fi} BC18{ VBC15 VBC16 vd v71 v72} vd v45 v46 v47 v48} FL} vd v40 Fp} BC7 vd v41 v42 v43 v44 Fi} vd v1}


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

static void Test_S20590C1()
{
  extern Class_Descriptor cd_S20590C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,63)];
    init_test(&cd_S20590C1, buf);
    S20590C1 *dp, &lv = *(dp=new (buf) S20590C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,248), "sizeof(S20590C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20590C1)");
    check_base_class_offset(lv, (S20590C6*)(S20590C5*), ABISELECT(256,176), "S20590C1");
    /*is_ambiguous_... S20590C5::S20590C7 */ AMB_check_base_class_offset(lv, (S20590C7*)(S20590C5*), ABISELECT(224,152), "S20590C1");
    check_base_class_offset(lv, (S20590C7*)(S20590C9*), ABISELECT(312,208), "S20590C1");
    check_base_class_offset(lv, (S20590C9*)(S20590C8*)(S20590C5*), ABISELECT(272,184), "S20590C1");
    check_base_class_offset(lv, (S20590C9*)(S20590C10*), ABISELECT(272,184), "S20590C1");
    /*is_ambiguous_... S20590C1::S20590C8 */ AMB_check_base_class_offset(lv, (S20590C9*)(S20590C8*), ABISELECT(272,184), "S20590C1");
    check_base_class_offset(lv, (S20590C10*)(S20590C8*)(S20590C5*), ABISELECT(328,220), "S20590C1");
    /*is_ambiguous_... S20590C1::S20590C8 */ AMB_check_base_class_offset(lv, (S20590C10*)(S20590C8*), ABISELECT(328,220), "S20590C1");
    check_base_class_offset(lv, (S20590C8*)(S20590C5*), ABISELECT(240,164), "S20590C1");
    check_base_class_offset(lv, (S20590C5*)(S20590C4*)(S20590C3*), ABISELECT(224,152), "S20590C1");
    check_base_class_offset(lv, (S20590C4*)(S20590C3*), ABISELECT(200,140), "S20590C1");
    check_base_class_offset(lv, (S20590C3*)(S20590C2*), ABISELECT(200,140), "S20590C1");
    check_base_class_offset(lv, (S20590C8*)(S20590C11*)(S20590C2*), 0, "S20590C1");
    check_base_class_offset(lv, (S20590C12*)(S20590C11*)(S20590C2*), ABISELECT(8,4), "S20590C1");
    check_base_class_offset(lv, (S20590C11*)(S20590C2*), ABISELECT(8,4), "S20590C1");
    /*is_ambiguous_... S20590C2::S20590C7 */ AMB_check_base_class_offset(lv, (S20590C7*)(S20590C2*), ABISELECT(176,124), "S20590C1");
    check_base_class_offset(lv, (S20590C2*), ABISELECT(8,4), "S20590C1");
    test_class_info(&lv, &cd_S20590C1);
    dp->~S20590C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20590C1(Test_S20590C1, "S20590C1", ABISELECT(360,248));

#else // __cplusplus

extern void _ZN8S20590C1C1Ev();
extern void _ZN8S20590C1D2Ev();
Name_Map name_map_S20590C1[] = {
  NSPAIR(_ZN8S20590C1C1Ev),
  NSPAIR(_ZN8S20590C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20590C6;
extern VTBL_ENTRY _ZTI8S20590C6[];
extern  VTBL_ENTRY _ZTV8S20590C6[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C9;
extern VTBL_ENTRY _ZTI8S20590C9[];
extern  VTBL_ENTRY _ZTV8S20590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C9[];
extern Class_Descriptor cd_S20590C10;
extern VTBL_ENTRY _ZTI9S20590C10[];
extern  VTBL_ENTRY _ZTV9S20590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C10[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
extern Class_Descriptor cd_S20590C5;
extern VTBL_ENTRY _ZTI8S20590C5[];
extern  VTBL_ENTRY _ZTV8S20590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C5[];
extern Class_Descriptor cd_S20590C4;
extern VTBL_ENTRY _ZTI8S20590C4[];
extern  VTBL_ENTRY _ZTV8S20590C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C4[];
extern Class_Descriptor cd_S20590C3;
extern VTBL_ENTRY _ZTI8S20590C3[];
extern  VTBL_ENTRY _ZTV8S20590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C3[];
extern Class_Descriptor cd_S20590C8;
extern VTBL_ENTRY _ZTI8S20590C8[];
extern  VTBL_ENTRY _ZTV8S20590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C8[];
extern Class_Descriptor cd_S20590C12;
extern VTBL_ENTRY _ZTI9S20590C12[];
extern  VTBL_ENTRY _ZTV9S20590C12[];
extern Class_Descriptor cd_S20590C11;
extern VTBL_ENTRY _ZTI9S20590C11[];
extern  VTBL_ENTRY _ZTV9S20590C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20590C11[];
extern Class_Descriptor cd_S20590C7;
extern VTBL_ENTRY _ZTI8S20590C7[];
extern  VTBL_ENTRY _ZTV8S20590C7[];
extern Class_Descriptor cd_S20590C2;
extern VTBL_ENTRY _ZTI8S20590C2[];
extern  VTBL_ENTRY _ZTV8S20590C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C2[];
static Base_Class bases_S20590C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20590C6,    ABISELECT(256,176), //bcp->offset
    132, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20590C7,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C7,    ABISELECT(312,208), //bcp->offset
    155, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20590C9,    ABISELECT(272,184), //bcp->offset
    140, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20590C10,    ABISELECT(328,220), //bcp->offset
    173, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20590C8,    ABISELECT(240,164), //bcp->offset
    123, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20590C5,    ABISELECT(224,152), //bcp->offset
    84, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20590C4,    ABISELECT(200,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20590C3,    ABISELECT(200,140), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20590C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20590C12,    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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20590C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20590C7,    ABISELECT(176,124), //bcp->offset
    60, //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
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20590C2,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20590C1[];
extern void ABISELECT(_ZTv0_n48_N8S20590C1D1Ev,_ZTv0_n24_N8S20590C1D1Ev)();
extern void _ZN8S20590C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20590C1D0Ev,_ZTv0_n24_N8S20590C1D0Ev)();
extern void _ZN8S20590C1D0Ev() __attribute__((weak));
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C12v1Ev();
extern void _ZN9S20590C123v34Ev();
extern void _ZN9S20590C123v35Ev();
extern void _ZN9S20590C123v36Ev();
extern void _ZN9S20590C123v37Ev();
extern void _ZN9S20590C123v38Ev();
extern void _ZN9S20590C123v39Ev();
extern void ABISELECT(_ZTv0_n128_N8S20590C1D1Ev,_ZTv0_n64_N8S20590C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20590C1D1Ev,_ZThn4_N8S20590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S20590C1D0Ev,_ZTv0_n64_N8S20590C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20590C1D0Ev,_ZThn4_N8S20590C1D0Ev)() __attribute__((weak));
extern void _ZN9S20590C113v40Ev();
extern void _ZN8S20590C23v41Ev();
extern void _ZN8S20590C23v42Ev();
extern void _ZN8S20590C23v43Ev();
extern void _ZN8S20590C23v44Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void _ZN8S20590C43v32Ev();
extern void ABISELECT(_ZTv0_n72_N8S20590C1D1Ev,_ZTv0_n36_N8S20590C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20590C1D1Ev,_ZThn140_N8S20590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20590C1D0Ev,_ZTv0_n36_N8S20590C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20590C1D0Ev,_ZThn140_N8S20590C1D0Ev)() __attribute__((weak));
extern void _ZN8S20590C33v33Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C1D1Ev,_ZTv0_n60_N8S20590C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20590C1D1Ev,_ZThn152_N8S20590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C1D0Ev,_ZTv0_n60_N8S20590C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20590C1D0Ev,_ZThn152_N8S20590C1D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20590C1D1Ev,_ZTvn12_n60_N8S20590C1D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C1D0Ev,_ZTvn12_n60_N8S20590C1D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20590C1D1Ev,_ZTv0_n20_N8S20590C1D1Ev)();
extern void ABISELECT(_ZThn328_N8S20590C1D1Ev,_ZThn220_N8S20590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C1D0Ev,_ZTv0_n20_N8S20590C1D0Ev)();
extern void ABISELECT(_ZThn328_N8S20590C1D0Ev,_ZThn220_N8S20590C1D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY vtc_S20590C1[] = {
  0,
  ABISELECT(256,176),
  ABISELECT(224,152),
  ABISELECT(200,140),
  ABISELECT(8,4),
  0,
  0,
  0,
  ABISELECT(328,220),
  ABISELECT(312,208),
  ABISELECT(272,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20590C1D1Ev,_ZTv0_n24_N8S20590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20590C1D0Ev,_ZTv0_n24_N8S20590C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20590C12v1Ev,
  ABISELECT(168,120),
  ABISELECT(168,120),
  ABISELECT(168,120),
  ABISELECT(168,120),
  ABISELECT(168,120),
  ABISELECT(168,120),
  ABISELECT(168,120),
  ABISELECT(168,120),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,172),
  ABISELECT(216,148),
  ABISELECT(192,136),
  ABISELECT(320,216),
  ABISELECT(304,204),
  ABISELECT(264,180),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&_ZN9S20590C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v39Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20590C1D1Ev,_ZTv0_n64_N8S20590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20590C1D0Ev,_ZTv0_n64_N8S20590C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C113v40Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v41Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v42Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v43Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v44Ev,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  ABISELECT(-200,-140),
  0,
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  ABISELECT(-200,-140),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20590C1D1Ev,_ZTv0_n36_N8S20590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20590C1D0Ev,_ZTv0_n36_N8S20590C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C33v33Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C1D1Ev,_ZTv0_n60_N8S20590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C1D0Ev,_ZTv0_n60_N8S20590C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C1D1Ev,_ZTvn12_n60_N8S20590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C1D0Ev,_ZTvn12_n60_N8S20590C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-220),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI8S20590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C1D1Ev,_ZTv0_n20_N8S20590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C1D0Ev,_ZTv0_n20_N8S20590C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20590C1[];
extern void _ZN9S20590C123v34Ev();
extern void _ZN9S20590C123v35Ev();
extern void _ZN9S20590C123v36Ev();
extern void _ZN9S20590C123v37Ev();
extern void _ZN9S20590C123v38Ev();
extern void _ZN9S20590C123v39Ev();
extern void _ZN8S20590C2D1Ev();
extern void _ZN8S20590C2D0Ev();
extern void _ZN9S20590C113v40Ev();
extern void _ZN8S20590C23v41Ev();
extern void _ZN8S20590C23v42Ev();
extern void _ZN8S20590C23v43Ev();
extern void _ZN8S20590C23v44Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C2__8S20590C1[] = {
  ABISELECT(248,172),
  ABISELECT(216,148),
  ABISELECT(192,136),
  ABISELECT(320,216),
  ABISELECT(304,204),
  ABISELECT(264,180),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN9S20590C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v39Ev,
  (VTBL_ENTRY)&_ZN8S20590C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C2D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C113v40Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v41Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v42Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v43Ev,
  (VTBL_ENTRY)&_ZN8S20590C23v44Ev,
};
extern void _ZN9S20590C123v34Ev();
extern void _ZN9S20590C123v35Ev();
extern void _ZN9S20590C123v36Ev();
extern void _ZN9S20590C123v37Ev();
extern void _ZN9S20590C123v38Ev();
extern void _ZN9S20590C123v39Ev();
extern void _ZN9S20590C11D1Ev();
extern void _ZN9S20590C11D0Ev();
extern void _ZN9S20590C113v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C118S20590C2__8S20590C1[] = {
  ABISELECT(320,216),
  ABISELECT(304,204),
  ABISELECT(264,180),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN9S20590C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20590C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20590C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C113v40Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__9S20590C118S20590C2__8S20590C1[] = {
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(328,220),
  ABISELECT(312,208),
  ABISELECT(272,184),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20590C11D1Ev,_ZTv0_n24_N9S20590C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20590C11D0Ev,_ZTv0_n24_N9S20590C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C118S20590C2__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C118S20590C2__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev)();
extern void ABISELECT(_ZThn320_N9S20590C11D1Ev,_ZThn216_N9S20590C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev)();
extern void ABISELECT(_ZThn320_N9S20590C11D0Ev,_ZThn216_N9S20590C11D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__9S20590C118S20590C2__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-216),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-216),
  (VTBL_ENTRY)&(_ZTI9S20590C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C43v32Ev();
extern void ABISELECT(_ZTv0_n72_N8S20590C2D1Ev,_ZTv0_n36_N8S20590C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S20590C2D1Ev,_ZThn136_N8S20590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20590C2D0Ev,_ZTv0_n36_N8S20590C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S20590C2D0Ev,_ZThn136_N8S20590C2D0Ev)() __attribute__((weak));
extern void _ZN8S20590C33v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C3__8S20590C2__8S20590C1[] = {
  0,
  ABISELECT(-192,-136),
  0,
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20590C2D1Ev,_ZTv0_n36_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20590C2D0Ev,_ZTv0_n36_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C33v33Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C2D1Ev,_ZTv0_n60_N8S20590C2D1Ev)();
extern void ABISELECT(_ZThn216_N8S20590C2D1Ev,_ZThn148_N8S20590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C2D0Ev,_ZTv0_n60_N8S20590C2D0Ev)();
extern void ABISELECT(_ZThn216_N8S20590C2D0Ev,_ZThn148_N8S20590C2D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C2__8S20590C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-148),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-216,-148),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C2D1Ev,_ZTv0_n60_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C2D0Ev,_ZTv0_n60_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C2__8S20590C1[] = {
  0,
  0,
  0,
  ABISELECT(-248,-172),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20590C2D1Ev,_ZTvn12_n60_N8S20590C2D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C2D0Ev,_ZTvn12_n60_N8S20590C2D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C2__8S20590C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-232,-160),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C2D1Ev,_ZTvn12_n60_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C2D0Ev,_ZTvn12_n60_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C2__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-180),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C2__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C2D1Ev,_ZTv0_n20_N8S20590C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20590C2D1Ev,_ZThn216_N8S20590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C2D0Ev,_ZTv0_n20_N8S20590C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20590C2D0Ev,_ZThn216_N8S20590C2D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C2__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-216),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-216),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C2D1Ev,_ZTv0_n20_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C2D0Ev,_ZTv0_n20_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20590C2D1Ev,_ZTv0_n24_N8S20590C2D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20590C2D0Ev,_ZTv0_n24_N8S20590C2D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__A1__8S20590C2__8S20590C1[] = {
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(328,220),
  ABISELECT(312,208),
  ABISELECT(272,184),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20590C2D1Ev,_ZTv0_n24_N8S20590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20590C2D0Ev,_ZTv0_n24_N8S20590C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C43v32Ev();
extern void _ZN8S20590C3D1Ev();
extern void _ZN8S20590C3D0Ev();
extern void _ZN8S20590C33v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C3__8S20590C1[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C33v33Ev,
};
extern void _ZN8S20590C43v32Ev();
extern void _ZN8S20590C4D1Ev();
extern void _ZN8S20590C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C48S20590C3__8S20590C1[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C4D0Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C48S20590C3__8S20590C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C48S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C48S20590C3__8S20590C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D1Ev,_ZTvn12_n60_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C4D0Ev,_ZTvn12_n60_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C48S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C48S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C48S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20590C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20590C3D1Ev,_ZThn12_N8S20590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20590C3D0Ev,_ZThn12_N8S20590C3D0Ev)() __attribute__((weak));
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C3__8S20590C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20590C3D1Ev,_ZTvn12_n60_N8S20590C3D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20590C3D0Ev,_ZTvn12_n60_N8S20590C3D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C3__8S20590C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C3D1Ev,_ZTvn12_n60_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20590C3D0Ev,_ZTvn12_n60_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S20590C3D1Ev,_ZThn80_N8S20590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S20590C3D0Ev,_ZThn80_N8S20590C3D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C3__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
extern void _ZN8S20590C5D1Ev();
extern void _ZN8S20590C5D0Ev();
extern void _ZN8S20590C53v26Ev();
extern void _ZN8S20590C53v27Ev();
extern void _ZN8S20590C53v28Ev();
extern void _ZN8S20590C53v29Ev();
extern void _ZN8S20590C53v30Ev();
extern void _ZN8S20590C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C5__8S20590C1[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20590C53v31Ev,
};
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C88S20590C5__8S20590C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C62v2Ev();
extern void _ZN8S20590C62v3Ev();
extern void _ZN8S20590C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C6__8S20590C5__8S20590C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20590C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev)();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__8S20590C5__8S20590C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D1Ev,_ZThn12_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20590C5D0Ev,_ZThn12_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C5__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__A1__8S20590C5__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C5__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C9__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20590C9[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN9S20590C10D1Ev();
extern void _ZN9S20590C10D0Ev();
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN9S20590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20590C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__9S20590C10__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__9S20590C10__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20590C10[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void _ZN8S20590C8D1Ev();
extern void _ZN8S20590C8D0Ev();
extern void _ZN8S20590C83v24Ev();
extern void _ZN8S20590C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C8__A1__8S20590C1[] = {
  ABISELECT(328,220),
  ABISELECT(312,208),
  ABISELECT(272,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20590C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20590C83v25Ev,
};
extern void _ZN8S20590C93v13Ev();
extern void _ZN8S20590C93v14Ev();
extern void _ZN8S20590C93v15Ev();
extern void _ZN8S20590C93v16Ev();
extern void _ZN8S20590C93v17Ev();
extern void _ZN8S20590C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C9__8S20590C8__A1__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20590C93v18Ev,
};
extern void _ZN8S20590C72v5Ev();
extern void _ZN8S20590C72v6Ev();
extern void _ZN8S20590C72v7Ev();
extern void _ZN8S20590C72v8Ev();
extern void _ZN8S20590C72v9Ev();
extern void _ZN8S20590C73v10Ev();
extern void _ZN8S20590C73v11Ev();
extern void _ZN8S20590C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20590C7__8S20590C8__A1__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&_ZN8S20590C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20590C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20590C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev)();
extern void ABISELECT(_ZThn328_N8S20590C8D1Ev,_ZThn220_N8S20590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev)();
extern void ABISELECT(_ZThn328_N8S20590C8D0Ev,_ZThn220_N8S20590C8D0Ev)() __attribute__((weak));
extern void _ZN9S20590C103v19Ev();
extern void _ZN9S20590C103v20Ev();
extern void _ZN9S20590C103v21Ev();
extern void _ZN9S20590C103v22Ev();
extern void _ZN9S20590C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20590C10__8S20590C8__A1__8S20590C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-220),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI8S20590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20590C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20590C103v23Ev,
};
static  VTT_ENTRY vtt_S20590C1[] = {
  {&(_ZTV8S20590C1[13]),  13,190},
  {&(_ZTV8S20590C1[47]),  47,190},
  {&(_ZTV8S20590C1[80]),  80,190},
  {&(_ZTV8S20590C1[107]),  107,190},
  {&(_ZTV8S20590C1[137]),  137,190},
  {&(_ZTV8S20590C1[128]),  128,190},
  {&(_ZTV8S20590C1[149]),  149,190},
  {&(_ZTV8S20590C1[165]),  165,190},
  {&(_ZTV8S20590C1[183]),  183,190},
  {&(_ZTV8S20590C1[13]),  13,190},
  {&(_ZTV8S20590C1[62]),  62,190},
  {&(_tg__ZTV8S20590C2__8S20590C1[9]),  9,22},
  {&(_tg__ZTV9S20590C118S20590C2__8S20590C1[6]),  6,15},
  {&(_tg__ZTV8S20590C8__9S20590C118S20590C2__8S20590C1[8]),  8,12},
  {&(_tg__ZTV8S20590C9__9S20590C118S20590C2__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C118S20590C2__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__9S20590C118S20590C2__8S20590C1[10]),  10,17},
  {&(_tg__ZTV8S20590C3__8S20590C2__8S20590C1[10]),  10,14},
  {&(_tg__ZTV8S20590C5__8S20590C2__8S20590C1[23]),  23,39},
  {&(_tg__ZTV8S20590C6__8S20590C2__8S20590C1[5]),  5,8},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C2__8S20590C1[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C2__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C2__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C2__8S20590C1[10]),  10,17},
  {&(_tg__ZTV8S20590C8__A1__8S20590C2__8S20590C1[8]),  8,12},
  {&(_tg__ZTV8S20590C3__8S20590C1[7]),  7,11},
  {&(_tg__ZTV8S20590C48S20590C3__8S20590C1[7]),  7,10},
  {&(_tg__ZTV8S20590C5__8S20590C48S20590C3__8S20590C1[23]),  23,39},
  {&(_tg__ZTV8S20590C6__8S20590C48S20590C3__8S20590C1[5]),  5,8},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C48S20590C3__8S20590C1[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C48S20590C3__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C48S20590C3__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C48S20590C3__8S20590C1[10]),  10,17},
  {&(_tg__ZTV8S20590C5__8S20590C3__8S20590C1[23]),  23,39},
  {&(_tg__ZTV8S20590C6__8S20590C3__8S20590C1[5]),  5,8},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C3__8S20590C1[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C3__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C3__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C3__8S20590C1[10]),  10,17},
  {&(_tg__ZTV8S20590C5__8S20590C1[6]),  6,22},
  {&(_tg__ZTV8S20590C88S20590C5__8S20590C1[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C88S20590C5__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C88S20590C5__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C88S20590C5__8S20590C1[10]),  10,17},
  {&(_tg__ZTV8S20590C6__8S20590C5__8S20590C1[5]),  5,8},
  {&(_tg__ZTV8S20590C8__8S20590C5__8S20590C1[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C5__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__A1__8S20590C5__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C5__8S20590C1[10]),  10,17},
  {&(_tg__ZTV8S20590C9__8S20590C1[3]),  3,9},
  {&(_tg__ZTV8S20590C7__8S20590C9__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C1[4]),  4,11},
  {&(_tg__ZTV8S20590C9__9S20590C10__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__9S20590C10__8S20590C1[10]),  10,18},
  {&(_tg__ZTV8S20590C8__A1__8S20590C1[5]),  5,9},
  {&(_tg__ZTV8S20590C9__8S20590C8__A1__8S20590C1[9]),  9,15},
  {&(_tg__ZTV8S20590C7__8S20590C8__A1__8S20590C1[10]),  10,18},
  {&(_tg__ZTV9S20590C10__8S20590C8__A1__8S20590C1[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S20590C1[];
extern  VTBL_ENTRY _ZTV8S20590C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20590C1[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D0Ev,_ZTv0_n20_N8S20590C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D0Ev,_ZThn68_N8S20590C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C5D1Ev,_ZTv0_n20_N8S20590C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20590C5D1Ev,_ZThn68_N8S20590C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D0Ev,_ZTv0_n20_N8S20590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20590C8D0Ev,_ZThn220_N8S20590C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D0Ev,_ZThn56_N8S20590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C8D1Ev,_ZTv0_n20_N8S20590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20590C8D1Ev,_ZThn220_N8S20590C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20590C8D1Ev,_ZThn56_N8S20590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C3D0Ev,_ZTv0_n20_N8S20590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C3D0Ev,_ZThn80_N8S20590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C3D1Ev,_ZTv0_n20_N8S20590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C3D1Ev,_ZThn80_N8S20590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C3D0Ev,_ZTv0_n60_N8S20590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C3D0Ev,_ZThn12_N8S20590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C3D1Ev,_ZTv0_n60_N8S20590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C3D1Ev,_ZThn12_N8S20590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D0Ev,_ZTv0_n20_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D0Ev,_ZThn80_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C4D1Ev,_ZTv0_n20_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20590C4D1Ev,_ZThn80_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D0Ev,_ZTv0_n60_N8S20590C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D0Ev,_ZThn12_N8S20590C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C4D1Ev,_ZTv0_n60_N8S20590C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20590C4D1Ev,_ZThn12_N8S20590C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C2D0Ev,_ZTv0_n20_N8S20590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20590C2D0Ev,_ZThn216_N8S20590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C2D1Ev,_ZTv0_n20_N8S20590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20590C2D1Ev,_ZThn216_N8S20590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C2D0Ev,_ZTv0_n60_N8S20590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20590C2D0Ev,_ZThn148_N8S20590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C2D1Ev,_ZTv0_n60_N8S20590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20590C2D1Ev,_ZThn148_N8S20590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20590C2D0Ev,_ZTv0_n36_N8S20590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20590C2D0Ev,_ZThn136_N8S20590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20590C2D1Ev,_ZTv0_n36_N8S20590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20590C2D1Ev,_ZThn136_N8S20590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20590C11D0Ev,_ZTv0_n20_N9S20590C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20590C11D0Ev,_ZThn216_N9S20590C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20590C11D1Ev,_ZTv0_n20_N9S20590C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20590C11D1Ev,_ZThn216_N9S20590C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C1D0Ev,_ZTv0_n20_N8S20590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20590C1D0Ev,_ZThn220_N8S20590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20590C1D1Ev,_ZTv0_n20_N8S20590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20590C1D1Ev,_ZThn220_N8S20590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C1D0Ev,_ZTv0_n60_N8S20590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20590C1D0Ev,_ZThn152_N8S20590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20590C1D1Ev,_ZTv0_n60_N8S20590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20590C1D1Ev,_ZThn152_N8S20590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20590C1D0Ev,_ZTv0_n36_N8S20590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20590C1D0Ev,_ZThn140_N8S20590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20590C1D1Ev,_ZTv0_n36_N8S20590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20590C1D1Ev,_ZThn140_N8S20590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20590C1D0Ev,_ZTv0_n64_N8S20590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20590C1D0Ev,_ZThn4_N8S20590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20590C1D1Ev,_ZTv0_n64_N8S20590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20590C1D1Ev,_ZThn4_N8S20590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20590C1D0Ev,_ZTv0_n24_N8S20590C1D0Ev), // 
  (VTBL_ENTRY)_ZN8S20590C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20590C1D1Ev,_ZTv0_n24_N8S20590C1D1Ev), // 
  (VTBL_ENTRY)_ZN8S20590C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20590C1 = {  "S20590C1", // class name
  bases_S20590C1, 14,
  &(vtc_S20590C1[0]), // expected_vtbl_contents
  &(vtt_S20590C1[0]), // expected_vtt_contents
  ABISELECT(360,248), // object size
  NSPAIRA(_ZTI8S20590C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20590C1),190, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20590C1),58, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20589C6  {
  int s20589c6f0;
  virtual void  v2(); // _ZN8S20589C62v2Ev
  virtual void  v3(); // _ZN8S20589C62v3Ev
  virtual void  v4(); // _ZN8S20589C62v4Ev
  ~S20589C6(); // tgen
  S20589C6(); // tgen
};
//SIG(-1 S20589C6) C1{ v1 v2 v3 Fi}


void  S20589C6 ::v2(){vfunc_called(this, "_ZN8S20589C62v2Ev");}
void  S20589C6 ::v3(){vfunc_called(this, "_ZN8S20589C62v3Ev");}
void  S20589C6 ::v4(){vfunc_called(this, "_ZN8S20589C62v4Ev");}
S20589C6 ::~S20589C6(){ note_dtor("S20589C6", this);} // tgen
S20589C6 ::S20589C6(){ note_ctor("S20589C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20589C6C1Ev();
extern void _ZN8S20589C6D1Ev();
Name_Map name_map_S20589C6[] = {
  NSPAIR(_ZN8S20589C6C1Ev),
  NSPAIR(_ZN8S20589C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20589C6[];
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY vtc_S20589C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C6[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern VTBL_ENTRY _ZTI8S20589C6[];
extern  VTBL_ENTRY _ZTV8S20589C6[];
Class_Descriptor cd_S20589C6 = {  "S20589C6", // class name
  0,0,//no base classes
  &(vtc_S20589C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20589C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20589C6),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  S20589C7  {
  __tsi64 s20589c7f0;
  virtual void  v5(); // _ZN8S20589C72v5Ev
  virtual void  v6(); // _ZN8S20589C72v6Ev
  virtual void  v7(); // _ZN8S20589C72v7Ev
  virtual void  v8(); // _ZN8S20589C72v8Ev
  virtual void  v9(); // _ZN8S20589C72v9Ev
  virtual void  v10(); // _ZN8S20589C73v10Ev
  virtual void  v11(); // _ZN8S20589C73v11Ev
  virtual void  v12(); // _ZN8S20589C73v12Ev
  ~S20589C7(); // tgen
  S20589C7(); // tgen
};
//SIG(-1 S20589C7) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S20589C7 ::v5(){vfunc_called(this, "_ZN8S20589C72v5Ev");}
void  S20589C7 ::v6(){vfunc_called(this, "_ZN8S20589C72v6Ev");}
void  S20589C7 ::v7(){vfunc_called(this, "_ZN8S20589C72v7Ev");}
void  S20589C7 ::v8(){vfunc_called(this, "_ZN8S20589C72v8Ev");}
void  S20589C7 ::v9(){vfunc_called(this, "_ZN8S20589C72v9Ev");}
void  S20589C7 ::v10(){vfunc_called(this, "_ZN8S20589C73v10Ev");}
void  S20589C7 ::v11(){vfunc_called(this, "_ZN8S20589C73v11Ev");}
void  S20589C7 ::v12(){vfunc_called(this, "_ZN8S20589C73v12Ev");}
S20589C7 ::~S20589C7(){ note_dtor("S20589C7", this);} // tgen
S20589C7 ::S20589C7(){ note_ctor("S20589C7", this);} // tgen

static void Test_S20589C7()
{
  extern Class_Descriptor cd_S20589C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20589C7, buf);
    S20589C7 *dp, &lv = *(dp=new (buf) S20589C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20589C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C7)");
    check_field_offset(lv, s20589c7f0, ABISELECT(8,4), "S20589C7.s20589c7f0");
    test_class_info(&lv, &cd_S20589C7);
    dp->~S20589C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C7(Test_S20589C7, "S20589C7", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20589C7C1Ev();
extern void _ZN8S20589C7D1Ev();
Name_Map name_map_S20589C7[] = {
  NSPAIR(_ZN8S20589C7C1Ev),
  NSPAIR(_ZN8S20589C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20589C7[];
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY vtc_S20589C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C7[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
Class_Descriptor cd_S20589C7 = {  "S20589C7", // class name
  0,0,//no base classes
  &(vtc_S20589C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20589C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20589C7),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  S20589C9  : virtual S20589C7 {
  ::S20589C7 s20589c9f0;
  int s20589c9f1;
  void *s20589c9f2;
  virtual void  v13(); // _ZN8S20589C93v13Ev
  virtual void  v14(); // _ZN8S20589C93v14Ev
  virtual void  v15(); // _ZN8S20589C93v15Ev
  virtual void  v16(); // _ZN8S20589C93v16Ev
  virtual void  v17(); // _ZN8S20589C93v17Ev
  virtual void  v18(); // _ZN8S20589C93v18Ev
  ~S20589C9(); // tgen
  S20589C9(); // tgen
};
//SIG(-1 S20589C9) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S20589C9 ::v13(){vfunc_called(this, "_ZN8S20589C93v13Ev");}
void  S20589C9 ::v14(){vfunc_called(this, "_ZN8S20589C93v14Ev");}
void  S20589C9 ::v15(){vfunc_called(this, "_ZN8S20589C93v15Ev");}
void  S20589C9 ::v16(){vfunc_called(this, "_ZN8S20589C93v16Ev");}
void  S20589C9 ::v17(){vfunc_called(this, "_ZN8S20589C93v17Ev");}
void  S20589C9 ::v18(){vfunc_called(this, "_ZN8S20589C93v18Ev");}
S20589C9 ::~S20589C9(){ note_dtor("S20589C9", this);} // tgen
S20589C9 ::S20589C9(){ note_ctor("S20589C9", this);} // tgen

static void Test_S20589C9()
{
  extern Class_Descriptor cd_S20589C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S20589C9, buf);
    S20589C9 *dp, &lv = *(dp=new (buf) S20589C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S20589C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C9)");
    check_base_class_offset(lv, (S20589C7*), ABISELECT(40,24), "S20589C9");
    check_field_offset(lv, s20589c9f0, ABISELECT(8,4), "S20589C9.s20589c9f0");
    check_field_offset(lv, s20589c9f1, ABISELECT(24,16), "S20589C9.s20589c9f1");
    check_field_offset(lv, s20589c9f2, ABISELECT(32,20), "S20589C9.s20589c9f2");
    test_class_info(&lv, &cd_S20589C9);
    dp->~S20589C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C9(Test_S20589C9, "S20589C9", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S20589C9C1Ev();
extern void _ZN8S20589C9D1Ev();
Name_Map name_map_S20589C9[] = {
  NSPAIR(_ZN8S20589C9C1Ev),
  NSPAIR(_ZN8S20589C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
static Base_Class bases_S20589C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C7,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI8S20589C9[];
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY vtc_S20589C9[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern VTBL_ENTRY _ZTV8S20589C9[];
static  VTT_ENTRY vtt_S20589C9[] = {
  {&(_ZTV8S20589C9[3]),  3,27},
  {&(_ZTV8S20589C9[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
Class_Descriptor cd_S20589C9 = {  "S20589C9", // class name
  bases_S20589C9, 1,
  &(vtc_S20589C9[0]), // expected_vtbl_contents
  &(vtt_S20589C9[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S20589C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20589C9),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20589C9),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  S20589C10  : virtual S20589C9 {
  short s20589c10f0[6];
  int s20589c10f1;
  short s20589c10f2;
  char s20589c10f3[6];
  virtual  ~S20589C10(); // _ZN9S20589C10D2Ev
  virtual void  v19(); // _ZN9S20589C103v19Ev
  virtual void  v20(); // _ZN9S20589C103v20Ev
  virtual void  v21(); // _ZN9S20589C103v21Ev
  virtual void  v22(); // _ZN9S20589C103v22Ev
  virtual void  v23(); // _ZN9S20589C103v23Ev
  S20589C10(); // tgen
};
//SIG(-1 S20589C10) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13 FL} v14 v15 v16 v17 v18 v19 FC3 Fi Fp} vd v1 v2 v3 v4 v5 Fs[6] Fi Fs Fc[6]}


 S20589C10 ::~S20589C10(){ note_dtor("S20589C10", this);}
void  S20589C10 ::v19(){vfunc_called(this, "_ZN9S20589C103v19Ev");}
void  S20589C10 ::v20(){vfunc_called(this, "_ZN9S20589C103v20Ev");}
void  S20589C10 ::v21(){vfunc_called(this, "_ZN9S20589C103v21Ev");}
void  S20589C10 ::v22(){vfunc_called(this, "_ZN9S20589C103v22Ev");}
void  S20589C10 ::v23(){vfunc_called(this, "_ZN9S20589C103v23Ev");}
S20589C10 ::S20589C10(){ note_ctor("S20589C10", this);} // tgen

static void Test_S20589C10()
{
  extern Class_Descriptor cd_S20589C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S20589C10, buf);
    S20589C10 *dp, &lv = *(dp=new (buf) S20589C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S20589C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C10)");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(72,52), "S20589C10");
    check_base_class_offset(lv, (S20589C9*), ABISELECT(32,28), "S20589C10");
    check_field_offset(lv, s20589c10f0, ABISELECT(8,4), "S20589C10.s20589c10f0");
    check_field_offset(lv, s20589c10f1, ABISELECT(20,16), "S20589C10.s20589c10f1");
    check_field_offset(lv, s20589c10f2, ABISELECT(24,20), "S20589C10.s20589c10f2");
    check_field_offset(lv, s20589c10f3, ABISELECT(26,22), "S20589C10.s20589c10f3");
    test_class_info(&lv, &cd_S20589C10);
    dp->~S20589C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C10(Test_S20589C10, "S20589C10", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN9S20589C10C1Ev();
extern void _ZN9S20589C10D2Ev();
Name_Map name_map_S20589C10[] = {
  NSPAIR(_ZN9S20589C10C1Ev),
  NSPAIR(_ZN9S20589C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
static Base_Class bases_S20589C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C7,    ABISELECT(72,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //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_S20589C9,    ABISELECT(32,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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 _ZTI9S20589C10[];
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY vtc_S20589C10[] = {
  ABISELECT(72,52),
  ABISELECT(32,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern VTBL_ENTRY _ZTV9S20589C10[];
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__9S20589C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
static  VTT_ENTRY vtt_S20589C10[] = {
  {&(_ZTV9S20589C10[4]),  4,44},
  {&(_ZTV9S20589C10[20]),  20,44},
  {&(_ZTV9S20589C10[36]),  36,44},
  {&(_tg__ZTV8S20589C9__9S20589C10[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__9S20589C10[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
Class_Descriptor cd_S20589C10 = {  "S20589C10", // class name
  bases_S20589C10, 2,
  &(vtc_S20589C10[0]), // expected_vtbl_contents
  &(vtt_S20589C10[0]), // expected_vtt_contents
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI9S20589C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20589C10),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20589C10),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  S20589C8  : virtual S20589C9 , virtual S20589C10 {
  virtual  ~S20589C8(); // _ZN8S20589C8D2Ev
  virtual void  v24(); // _ZN8S20589C83v24Ev
  virtual void  v25(); // _ZN8S20589C83v25Ev
  S20589C8(); // tgen
};
//SIG(-1 S20589C8) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 FL} v11 v12 v13 v14 v15 v16 FC3 Fi Fp} VBC4{ VBC2 vd v17 v18 v19 v20 v21 Fs[6] Fi Fs Fc[6]} vd v1 v2}


 S20589C8 ::~S20589C8(){ note_dtor("S20589C8", this);}
void  S20589C8 ::v24(){vfunc_called(this, "_ZN8S20589C83v24Ev");}
void  S20589C8 ::v25(){vfunc_called(this, "_ZN8S20589C83v25Ev");}
S20589C8 ::S20589C8(){ note_ctor("S20589C8", this);} // tgen

static void Test_S20589C8()
{
  extern Class_Descriptor cd_S20589C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S20589C8, buf);
    S20589C8 *dp, &lv = *(dp=new (buf) S20589C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S20589C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C8)");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(48,28), "S20589C8");
    check_base_class_offset(lv, (S20589C9*), ABISELECT(8,4), "S20589C8");
    check_base_class_offset(lv, (S20589C9*)(S20589C10*), ABISELECT(8,4), "S20589C8");
    check_base_class_offset(lv, (S20589C10*), ABISELECT(64,40), "S20589C8");
    test_class_info(&lv, &cd_S20589C8);
    dp->~S20589C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C8(Test_S20589C8, "S20589C8", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN8S20589C8C1Ev();
extern void _ZN8S20589C8D2Ev();
Name_Map name_map_S20589C8[] = {
  NSPAIR(_ZN8S20589C8C1Ev),
  NSPAIR(_ZN8S20589C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
extern Class_Descriptor cd_S20589C10;
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
static Base_Class bases_S20589C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C7,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S20589C9,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //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_S20589C10,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S20589C8[];
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20589C8D1Ev,_ZThn40_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20589C8D0Ev,_ZThn40_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY vtc_S20589C8[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20589C8[];
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C8[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__8S20589C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10__8S20589C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C10__8S20589C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
static  VTT_ENTRY vtt_S20589C8[] = {
  {&(_ZTV8S20589C8[5]),  5,59},
  {&(_ZTV8S20589C8[18]),  18,59},
  {&(_ZTV8S20589C8[34]),  34,59},
  {&(_ZTV8S20589C8[52]),  52,59},
  {&(_tg__ZTV8S20589C9__8S20589C8[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__8S20589C8[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C8[4]),  4,11},
  {&(_tg__ZTV8S20589C9__9S20589C10__8S20589C8[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C10__8S20589C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20589C8D0Ev,_ZThn40_N8S20589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20589C8D1Ev,_ZThn40_N8S20589C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20589C8 = {  "S20589C8", // class name
  bases_S20589C8, 3,
  &(vtc_S20589C8[0]), // expected_vtbl_contents
  &(vtt_S20589C8[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI8S20589C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20589C8),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20589C8),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20589C5  : virtual S20589C6 , S20589C7 , S20589C8 {
  char s20589c5f0[8];
  virtual  ~S20589C5(); // _ZN8S20589C5D2Ev
  virtual void  v26(); // _ZN8S20589C53v26Ev
  virtual void  v27(); // _ZN8S20589C53v27Ev
  virtual void  v28(); // _ZN8S20589C53v28Ev
  virtual void  v29(); // _ZN8S20589C53v29Ev
  virtual void  v30(); // _ZN8S20589C53v30Ev
  virtual void  v31(); // _ZN8S20589C53v31Ev
  S20589C5(); // tgen
};
//SIG(-1 S20589C5) C1{ VBC2{ v7 v8 v9 Fi} BC3{ v10 v11 v12 v13 v14 v15 v16 v17 FL} BC4{ VBC5{ VBC3 v18 v19 v20 v21 v22 v23 FC3 Fi Fp} VBC6{ VBC5 vd v24 v25 v26 v27 v28 Fs[6] Fi Fs Fc[6]} vd v29 v30} vd v1 v2 v3 v4 v5 v6 Fc[8]}


 S20589C5 ::~S20589C5(){ note_dtor("S20589C5", this);}
void  S20589C5 ::v26(){vfunc_called(this, "_ZN8S20589C53v26Ev");}
void  S20589C5 ::v27(){vfunc_called(this, "_ZN8S20589C53v27Ev");}
void  S20589C5 ::v28(){vfunc_called(this, "_ZN8S20589C53v28Ev");}
void  S20589C5 ::v29(){vfunc_called(this, "_ZN8S20589C53v29Ev");}
void  S20589C5 ::v30(){vfunc_called(this, "_ZN8S20589C53v30Ev");}
void  S20589C5 ::v31(){vfunc_called(this, "_ZN8S20589C53v31Ev");}
S20589C5 ::S20589C5(){ note_ctor("S20589C5", this);} // tgen

static void Test_S20589C5()
{
  extern Class_Descriptor cd_S20589C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S20589C5, buf);
    S20589C5 *dp, &lv = *(dp=new (buf) S20589C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S20589C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C5)");
    check_base_class_offset(lv, (S20589C6*), ABISELECT(32,24), "S20589C5");
    /*is_ambiguous_... S20589C5::S20589C7 */ AMB_check_base_class_offset(lv, (S20589C7*), 0, "S20589C5");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(88,56), "S20589C5");
    check_base_class_offset(lv, (S20589C9*)(S20589C8*), ABISELECT(48,32), "S20589C5");
    check_base_class_offset(lv, (S20589C9*)(S20589C10*), ABISELECT(48,32), "S20589C5");
    check_base_class_offset(lv, (S20589C10*)(S20589C8*), ABISELECT(104,68), "S20589C5");
    check_base_class_offset(lv, (S20589C8*), ABISELECT(16,12), "S20589C5");
    check_field_offset(lv, s20589c5f0, ABISELECT(24,16), "S20589C5.s20589c5f0");
    test_class_info(&lv, &cd_S20589C5);
    dp->~S20589C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C5(Test_S20589C5, "S20589C5", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN8S20589C5C1Ev();
extern void _ZN8S20589C5D2Ev();
Name_Map name_map_S20589C5[] = {
  NSPAIR(_ZN8S20589C5C1Ev),
  NSPAIR(_ZN8S20589C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C6;
extern VTBL_ENTRY _ZTI8S20589C6[];
extern  VTBL_ENTRY _ZTV8S20589C6[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
extern Class_Descriptor cd_S20589C10;
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
static Base_Class bases_S20589C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C6,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20589C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20589C7,    ABISELECT(88,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20589C9,    ABISELECT(48,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20589C10,    ABISELECT(104,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20589C8,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20589C5[];
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void _ZN8S20589C5D1Ev();
extern void _ZN8S20589C5D0Ev();
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
extern void ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY vtc_S20589C5[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20589C5[];
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__8S20589C5[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C8__8S20589C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C8__8S20589C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C8__8S20589C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C5[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__8S20589C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C5[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10__8S20589C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C10__8S20589C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
static  VTT_ENTRY vtt_S20589C5[] = {
  {&(_ZTV8S20589C5[6]),  6,89},
  {&(_tg__ZTV8S20589C8__8S20589C5[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C8__8S20589C5[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C8__8S20589C5[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C8__8S20589C5[10]),  10,17},
  {&(_ZTV8S20589C5[36]),  36,89},
  {&(_ZTV8S20589C5[27]),  27,89},
  {&(_ZTV8S20589C5[48]),  48,89},
  {&(_ZTV8S20589C5[64]),  64,89},
  {&(_ZTV8S20589C5[82]),  82,89},
  {&(_tg__ZTV8S20589C9__8S20589C5[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__8S20589C5[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C5[4]),  4,11},
  {&(_tg__ZTV8S20589C9__9S20589C10__8S20589C5[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C10__8S20589C5[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20589C5[];
extern  VTBL_ENTRY _ZTV8S20589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C5[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20589C5 = {  "S20589C5", // class name
  bases_S20589C5, 6,
  &(vtc_S20589C5[0]), // expected_vtbl_contents
  &(vtt_S20589C5[0]), // expected_vtt_contents
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI8S20589C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20589C5),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20589C5),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20589C4  : virtual S20589C5 {
  long s20589c4f0;
  void *s20589c4f1;
  virtual void  v32(); // _ZN8S20589C43v32Ev
  ~S20589C4(); // tgen
  S20589C4(); // tgen
};
//SIG(-1 S20589C4) C1{ VBC2{ VBC3{ v2 v3 v4 Fi} BC4{ v5 v6 v7 v8 v9 v10 v11 v12 FL} BC5{ VBC6{ VBC4 v13 v14 v15 v16 v17 v18 FC4 Fi Fp} VBC7{ VBC6 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} vd v24 v25} vd v26 v27 v28 v29 v30 v31 Fc[8]} v1 Fl Fp}


void  S20589C4 ::v32(){vfunc_called(this, "_ZN8S20589C43v32Ev");}
S20589C4 ::~S20589C4(){ note_dtor("S20589C4", this);} // tgen
S20589C4 ::S20589C4(){ note_ctor("S20589C4", this);} // tgen

static void Test_S20589C4()
{
  extern Class_Descriptor cd_S20589C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,28)];
    init_test(&cd_S20589C4, buf);
    S20589C4 *dp, &lv = *(dp=new (buf) S20589C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20589C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C4)");
    check_base_class_offset(lv, (S20589C6*)(S20589C5*), ABISELECT(56,36), "S20589C4");
    /*is_ambiguous_... S20589C5::S20589C7 */ AMB_check_base_class_offset(lv, (S20589C7*)(S20589C5*), ABISELECT(24,12), "S20589C4");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(112,68), "S20589C4");
    check_base_class_offset(lv, (S20589C9*)(S20589C8*)(S20589C5*), ABISELECT(72,44), "S20589C4");
    check_base_class_offset(lv, (S20589C9*)(S20589C10*), ABISELECT(72,44), "S20589C4");
    check_base_class_offset(lv, (S20589C10*)(S20589C8*)(S20589C5*), ABISELECT(128,80), "S20589C4");
    check_base_class_offset(lv, (S20589C8*)(S20589C5*), ABISELECT(40,24), "S20589C4");
    check_base_class_offset(lv, (S20589C5*), ABISELECT(24,12), "S20589C4");
    check_field_offset(lv, s20589c4f0, ABISELECT(8,4), "S20589C4.s20589c4f0");
    check_field_offset(lv, s20589c4f1, ABISELECT(16,8), "S20589C4.s20589c4f1");
    test_class_info(&lv, &cd_S20589C4);
    dp->~S20589C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C4(Test_S20589C4, "S20589C4", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20589C4C1Ev();
extern void _ZN8S20589C4D1Ev();
Name_Map name_map_S20589C4[] = {
  NSPAIR(_ZN8S20589C4C1Ev),
  NSPAIR(_ZN8S20589C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C6;
extern VTBL_ENTRY _ZTI8S20589C6[];
extern  VTBL_ENTRY _ZTV8S20589C6[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
extern Class_Descriptor cd_S20589C10;
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
extern Class_Descriptor cd_S20589C5;
extern VTBL_ENTRY _ZTI8S20589C5[];
extern  VTBL_ENTRY _ZTV8S20589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C5[];
static Base_Class bases_S20589C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C6,    ABISELECT(56,36), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20589C7,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C7,    ABISELECT(112,68), //bcp->offset
    81, //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_S20589C9,    ABISELECT(72,44), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20589C10,    ABISELECT(128,80), //bcp->offset
    99, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20589C8,    ABISELECT(40,24), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C5,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20589C4[];
extern void _ZN8S20589C43v32Ev();
extern void _ZN8S20589C4D1Ev();
extern void _ZN8S20589C4D0Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY vtc_S20589C4[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D0Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20589C4[];
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void _ZN8S20589C5D1Ev();
extern void _ZN8S20589C5D0Ev();
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C4[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C4[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C5__8S20589C4[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__8S20589C5__8S20589C4[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C5__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C5__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C5__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C4[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C4[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C10__8S20589C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
static  VTT_ENTRY vtt_S20589C4[] = {
  {&(_ZTV8S20589C4[7]),  7,116},
  {&(_ZTV8S20589C4[33]),  33,116},
  {&(_ZTV8S20589C4[63]),  63,116},
  {&(_ZTV8S20589C4[54]),  54,116},
  {&(_ZTV8S20589C4[75]),  75,116},
  {&(_ZTV8S20589C4[91]),  91,116},
  {&(_ZTV8S20589C4[109]),  109,116},
  {&(_tg__ZTV8S20589C5__8S20589C4[6]),  6,22},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C4[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C4[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C4[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C4[10]),  10,17},
  {&(_tg__ZTV8S20589C6__8S20589C5__8S20589C4[5]),  5,8},
  {&(_tg__ZTV8S20589C8__8S20589C5__8S20589C4[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C5__8S20589C4[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C5__8S20589C4[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C5__8S20589C4[10]),  10,17},
  {&(_tg__ZTV8S20589C9__8S20589C4[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__8S20589C4[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C4[4]),  4,11},
  {&(_tg__ZTV8S20589C9__9S20589C10__8S20589C4[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C10__8S20589C4[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20589C4[];
extern  VTBL_ENTRY _ZTV8S20589C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C4[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20589C4 = {  "S20589C4", // class name
  bases_S20589C4, 7,
  &(vtc_S20589C4[0]), // expected_vtbl_contents
  &(vtt_S20589C4[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20589C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20589C4),116, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20589C4),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20589C3  : S20589C4 {
  virtual  ~S20589C3(); // _ZN8S20589C3D2Ev
  virtual void  v33(); // _ZN8S20589C33v33Ev
  S20589C3(); // tgen
};
//SIG(-1 S20589C3) C1{ BC2{ VBC3{ VBC4{ v2 v3 v4 Fi} BC5{ v5 v6 v7 v8 v9 v10 v11 v12 FL} BC6{ VBC7{ VBC5 v13 v14 v15 v16 v17 v18 FC5 Fi Fp} VBC8{ VBC7 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} vd v24 v25} vd v26 v27 v28 v29 v30 v31 Fc[8]} v32 Fl Fp} vd v1}


 S20589C3 ::~S20589C3(){ note_dtor("S20589C3", this);}
void  S20589C3 ::v33(){vfunc_called(this, "_ZN8S20589C33v33Ev");}
S20589C3 ::S20589C3(){ note_ctor("S20589C3", this);} // tgen

static void Test_S20589C3()
{
  extern Class_Descriptor cd_S20589C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,28)];
    init_test(&cd_S20589C3, buf);
    S20589C3 *dp, &lv = *(dp=new (buf) S20589C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S20589C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C3)");
    check_base_class_offset(lv, (S20589C6*)(S20589C5*), ABISELECT(56,36), "S20589C3");
    /*is_ambiguous_... S20589C5::S20589C7 */ AMB_check_base_class_offset(lv, (S20589C7*)(S20589C5*), ABISELECT(24,12), "S20589C3");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(112,68), "S20589C3");
    check_base_class_offset(lv, (S20589C9*)(S20589C8*)(S20589C5*), ABISELECT(72,44), "S20589C3");
    check_base_class_offset(lv, (S20589C9*)(S20589C10*), ABISELECT(72,44), "S20589C3");
    check_base_class_offset(lv, (S20589C10*)(S20589C8*)(S20589C5*), ABISELECT(128,80), "S20589C3");
    check_base_class_offset(lv, (S20589C8*)(S20589C5*), ABISELECT(40,24), "S20589C3");
    check_base_class_offset(lv, (S20589C5*)(S20589C4*), ABISELECT(24,12), "S20589C3");
    check_base_class_offset(lv, (S20589C4*), 0, "S20589C3");
    test_class_info(&lv, &cd_S20589C3);
    dp->~S20589C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C3(Test_S20589C3, "S20589C3", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S20589C3C1Ev();
extern void _ZN8S20589C3D2Ev();
Name_Map name_map_S20589C3[] = {
  NSPAIR(_ZN8S20589C3C1Ev),
  NSPAIR(_ZN8S20589C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C6;
extern VTBL_ENTRY _ZTI8S20589C6[];
extern  VTBL_ENTRY _ZTV8S20589C6[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
extern Class_Descriptor cd_S20589C10;
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
extern Class_Descriptor cd_S20589C5;
extern VTBL_ENTRY _ZTI8S20589C5[];
extern  VTBL_ENTRY _ZTV8S20589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C5[];
extern Class_Descriptor cd_S20589C4;
extern VTBL_ENTRY _ZTI8S20589C4[];
extern  VTBL_ENTRY _ZTV8S20589C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C4[];
static Base_Class bases_S20589C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C6,    ABISELECT(56,36), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20589C7,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C7,    ABISELECT(112,68), //bcp->offset
    82, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20589C9,    ABISELECT(72,44), //bcp->offset
    67, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20589C10,    ABISELECT(128,80), //bcp->offset
    100, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20589C8,    ABISELECT(40,24), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C5,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20589C4,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20589C3[];
extern void _ZN8S20589C43v32Ev();
extern void _ZN8S20589C3D1Ev();
extern void _ZN8S20589C3D0Ev();
extern void _ZN8S20589C33v33Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20589C3D1Ev,_ZThn12_N8S20589C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20589C3D0Ev,_ZThn12_N8S20589C3D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20589C3D1Ev,_ZTvn12_n60_N8S20589C3D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C3D0Ev,_ZTvn12_n60_N8S20589C3D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S20589C3D1Ev,_ZThn80_N8S20589C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S20589C3D0Ev,_ZThn80_N8S20589C3D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY vtc_S20589C3[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20589C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C33v33Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C3D1Ev,_ZTvn12_n60_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C3D0Ev,_ZTvn12_n60_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20589C3[];
extern void _ZN8S20589C43v32Ev();
extern void _ZN8S20589C4D1Ev();
extern void _ZN8S20589C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C4__8S20589C3[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D0Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C4__8S20589C3[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C4__8S20589C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C4__8S20589C3[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C4__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C4__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C4__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void _ZN8S20589C5D1Ev();
extern void _ZN8S20589C5D0Ev();
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C3[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C3[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C5__8S20589C3[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__8S20589C5__8S20589C3[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C5__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C5__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C5__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C3[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C10__8S20589C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
static  VTT_ENTRY vtt_S20589C3[] = {
  {&(_ZTV8S20589C3[7]),  7,117},
  {&(_tg__ZTV8S20589C4__8S20589C3[7]),  7,10},
  {&(_tg__ZTV8S20589C5__8S20589C4__8S20589C3[23]),  23,39},
  {&(_tg__ZTV8S20589C6__8S20589C4__8S20589C3[5]),  5,8},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C4__8S20589C3[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C4__8S20589C3[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C4__8S20589C3[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C4__8S20589C3[10]),  10,17},
  {&(_ZTV8S20589C3[34]),  34,117},
  {&(_ZTV8S20589C3[64]),  64,117},
  {&(_ZTV8S20589C3[55]),  55,117},
  {&(_ZTV8S20589C3[76]),  76,117},
  {&(_ZTV8S20589C3[92]),  92,117},
  {&(_ZTV8S20589C3[110]),  110,117},
  {&(_tg__ZTV8S20589C5__8S20589C3[6]),  6,22},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C3[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C3[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C3[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C3[10]),  10,17},
  {&(_tg__ZTV8S20589C6__8S20589C5__8S20589C3[5]),  5,8},
  {&(_tg__ZTV8S20589C8__8S20589C5__8S20589C3[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C5__8S20589C3[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C5__8S20589C3[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C5__8S20589C3[10]),  10,17},
  {&(_tg__ZTV8S20589C9__8S20589C3[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__8S20589C3[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C3[4]),  4,11},
  {&(_tg__ZTV8S20589C9__9S20589C10__8S20589C3[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C10__8S20589C3[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20589C3[];
extern  VTBL_ENTRY _ZTV8S20589C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C3[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C3D0Ev,_ZThn80_N8S20589C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C3D1Ev,_ZThn80_N8S20589C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C3D0Ev,_ZThn12_N8S20589C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C3D1Ev,_ZThn12_N8S20589C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20589C3 = {  "S20589C3", // class name
  bases_S20589C3, 8,
  &(vtc_S20589C3[0]), // expected_vtbl_contents
  &(vtt_S20589C3[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S20589C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20589C3),117, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20589C3),29, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20589C12  {
  ::S7817C7 s20589c12f0;
  long s20589c12f1;
  virtual void  v34(); // _ZN9S20589C123v34Ev
  virtual void  v35(); // _ZN9S20589C123v35Ev
  virtual void  v36(); // _ZN9S20589C123v36Ev
  virtual void  v37(); // _ZN9S20589C123v37Ev
  virtual void  v38(); // _ZN9S20589C123v38Ev
  virtual void  v39(); // _ZN9S20589C123v39Ev
  ~S20589C12(); // tgen
  S20589C12(); // tgen
};
//SIG(-1 S20589C12) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} Fl}


void  S20589C12 ::v34(){vfunc_called(this, "_ZN9S20589C123v34Ev");}
void  S20589C12 ::v35(){vfunc_called(this, "_ZN9S20589C123v35Ev");}
void  S20589C12 ::v36(){vfunc_called(this, "_ZN9S20589C123v36Ev");}
void  S20589C12 ::v37(){vfunc_called(this, "_ZN9S20589C123v37Ev");}
void  S20589C12 ::v38(){vfunc_called(this, "_ZN9S20589C123v38Ev");}
void  S20589C12 ::v39(){vfunc_called(this, "_ZN9S20589C123v39Ev");}
S20589C12 ::~S20589C12(){ note_dtor("S20589C12", this);} // tgen
S20589C12 ::S20589C12(){ note_ctor("S20589C12", this);} // tgen

static void Test_S20589C12()
{
  extern Class_Descriptor cd_S20589C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20589C12, buf);
    S20589C12 *dp, &lv = *(dp=new (buf) S20589C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20589C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C12)");
    check_field_offset(lv, s20589c12f0, ABISELECT(8,4), "S20589C12.s20589c12f0");
    check_field_offset(lv, s20589c12f1, ABISELECT(152,108), "S20589C12.s20589c12f1");
    test_class_info(&lv, &cd_S20589C12);
    dp->~S20589C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C12(Test_S20589C12, "S20589C12", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN9S20589C12C1Ev();
extern void _ZN9S20589C12D1Ev();
Name_Map name_map_S20589C12[] = {
  NSPAIR(_ZN9S20589C12C1Ev),
  NSPAIR(_ZN9S20589C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20589C12[];
extern void _ZN9S20589C123v34Ev();
extern void _ZN9S20589C123v35Ev();
extern void _ZN9S20589C123v36Ev();
extern void _ZN9S20589C123v37Ev();
extern void _ZN9S20589C123v38Ev();
extern void _ZN9S20589C123v39Ev();
static  VTBL_ENTRY vtc_S20589C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C12[0]),
  (VTBL_ENTRY)&_ZN9S20589C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v39Ev,
};
extern VTBL_ENTRY _ZTI9S20589C12[];
extern  VTBL_ENTRY _ZTV9S20589C12[];
Class_Descriptor cd_S20589C12 = {  "S20589C12", // class name
  0,0,//no base classes
  &(vtc_S20589C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20589C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20589C12),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  S20589C11  : virtual S20589C8 , S20589C12 {
  void *s20589c11f0;
  virtual  ~S20589C11(); // _ZN9S20589C11D2Ev
  virtual void  v40(); // _ZN9S20589C113v40Ev
  S20589C11(); // tgen
};
//SIG(-1 S20589C11) C1{ VBC2{ VBC3{ VBC4{ v2 v3 v4 v5 v6 v7 v8 v9 FL} v10 v11 v12 v13 v14 v15 FC4 Fi Fp} VBC5{ VBC3 vd v16 v17 v18 v19 v20 Fs[6] Fi Fs Fc[6]} vd v21 v22} BC6{ v23 v24 v25 v26 v27 v28 FC7{ VBC8{ v33 v34 v35 v36 v37 v38 v39 v40 FL} VBC9{ VBC8 v41 v42 v43 v44 v45 v46 FC8 Fi Fp} BC10{ VBC9 vd v47 v48 v49 v50 v51 Fs[6] Fi Fs Fc[6]} VBC11{ v52 v53 v54 Fi} BC12{ VBC9 VBC10 vd v55 v56} vd v29 v30 v31 v32} Fl} vd v1 Fp}


 S20589C11 ::~S20589C11(){ note_dtor("S20589C11", this);}
void  S20589C11 ::v40(){vfunc_called(this, "_ZN9S20589C113v40Ev");}
S20589C11 ::S20589C11(){ note_ctor("S20589C11", this);} // tgen

static void Test_S20589C11()
{
  extern Class_Descriptor cd_S20589C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,47)];
    init_test(&cd_S20589C11, buf);
    S20589C11 *dp, &lv = *(dp=new (buf) S20589C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,184), "sizeof(S20589C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C11)");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(216,144), "S20589C11");
    check_base_class_offset(lv, (S20589C9*)(S20589C8*), ABISELECT(176,120), "S20589C11");
    check_base_class_offset(lv, (S20589C9*)(S20589C10*), ABISELECT(176,120), "S20589C11");
    check_base_class_offset(lv, (S20589C10*)(S20589C8*), ABISELECT(232,156), "S20589C11");
    check_base_class_offset(lv, (S20589C8*), ABISELECT(168,116), "S20589C11");
    check_base_class_offset(lv, (S20589C12*), 0, "S20589C11");
    check_field_offset(lv, s20589c11f0, ABISELECT(160,112), "S20589C11.s20589c11f0");
    test_class_info(&lv, &cd_S20589C11);
    dp->~S20589C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C11(Test_S20589C11, "S20589C11", ABISELECT(264,184));

#else // __cplusplus

extern void _ZN9S20589C11C1Ev();
extern void _ZN9S20589C11D2Ev();
Name_Map name_map_S20589C11[] = {
  NSPAIR(_ZN9S20589C11C1Ev),
  NSPAIR(_ZN9S20589C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
extern Class_Descriptor cd_S20589C10;
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
extern Class_Descriptor cd_S20589C12;
extern VTBL_ENTRY _ZTI9S20589C12[];
extern  VTBL_ENTRY _ZTV9S20589C12[];
static Base_Class bases_S20589C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C7,    ABISELECT(216,144), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20589C9,    ABISELECT(176,120), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20589C10,    ABISELECT(232,156), //bcp->offset
    60, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20589C8,    ABISELECT(168,116), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20589C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20589C11[];
extern void _ZN9S20589C123v34Ev();
extern void _ZN9S20589C123v35Ev();
extern void _ZN9S20589C123v36Ev();
extern void _ZN9S20589C123v37Ev();
extern void _ZN9S20589C123v38Ev();
extern void _ZN9S20589C123v39Ev();
extern void _ZN9S20589C11D1Ev();
extern void _ZN9S20589C11D0Ev();
extern void _ZN9S20589C113v40Ev();
extern void ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev)();
extern void ABISELECT(_ZThn168_N9S20589C11D1Ev,_ZThn116_N9S20589C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev)();
extern void ABISELECT(_ZThn168_N9S20589C11D0Ev,_ZThn116_N9S20589C11D0Ev)() __attribute__((weak));
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev)();
extern void ABISELECT(_ZThn232_N9S20589C11D1Ev,_ZThn156_N9S20589C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev)();
extern void ABISELECT(_ZThn232_N9S20589C11D0Ev,_ZThn156_N9S20589C11D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY vtc_S20589C11[] = {
  ABISELECT(232,156),
  ABISELECT(216,144),
  ABISELECT(176,120),
  ABISELECT(168,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN9S20589C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20589C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C113v40Ev,
  0,
  0,
  ABISELECT(-168,-116),
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern VTBL_ENTRY _ZTV9S20589C11[];
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__9S20589C11[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C8__9S20589C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C8__9S20589C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20589C8D1Ev,_ZThn40_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20589C8D0Ev,_ZThn40_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C8__9S20589C11[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C11[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__9S20589C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__9S20589C11[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10__9S20589C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C10__9S20589C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
static  VTT_ENTRY vtt_S20589C11[] = {
  {&(_ZTV9S20589C11[6]),  6,77},
  {&(_ZTV9S20589C11[23]),  23,77},
  {&(_ZTV9S20589C11[36]),  36,77},
  {&(_ZTV9S20589C11[52]),  52,77},
  {&(_ZTV9S20589C11[70]),  70,77},
  {&(_tg__ZTV8S20589C8__9S20589C11[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C8__9S20589C11[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C8__9S20589C11[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C8__9S20589C11[10]),  10,17},
  {&(_tg__ZTV8S20589C9__9S20589C11[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__9S20589C11[10]),  10,18},
  {&(_tg__ZTV9S20589C10__9S20589C11[4]),  4,11},
  {&(_tg__ZTV8S20589C9__9S20589C10__9S20589C11[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C10__9S20589C11[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20589C11[];
extern  VTBL_ENTRY _ZTV9S20589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C11[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20589C8D0Ev,_ZThn40_N8S20589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20589C8D1Ev,_ZThn40_N8S20589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20589C11D0Ev,_ZThn156_N9S20589C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20589C11D1Ev,_ZThn156_N9S20589C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20589C11D0Ev,_ZThn116_N9S20589C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S20589C11D1Ev,_ZThn116_N9S20589C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20589C11 = {  "S20589C11", // class name
  bases_S20589C11, 5,
  &(vtc_S20589C11[0]), // expected_vtbl_contents
  &(vtt_S20589C11[0]), // expected_vtt_contents
  ABISELECT(264,184), // object size
  NSPAIRA(_ZTI9S20589C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20589C11),77, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20589C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20589C2  : virtual S20589C3 , S20589C11 , S20589C7 {
  int s20589c2f0;
  virtual  ~S20589C2(); // _ZN8S20589C2D2Ev
  virtual void  v41(); // _ZN8S20589C23v41Ev
  virtual void  v42(); // _ZN8S20589C23v42Ev
  virtual void  v43(); // _ZN8S20589C23v43Ev
  virtual void  v44(); // _ZN8S20589C23v44Ev
  S20589C2(); // tgen
};
//SIG(-1 S20589C2) C1{ VBC2{ BC3{ VBC4{ VBC5{ v5 v6 v7 Fi} BC6{ v8 v9 v10 v11 v12 v13 v14 v15 FL} BC7{ VBC8{ VBC6 v16 v17 v18 v19 v20 v21 FC6 Fi Fp} VBC9{ VBC8 vd v22 v23 v24 v25 v26 Fs[6] Fi Fs Fc[6]} vd v27 v28} vd v29 v30 v31 v32 v33 v34 Fc[8]} v35 Fl Fp} vd v36} BC10{ VBC7 BC11{ v37 v38 v39 v40 v41 v42 FC12{ VBC13{ v48 v49 v50 v51 v52 v53 v54 v55 FL} VBC14{ VBC13 v56 v57 v58 v59 v60 v61 FC13 Fi Fp} BC15{ VBC14 vd v62 v63 v64 v65 v66 Fs[6] Fi Fs Fc[6]} VBC16{ v67 v68 v69 Fi} BC17{ VBC14 VBC15 vd v70 v71} vd v44 v45 v46 v47} Fl} vd v43 Fp} BC6 vd v1 v2 v3 v4 Fi}


 S20589C2 ::~S20589C2(){ note_dtor("S20589C2", this);}
void  S20589C2 ::v41(){vfunc_called(this, "_ZN8S20589C23v41Ev");}
void  S20589C2 ::v42(){vfunc_called(this, "_ZN8S20589C23v42Ev");}
void  S20589C2 ::v43(){vfunc_called(this, "_ZN8S20589C23v43Ev");}
void  S20589C2 ::v44(){vfunc_called(this, "_ZN8S20589C23v44Ev");}
S20589C2 ::S20589C2(){ note_ctor("S20589C2", this);} // tgen

static void Test_S20589C2()
{
  extern Class_Descriptor cd_S20589C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,62)];
    init_test(&cd_S20589C2, buf);
    S20589C2 *dp, &lv = *(dp=new (buf) S20589C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,244), "sizeof(S20589C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C2)");
    check_base_class_offset(lv, (S20589C6*)(S20589C5*), ABISELECT(248,168), "S20589C2");
    /*is_ambiguous_... S20589C5::S20589C7 */ AMB_check_base_class_offset(lv, (S20589C7*)(S20589C5*), ABISELECT(216,144), "S20589C2");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(304,200), "S20589C2");
    check_base_class_offset(lv, (S20589C9*)(S20589C8*)(S20589C5*), ABISELECT(264,176), "S20589C2");
    check_base_class_offset(lv, (S20589C9*)(S20589C10*), ABISELECT(264,176), "S20589C2");
    /*is_ambiguous_... S20589C2::S20589C8 */ AMB_check_base_class_offset(lv, (S20589C9*)(S20589C8*), ABISELECT(264,176), "S20589C2");
    check_base_class_offset(lv, (S20589C10*)(S20589C8*)(S20589C5*), ABISELECT(320,212), "S20589C2");
    /*is_ambiguous_... S20589C2::S20589C8 */ AMB_check_base_class_offset(lv, (S20589C10*)(S20589C8*), ABISELECT(320,212), "S20589C2");
    check_base_class_offset(lv, (S20589C8*)(S20589C5*), ABISELECT(232,156), "S20589C2");
    check_base_class_offset(lv, (S20589C5*)(S20589C4*)(S20589C3*), ABISELECT(216,144), "S20589C2");
    check_base_class_offset(lv, (S20589C4*)(S20589C3*), ABISELECT(192,132), "S20589C2");
    check_base_class_offset(lv, (S20589C3*), ABISELECT(192,132), "S20589C2");
    check_base_class_offset(lv, (S20589C8*)(S20589C11*), ABISELECT(352,240), "S20589C2");
    check_base_class_offset(lv, (S20589C12*)(S20589C11*), 0, "S20589C2");
    check_base_class_offset(lv, (S20589C11*), 0, "S20589C2");
    /*is_ambiguous_... S20589C2::S20589C7 */ AMB_check_base_class_offset(lv, (S20589C7*), ABISELECT(168,116), "S20589C2");
    check_field_offset(lv, s20589c2f0, ABISELECT(184,128), "S20589C2.s20589c2f0");
    test_class_info(&lv, &cd_S20589C2);
    dp->~S20589C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C2(Test_S20589C2, "S20589C2", ABISELECT(360,244));

#else // __cplusplus

extern void _ZN8S20589C2C1Ev();
extern void _ZN8S20589C2D2Ev();
Name_Map name_map_S20589C2[] = {
  NSPAIR(_ZN8S20589C2C1Ev),
  NSPAIR(_ZN8S20589C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C6;
extern VTBL_ENTRY _ZTI8S20589C6[];
extern  VTBL_ENTRY _ZTV8S20589C6[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
extern Class_Descriptor cd_S20589C10;
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
extern Class_Descriptor cd_S20589C5;
extern VTBL_ENTRY _ZTI8S20589C5[];
extern  VTBL_ENTRY _ZTV8S20589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C5[];
extern Class_Descriptor cd_S20589C4;
extern VTBL_ENTRY _ZTI8S20589C4[];
extern  VTBL_ENTRY _ZTV8S20589C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C4[];
extern Class_Descriptor cd_S20589C3;
extern VTBL_ENTRY _ZTI8S20589C3[];
extern  VTBL_ENTRY _ZTV8S20589C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C3[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
extern Class_Descriptor cd_S20589C12;
extern VTBL_ENTRY _ZTI9S20589C12[];
extern  VTBL_ENTRY _ZTV9S20589C12[];
extern Class_Descriptor cd_S20589C11;
extern VTBL_ENTRY _ZTI9S20589C11[];
extern  VTBL_ENTRY _ZTV9S20589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C11[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
static Base_Class bases_S20589C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C6,    ABISELECT(248,168), //bcp->offset
    94, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20589C7,    ABISELECT(216,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C7,    ABISELECT(304,200), //bcp->offset
    117, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20589C9,    ABISELECT(264,176), //bcp->offset
    102, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20589C10,    ABISELECT(320,212), //bcp->offset
    135, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20589C8,    ABISELECT(232,156), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C5,    ABISELECT(216,144), //bcp->offset
    46, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20589C4,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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
    8, //immediately_derived
  0, 0},
  {&cd_S20589C3,    ABISELECT(192,132), //bcp->offset
    32, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20589C8,    ABISELECT(352,240), //bcp->offset
    152, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20589C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20589C11,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20589C7,    ABISELECT(168,116), //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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20589C2[];
extern void _ZN9S20589C123v34Ev();
extern void _ZN9S20589C123v35Ev();
extern void _ZN9S20589C123v36Ev();
extern void _ZN9S20589C123v37Ev();
extern void _ZN9S20589C123v38Ev();
extern void _ZN9S20589C123v39Ev();
extern void _ZN8S20589C2D1Ev();
extern void _ZN8S20589C2D0Ev();
extern void _ZN9S20589C113v40Ev();
extern void _ZN8S20589C23v41Ev();
extern void _ZN8S20589C23v42Ev();
extern void _ZN8S20589C23v43Ev();
extern void _ZN8S20589C23v44Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void _ZN8S20589C43v32Ev();
extern void ABISELECT(_ZTv0_n72_N8S20589C2D1Ev,_ZTv0_n36_N8S20589C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S20589C2D1Ev,_ZThn132_N8S20589C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20589C2D0Ev,_ZTv0_n36_N8S20589C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S20589C2D0Ev,_ZThn132_N8S20589C2D0Ev)() __attribute__((weak));
extern void _ZN8S20589C33v33Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C2D1Ev,_ZTv0_n60_N8S20589C2D1Ev)();
extern void ABISELECT(_ZThn216_N8S20589C2D1Ev,_ZThn144_N8S20589C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C2D0Ev,_ZTv0_n60_N8S20589C2D0Ev)();
extern void ABISELECT(_ZThn216_N8S20589C2D0Ev,_ZThn144_N8S20589C2D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20589C2D1Ev,_ZTvn12_n60_N8S20589C2D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C2D0Ev,_ZTvn12_n60_N8S20589C2D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20589C2D1Ev,_ZTv0_n20_N8S20589C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20589C2D1Ev,_ZThn212_N8S20589C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C2D0Ev,_ZTv0_n20_N8S20589C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20589C2D0Ev,_ZThn212_N8S20589C2D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
extern void ABISELECT(_ZTv0_n48_N8S20589C2D1Ev,_ZTv0_n24_N8S20589C2D1Ev)();
extern void ABISELECT(_ZThn352_N8S20589C2D1Ev,_ZThn240_N8S20589C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20589C2D0Ev,_ZTv0_n24_N8S20589C2D0Ev)();
extern void ABISELECT(_ZThn352_N8S20589C2D0Ev,_ZThn240_N8S20589C2D0Ev)() __attribute__((weak));
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY vtc_S20589C2[] = {
  ABISELECT(248,168),
  ABISELECT(216,144),
  ABISELECT(192,132),
  ABISELECT(320,212),
  ABISELECT(304,200),
  ABISELECT(264,176),
  ABISELECT(352,240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN9S20589C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v39Ev,
  (VTBL_ENTRY)&_ZN8S20589C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C2D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C113v40Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v41Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v42Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v43Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v44Ev,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  ABISELECT(-192,-132),
  0,
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20589C2D1Ev,_ZTv0_n36_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20589C2D0Ev,_ZTv0_n36_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C33v33Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C2D1Ev,_ZTv0_n60_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C2D0Ev,_ZTv0_n60_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C2D1Ev,_ZTvn12_n60_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C2D0Ev,_ZTvn12_n60_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-248,-168),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-212),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C2D1Ev,_ZTv0_n20_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C2D0Ev,_ZTv0_n20_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
  0,
  0,
  ABISELECT(-352,-240),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20589C2D1Ev,_ZTv0_n24_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20589C2D0Ev,_ZTv0_n24_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern VTBL_ENTRY _ZTV8S20589C2[];
extern void _ZN9S20589C123v34Ev();
extern void _ZN9S20589C123v35Ev();
extern void _ZN9S20589C123v36Ev();
extern void _ZN9S20589C123v37Ev();
extern void _ZN9S20589C123v38Ev();
extern void _ZN9S20589C123v39Ev();
extern void _ZN9S20589C11D1Ev();
extern void _ZN9S20589C11D0Ev();
extern void _ZN9S20589C113v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C11__8S20589C2[] = {
  ABISELECT(320,212),
  ABISELECT(304,200),
  ABISELECT(264,176),
  ABISELECT(352,240),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN9S20589C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20589C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C113v40Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev)();
extern void ABISELECT(_ZThn352_N9S20589C11D1Ev,_ZThn240_N9S20589C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev)();
extern void ABISELECT(_ZThn352_N9S20589C11D0Ev,_ZThn240_N9S20589C11D0Ev)() __attribute__((weak));
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__9S20589C11__8S20589C2[] = {
  0,
  0,
  ABISELECT(-352,-240),
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C11__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C11__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev)();
extern void ABISELECT(_ZThn320_N9S20589C11D1Ev,_ZThn212_N9S20589C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev)();
extern void ABISELECT(_ZThn320_N9S20589C11D0Ev,_ZThn212_N9S20589C11D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__9S20589C11__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-212),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C43v32Ev();
extern void _ZN8S20589C3D1Ev();
extern void _ZN8S20589C3D0Ev();
extern void _ZN8S20589C33v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C3__8S20589C2[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20589C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C33v33Ev,
};
extern void _ZN8S20589C43v32Ev();
extern void _ZN8S20589C4D1Ev();
extern void _ZN8S20589C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C48S20589C3__8S20589C2[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D0Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C48S20589C3__8S20589C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C48S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C48S20589C3__8S20589C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C48S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C48S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C48S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20589C3D1Ev,_ZThn12_N8S20589C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20589C3D0Ev,_ZThn12_N8S20589C3D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C3__8S20589C2[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20589C3D1Ev,_ZTvn12_n60_N8S20589C3D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C3D0Ev,_ZTvn12_n60_N8S20589C3D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C3__8S20589C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C3D1Ev,_ZTvn12_n60_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C3D0Ev,_ZTvn12_n60_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S20589C3D1Ev,_ZThn80_N8S20589C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S20589C3D0Ev,_ZThn80_N8S20589C3D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C3__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void _ZN8S20589C5D1Ev();
extern void _ZN8S20589C5D0Ev();
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C2[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C5__8S20589C2[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__8S20589C5__8S20589C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C5__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C5__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C5__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C10__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__A1__8S20589C2[] = {
  ABISELECT(-32,-28),
  ABISELECT(-48,-40),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C8__A1__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C8__A1__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C8__A1__8S20589C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,28),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(32,28),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
static  VTT_ENTRY vtt_S20589C2[] = {
  {&(_ZTV8S20589C2[9]),  9,164},
  {&(_tg__ZTV9S20589C11__8S20589C2[6]),  6,15},
  {&(_tg__ZTV8S20589C8__9S20589C11__8S20589C2[8]),  8,12},
  {&(_tg__ZTV8S20589C9__9S20589C11__8S20589C2[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C11__8S20589C2[10]),  10,18},
  {&(_tg__ZTV9S20589C10__9S20589C11__8S20589C2[10]),  10,17},
  {&(_ZTV8S20589C2[42]),  42,164},
  {&(_ZTV8S20589C2[69]),  69,164},
  {&(_ZTV8S20589C2[99]),  99,164},
  {&(_ZTV8S20589C2[90]),  90,164},
  {&(_ZTV8S20589C2[111]),  111,164},
  {&(_ZTV8S20589C2[127]),  127,164},
  {&(_ZTV8S20589C2[145]),  145,164},
  {&(_ZTV8S20589C2[160]),  160,164},
  {&(_tg__ZTV8S20589C3__8S20589C2[7]),  7,11},
  {&(_tg__ZTV8S20589C48S20589C3__8S20589C2[7]),  7,10},
  {&(_tg__ZTV8S20589C5__8S20589C48S20589C3__8S20589C2[23]),  23,39},
  {&(_tg__ZTV8S20589C6__8S20589C48S20589C3__8S20589C2[5]),  5,8},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C48S20589C3__8S20589C2[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C48S20589C3__8S20589C2[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C48S20589C3__8S20589C2[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C48S20589C3__8S20589C2[10]),  10,17},
  {&(_tg__ZTV8S20589C5__8S20589C3__8S20589C2[23]),  23,39},
  {&(_tg__ZTV8S20589C6__8S20589C3__8S20589C2[5]),  5,8},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C3__8S20589C2[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C3__8S20589C2[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C3__8S20589C2[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C3__8S20589C2[10]),  10,17},
  {&(_tg__ZTV8S20589C5__8S20589C2[6]),  6,22},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C2[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C2[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C2[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C2[10]),  10,17},
  {&(_tg__ZTV8S20589C6__8S20589C5__8S20589C2[5]),  5,8},
  {&(_tg__ZTV8S20589C8__8S20589C5__8S20589C2[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C5__8S20589C2[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C5__8S20589C2[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C5__8S20589C2[10]),  10,17},
  {&(_tg__ZTV8S20589C9__8S20589C2[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__8S20589C2[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C2[4]),  4,11},
  {&(_tg__ZTV8S20589C9__9S20589C10__8S20589C2[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C10__8S20589C2[10]),  10,18},
  {&(_tg__ZTV8S20589C8__A1__8S20589C2[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C8__A1__8S20589C2[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C8__A1__8S20589C2[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C8__A1__8S20589C2[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S20589C2[];
extern  VTBL_ENTRY _ZTV8S20589C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C2[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C3D0Ev,_ZThn80_N8S20589C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C3D1Ev,_ZThn80_N8S20589C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C3D0Ev,_ZThn12_N8S20589C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C3D1Ev,_ZThn12_N8S20589C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20589C11D0Ev,_ZThn212_N9S20589C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20589C11D1Ev,_ZThn212_N9S20589C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S20589C11D0Ev,_ZThn240_N9S20589C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S20589C11D1Ev,_ZThn240_N9S20589C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20589C2D0Ev,_ZTv0_n24_N8S20589C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20589C2D0Ev,_ZThn240_N8S20589C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20589C2D1Ev,_ZTv0_n24_N8S20589C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20589C2D1Ev,_ZThn240_N8S20589C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C2D0Ev,_ZTv0_n20_N8S20589C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20589C2D0Ev,_ZThn212_N8S20589C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C2D1Ev,_ZTv0_n20_N8S20589C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20589C2D1Ev,_ZThn212_N8S20589C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C2D0Ev,_ZTv0_n60_N8S20589C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20589C2D0Ev,_ZThn144_N8S20589C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C2D1Ev,_ZTv0_n60_N8S20589C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20589C2D1Ev,_ZThn144_N8S20589C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20589C2D0Ev,_ZTv0_n36_N8S20589C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20589C2D0Ev,_ZThn132_N8S20589C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20589C2D1Ev,_ZTv0_n36_N8S20589C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20589C2D1Ev,_ZThn132_N8S20589C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20589C2 = {  "S20589C2", // class name
  bases_S20589C2, 13,
  &(vtc_S20589C2[0]), // expected_vtbl_contents
  &(vtt_S20589C2[0]), // expected_vtt_contents
  ABISELECT(360,244), // object size
  NSPAIRA(_ZTI8S20589C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20589C2),164, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20589C2),47, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20589C1  : virtual S20589C2 {
  virtual  ~S20589C1(); // _ZN8S20589C1D2Ev
  virtual void  v1(); // _ZN8S20589C12v1Ev
  S20589C1(); // tgen
};
//SIG(1 S20589C1) C1{ VBC2{ VBC3{ BC4{ VBC5{ VBC6{ v2 v3 v4 Fi} BC7{ v5 v6 v7 v8 v9 v10 v11 v12 FL} BC8{ VBC9{ VBC7 v13 v14 v15 v16 v17 v18 FC7 Fi Fp} VBC10{ VBC9 vd v19 v20 v21 v22 v23 Fs[6] Fi Fs Fc[6]} vd v24 v25} vd v26 v27 v28 v29 v30 v31 Fc[8]} v32 Fl Fp} vd v33} BC11{ VBC8 BC12{ v34 v35 v36 v37 v38 v39 FC13{ VBC14{ v49 v50 v51 v52 v53 v54 v55 v56 FL} VBC15{ VBC14 v57 v58 v59 v60 v61 v62 FC14 Fi Fp} BC16{ VBC15 vd v63 v64 v65 v66 v67 Fs[6] Fi Fs Fc[6]} VBC17{ v68 v69 v70 Fi} BC18{ VBC15 VBC16 vd v71 v72} vd v45 v46 v47 v48} Fl} vd v40 Fp} BC7 vd v41 v42 v43 v44 Fi} vd v1}


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

static void Test_S20589C1()
{
  extern Class_Descriptor cd_S20589C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,62)];
    init_test(&cd_S20589C1, buf);
    S20589C1 *dp, &lv = *(dp=new (buf) S20589C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,244), "sizeof(S20589C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20589C1)");
    check_base_class_offset(lv, (S20589C6*)(S20589C5*), ABISELECT(256,172), "S20589C1");
    /*is_ambiguous_... S20589C5::S20589C7 */ AMB_check_base_class_offset(lv, (S20589C7*)(S20589C5*), ABISELECT(224,148), "S20589C1");
    check_base_class_offset(lv, (S20589C7*)(S20589C9*), ABISELECT(312,204), "S20589C1");
    check_base_class_offset(lv, (S20589C9*)(S20589C8*)(S20589C5*), ABISELECT(272,180), "S20589C1");
    check_base_class_offset(lv, (S20589C9*)(S20589C10*), ABISELECT(272,180), "S20589C1");
    /*is_ambiguous_... S20589C1::S20589C8 */ AMB_check_base_class_offset(lv, (S20589C9*)(S20589C8*), ABISELECT(272,180), "S20589C1");
    check_base_class_offset(lv, (S20589C10*)(S20589C8*)(S20589C5*), ABISELECT(328,216), "S20589C1");
    /*is_ambiguous_... S20589C1::S20589C8 */ AMB_check_base_class_offset(lv, (S20589C10*)(S20589C8*), ABISELECT(328,216), "S20589C1");
    check_base_class_offset(lv, (S20589C8*)(S20589C5*), ABISELECT(240,160), "S20589C1");
    check_base_class_offset(lv, (S20589C5*)(S20589C4*)(S20589C3*), ABISELECT(224,148), "S20589C1");
    check_base_class_offset(lv, (S20589C4*)(S20589C3*), ABISELECT(200,136), "S20589C1");
    check_base_class_offset(lv, (S20589C3*)(S20589C2*), ABISELECT(200,136), "S20589C1");
    check_base_class_offset(lv, (S20589C8*)(S20589C11*)(S20589C2*), 0, "S20589C1");
    check_base_class_offset(lv, (S20589C12*)(S20589C11*)(S20589C2*), ABISELECT(8,4), "S20589C1");
    check_base_class_offset(lv, (S20589C11*)(S20589C2*), ABISELECT(8,4), "S20589C1");
    /*is_ambiguous_... S20589C2::S20589C7 */ AMB_check_base_class_offset(lv, (S20589C7*)(S20589C2*), ABISELECT(176,120), "S20589C1");
    check_base_class_offset(lv, (S20589C2*), ABISELECT(8,4), "S20589C1");
    test_class_info(&lv, &cd_S20589C1);
    dp->~S20589C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20589C1(Test_S20589C1, "S20589C1", ABISELECT(360,244));

#else // __cplusplus

extern void _ZN8S20589C1C1Ev();
extern void _ZN8S20589C1D2Ev();
Name_Map name_map_S20589C1[] = {
  NSPAIR(_ZN8S20589C1C1Ev),
  NSPAIR(_ZN8S20589C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20589C6;
extern VTBL_ENTRY _ZTI8S20589C6[];
extern  VTBL_ENTRY _ZTV8S20589C6[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C9;
extern VTBL_ENTRY _ZTI8S20589C9[];
extern  VTBL_ENTRY _ZTV8S20589C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C9[];
extern Class_Descriptor cd_S20589C10;
extern VTBL_ENTRY _ZTI9S20589C10[];
extern  VTBL_ENTRY _ZTV9S20589C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C10[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
extern Class_Descriptor cd_S20589C5;
extern VTBL_ENTRY _ZTI8S20589C5[];
extern  VTBL_ENTRY _ZTV8S20589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C5[];
extern Class_Descriptor cd_S20589C4;
extern VTBL_ENTRY _ZTI8S20589C4[];
extern  VTBL_ENTRY _ZTV8S20589C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C4[];
extern Class_Descriptor cd_S20589C3;
extern VTBL_ENTRY _ZTI8S20589C3[];
extern  VTBL_ENTRY _ZTV8S20589C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C3[];
extern Class_Descriptor cd_S20589C8;
extern VTBL_ENTRY _ZTI8S20589C8[];
extern  VTBL_ENTRY _ZTV8S20589C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C8[];
extern Class_Descriptor cd_S20589C12;
extern VTBL_ENTRY _ZTI9S20589C12[];
extern  VTBL_ENTRY _ZTV9S20589C12[];
extern Class_Descriptor cd_S20589C11;
extern VTBL_ENTRY _ZTI9S20589C11[];
extern  VTBL_ENTRY _ZTV9S20589C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20589C11[];
extern Class_Descriptor cd_S20589C7;
extern VTBL_ENTRY _ZTI8S20589C7[];
extern  VTBL_ENTRY _ZTV8S20589C7[];
extern Class_Descriptor cd_S20589C2;
extern VTBL_ENTRY _ZTI8S20589C2[];
extern  VTBL_ENTRY _ZTV8S20589C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C2[];
static Base_Class bases_S20589C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20589C6,    ABISELECT(256,172), //bcp->offset
    132, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20589C7,    ABISELECT(224,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C7,    ABISELECT(312,204), //bcp->offset
    155, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20589C9,    ABISELECT(272,180), //bcp->offset
    140, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20589C10,    ABISELECT(328,216), //bcp->offset
    173, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20589C8,    ABISELECT(240,160), //bcp->offset
    123, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20589C5,    ABISELECT(224,148), //bcp->offset
    84, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20589C4,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20589C3,    ABISELECT(200,136), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20589C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20589C12,    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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20589C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20589C7,    ABISELECT(176,120), //bcp->offset
    60, //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
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20589C2,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20589C1[];
extern void ABISELECT(_ZTv0_n48_N8S20589C1D1Ev,_ZTv0_n24_N8S20589C1D1Ev)();
extern void _ZN8S20589C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20589C1D0Ev,_ZTv0_n24_N8S20589C1D0Ev)();
extern void _ZN8S20589C1D0Ev() __attribute__((weak));
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C12v1Ev();
extern void _ZN9S20589C123v34Ev();
extern void _ZN9S20589C123v35Ev();
extern void _ZN9S20589C123v36Ev();
extern void _ZN9S20589C123v37Ev();
extern void _ZN9S20589C123v38Ev();
extern void _ZN9S20589C123v39Ev();
extern void ABISELECT(_ZTv0_n128_N8S20589C1D1Ev,_ZTv0_n64_N8S20589C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20589C1D1Ev,_ZThn4_N8S20589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S20589C1D0Ev,_ZTv0_n64_N8S20589C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20589C1D0Ev,_ZThn4_N8S20589C1D0Ev)() __attribute__((weak));
extern void _ZN9S20589C113v40Ev();
extern void _ZN8S20589C23v41Ev();
extern void _ZN8S20589C23v42Ev();
extern void _ZN8S20589C23v43Ev();
extern void _ZN8S20589C23v44Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void _ZN8S20589C43v32Ev();
extern void ABISELECT(_ZTv0_n72_N8S20589C1D1Ev,_ZTv0_n36_N8S20589C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20589C1D1Ev,_ZThn136_N8S20589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20589C1D0Ev,_ZTv0_n36_N8S20589C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20589C1D0Ev,_ZThn136_N8S20589C1D0Ev)() __attribute__((weak));
extern void _ZN8S20589C33v33Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C1D1Ev,_ZTv0_n60_N8S20589C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20589C1D1Ev,_ZThn148_N8S20589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C1D0Ev,_ZTv0_n60_N8S20589C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20589C1D0Ev,_ZThn148_N8S20589C1D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
extern void ABISELECT(_ZTvn16_n120_N8S20589C1D1Ev,_ZTvn12_n60_N8S20589C1D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C1D0Ev,_ZTvn12_n60_N8S20589C1D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n40_N8S20589C1D1Ev,_ZTv0_n20_N8S20589C1D1Ev)();
extern void ABISELECT(_ZThn328_N8S20589C1D1Ev,_ZThn216_N8S20589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C1D0Ev,_ZTv0_n20_N8S20589C1D0Ev)();
extern void ABISELECT(_ZThn328_N8S20589C1D0Ev,_ZThn216_N8S20589C1D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY vtc_S20589C1[] = {
  0,
  ABISELECT(256,172),
  ABISELECT(224,148),
  ABISELECT(200,136),
  ABISELECT(8,4),
  0,
  0,
  0,
  ABISELECT(328,216),
  ABISELECT(312,204),
  ABISELECT(272,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20589C1D1Ev,_ZTv0_n24_N8S20589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20589C1D0Ev,_ZTv0_n24_N8S20589C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20589C12v1Ev,
  ABISELECT(168,116),
  ABISELECT(168,116),
  ABISELECT(168,116),
  ABISELECT(168,116),
  ABISELECT(168,116),
  ABISELECT(168,116),
  ABISELECT(168,116),
  ABISELECT(168,116),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,168),
  ABISELECT(216,144),
  ABISELECT(192,132),
  ABISELECT(320,212),
  ABISELECT(304,200),
  ABISELECT(264,176),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&_ZN9S20589C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v39Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20589C1D1Ev,_ZTv0_n64_N8S20589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20589C1D0Ev,_ZTv0_n64_N8S20589C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C113v40Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v41Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v42Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v43Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v44Ev,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  ABISELECT(-200,-136),
  0,
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20589C1D1Ev,_ZTv0_n36_N8S20589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20589C1D0Ev,_ZTv0_n36_N8S20589C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C33v33Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-148),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C1D1Ev,_ZTv0_n60_N8S20589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C1D0Ev,_ZTv0_n60_N8S20589C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C1D1Ev,_ZTvn12_n60_N8S20589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C1D0Ev,_ZTvn12_n60_N8S20589C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
  0,
  0,
  0,
  ABISELECT(-256,-172),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-272,-180),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-204),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-216),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S20589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C1D1Ev,_ZTv0_n20_N8S20589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C1D0Ev,_ZTv0_n20_N8S20589C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S20589C1[];
extern void _ZN9S20589C123v34Ev();
extern void _ZN9S20589C123v35Ev();
extern void _ZN9S20589C123v36Ev();
extern void _ZN9S20589C123v37Ev();
extern void _ZN9S20589C123v38Ev();
extern void _ZN9S20589C123v39Ev();
extern void _ZN8S20589C2D1Ev();
extern void _ZN8S20589C2D0Ev();
extern void _ZN9S20589C113v40Ev();
extern void _ZN8S20589C23v41Ev();
extern void _ZN8S20589C23v42Ev();
extern void _ZN8S20589C23v43Ev();
extern void _ZN8S20589C23v44Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C2__8S20589C1[] = {
  ABISELECT(248,168),
  ABISELECT(216,144),
  ABISELECT(192,132),
  ABISELECT(320,212),
  ABISELECT(304,200),
  ABISELECT(264,176),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN9S20589C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v39Ev,
  (VTBL_ENTRY)&_ZN8S20589C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C2D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C113v40Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v41Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v42Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v43Ev,
  (VTBL_ENTRY)&_ZN8S20589C23v44Ev,
};
extern void _ZN9S20589C123v34Ev();
extern void _ZN9S20589C123v35Ev();
extern void _ZN9S20589C123v36Ev();
extern void _ZN9S20589C123v37Ev();
extern void _ZN9S20589C123v38Ev();
extern void _ZN9S20589C123v39Ev();
extern void _ZN9S20589C11D1Ev();
extern void _ZN9S20589C11D0Ev();
extern void _ZN9S20589C113v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C118S20589C2__8S20589C1[] = {
  ABISELECT(320,212),
  ABISELECT(304,200),
  ABISELECT(264,176),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN9S20589C123v34Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v35Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v36Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v37Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v38Ev,
  (VTBL_ENTRY)&_ZN9S20589C123v39Ev,
  (VTBL_ENTRY)&_ZN9S20589C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C113v40Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__9S20589C118S20589C2__8S20589C1[] = {
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(328,216),
  ABISELECT(312,204),
  ABISELECT(272,180),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20589C11D1Ev,_ZTv0_n24_N9S20589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20589C11D0Ev,_ZTv0_n24_N9S20589C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C118S20589C2__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C118S20589C2__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev)();
extern void ABISELECT(_ZThn320_N9S20589C11D1Ev,_ZThn212_N9S20589C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev)();
extern void ABISELECT(_ZThn320_N9S20589C11D0Ev,_ZThn212_N9S20589C11D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__9S20589C118S20589C2__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-212),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI9S20589C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C43v32Ev();
extern void ABISELECT(_ZTv0_n72_N8S20589C2D1Ev,_ZTv0_n36_N8S20589C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S20589C2D1Ev,_ZThn132_N8S20589C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20589C2D0Ev,_ZTv0_n36_N8S20589C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S20589C2D0Ev,_ZThn132_N8S20589C2D0Ev)() __attribute__((weak));
extern void _ZN8S20589C33v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C3__8S20589C2__8S20589C1[] = {
  0,
  ABISELECT(-192,-132),
  0,
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20589C2D1Ev,_ZTv0_n36_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20589C2D0Ev,_ZTv0_n36_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C33v33Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C2D1Ev,_ZTv0_n60_N8S20589C2D1Ev)();
extern void ABISELECT(_ZThn216_N8S20589C2D1Ev,_ZThn144_N8S20589C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C2D0Ev,_ZTv0_n60_N8S20589C2D0Ev)();
extern void ABISELECT(_ZThn216_N8S20589C2D0Ev,_ZThn144_N8S20589C2D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C2__8S20589C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C2D1Ev,_ZTv0_n60_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C2D0Ev,_ZTv0_n60_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C2__8S20589C1[] = {
  0,
  0,
  0,
  ABISELECT(-248,-168),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20589C2D1Ev,_ZTvn12_n60_N8S20589C2D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C2D0Ev,_ZTvn12_n60_N8S20589C2D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C2__8S20589C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C2D1Ev,_ZTvn12_n60_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C2D0Ev,_ZTvn12_n60_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C2__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-264,-176),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C2__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C2D1Ev,_ZTv0_n20_N8S20589C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20589C2D1Ev,_ZThn212_N8S20589C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C2D0Ev,_ZTv0_n20_N8S20589C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20589C2D0Ev,_ZThn212_N8S20589C2D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C2__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-212),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C2D1Ev,_ZTv0_n20_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C2D0Ev,_ZTv0_n20_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20589C2D1Ev,_ZTv0_n24_N8S20589C2D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20589C2D0Ev,_ZTv0_n24_N8S20589C2D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__A1__8S20589C2__8S20589C1[] = {
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(328,216),
  ABISELECT(312,204),
  ABISELECT(272,180),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20589C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20589C2D1Ev,_ZTv0_n24_N8S20589C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20589C2D0Ev,_ZTv0_n24_N8S20589C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C43v32Ev();
extern void _ZN8S20589C3D1Ev();
extern void _ZN8S20589C3D0Ev();
extern void _ZN8S20589C33v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C3__8S20589C1[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20589C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C33v33Ev,
};
extern void _ZN8S20589C43v32Ev();
extern void _ZN8S20589C4D1Ev();
extern void _ZN8S20589C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C48S20589C3__8S20589C1[] = {
  ABISELECT(128,80),
  ABISELECT(112,68),
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C4D0Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C48S20589C3__8S20589C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C48S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C48S20589C3__8S20589C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D1Ev,_ZTvn12_n60_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C4D0Ev,_ZTvn12_n60_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C48S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C48S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C48S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20589C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20589C3D1Ev,_ZThn12_N8S20589C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20589C3D0Ev,_ZThn12_N8S20589C3D0Ev)() __attribute__((weak));
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C3__8S20589C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S20589C3D1Ev,_ZTvn12_n60_N8S20589C3D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S20589C3D0Ev,_ZTvn12_n60_N8S20589C3D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C3__8S20589C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C3D1Ev,_ZTvn12_n60_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S20589C3D0Ev,_ZTvn12_n60_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S20589C3D1Ev,_ZThn80_N8S20589C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev)();
extern void ABISELECT(_ZThn128_N8S20589C3D0Ev,_ZThn80_N8S20589C3D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C3__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20589C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
extern void _ZN8S20589C5D1Ev();
extern void _ZN8S20589C5D0Ev();
extern void _ZN8S20589C53v26Ev();
extern void _ZN8S20589C53v27Ev();
extern void _ZN8S20589C53v28Ev();
extern void _ZN8S20589C53v29Ev();
extern void _ZN8S20589C53v30Ev();
extern void _ZN8S20589C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C5__8S20589C1[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v26Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20589C53v31Ev,
};
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C88S20589C5__8S20589C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C62v2Ev();
extern void _ZN8S20589C62v3Ev();
extern void _ZN8S20589C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C6__8S20589C5__8S20589C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20589C62v4Ev,
};
extern void ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev)();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__8S20589C5__8S20589C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D1Ev,_ZThn12_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20589C5D0Ev,_ZThn12_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C5__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__A1__8S20589C5__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C5__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C9__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20589C9[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN9S20589C10D1Ev();
extern void _ZN9S20589C10D0Ev();
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN9S20589C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20589C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__9S20589C10__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__9S20589C10__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20589C10[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void _ZN8S20589C8D1Ev();
extern void _ZN8S20589C8D0Ev();
extern void _ZN8S20589C83v24Ev();
extern void _ZN8S20589C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C8__A1__8S20589C1[] = {
  ABISELECT(328,216),
  ABISELECT(312,204),
  ABISELECT(272,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20589C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20589C83v25Ev,
};
extern void _ZN8S20589C93v13Ev();
extern void _ZN8S20589C93v14Ev();
extern void _ZN8S20589C93v15Ev();
extern void _ZN8S20589C93v16Ev();
extern void _ZN8S20589C93v17Ev();
extern void _ZN8S20589C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C9__8S20589C8__A1__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-272,-180),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C93v13Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v14Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20589C93v18Ev,
};
extern void _ZN8S20589C72v5Ev();
extern void _ZN8S20589C72v6Ev();
extern void _ZN8S20589C72v7Ev();
extern void _ZN8S20589C72v8Ev();
extern void _ZN8S20589C72v9Ev();
extern void _ZN8S20589C73v10Ev();
extern void _ZN8S20589C73v11Ev();
extern void _ZN8S20589C73v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20589C7__8S20589C8__A1__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-204),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&_ZN8S20589C72v5Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20589C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20589C73v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev)();
extern void ABISELECT(_ZThn328_N8S20589C8D1Ev,_ZThn216_N8S20589C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev)();
extern void ABISELECT(_ZThn328_N8S20589C8D0Ev,_ZThn216_N8S20589C8D0Ev)() __attribute__((weak));
extern void _ZN9S20589C103v19Ev();
extern void _ZN9S20589C103v20Ev();
extern void _ZN9S20589C103v21Ev();
extern void _ZN9S20589C103v22Ev();
extern void _ZN9S20589C103v23Ev();
static  VTBL_ENTRY _tg__ZTV9S20589C10__8S20589C8__A1__8S20589C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-216),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S20589C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20589C103v19Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v20Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v21Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v22Ev,
  (VTBL_ENTRY)&_ZN9S20589C103v23Ev,
};
static  VTT_ENTRY vtt_S20589C1[] = {
  {&(_ZTV8S20589C1[13]),  13,190},
  {&(_ZTV8S20589C1[47]),  47,190},
  {&(_ZTV8S20589C1[80]),  80,190},
  {&(_ZTV8S20589C1[107]),  107,190},
  {&(_ZTV8S20589C1[137]),  137,190},
  {&(_ZTV8S20589C1[128]),  128,190},
  {&(_ZTV8S20589C1[149]),  149,190},
  {&(_ZTV8S20589C1[165]),  165,190},
  {&(_ZTV8S20589C1[183]),  183,190},
  {&(_ZTV8S20589C1[13]),  13,190},
  {&(_ZTV8S20589C1[62]),  62,190},
  {&(_tg__ZTV8S20589C2__8S20589C1[9]),  9,22},
  {&(_tg__ZTV9S20589C118S20589C2__8S20589C1[6]),  6,15},
  {&(_tg__ZTV8S20589C8__9S20589C118S20589C2__8S20589C1[8]),  8,12},
  {&(_tg__ZTV8S20589C9__9S20589C118S20589C2__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C118S20589C2__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__9S20589C118S20589C2__8S20589C1[10]),  10,17},
  {&(_tg__ZTV8S20589C3__8S20589C2__8S20589C1[10]),  10,14},
  {&(_tg__ZTV8S20589C5__8S20589C2__8S20589C1[23]),  23,39},
  {&(_tg__ZTV8S20589C6__8S20589C2__8S20589C1[5]),  5,8},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C2__8S20589C1[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C2__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C2__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C2__8S20589C1[10]),  10,17},
  {&(_tg__ZTV8S20589C8__A1__8S20589C2__8S20589C1[8]),  8,12},
  {&(_tg__ZTV8S20589C3__8S20589C1[7]),  7,11},
  {&(_tg__ZTV8S20589C48S20589C3__8S20589C1[7]),  7,10},
  {&(_tg__ZTV8S20589C5__8S20589C48S20589C3__8S20589C1[23]),  23,39},
  {&(_tg__ZTV8S20589C6__8S20589C48S20589C3__8S20589C1[5]),  5,8},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C48S20589C3__8S20589C1[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C48S20589C3__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C48S20589C3__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C48S20589C3__8S20589C1[10]),  10,17},
  {&(_tg__ZTV8S20589C5__8S20589C3__8S20589C1[23]),  23,39},
  {&(_tg__ZTV8S20589C6__8S20589C3__8S20589C1[5]),  5,8},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C3__8S20589C1[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C3__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C3__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C3__8S20589C1[10]),  10,17},
  {&(_tg__ZTV8S20589C5__8S20589C1[6]),  6,22},
  {&(_tg__ZTV8S20589C88S20589C5__8S20589C1[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C88S20589C5__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C88S20589C5__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C88S20589C5__8S20589C1[10]),  10,17},
  {&(_tg__ZTV8S20589C6__8S20589C5__8S20589C1[5]),  5,8},
  {&(_tg__ZTV8S20589C8__8S20589C5__8S20589C1[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C5__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__A1__8S20589C5__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C5__8S20589C1[10]),  10,17},
  {&(_tg__ZTV8S20589C9__8S20589C1[3]),  3,9},
  {&(_tg__ZTV8S20589C7__8S20589C9__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C1[4]),  4,11},
  {&(_tg__ZTV8S20589C9__9S20589C10__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__9S20589C10__8S20589C1[10]),  10,18},
  {&(_tg__ZTV8S20589C8__A1__8S20589C1[5]),  5,9},
  {&(_tg__ZTV8S20589C9__8S20589C8__A1__8S20589C1[9]),  9,15},
  {&(_tg__ZTV8S20589C7__8S20589C8__A1__8S20589C1[10]),  10,18},
  {&(_tg__ZTV9S20589C10__8S20589C8__A1__8S20589C1[10]),  10,17},
};
extern VTBL_ENTRY _ZTI8S20589C1[];
extern  VTBL_ENTRY _ZTV8S20589C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20589C1[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D0Ev,_ZTv0_n20_N8S20589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D0Ev,_ZThn68_N8S20589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C5D1Ev,_ZTv0_n20_N8S20589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20589C5D1Ev,_ZThn68_N8S20589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D0Ev,_ZTv0_n20_N8S20589C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20589C8D0Ev,_ZThn216_N8S20589C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D0Ev,_ZThn56_N8S20589C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C8D1Ev,_ZTv0_n20_N8S20589C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20589C8D1Ev,_ZThn216_N8S20589C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20589C8D1Ev,_ZThn56_N8S20589C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C3D0Ev,_ZTv0_n20_N8S20589C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C3D0Ev,_ZThn80_N8S20589C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C3D1Ev,_ZTv0_n20_N8S20589C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C3D1Ev,_ZThn80_N8S20589C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C3D0Ev,_ZTv0_n60_N8S20589C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C3D0Ev,_ZThn12_N8S20589C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C3D1Ev,_ZTv0_n60_N8S20589C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C3D1Ev,_ZThn12_N8S20589C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D0Ev,_ZTv0_n20_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D0Ev,_ZThn80_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C4D1Ev,_ZTv0_n20_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20589C4D1Ev,_ZThn80_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D0Ev,_ZTv0_n60_N8S20589C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D0Ev,_ZThn12_N8S20589C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C4D1Ev,_ZTv0_n60_N8S20589C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20589C4D1Ev,_ZThn12_N8S20589C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C2D0Ev,_ZTv0_n20_N8S20589C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20589C2D0Ev,_ZThn212_N8S20589C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C2D1Ev,_ZTv0_n20_N8S20589C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20589C2D1Ev,_ZThn212_N8S20589C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C2D0Ev,_ZTv0_n60_N8S20589C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20589C2D0Ev,_ZThn144_N8S20589C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C2D1Ev,_ZTv0_n60_N8S20589C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20589C2D1Ev,_ZThn144_N8S20589C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20589C2D0Ev,_ZTv0_n36_N8S20589C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20589C2D0Ev,_ZThn132_N8S20589C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20589C2D1Ev,_ZTv0_n36_N8S20589C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20589C2D1Ev,_ZThn132_N8S20589C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20589C11D0Ev,_ZTv0_n20_N9S20589C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20589C11D0Ev,_ZThn212_N9S20589C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20589C11D1Ev,_ZTv0_n20_N9S20589C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20589C11D1Ev,_ZThn212_N9S20589C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C1D0Ev,_ZTv0_n20_N8S20589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20589C1D0Ev,_ZThn216_N8S20589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20589C1D1Ev,_ZTv0_n20_N8S20589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20589C1D1Ev,_ZThn216_N8S20589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C1D0Ev,_ZTv0_n60_N8S20589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20589C1D0Ev,_ZThn148_N8S20589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20589C1D1Ev,_ZTv0_n60_N8S20589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20589C1D1Ev,_ZThn148_N8S20589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20589C1D0Ev,_ZTv0_n36_N8S20589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20589C1D0Ev,_ZThn136_N8S20589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20589C1D1Ev,_ZTv0_n36_N8S20589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20589C1D1Ev,_ZThn136_N8S20589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20589C1D0Ev,_ZTv0_n64_N8S20589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20589C1D0Ev,_ZThn4_N8S20589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20589C1D1Ev,_ZTv0_n64_N8S20589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20589C1D1Ev,_ZThn4_N8S20589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20589C1D0Ev,_ZTv0_n24_N8S20589C1D0Ev), // 
  (VTBL_ENTRY)_ZN8S20589C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20589C1D1Ev,_ZTv0_n24_N8S20589C1D1Ev), // 
  (VTBL_ENTRY)_ZN8S20589C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20589C1 = {  "S20589C1", // class name
  bases_S20589C1, 14,
  &(vtc_S20589C1[0]), // expected_vtbl_contents
  &(vtt_S20589C1[0]), // expected_vtt_contents
  ABISELECT(360,244), // object size
  NSPAIRA(_ZTI8S20589C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20589C1),190, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20589C1),58, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19368C3  {
  ::S21103C10 s19368c3f0[10];
  virtual  ~S19368C3(); // _ZN8S19368C3D1Ev
  virtual void  v5(); // _ZN8S19368C32v5Ev
  virtual void  v6(); // _ZN8S19368C32v6Ev
  virtual void  v7(); // _ZN8S19368C32v7Ev
  virtual void  v8(); // _ZN8S19368C32v8Ev
  virtual void  v9(); // _ZN8S19368C32v9Ev
  virtual void  v10(); // _ZN8S19368C33v10Ev
  virtual void  v11(); // _ZN8S19368C33v11Ev
  S19368C3(); // tgen
};
//SIG(-1 S19368C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FU2{ m Fl}[10]}


 S19368C3 ::~S19368C3(){ note_dtor("S19368C3", this);}
void  S19368C3 ::v5(){vfunc_called(this, "_ZN8S19368C32v5Ev");}
void  S19368C3 ::v6(){vfunc_called(this, "_ZN8S19368C32v6Ev");}
void  S19368C3 ::v7(){vfunc_called(this, "_ZN8S19368C32v7Ev");}
void  S19368C3 ::v8(){vfunc_called(this, "_ZN8S19368C32v8Ev");}
void  S19368C3 ::v9(){vfunc_called(this, "_ZN8S19368C32v9Ev");}
void  S19368C3 ::v10(){vfunc_called(this, "_ZN8S19368C33v10Ev");}
void  S19368C3 ::v11(){vfunc_called(this, "_ZN8S19368C33v11Ev");}
S19368C3 ::S19368C3(){ note_ctor("S19368C3", this);} // tgen

static void Test_S19368C3()
{
  extern Class_Descriptor cd_S19368C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S19368C3, buf);
    S19368C3 *dp, &lv = *(dp=new (buf) S19368C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S19368C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19368C3)");
    check_field_offset(lv, s19368c3f0, ABISELECT(8,4), "S19368C3.s19368c3f0");
    test_class_info(&lv, &cd_S19368C3);
    dp->~S19368C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C3(Test_S19368C3, "S19368C3", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S19368C3C1Ev();
extern void _ZN8S19368C3D1Ev();
Name_Map name_map_S19368C3[] = {
  NSPAIR(_ZN8S19368C3C1Ev),
  NSPAIR(_ZN8S19368C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19368C3[];
extern void _ZN8S19368C3D1Ev();
extern void _ZN8S19368C3D0Ev();
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
static  VTBL_ENTRY vtc_S19368C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C3[0]),
  (VTBL_ENTRY)&_ZN8S19368C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
};
extern VTBL_ENTRY _ZTI8S19368C3[];
extern  VTBL_ENTRY _ZTV8S19368C3[];
Class_Descriptor cd_S19368C3 = {  "S19368C3", // class name
  0,0,//no base classes
  &(vtc_S19368C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S19368C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19368C3),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  S19368C5  {
  void *s19368c5f0[5];
  virtual void  v12(); // _ZN8S19368C53v12Ev
  virtual void  v13(); // _ZN8S19368C53v13Ev
  virtual void  v14(); // _ZN8S19368C53v14Ev
  virtual void  v15(); // _ZN8S19368C53v15Ev
  virtual void  v16(); // _ZN8S19368C53v16Ev
  virtual void  v17(); // _ZN8S19368C53v17Ev
  virtual void  v18(); // _ZN8S19368C53v18Ev
  virtual void  v19(); // _ZN8S19368C53v19Ev
  virtual void  v20(); // _ZN8S19368C53v20Ev
  ~S19368C5(); // tgen
  S19368C5(); // tgen
};
//SIG(-1 S19368C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S19368C5 ::v12(){vfunc_called(this, "_ZN8S19368C53v12Ev");}
void  S19368C5 ::v13(){vfunc_called(this, "_ZN8S19368C53v13Ev");}
void  S19368C5 ::v14(){vfunc_called(this, "_ZN8S19368C53v14Ev");}
void  S19368C5 ::v15(){vfunc_called(this, "_ZN8S19368C53v15Ev");}
void  S19368C5 ::v16(){vfunc_called(this, "_ZN8S19368C53v16Ev");}
void  S19368C5 ::v17(){vfunc_called(this, "_ZN8S19368C53v17Ev");}
void  S19368C5 ::v18(){vfunc_called(this, "_ZN8S19368C53v18Ev");}
void  S19368C5 ::v19(){vfunc_called(this, "_ZN8S19368C53v19Ev");}
void  S19368C5 ::v20(){vfunc_called(this, "_ZN8S19368C53v20Ev");}
S19368C5 ::~S19368C5(){ note_dtor("S19368C5", this);} // tgen
S19368C5 ::S19368C5(){ note_ctor("S19368C5", this);} // tgen

static void Test_S19368C5()
{
  extern Class_Descriptor cd_S19368C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19368C5, buf);
    S19368C5 *dp, &lv = *(dp=new (buf) S19368C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19368C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19368C5)");
    check_field_offset(lv, s19368c5f0, ABISELECT(8,4), "S19368C5.s19368c5f0");
    test_class_info(&lv, &cd_S19368C5);
    dp->~S19368C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C5(Test_S19368C5, "S19368C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19368C5C1Ev();
extern void _ZN8S19368C5D1Ev();
Name_Map name_map_S19368C5[] = {
  NSPAIR(_ZN8S19368C5C1Ev),
  NSPAIR(_ZN8S19368C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19368C5[];
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
static  VTBL_ENTRY vtc_S19368C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C5[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
};
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
Class_Descriptor cd_S19368C5 = {  "S19368C5", // class name
  0,0,//no base classes
  &(vtc_S19368C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19368C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19368C5),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  S19368C8  {
  virtual void  v21(); // _ZN8S19368C83v21Ev
  virtual void  v22(); // _ZN8S19368C83v22Ev
  virtual void  v23(); // _ZN8S19368C83v23Ev
  virtual void  v24(); // _ZN8S19368C83v24Ev
  virtual void  v25(); // _ZN8S19368C83v25Ev
  virtual void  v26(); // _ZN8S19368C83v26Ev
  virtual void  v27(); // _ZN8S19368C83v27Ev
  virtual void  v28(); // _ZN8S19368C83v28Ev
  ~S19368C8(); // tgen
  S19368C8(); // tgen
};
//SIG(-1 S19368C8) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S19368C8 ::v21(){vfunc_called(this, "_ZN8S19368C83v21Ev");}
void  S19368C8 ::v22(){vfunc_called(this, "_ZN8S19368C83v22Ev");}
void  S19368C8 ::v23(){vfunc_called(this, "_ZN8S19368C83v23Ev");}
void  S19368C8 ::v24(){vfunc_called(this, "_ZN8S19368C83v24Ev");}
void  S19368C8 ::v25(){vfunc_called(this, "_ZN8S19368C83v25Ev");}
void  S19368C8 ::v26(){vfunc_called(this, "_ZN8S19368C83v26Ev");}
void  S19368C8 ::v27(){vfunc_called(this, "_ZN8S19368C83v27Ev");}
void  S19368C8 ::v28(){vfunc_called(this, "_ZN8S19368C83v28Ev");}
S19368C8 ::~S19368C8(){ note_dtor("S19368C8", this);} // tgen
S19368C8 ::S19368C8(){ note_ctor("S19368C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19368C8C1Ev();
extern void _ZN8S19368C8D1Ev();
Name_Map name_map_S19368C8[] = {
  NSPAIR(_ZN8S19368C8C1Ev),
  NSPAIR(_ZN8S19368C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19368C8[];
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY vtc_S19368C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C8[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern VTBL_ENTRY _ZTI8S19368C8[];
extern  VTBL_ENTRY _ZTV8S19368C8[];
Class_Descriptor cd_S19368C8 = {  "S19368C8", // class name
  0,0,//no base classes
  &(vtc_S19368C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19368C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19368C8),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  S19368C7  : virtual S19368C8 {
  int s19368c7f0;
  int s19368c7f1;
  void *s19368c7f2;
  virtual  ~S19368C7(); // _ZN8S19368C7D2Ev
  virtual void  v29(); // _ZN8S19368C73v29Ev
  virtual void  v30(); // _ZN8S19368C73v30Ev
  virtual void  v31(); // _ZN8S19368C73v31Ev
  virtual void  v32(); // _ZN8S19368C73v32Ev
  S19368C7(); // tgen
};
//SIG(-1 S19368C7) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 Fi[2] Fp}


 S19368C7 ::~S19368C7(){ note_dtor("S19368C7", this);}
void  S19368C7 ::v29(){vfunc_called(this, "_ZN8S19368C73v29Ev");}
void  S19368C7 ::v30(){vfunc_called(this, "_ZN8S19368C73v30Ev");}
void  S19368C7 ::v31(){vfunc_called(this, "_ZN8S19368C73v31Ev");}
void  S19368C7 ::v32(){vfunc_called(this, "_ZN8S19368C73v32Ev");}
S19368C7 ::S19368C7(){ note_ctor("S19368C7", this);} // tgen

static void Test_S19368C7()
{
  extern Class_Descriptor cd_S19368C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19368C7, buf);
    S19368C7 *dp, &lv = *(dp=new (buf) S19368C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19368C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19368C7)");
    check_base_class_offset(lv, (S19368C8*), 0, "S19368C7");
    check_field_offset(lv, s19368c7f0, ABISELECT(8,4), "S19368C7.s19368c7f0");
    check_field_offset(lv, s19368c7f1, ABISELECT(12,8), "S19368C7.s19368c7f1");
    check_field_offset(lv, s19368c7f2, ABISELECT(16,12), "S19368C7.s19368c7f2");
    test_class_info(&lv, &cd_S19368C7);
    dp->~S19368C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C7(Test_S19368C7, "S19368C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19368C7C1Ev();
extern void _ZN8S19368C7D2Ev();
Name_Map name_map_S19368C7[] = {
  NSPAIR(_ZN8S19368C7C1Ev),
  NSPAIR(_ZN8S19368C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19368C8;
extern VTBL_ENTRY _ZTI8S19368C8[];
extern  VTBL_ENTRY _ZTV8S19368C8[];
static Base_Class bases_S19368C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19368C8,    0, //bcp->offset
    -1, //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 _ZTI8S19368C7[];
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY vtc_S19368C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern VTBL_ENTRY _ZTV8S19368C7[];
static  VTT_ENTRY vtt_S19368C7[] = {
  {&(_ZTV8S19368C7[11]),  11,25},
  {&(_ZTV8S19368C7[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
Class_Descriptor cd_S19368C7 = {  "S19368C7", // class name
  bases_S19368C7, 1,
  &(vtc_S19368C7[0]), // expected_vtbl_contents
  &(vtt_S19368C7[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19368C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19368C7),25, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19368C7),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  S19368C9  : virtual S19368C7 , S19368C5 {
  int s19368c9f0;
  long double s19368c9f1;
  virtual void  v33(); // _ZN8S19368C93v33Ev
  virtual void  v34(); // _ZN8S19368C93v34Ev
  virtual void  v35(); // _ZN8S19368C93v35Ev
  virtual void  v36(); // _ZN8S19368C93v36Ev
  virtual void  v37(); // _ZN8S19368C93v37Ev
  ~S19368C9(); // tgen
  S19368C9(); // tgen
};
//SIG(-1 S19368C9) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13} vd v14 v15 v16 v17 Fi[2] Fp} BC4{ v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[5]} v1 v2 v3 v4 v5 Fi FD}


void  S19368C9 ::v33(){vfunc_called(this, "_ZN8S19368C93v33Ev");}
void  S19368C9 ::v34(){vfunc_called(this, "_ZN8S19368C93v34Ev");}
void  S19368C9 ::v35(){vfunc_called(this, "_ZN8S19368C93v35Ev");}
void  S19368C9 ::v36(){vfunc_called(this, "_ZN8S19368C93v36Ev");}
void  S19368C9 ::v37(){vfunc_called(this, "_ZN8S19368C93v37Ev");}
S19368C9 ::~S19368C9(){ note_dtor("S19368C9", this);} // tgen
S19368C9 ::S19368C9(){ note_ctor("S19368C9", this);} // tgen

static void Test_S19368C9()
{
  extern Class_Descriptor cd_S19368C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S19368C9, buf);
    S19368C9 *dp, &lv = *(dp=new (buf) S19368C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S19368C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19368C9)");
    check_base_class_offset(lv, (S19368C8*)(S19368C7*), ABISELECT(80,40), "S19368C9");
    check_base_class_offset(lv, (S19368C7*), ABISELECT(80,40), "S19368C9");
    check_base_class_offset(lv, (S19368C5*), 0, "S19368C9");
    check_field_offset(lv, s19368c9f0, ABISELECT(48,24), "S19368C9.s19368c9f0");
    check_field_offset(lv, s19368c9f1, ABISELECT(64,28), "S19368C9.s19368c9f1");
    test_class_info(&lv, &cd_S19368C9);
    dp->~S19368C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C9(Test_S19368C9, "S19368C9", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S19368C9C1Ev();
extern void _ZN8S19368C9D1Ev();
Name_Map name_map_S19368C9[] = {
  NSPAIR(_ZN8S19368C9C1Ev),
  NSPAIR(_ZN8S19368C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19368C8;
extern VTBL_ENTRY _ZTI8S19368C8[];
extern  VTBL_ENTRY _ZTV8S19368C8[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
static Base_Class bases_S19368C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19368C8,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S19368C7,    ABISELECT(80,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    16, //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},
  {&cd_S19368C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S19368C9[];
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void _ZN8S19368C9D1Ev();
extern void _ZN8S19368C9D0Ev();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S19368C9D1Ev,_ZThn40_N8S19368C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S19368C9D0Ev,_ZThn40_N8S19368C9D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY vtc_S19368C9[] = {
  ABISELECT(80,40),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern VTBL_ENTRY _ZTV8S19368C9[];
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__8S19368C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
static  VTT_ENTRY vtt_S19368C9[] = {
  {&(_ZTV8S19368C9[4]),  4,50},
  {&(_ZTV8S19368C9[36]),  36,50},
  {&(_ZTV8S19368C9[36]),  36,50},
  {&(_tg__ZTV8S19368C7__8S19368C9[11]),  11,25},
  {&(_tg__ZTV8S19368C7__8S19368C9[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S19368C9[];
extern  VTBL_ENTRY _ZTV8S19368C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C9[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19368C9D0Ev,_ZThn40_N8S19368C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19368C9D1Ev,_ZThn40_N8S19368C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19368C9 = {  "S19368C9", // class name
  bases_S19368C9, 3,
  &(vtc_S19368C9[0]), // expected_vtbl_contents
  &(vtt_S19368C9[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S19368C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19368C9),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19368C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19368C6  : S19368C5 , S19368C7 , S19368C9 {
  int s19368c6f0;
  virtual  ~S19368C6(); // _ZN8S19368C6D2Ev
  virtual void  v38(); // _ZN8S19368C63v38Ev
  virtual void  v39(); // _ZN8S19368C63v39Ev
  virtual void  v40(); // _ZN8S19368C63v40Ev
  virtual void  v41(); // _ZN8S19368C63v41Ev
  virtual void  v42(); // _ZN8S19368C63v42Ev
  virtual void  v43(); // _ZN8S19368C63v43Ev
  virtual void  v44(); // _ZN8S19368C63v44Ev
  virtual void  v45(); // _ZN8S19368C63v45Ev
  S19368C6(); // tgen
};
//SIG(-1 S19368C6) C1{ BC2{ v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5]} BC3{ VBC4{ v18 v19 v20 v21 v22 v23 v24 v25} vd v26 v27 v28 v29 Fi[2] Fp} BC5{ VBC3 BC2 v30 v31 v32 v33 v34 Fi FD} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi}


 S19368C6 ::~S19368C6(){ note_dtor("S19368C6", this);}
void  S19368C6 ::v38(){vfunc_called(this, "_ZN8S19368C63v38Ev");}
void  S19368C6 ::v39(){vfunc_called(this, "_ZN8S19368C63v39Ev");}
void  S19368C6 ::v40(){vfunc_called(this, "_ZN8S19368C63v40Ev");}
void  S19368C6 ::v41(){vfunc_called(this, "_ZN8S19368C63v41Ev");}
void  S19368C6 ::v42(){vfunc_called(this, "_ZN8S19368C63v42Ev");}
void  S19368C6 ::v43(){vfunc_called(this, "_ZN8S19368C63v43Ev");}
void  S19368C6 ::v44(){vfunc_called(this, "_ZN8S19368C63v44Ev");}
void  S19368C6 ::v45(){vfunc_called(this, "_ZN8S19368C63v45Ev");}
S19368C6 ::S19368C6(){ note_ctor("S19368C6", this);} // tgen

static void Test_S19368C6()
{
  extern Class_Descriptor cd_S19368C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,26)];
    init_test(&cd_S19368C6, buf);
    S19368C6 *dp, &lv = *(dp=new (buf) S19368C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S19368C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19368C6)");
    /*is_ambiguous_... S19368C6::S19368C5 */ AMB_check_base_class_offset(lv, (S19368C5*), 0, "S19368C6");
    /*is_ambiguous_... S19368C6::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C8*)(S19368C7*), ABISELECT(48,24), "S19368C6");
    /*is_ambiguous_... S19368C6::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C8*)(S19368C7*), ABISELECT(48,24), "S19368C6");
    /*is_ambiguous_... S19368C6::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C7*), ABISELECT(48,24), "S19368C6");
    check_base_class_offset(lv, (S19368C7*)(S19368C9*), ABISELECT(168,84), "S19368C6");
    check_base_class_offset(lv, (S19368C5*)(S19368C9*), ABISELECT(80,40), "S19368C6");
    check_base_class_offset(lv, (S19368C9*), ABISELECT(80,40), "S19368C6");
    check_field_offset(lv, s19368c6f0, ABISELECT(160,80), "S19368C6.s19368c6f0");
    test_class_info(&lv, &cd_S19368C6);
    dp->~S19368C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C6(Test_S19368C6, "S19368C6", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN8S19368C6C1Ev();
extern void _ZN8S19368C6D2Ev();
Name_Map name_map_S19368C6[] = {
  NSPAIR(_ZN8S19368C6C1Ev),
  NSPAIR(_ZN8S19368C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C8;
extern VTBL_ENTRY _ZTI8S19368C8[];
extern  VTBL_ENTRY _ZTV8S19368C8[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C9;
extern VTBL_ENTRY _ZTI8S19368C9[];
extern  VTBL_ENTRY _ZTV8S19368C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C9[];
static Base_Class bases_S19368C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19368C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19368C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19368C7,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19368C7,    ABISELECT(168,84), //bcp->offset
    68, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19368C5,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19368C9,    ABISELECT(80,40), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19368C6[];
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C6D1Ev();
extern void _ZN8S19368C6D0Ev();
extern void _ZN8S19368C63v38Ev();
extern void _ZN8S19368C63v39Ev();
extern void _ZN8S19368C63v40Ev();
extern void _ZN8S19368C63v41Ev();
extern void _ZN8S19368C63v42Ev();
extern void _ZN8S19368C63v43Ev();
extern void _ZN8S19368C63v44Ev();
extern void _ZN8S19368C63v45Ev();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZThn48_N8S19368C6D1Ev,_ZThn24_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19368C6D0Ev,_ZThn24_N8S19368C6D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void ABISELECT(_ZThn80_N8S19368C6D1Ev,_ZThn40_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19368C6D0Ev,_ZThn40_N8S19368C6D0Ev)();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn168_N8S19368C6D1Ev,_ZThn84_N8S19368C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev)();
extern void ABISELECT(_ZThn168_N8S19368C6D0Ev,_ZThn84_N8S19368C6D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY vtc_S19368C6[] = {
  ABISELECT(168,84),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v38Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v39Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v40Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v41Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v42Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v43Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v44Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19368C6D1Ev,_ZThn24_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19368C6D0Ev,_ZThn24_N8S19368C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19368C6D1Ev,_ZThn40_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19368C6D0Ev,_ZThn40_N8S19368C6D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-168,-84),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern VTBL_ENTRY _ZTV8S19368C6[];
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A__8S19368C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void _ZN8S19368C9D1Ev();
extern void _ZN8S19368C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C9__8S19368C6[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D0Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev)();
extern void ABISELECT(_ZThn88_N8S19368C9D1Ev,_ZThn44_N8S19368C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev)();
extern void ABISELECT(_ZThn88_N8S19368C9D0Ev,_ZThn44_N8S19368C9D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__8S19368C9__8S19368C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C9__8S19368C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A1__8S19368C6[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C7__A1__8S19368C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
static  VTT_ENTRY vtt_S19368C6[] = {
  {&(_ZTV8S19368C6[4]),  4,98},
  {&(_tg__ZTV8S19368C7__A__8S19368C6[11]),  11,25},
  {&(_tg__ZTV8S19368C7__A__8S19368C6[11]),  11,25},
  {&(_tg__ZTV8S19368C9__8S19368C6[4]),  4,20},
  {&(_tg__ZTV8S19368C7__8S19368C9__8S19368C6[16]),  16,30},
  {&(_tg__ZTV8S19368C8__8S19368C9__8S19368C6[10]),  10,18},
  {&(_ZTV8S19368C6[34]),  34,98},
  {&(_ZTV8S19368C6[34]),  34,98},
  {&(_ZTV8S19368C6[52]),  52,98},
  {&(_ZTV8S19368C6[84]),  84,98},
  {&(_tg__ZTV8S19368C7__A1__8S19368C6[11]),  11,25},
  {&(_tg__ZTV8S19368C8__8S19368C7__A1__8S19368C6[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19368C6[];
extern  VTBL_ENTRY _ZTV8S19368C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C6[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19368C9D0Ev,_ZThn44_N8S19368C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19368C9D1Ev,_ZThn44_N8S19368C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19368C6D0Ev,_ZThn84_N8S19368C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19368C6D1Ev,_ZThn84_N8S19368C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19368C6 = {  "S19368C6", // class name
  bases_S19368C6, 6,
  &(vtc_S19368C6[0]), // expected_vtbl_contents
  &(vtt_S19368C6[0]), // expected_vtt_contents
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI8S19368C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19368C6),98, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19368C6),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19368C11  {
  long double s19368c11f0;
  virtual void  v46(); // _ZN9S19368C113v46Ev
  ~S19368C11(); // tgen
  S19368C11(); // tgen
};
//SIG(-1 S19368C11) C1{ v1 FD}


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

static void Test_S19368C11()
{
  extern Class_Descriptor cd_S19368C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S19368C11, buf);
    S19368C11 *dp, &lv = *(dp=new (buf) S19368C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19368C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19368C11)");
    check_field_offset(lv, s19368c11f0, ABISELECT(16,4), "S19368C11.s19368c11f0");
    test_class_info(&lv, &cd_S19368C11);
    dp->~S19368C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C11(Test_S19368C11, "S19368C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19368C11C1Ev();
extern void _ZN9S19368C11D1Ev();
Name_Map name_map_S19368C11[] = {
  NSPAIR(_ZN9S19368C11C1Ev),
  NSPAIR(_ZN9S19368C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19368C11[];
extern void _ZN9S19368C113v46Ev();
static  VTBL_ENTRY vtc_S19368C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19368C11[0]),
  (VTBL_ENTRY)&_ZN9S19368C113v46Ev,
};
extern VTBL_ENTRY _ZTI9S19368C11[];
extern  VTBL_ENTRY _ZTV9S19368C11[];
Class_Descriptor cd_S19368C11 = {  "S19368C11", // class name
  0,0,//no base classes
  &(vtc_S19368C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19368C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19368C11),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  S19368C10  : virtual S19368C11 , S19368C3 , virtual S19368C7 , S19368C5 {
  ::S21103C11_nt s19368c10f0;
  virtual void  v47(); // _ZN9S19368C103v47Ev
  virtual void  v48(); // _ZN9S19368C103v48Ev
  virtual void  v49(); // _ZN9S19368C103v49Ev
  virtual void  v50(); // _ZN9S19368C103v50Ev
  virtual void  v51(); // _ZN9S19368C103v51Ev
  virtual void  v52(); // _ZN9S19368C103v52Ev
  ~S19368C10(); // tgen
  S19368C10(); // tgen
};
//SIG(-1 S19368C10) C1{ VBC2{ v7 FD} BC3{ vd v8 v9 v10 v11 v12 v13 v14 FU4{ m Fl}[10]} VBC5{ VBC6{ v15 v16 v17 v18 v19 v20 v21 v22} vd v23 v24 v25 v26 Fi Fi Fp} BC7{ v27 v28 v29 v30 v31 v32 v33 v34 v35 Fp[5]} v1 v2 v3 v4 v5 v6 FU8{ m}}


void  S19368C10 ::v47(){vfunc_called(this, "_ZN9S19368C103v47Ev");}
void  S19368C10 ::v48(){vfunc_called(this, "_ZN9S19368C103v48Ev");}
void  S19368C10 ::v49(){vfunc_called(this, "_ZN9S19368C103v49Ev");}
void  S19368C10 ::v50(){vfunc_called(this, "_ZN9S19368C103v50Ev");}
void  S19368C10 ::v51(){vfunc_called(this, "_ZN9S19368C103v51Ev");}
void  S19368C10 ::v52(){vfunc_called(this, "_ZN9S19368C103v52Ev");}
S19368C10 ::~S19368C10(){ note_dtor("S19368C10", this);} // tgen
S19368C10 ::S19368C10(){ note_ctor("S19368C10", this);} // tgen

static void Test_S19368C10()
{
  extern Class_Descriptor cd_S19368C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,27)];
    init_test(&cd_S19368C10, buf);
    S19368C10 *dp, &lv = *(dp=new (buf) S19368C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,104), "sizeof(S19368C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19368C10)");
    check_base_class_offset(lv, (S19368C11*), ABISELECT(144,72), "S19368C10");
    check_base_class_offset(lv, (S19368C3*), 0, "S19368C10");
    check_base_class_offset(lv, (S19368C8*)(S19368C7*), ABISELECT(176,88), "S19368C10");
    check_base_class_offset(lv, (S19368C7*), ABISELECT(176,88), "S19368C10");
    check_base_class_offset(lv, (S19368C5*), ABISELECT(88,44), "S19368C10");
    check_field_offset(lv, s19368c10f0, ABISELECT(136,68), "S19368C10.s19368c10f0");
    test_class_info(&lv, &cd_S19368C10);
    dp->~S19368C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C10(Test_S19368C10, "S19368C10", ABISELECT(208,104));

#else // __cplusplus

extern void _ZN9S19368C10C1Ev();
extern void _ZN9S19368C10D1Ev();
Name_Map name_map_S19368C10[] = {
  NSPAIR(_ZN9S19368C10C1Ev),
  NSPAIR(_ZN9S19368C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19368C11;
extern VTBL_ENTRY _ZTI9S19368C11[];
extern  VTBL_ENTRY _ZTV9S19368C11[];
extern Class_Descriptor cd_S19368C3;
extern VTBL_ENTRY _ZTI8S19368C3[];
extern  VTBL_ENTRY _ZTV8S19368C3[];
extern Class_Descriptor cd_S19368C8;
extern VTBL_ENTRY _ZTI8S19368C8[];
extern  VTBL_ENTRY _ZTV8S19368C8[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
static Base_Class bases_S19368C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19368C11,    ABISELECT(144,72), //bcp->offset
    31, //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_S19368C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19368C8,    ABISELECT(176,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19368C7,    ABISELECT(176,88), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19368C5,    ABISELECT(88,44), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19368C10[];
extern void _ZN9S19368C10D1Ev();
extern void _ZN9S19368C10D0Ev();
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN9S19368C103v47Ev();
extern void _ZN9S19368C103v48Ev();
extern void _ZN9S19368C103v49Ev();
extern void _ZN9S19368C103v50Ev();
extern void _ZN9S19368C103v51Ev();
extern void _ZN9S19368C103v52Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN9S19368C113v46Ev();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N9S19368C10D1Ev,_ZTv0_n48_N9S19368C10D1Ev)();
extern void ABISELECT(_ZThn176_N9S19368C10D1Ev,_ZThn88_N9S19368C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19368C10D0Ev,_ZTv0_n48_N9S19368C10D0Ev)();
extern void ABISELECT(_ZThn176_N9S19368C10D0Ev,_ZThn88_N9S19368C10D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY vtc_S19368C10[] = {
  ABISELECT(176,88),
  ABISELECT(176,88),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN9S19368C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19368C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v47Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v48Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v49Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v50Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v51Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v52Ev,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN9S19368C113v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19368C10D1Ev,_ZTv0_n48_N9S19368C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19368C10D0Ev,_ZTv0_n48_N9S19368C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern VTBL_ENTRY _ZTV9S19368C10[];
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__9S19368C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
static  VTT_ENTRY vtt_S19368C10[] = {
  {&(_ZTV9S19368C10[5]),  5,65},
  {&(_ZTV9S19368C10[34]),  34,65},
  {&(_ZTV9S19368C10[51]),  51,65},
  {&(_ZTV9S19368C10[51]),  51,65},
  {&(_tg__ZTV8S19368C7__9S19368C10[11]),  11,25},
  {&(_tg__ZTV8S19368C7__9S19368C10[11]),  11,25},
};
extern VTBL_ENTRY _ZTI9S19368C10[];
extern  VTBL_ENTRY _ZTV9S19368C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19368C10[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19368C10D0Ev,_ZTv0_n48_N9S19368C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19368C10D0Ev,_ZThn88_N9S19368C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19368C10D1Ev,_ZTv0_n48_N9S19368C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19368C10D1Ev,_ZThn88_N9S19368C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19368C10 = {  "S19368C10", // class name
  bases_S19368C10, 5,
  &(vtc_S19368C10[0]), // expected_vtbl_contents
  &(vtt_S19368C10[0]), // expected_vtt_contents
  ABISELECT(208,104), // object size
  NSPAIRA(_ZTI9S19368C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19368C10),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19368C10),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19368C2  : S19368C3 , virtual S19368C5 , virtual S19368C6 , virtual S19368C10 {
  virtual  ~S19368C2(); // _ZN8S19368C2D2Ev
  virtual void  v53(); // _ZN8S19368C23v53Ev
  virtual void  v54(); // _ZN8S19368C23v54Ev
  virtual void  v55(); // _ZN8S19368C23v55Ev
  virtual void  v56(); // _ZN8S19368C23v56Ev
  S19368C2(); // tgen
};
//SIG(-1 S19368C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 FU3{ m Fl}[10]} VBC4{ v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[5]} VBC5{ BC4 BC6{ VBC7{ v21 v22 v23 v24 v25 v26 v27 v28} vd v29 v30 v31 v32 Fi Fi Fp} BC8{ VBC6 BC4 v33 v34 v35 v36 v37 Fi FD} vd v38 v39 v40 v41 v42 v43 v44 v45 Fi} VBC9{ VBC10{ v46 FD} BC2 VBC6 BC4 v47 v48 v49 v50 v51 v52 FU11{ m}} vd v1 v2 v3 v4}


 S19368C2 ::~S19368C2(){ note_dtor("S19368C2", this);}
void  S19368C2 ::v53(){vfunc_called(this, "_ZN8S19368C23v53Ev");}
void  S19368C2 ::v54(){vfunc_called(this, "_ZN8S19368C23v54Ev");}
void  S19368C2 ::v55(){vfunc_called(this, "_ZN8S19368C23v55Ev");}
void  S19368C2 ::v56(){vfunc_called(this, "_ZN8S19368C23v56Ev");}
S19368C2 ::S19368C2(){ note_ctor("S19368C2", this);} // tgen

static void Test_S19368C2()
{
  extern Class_Descriptor cd_S19368C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,65)];
    init_test(&cd_S19368C2, buf);
    S19368C2 *dp, &lv = *(dp=new (buf) S19368C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,256), "sizeof(S19368C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19368C2)");
    /*is_ambiguous_... S19368C2::S19368C3 */ AMB_check_base_class_offset(lv, (S19368C3*), 0, "S19368C2");
    /*is_ambiguous_... S19368C2::S19368C5 */ AMB_check_base_class_offset(lv, (S19368C5*), ABISELECT(88,44), "S19368C2");
    /*is_ambiguous_... S19368C6::S19368C5 */ AMB_check_base_class_offset(lv, (S19368C5*)(S19368C6*), ABISELECT(144,68), "S19368C2");
    /*is_ambiguous_... S19368C6::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C8*)(S19368C7*)(S19368C6*), ABISELECT(192,92), "S19368C2");
    /*is_ambiguous_... S19368C2::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C8*)(S19368C7*), ABISELECT(192,92), "S19368C2");
    /*is_ambiguous_... S19368C6::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C7*)(S19368C6*), ABISELECT(192,92), "S19368C2");
    check_base_class_offset(lv, (S19368C7*)(S19368C9*)(S19368C6*), ABISELECT(312,152), "S19368C2");
    check_base_class_offset(lv, (S19368C7*)(S19368C10*), ABISELECT(312,152), "S19368C2");
    check_base_class_offset(lv, (S19368C5*)(S19368C9*)(S19368C6*), ABISELECT(224,108), "S19368C2");
    check_base_class_offset(lv, (S19368C9*)(S19368C6*), ABISELECT(224,108), "S19368C2");
    check_base_class_offset(lv, (S19368C6*), ABISELECT(144,68), "S19368C2");
    check_base_class_offset(lv, (S19368C11*)(S19368C10*), ABISELECT(480,240), "S19368C2");
    check_base_class_offset(lv, (S19368C3*)(S19368C10*), ABISELECT(336,168), "S19368C2");
    check_base_class_offset(lv, (S19368C5*)(S19368C10*), ABISELECT(424,212), "S19368C2");
    check_base_class_offset(lv, (S19368C10*), ABISELECT(336,168), "S19368C2");
    test_class_info(&lv, &cd_S19368C2);
    dp->~S19368C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C2(Test_S19368C2, "S19368C2", ABISELECT(512,256));

#else // __cplusplus

extern void _ZN8S19368C2C1Ev();
extern void _ZN8S19368C2D2Ev();
Name_Map name_map_S19368C2[] = {
  NSPAIR(_ZN8S19368C2C1Ev),
  NSPAIR(_ZN8S19368C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19368C3;
extern VTBL_ENTRY _ZTI8S19368C3[];
extern  VTBL_ENTRY _ZTV8S19368C3[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C8;
extern VTBL_ENTRY _ZTI8S19368C8[];
extern  VTBL_ENTRY _ZTV8S19368C8[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C9;
extern VTBL_ENTRY _ZTI8S19368C9[];
extern  VTBL_ENTRY _ZTV8S19368C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C9[];
extern Class_Descriptor cd_S19368C6;
extern VTBL_ENTRY _ZTI8S19368C6[];
extern  VTBL_ENTRY _ZTV8S19368C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C6[];
extern Class_Descriptor cd_S19368C11;
extern VTBL_ENTRY _ZTI9S19368C11[];
extern  VTBL_ENTRY _ZTV9S19368C11[];
extern Class_Descriptor cd_S19368C3;
extern VTBL_ENTRY _ZTI8S19368C3[];
extern  VTBL_ENTRY _ZTV8S19368C3[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C10;
extern VTBL_ENTRY _ZTI9S19368C10[];
extern  VTBL_ENTRY _ZTV9S19368C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19368C10[];
static Base_Class bases_S19368C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19368C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19368C5,    ABISELECT(88,44), //bcp->offset
    21, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19368C5,    ABISELECT(144,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
    8, //immediately_derived
  0, 0},
  {&cd_S19368C8,    ABISELECT(192,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19368C7,    ABISELECT(192,92), //bcp->offset
    91, //bcp->virtual_function_table_offset
    11, //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
    8, //immediately_derived
  0, 0},
  {&cd_S19368C7,    ABISELECT(312,152), //bcp->offset
    136, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19368C5,    ABISELECT(224,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19368C9,    ABISELECT(224,108), //bcp->offset
    116, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19368C6,    ABISELECT(144,68), //bcp->offset
    41, //bcp->virtual_function_table_offset
    31, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19368C11,    ABISELECT(480,240), //bcp->offset
    220, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19368C3,    ABISELECT(336,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19368C5,    ABISELECT(424,212), //bcp->offset
    209, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19368C10,    ABISELECT(336,168), //bcp->offset
    166, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19368C2[];
extern void _ZN8S19368C2D1Ev();
extern void _ZN8S19368C2D0Ev();
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN8S19368C23v53Ev();
extern void _ZN8S19368C23v54Ev();
extern void _ZN8S19368C23v55Ev();
extern void _ZN8S19368C23v56Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void ABISELECT(_ZTv0_n112_N8S19368C2D1Ev,_ZTv0_n56_N8S19368C2D1Ev)();
extern void ABISELECT(_ZThn144_N8S19368C2D1Ev,_ZThn68_N8S19368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S19368C2D0Ev,_ZTv0_n56_N8S19368C2D0Ev)();
extern void ABISELECT(_ZThn144_N8S19368C2D0Ev,_ZThn68_N8S19368C2D0Ev)() __attribute__((weak));
extern void _ZN8S19368C63v38Ev();
extern void _ZN8S19368C63v39Ev();
extern void _ZN8S19368C63v40Ev();
extern void _ZN8S19368C63v41Ev();
extern void _ZN8S19368C63v42Ev();
extern void _ZN8S19368C63v43Ev();
extern void _ZN8S19368C63v44Ev();
extern void _ZN8S19368C63v45Ev();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTvn48_n112_N8S19368C2D1Ev,_ZTvn24_n56_N8S19368C2D1Ev)();
extern void ABISELECT(_ZTvn48_n112_N8S19368C2D0Ev,_ZTvn24_n56_N8S19368C2D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void ABISELECT(_ZTvn80_n112_N8S19368C2D1Ev,_ZTvn40_n56_N8S19368C2D1Ev)();
extern void ABISELECT(_ZTvn80_n112_N8S19368C2D0Ev,_ZTvn40_n56_N8S19368C2D0Ev)();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C2D1Ev,_ZTv0_n48_N8S19368C2D1Ev)();
extern void ABISELECT(_ZThn312_N8S19368C2D1Ev,_ZThn152_N8S19368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C2D0Ev,_ZTv0_n48_N8S19368C2D0Ev)();
extern void ABISELECT(_ZThn312_N8S19368C2D0Ev,_ZThn152_N8S19368C2D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
extern void ABISELECT(_ZTv0_n48_N8S19368C2D1Ev,_ZTv0_n24_N8S19368C2D1Ev)();
extern void ABISELECT(_ZThn336_N8S19368C2D1Ev,_ZThn168_N8S19368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19368C2D0Ev,_ZTv0_n24_N8S19368C2D0Ev)();
extern void ABISELECT(_ZThn336_N8S19368C2D0Ev,_ZThn168_N8S19368C2D0Ev)() __attribute__((weak));
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN9S19368C103v47Ev();
extern void _ZN9S19368C103v48Ev();
extern void _ZN9S19368C103v49Ev();
extern void _ZN9S19368C103v50Ev();
extern void _ZN9S19368C103v51Ev();
extern void _ZN9S19368C103v52Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN9S19368C113v46Ev();
static  VTBL_ENTRY vtc_S19368C2[] = {
  ABISELECT(480,240),
  ABISELECT(336,168),
  ABISELECT(312,152),
  ABISELECT(192,92),
  ABISELECT(144,68),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v53Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v54Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v55Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v56Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-68),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,84),
  ABISELECT(48,24),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19368C2D1Ev,_ZTv0_n56_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19368C2D0Ev,_ZTv0_n56_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C63v38Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v39Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v40Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v41Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v42Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v43Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v44Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n112_N8S19368C2D1Ev,_ZTvn24_n56_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n112_N8S19368C2D0Ev,_ZTvn24_n56_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n112_N8S19368C2D1Ev,_ZTvn40_n56_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n112_N8S19368C2D0Ev,_ZTvn40_n56_N8S19368C2D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-312,-152),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-312,-152),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C2D1Ev,_ZTv0_n48_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C2D0Ev,_ZTv0_n48_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-168),
  ABISELECT(-144,-76),
  ABISELECT(-24,-16),
  ABISELECT(144,72),
  ABISELECT(-336,-168),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19368C2D1Ev,_ZTv0_n24_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19368C2D0Ev,_ZTv0_n24_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v47Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v48Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v49Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v50Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v51Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v52Ev,
  ABISELECT(-424,-212),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  0,
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN9S19368C113v46Ev,
};
extern VTBL_ENTRY _ZTV8S19368C2[];
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C6D1Ev();
extern void _ZN8S19368C6D0Ev();
extern void _ZN8S19368C63v38Ev();
extern void _ZN8S19368C63v39Ev();
extern void _ZN8S19368C63v40Ev();
extern void _ZN8S19368C63v41Ev();
extern void _ZN8S19368C63v42Ev();
extern void _ZN8S19368C63v43Ev();
extern void _ZN8S19368C63v44Ev();
extern void _ZN8S19368C63v45Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C6__8S19368C2[] = {
  ABISELECT(168,84),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v38Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v39Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v40Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v41Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v42Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v43Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v44Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v45Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C78S19368C6__8S19368C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void _ZN8S19368C9D1Ev();
extern void _ZN8S19368C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C98S19368C6__8S19368C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D0Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev)();
extern void ABISELECT(_ZThn88_N8S19368C9D1Ev,_ZThn44_N8S19368C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev)();
extern void ABISELECT(_ZThn88_N8S19368C9D0Ev,_ZThn44_N8S19368C9D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__8S19368C98S19368C6__8S19368C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C98S19368C6__8S19368C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZThn48_N8S19368C6D1Ev,_ZThn24_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19368C6D0Ev,_ZThn24_N8S19368C6D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A__8S19368C6__8S19368C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19368C6D1Ev,_ZThn24_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19368C6D0Ev,_ZThn24_N8S19368C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void ABISELECT(_ZThn80_N8S19368C6D1Ev,_ZThn40_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19368C6D0Ev,_ZThn40_N8S19368C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19368C9__8S19368C6__8S19368C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,44),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19368C6D1Ev,_ZThn40_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19368C6D0Ev,_ZThn40_N8S19368C6D0Ev),
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn168_N8S19368C6D1Ev,_ZThn84_N8S19368C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev)();
extern void ABISELECT(_ZThn168_N8S19368C6D0Ev,_ZThn84_N8S19368C6D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A1__8S19368C6__8S19368C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-168,-84),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A1__8S19368C2[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C7__A1__8S19368C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN9S19368C10D1Ev();
extern void _ZN9S19368C10D0Ev();
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN9S19368C103v47Ev();
extern void _ZN9S19368C103v48Ev();
extern void _ZN9S19368C103v49Ev();
extern void _ZN9S19368C103v50Ev();
extern void _ZN9S19368C103v51Ev();
extern void _ZN9S19368C103v52Ev();
static  VTBL_ENTRY _tg__ZTV9S19368C10__8S19368C2[] = {
  ABISELECT(-144,-76),
  ABISELECT(-24,-16),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN9S19368C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19368C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v47Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v48Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v49Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v50Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v51Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v52Ev,
};
extern void _ZN9S19368C113v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19368C11__9S19368C10__8S19368C2[] = {
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN9S19368C113v46Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N9S19368C10D1Ev,_ZTv0_n48_N9S19368C10D1Ev)();
extern void ABISELECT(_ZTv0_n96_N9S19368C10D0Ev,_ZTv0_n48_N9S19368C10D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__9S19368C10__8S19368C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19368C10D1Ev,_ZTv0_n48_N9S19368C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19368C10D0Ev,_ZTv0_n48_N9S19368C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__9S19368C10__8S19368C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
static  VTT_ENTRY vtt_S19368C2[] = {
  {&(_ZTV8S19368C2[8]),  8,224},
  {&(_ZTV8S19368C2[32]),  32,224},
  {&(_ZTV8S19368C2[72]),  72,224},
  {&(_ZTV8S19368C2[102]),  102,224},
  {&(_ZTV8S19368C2[102]),  102,224},
  {&(_ZTV8S19368C2[120]),  120,224},
  {&(_ZTV8S19368C2[152]),  152,224},
  {&(_ZTV8S19368C2[194]),  194,224},
  {&(_ZTV8S19368C2[223]),  223,224},
  {&(_ZTV8S19368C2[211]),  211,224},
  {&(_tg__ZTV8S19368C6__8S19368C2[4]),  4,23},
  {&(_tg__ZTV8S19368C78S19368C6__8S19368C2[11]),  11,25},
  {&(_tg__ZTV8S19368C78S19368C6__8S19368C2[11]),  11,25},
  {&(_tg__ZTV8S19368C98S19368C6__8S19368C2[4]),  4,20},
  {&(_tg__ZTV8S19368C7__8S19368C98S19368C6__8S19368C2[16]),  16,30},
  {&(_tg__ZTV8S19368C8__8S19368C98S19368C6__8S19368C2[10]),  10,18},
  {&(_tg__ZTV8S19368C7__A__8S19368C6__8S19368C2[11]),  11,25},
  {&(_tg__ZTV8S19368C7__A__8S19368C6__8S19368C2[11]),  11,25},
  {&(_tg__ZTV8S19368C9__8S19368C6__8S19368C2[4]),  4,20},
  {&(_tg__ZTV8S19368C7__A1__8S19368C6__8S19368C2[16]),  16,30},
  {&(_tg__ZTV8S19368C7__A1__8S19368C2[11]),  11,25},
  {&(_tg__ZTV8S19368C8__8S19368C7__A1__8S19368C2[10]),  10,18},
  {&(_tg__ZTV9S19368C10__8S19368C2[5]),  5,20},
  {&(_tg__ZTV9S19368C11__9S19368C10__8S19368C2[3]),  3,4},
  {&(_tg__ZTV8S19368C7__9S19368C10__8S19368C2[16]),  16,30},
  {&(_tg__ZTV8S19368C8__9S19368C10__8S19368C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19368C2[];
extern  VTBL_ENTRY _ZTV8S19368C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C2[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19368C6D0Ev,_ZThn84_N8S19368C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19368C6D1Ev,_ZThn84_N8S19368C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19368C9D0Ev,_ZThn44_N8S19368C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19368C9D1Ev,_ZThn44_N8S19368C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19368C2D0Ev,_ZTv0_n24_N8S19368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19368C2D0Ev,_ZThn168_N8S19368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19368C2D1Ev,_ZTv0_n24_N8S19368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19368C2D1Ev,_ZThn168_N8S19368C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C2D0Ev,_ZTv0_n48_N8S19368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19368C2D0Ev,_ZThn152_N8S19368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C2D1Ev,_ZTv0_n48_N8S19368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19368C2D1Ev,_ZThn152_N8S19368C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19368C2D0Ev,_ZTv0_n56_N8S19368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19368C2D0Ev,_ZThn68_N8S19368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19368C2D1Ev,_ZTv0_n56_N8S19368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19368C2D1Ev,_ZThn68_N8S19368C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19368C2 = {  "S19368C2", // class name
  bases_S19368C2, 13,
  &(vtc_S19368C2[0]), // expected_vtbl_contents
  &(vtt_S19368C2[0]), // expected_vtt_contents
  ABISELECT(512,256), // object size
  NSPAIRA(_ZTI8S19368C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19368C2),224, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19368C2),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19368C1  : virtual S19368C2 {
  ::S21103C11_nt s19368c1f0;
  ::S21103C11_nt s19368c1f1;
  int s19368c1f2;
  short s19368c1f3;
  virtual void  v1(); // _ZN8S19368C12v1Ev
  virtual void  v2(); // _ZN8S19368C12v2Ev
  virtual void  v3(); // _ZN8S19368C12v3Ev
  virtual void  v4(); // _ZN8S19368C12v4Ev
  ~S19368C1(); // tgen
  S19368C1(); // tgen
};
//SIG(1 S19368C1) C1{ VBC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 FU4{ m Fl}[10]} VBC5{ v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[5]} VBC6{ BC5 BC7{ VBC8{ v21 v22 v23 v24 v25 v26 v27 v28} vd v29 v30 v31 v32 Fi Fi Fp} BC9{ VBC7 BC5 v33 v34 v35 v36 v37 Fi FD} vd v38 v39 v40 v41 v42 v43 v44 v45 Fi} VBC10{ VBC11{ v46 FD} BC3 VBC7 BC5 v47 v48 v49 v50 v51 v52 FU12{ m}} vd v53 v54 v55 v56} v1 v2 v3 v4 FU12 FU12 Fi Fs}


void  S19368C1 ::v1(){vfunc_called(this, "_ZN8S19368C12v1Ev");}
void  S19368C1 ::v2(){vfunc_called(this, "_ZN8S19368C12v2Ev");}
void  S19368C1 ::v3(){vfunc_called(this, "_ZN8S19368C12v3Ev");}
void  S19368C1 ::v4(){vfunc_called(this, "_ZN8S19368C12v4Ev");}
S19368C1 ::~S19368C1(){ note_dtor("S19368C1", this);} // tgen
S19368C1 ::S19368C1(){ note_ctor("S19368C1", this);} // tgen

static void Test_S19368C1()
{
  extern Class_Descriptor cd_S19368C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,69)];
    init_test(&cd_S19368C1, buf);
    S19368C1 *dp, &lv = *(dp=new (buf) S19368C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,272), "sizeof(S19368C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19368C1)");
    /*is_ambiguous_... S19368C2::S19368C3 */ AMB_check_base_class_offset(lv, (S19368C3*)(S19368C2*), ABISELECT(24,16), "S19368C1");
    /*is_ambiguous_... S19368C2::S19368C5 */ AMB_check_base_class_offset(lv, (S19368C5*)(S19368C2*), ABISELECT(112,60), "S19368C1");
    /*is_ambiguous_... S19368C6::S19368C5 */ AMB_check_base_class_offset(lv, (S19368C5*)(S19368C6*), ABISELECT(160,84), "S19368C1");
    /*is_ambiguous_... S19368C6::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C8*)(S19368C7*)(S19368C6*), 0, "S19368C1");
    /*is_ambiguous_... S19368C1::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C8*)(S19368C7*), 0, "S19368C1");
    /*is_ambiguous_... S19368C6::S19368C7 */ AMB_check_base_class_offset(lv, (S19368C7*)(S19368C6*), ABISELECT(208,108), "S19368C1");
    check_base_class_offset(lv, (S19368C7*)(S19368C9*)(S19368C6*), ABISELECT(328,168), "S19368C1");
    check_base_class_offset(lv, (S19368C7*)(S19368C10*), ABISELECT(328,168), "S19368C1");
    check_base_class_offset(lv, (S19368C5*)(S19368C9*)(S19368C6*), ABISELECT(240,124), "S19368C1");
    check_base_class_offset(lv, (S19368C9*)(S19368C6*), ABISELECT(240,124), "S19368C1");
    check_base_class_offset(lv, (S19368C6*)(S19368C2*), ABISELECT(160,84), "S19368C1");
    check_base_class_offset(lv, (S19368C11*)(S19368C10*), ABISELECT(496,256), "S19368C1");
    check_base_class_offset(lv, (S19368C3*)(S19368C10*), ABISELECT(352,184), "S19368C1");
    check_base_class_offset(lv, (S19368C5*)(S19368C10*), ABISELECT(440,228), "S19368C1");
    check_base_class_offset(lv, (S19368C10*)(S19368C2*), ABISELECT(352,184), "S19368C1");
    check_base_class_offset(lv, (S19368C2*), ABISELECT(24,16), "S19368C1");
    check_field_offset(lv, s19368c1f0, ABISELECT(8,4), "S19368C1.s19368c1f0");
    check_field_offset(lv, s19368c1f1, ABISELECT(9,5), "S19368C1.s19368c1f1");
    check_field_offset(lv, s19368c1f2, ABISELECT(12,8), "S19368C1.s19368c1f2");
    check_field_offset(lv, s19368c1f3, ABISELECT(16,12), "S19368C1.s19368c1f3");
    test_class_info(&lv, &cd_S19368C1);
    dp->~S19368C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19368C1(Test_S19368C1, "S19368C1", ABISELECT(528,272));

#else // __cplusplus

extern void _ZN8S19368C1C1Ev();
extern void _ZN8S19368C1D1Ev();
Name_Map name_map_S19368C1[] = {
  NSPAIR(_ZN8S19368C1C1Ev),
  NSPAIR(_ZN8S19368C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19368C3;
extern VTBL_ENTRY _ZTI8S19368C3[];
extern  VTBL_ENTRY _ZTV8S19368C3[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C8;
extern VTBL_ENTRY _ZTI8S19368C8[];
extern  VTBL_ENTRY _ZTV8S19368C8[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C7;
extern VTBL_ENTRY _ZTI8S19368C7[];
extern  VTBL_ENTRY _ZTV8S19368C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C7[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C9;
extern VTBL_ENTRY _ZTI8S19368C9[];
extern  VTBL_ENTRY _ZTV8S19368C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C9[];
extern Class_Descriptor cd_S19368C6;
extern VTBL_ENTRY _ZTI8S19368C6[];
extern  VTBL_ENTRY _ZTV8S19368C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C6[];
extern Class_Descriptor cd_S19368C11;
extern VTBL_ENTRY _ZTI9S19368C11[];
extern  VTBL_ENTRY _ZTV9S19368C11[];
extern Class_Descriptor cd_S19368C3;
extern VTBL_ENTRY _ZTI8S19368C3[];
extern  VTBL_ENTRY _ZTV8S19368C3[];
extern Class_Descriptor cd_S19368C5;
extern VTBL_ENTRY _ZTI8S19368C5[];
extern  VTBL_ENTRY _ZTV8S19368C5[];
extern Class_Descriptor cd_S19368C10;
extern VTBL_ENTRY _ZTI9S19368C10[];
extern  VTBL_ENTRY _ZTV9S19368C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19368C10[];
extern Class_Descriptor cd_S19368C2;
extern VTBL_ENTRY _ZTI8S19368C2[];
extern  VTBL_ENTRY _ZTV8S19368C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C2[];
static Base_Class bases_S19368C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19368C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19368C5,    ABISELECT(112,60), //bcp->offset
    64, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19368C5,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19368C8,    0, //bcp->offset
    -1, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19368C7,    ABISELECT(208,108), //bcp->offset
    134, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19368C7,    ABISELECT(328,168), //bcp->offset
    179, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19368C5,    ABISELECT(240,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19368C9,    ABISELECT(240,124), //bcp->offset
    159, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19368C6,    ABISELECT(160,84), //bcp->offset
    84, //bcp->virtual_function_table_offset
    31, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19368C11,    ABISELECT(496,256), //bcp->offset
    263, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19368C3,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19368C5,    ABISELECT(440,228), //bcp->offset
    252, //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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19368C10,    ABISELECT(352,184), //bcp->offset
    209, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19368C2,    ABISELECT(24,16), //bcp->offset
    31, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19368C1[];
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C12v1Ev();
extern void _ZN8S19368C12v2Ev();
extern void _ZN8S19368C12v3Ev();
extern void _ZN8S19368C12v4Ev();
extern void _ZN8S19368C1D1Ev();
extern void _ZN8S19368C1D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S19368C1D1Ev,_ZTv0_n36_N8S19368C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19368C1D1Ev,_ZThn16_N8S19368C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19368C1D0Ev,_ZTv0_n36_N8S19368C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19368C1D0Ev,_ZThn16_N8S19368C1D0Ev)() __attribute__((weak));
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN8S19368C23v53Ev();
extern void _ZN8S19368C23v54Ev();
extern void _ZN8S19368C23v55Ev();
extern void _ZN8S19368C23v56Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void ABISELECT(_ZTv0_n112_N8S19368C1D1Ev,_ZTv0_n56_N8S19368C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S19368C1D1Ev,_ZThn84_N8S19368C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S19368C1D0Ev,_ZTv0_n56_N8S19368C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S19368C1D0Ev,_ZThn84_N8S19368C1D0Ev)() __attribute__((weak));
extern void _ZN8S19368C63v38Ev();
extern void _ZN8S19368C63v39Ev();
extern void _ZN8S19368C63v40Ev();
extern void _ZN8S19368C63v41Ev();
extern void _ZN8S19368C63v42Ev();
extern void _ZN8S19368C63v43Ev();
extern void _ZN8S19368C63v44Ev();
extern void _ZN8S19368C63v45Ev();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTvn48_n112_N8S19368C1D1Ev,_ZTvn24_n56_N8S19368C1D1Ev)();
extern void ABISELECT(_ZTvn48_n112_N8S19368C1D0Ev,_ZTvn24_n56_N8S19368C1D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void ABISELECT(_ZTvn80_n112_N8S19368C1D1Ev,_ZTvn40_n56_N8S19368C1D1Ev)();
extern void ABISELECT(_ZTvn80_n112_N8S19368C1D0Ev,_ZTvn40_n56_N8S19368C1D0Ev)();
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C1D1Ev,_ZTv0_n48_N8S19368C1D1Ev)();
extern void ABISELECT(_ZThn328_N8S19368C1D1Ev,_ZThn168_N8S19368C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C1D0Ev,_ZTv0_n48_N8S19368C1D0Ev)();
extern void ABISELECT(_ZThn328_N8S19368C1D0Ev,_ZThn168_N8S19368C1D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
extern void ABISELECT(_ZTv0_n48_N8S19368C1D1Ev,_ZTv0_n24_N8S19368C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S19368C1D1Ev,_ZThn184_N8S19368C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19368C1D0Ev,_ZTv0_n24_N8S19368C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S19368C1D0Ev,_ZThn184_N8S19368C1D0Ev)() __attribute__((weak));
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN9S19368C103v47Ev();
extern void _ZN9S19368C103v48Ev();
extern void _ZN9S19368C103v49Ev();
extern void _ZN9S19368C103v50Ev();
extern void _ZN9S19368C103v51Ev();
extern void _ZN9S19368C103v52Ev();
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN9S19368C113v46Ev();
static  VTBL_ENTRY vtc_S19368C1[] = {
  ABISELECT(496,256),
  ABISELECT(352,184),
  ABISELECT(328,168),
  0,
  ABISELECT(160,84),
  ABISELECT(112,60),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19368C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19368C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19368C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19368C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(472,240),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  ABISELECT(136,68),
  ABISELECT(88,44),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19368C1D1Ev,_ZTv0_n36_N8S19368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19368C1D0Ev,_ZTv0_n36_N8S19368C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v53Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v54Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v55Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v56Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,84),
  ABISELECT(-160,-84),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19368C1D1Ev,_ZTv0_n56_N8S19368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19368C1D0Ev,_ZTv0_n56_N8S19368C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C63v38Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v39Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v40Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v41Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v42Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v43Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v44Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v45Ev,
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n112_N8S19368C1D1Ev,_ZTvn24_n56_N8S19368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n112_N8S19368C1D0Ev,_ZTvn24_n56_N8S19368C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
  ABISELECT(-240,-124),
  ABISELECT(88,44),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n112_N8S19368C1D1Ev,_ZTvn40_n56_N8S19368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n112_N8S19368C1D0Ev,_ZTvn40_n56_N8S19368C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C1D1Ev,_ZTv0_n48_N8S19368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C1D0Ev,_ZTv0_n48_N8S19368C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-24,-16),
  ABISELECT(144,72),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19368C1D1Ev,_ZTv0_n24_N8S19368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19368C1D0Ev,_ZTv0_n24_N8S19368C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v47Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v48Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v49Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v50Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v51Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v52Ev,
  ABISELECT(-440,-228),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  0,
  ABISELECT(-496,-256),
  (VTBL_ENTRY)&(_ZTI8S19368C1[0]),
  (VTBL_ENTRY)&_ZN9S19368C113v46Ev,
};
extern VTBL_ENTRY _ZTV8S19368C1[];
extern void _ZN8S19368C2D1Ev();
extern void _ZN8S19368C2D0Ev();
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN8S19368C23v53Ev();
extern void _ZN8S19368C23v54Ev();
extern void _ZN8S19368C23v55Ev();
extern void _ZN8S19368C23v56Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C2__8S19368C1[] = {
  ABISELECT(472,240),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  ABISELECT(136,68),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v53Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v54Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v55Ev,
  (VTBL_ENTRY)&_ZN8S19368C23v56Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C5__8S19368C2__8S19368C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void ABISELECT(_ZTv0_n112_N8S19368C2D1Ev,_ZTv0_n56_N8S19368C2D1Ev)();
extern void ABISELECT(_ZThn136_N8S19368C2D1Ev,_ZThn68_N8S19368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S19368C2D0Ev,_ZTv0_n56_N8S19368C2D0Ev)();
extern void ABISELECT(_ZThn136_N8S19368C2D0Ev,_ZThn68_N8S19368C2D0Ev)() __attribute__((weak));
extern void _ZN8S19368C63v38Ev();
extern void _ZN8S19368C63v39Ev();
extern void _ZN8S19368C63v40Ev();
extern void _ZN8S19368C63v41Ev();
extern void _ZN8S19368C63v42Ev();
extern void _ZN8S19368C63v43Ev();
extern void _ZN8S19368C63v44Ev();
extern void _ZN8S19368C63v45Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C6__8S19368C2__8S19368C1[] = {
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-68),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,84),
  ABISELECT(-160,-84),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19368C2D1Ev,_ZTv0_n56_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19368C2D0Ev,_ZTv0_n56_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C63v38Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v39Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v40Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v41Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v42Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v43Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v44Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v45Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTvn48_n112_N8S19368C2D1Ev,_ZTvn24_n56_N8S19368C2D1Ev)();
extern void ABISELECT(_ZTvn48_n112_N8S19368C2D0Ev,_ZTvn24_n56_N8S19368C2D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C78S19368C6__8S19368C2__8S19368C1[] = {
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n112_N8S19368C2D1Ev,_ZTvn24_n56_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n112_N8S19368C2D0Ev,_ZTvn24_n56_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C2__8S19368C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void ABISELECT(_ZTvn80_n112_N8S19368C2D1Ev,_ZTvn40_n56_N8S19368C2D1Ev)();
extern void ABISELECT(_ZTvn80_n112_N8S19368C2D0Ev,_ZTvn40_n56_N8S19368C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19368C98S19368C6__8S19368C2__8S19368C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(88,44),
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n112_N8S19368C2D1Ev,_ZTvn40_n56_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n112_N8S19368C2D0Ev,_ZTvn40_n56_N8S19368C2D0Ev),
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C2D1Ev,_ZTv0_n48_N8S19368C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19368C2D1Ev,_ZThn152_N8S19368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C2D0Ev,_ZTv0_n48_N8S19368C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19368C2D0Ev,_ZThn152_N8S19368C2D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A1__8S19368C2__8S19368C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-304,-152),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C2D1Ev,_ZTv0_n48_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C2D0Ev,_ZTv0_n48_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19368C2D1Ev,_ZTv0_n24_N8S19368C2D1Ev)();
extern void ABISELECT(_ZThn328_N8S19368C2D1Ev,_ZThn168_N8S19368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19368C2D0Ev,_ZTv0_n24_N8S19368C2D0Ev)();
extern void ABISELECT(_ZThn328_N8S19368C2D0Ev,_ZThn168_N8S19368C2D0Ev)() __attribute__((weak));
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN9S19368C103v47Ev();
extern void _ZN9S19368C103v48Ev();
extern void _ZN9S19368C103v49Ev();
extern void _ZN9S19368C103v50Ev();
extern void _ZN9S19368C103v51Ev();
extern void _ZN9S19368C103v52Ev();
static  VTBL_ENTRY _tg__ZTV9S19368C10__8S19368C2__8S19368C1[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  ABISELECT(-352,-184),
  ABISELECT(-24,-16),
  ABISELECT(144,72),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19368C2D1Ev,_ZTv0_n24_N8S19368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19368C2D0Ev,_ZTv0_n24_N8S19368C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v47Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v48Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v49Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v50Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v51Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v52Ev,
};
extern void _ZN9S19368C113v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19368C11__8S19368C2__8S19368C1[] = {
  0,
  ABISELECT(-472,-240),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN9S19368C113v46Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C59S19368C10__A3__8S19368C2__8S19368C1[] = {
  ABISELECT(-416,-212),
  (VTBL_ENTRY)&(_ZTI8S19368C2[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C6D1Ev();
extern void _ZN8S19368C6D0Ev();
extern void _ZN8S19368C63v38Ev();
extern void _ZN8S19368C63v39Ev();
extern void _ZN8S19368C63v40Ev();
extern void _ZN8S19368C63v41Ev();
extern void _ZN8S19368C63v42Ev();
extern void _ZN8S19368C63v43Ev();
extern void _ZN8S19368C63v44Ev();
extern void _ZN8S19368C63v45Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C6__8S19368C1[] = {
  ABISELECT(168,84),
  ABISELECT(-160,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v38Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v39Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v40Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v41Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v42Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v43Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v44Ev,
  (VTBL_ENTRY)&_ZN8S19368C63v45Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C78S19368C6__8S19368C1[] = {
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C78S19368C6__8S19368C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(208,108),
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void _ZN8S19368C9D1Ev();
extern void _ZN8S19368C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C98S19368C6__8S19368C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C9D0Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev)();
extern void ABISELECT(_ZThn88_N8S19368C9D1Ev,_ZThn44_N8S19368C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev)();
extern void ABISELECT(_ZThn88_N8S19368C9D0Ev,_ZThn44_N8S19368C9D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__8S19368C98S19368C6__8S19368C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C98S19368C6__8S19368C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(240,124),
  (VTBL_ENTRY)&(_ZTI8S19368C9[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZThn48_N8S19368C6D1Ev,_ZThn24_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19368C6D0Ev,_ZThn24_N8S19368C6D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A__8S19368C6__8S19368C1[] = {
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19368C6D1Ev,_ZThn24_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19368C6D0Ev,_ZThn24_N8S19368C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C6__8S19368C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN8S19368C53v12Ev();
extern void _ZN8S19368C53v13Ev();
extern void _ZN8S19368C53v14Ev();
extern void _ZN8S19368C53v15Ev();
extern void _ZN8S19368C53v16Ev();
extern void _ZN8S19368C53v17Ev();
extern void _ZN8S19368C53v18Ev();
extern void _ZN8S19368C53v19Ev();
extern void _ZN8S19368C53v20Ev();
extern void _ZN8S19368C93v33Ev();
extern void _ZN8S19368C93v34Ev();
extern void _ZN8S19368C93v35Ev();
extern void _ZN8S19368C93v36Ev();
extern void _ZN8S19368C93v37Ev();
extern void ABISELECT(_ZThn80_N8S19368C6D1Ev,_ZThn40_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19368C6D0Ev,_ZThn40_N8S19368C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19368C9__8S19368C6__8S19368C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(88,44),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19368C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19368C93v37Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19368C6D1Ev,_ZThn40_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19368C6D0Ev,_ZThn40_N8S19368C6D0Ev),
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev)();
extern void ABISELECT(_ZThn168_N8S19368C6D1Ev,_ZThn84_N8S19368C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev)();
extern void ABISELECT(_ZThn168_N8S19368C6D0Ev,_ZThn84_N8S19368C6D0Ev)() __attribute__((weak));
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A1__8S19368C6__8S19368C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-168,-84),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI8S19368C6[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void _ZN8S19368C7D1Ev();
extern void _ZN8S19368C7D0Ev();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__A1__8S19368C1[] = {
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19368C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__8S19368C7__A1__8S19368C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,168),
  (VTBL_ENTRY)&(_ZTI8S19368C7[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
extern void _ZN9S19368C10D1Ev();
extern void _ZN9S19368C10D0Ev();
extern void _ZN8S19368C32v5Ev();
extern void _ZN8S19368C32v6Ev();
extern void _ZN8S19368C32v7Ev();
extern void _ZN8S19368C32v8Ev();
extern void _ZN8S19368C32v9Ev();
extern void _ZN8S19368C33v10Ev();
extern void _ZN8S19368C33v11Ev();
extern void _ZN9S19368C103v47Ev();
extern void _ZN9S19368C103v48Ev();
extern void _ZN9S19368C103v49Ev();
extern void _ZN9S19368C103v50Ev();
extern void _ZN9S19368C103v51Ev();
extern void _ZN9S19368C103v52Ev();
static  VTBL_ENTRY _tg__ZTV9S19368C10__8S19368C1[] = {
  ABISELECT(-352,-184),
  ABISELECT(-24,-16),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN9S19368C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19368C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19368C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19368C33v11Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v47Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v48Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v49Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v50Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v51Ev,
  (VTBL_ENTRY)&_ZN9S19368C103v52Ev,
};
extern void _ZN9S19368C113v46Ev();
static  VTBL_ENTRY _tg__ZTV9S19368C11__9S19368C10__8S19368C1[] = {
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN9S19368C113v46Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
extern void ABISELECT(_ZTv0_n96_N9S19368C10D1Ev,_ZTv0_n48_N9S19368C10D1Ev)();
extern void ABISELECT(_ZTv0_n96_N9S19368C10D0Ev,_ZTv0_n48_N9S19368C10D0Ev)();
extern void _ZN8S19368C73v29Ev();
extern void _ZN8S19368C73v30Ev();
extern void _ZN8S19368C73v31Ev();
extern void _ZN8S19368C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C7__9S19368C10__8S19368C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(-328,-168),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19368C10D1Ev,_ZTv0_n48_N9S19368C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19368C10D0Ev,_ZTv0_n48_N9S19368C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19368C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v30Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v31Ev,
  (VTBL_ENTRY)&_ZN8S19368C73v32Ev,
};
extern void _ZN8S19368C83v21Ev();
extern void _ZN8S19368C83v22Ev();
extern void _ZN8S19368C83v23Ev();
extern void _ZN8S19368C83v24Ev();
extern void _ZN8S19368C83v25Ev();
extern void _ZN8S19368C83v26Ev();
extern void _ZN8S19368C83v27Ev();
extern void _ZN8S19368C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19368C8__9S19368C10__8S19368C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(352,184),
  (VTBL_ENTRY)&(_ZTI9S19368C10[0]),
  (VTBL_ENTRY)&_ZN8S19368C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19368C83v28Ev,
};
static  VTT_ENTRY vtt_S19368C1[] = {
  {&(_ZTV8S19368C1[17]),  17,267},
  {&(_ZTV8S19368C1[51]),  51,267},
  {&(_ZTV8S19368C1[75]),  75,267},
  {&(_ZTV8S19368C1[115]),  115,267},
  {&(_ZTV8S19368C1[145]),  145,267},
  {&(_ZTV8S19368C1[17]),  17,267},
  {&(_ZTV8S19368C1[163]),  163,267},
  {&(_ZTV8S19368C1[195]),  195,267},
  {&(_ZTV8S19368C1[237]),  237,267},
  {&(_ZTV8S19368C1[266]),  266,267},
  {&(_ZTV8S19368C1[254]),  254,267},
  {&(_tg__ZTV8S19368C2__8S19368C1[8]),  8,21},
  {&(_tg__ZTV8S19368C5__8S19368C2__8S19368C1[11]),  11,20},
  {&(_tg__ZTV8S19368C6__8S19368C2__8S19368C1[31]),  31,50},
  {&(_tg__ZTV8S19368C78S19368C6__8S19368C2__8S19368C1[11]),  11,25},
  {&(_tg__ZTV8S19368C8__8S19368C2__8S19368C1[10]),  10,18},
  {&(_tg__ZTV8S19368C98S19368C6__8S19368C2__8S19368C1[4]),  4,20},
  {&(_tg__ZTV8S19368C7__A1__8S19368C2__8S19368C1[16]),  16,30},
  {&(_tg__ZTV9S19368C10__8S19368C2__8S19368C1[28]),  28,43},
  {&(_tg__ZTV9S19368C11__8S19368C2__8S19368C1[3]),  3,4},
  {&(_tg__ZTV8S19368C59S19368C10__A3__8S19368C2__8S19368C1[2]),  2,11},
  {&(_tg__ZTV8S19368C6__8S19368C1[4]),  4,23},
  {&(_tg__ZTV8S19368C78S19368C6__8S19368C1[11]),  11,25},
  {&(_tg__ZTV8S19368C8__8S19368C78S19368C6__8S19368C1[10]),  10,18},
  {&(_tg__ZTV8S19368C98S19368C6__8S19368C1[4]),  4,20},
  {&(_tg__ZTV8S19368C7__8S19368C98S19368C6__8S19368C1[16]),  16,30},
  {&(_tg__ZTV8S19368C8__8S19368C98S19368C6__8S19368C1[10]),  10,18},
  {&(_tg__ZTV8S19368C7__A__8S19368C6__8S19368C1[11]),  11,25},
  {&(_tg__ZTV8S19368C8__8S19368C6__8S19368C1[10]),  10,18},
  {&(_tg__ZTV8S19368C9__8S19368C6__8S19368C1[4]),  4,20},
  {&(_tg__ZTV8S19368C7__A1__8S19368C6__8S19368C1[16]),  16,30},
  {&(_tg__ZTV8S19368C7__A1__8S19368C1[11]),  11,25},
  {&(_tg__ZTV8S19368C8__8S19368C7__A1__8S19368C1[10]),  10,18},
  {&(_tg__ZTV9S19368C10__8S19368C1[5]),  5,20},
  {&(_tg__ZTV9S19368C11__9S19368C10__8S19368C1[3]),  3,4},
  {&(_tg__ZTV8S19368C7__9S19368C10__8S19368C1[16]),  16,30},
  {&(_tg__ZTV8S19368C8__9S19368C10__8S19368C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19368C1[];
extern  VTBL_ENTRY _ZTV8S19368C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19368C1[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C6D0Ev,_ZTv0_n48_N8S19368C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19368C6D0Ev,_ZThn84_N8S19368C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C6D1Ev,_ZTv0_n48_N8S19368C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19368C6D1Ev,_ZThn84_N8S19368C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D0Ev,_ZTv0_n48_N8S19368C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19368C9D0Ev,_ZThn44_N8S19368C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C9D1Ev,_ZTv0_n48_N8S19368C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19368C9D1Ev,_ZThn44_N8S19368C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19368C2D0Ev,_ZTv0_n24_N8S19368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19368C2D0Ev,_ZThn168_N8S19368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19368C2D1Ev,_ZTv0_n24_N8S19368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19368C2D1Ev,_ZThn168_N8S19368C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C2D0Ev,_ZTv0_n48_N8S19368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19368C2D0Ev,_ZThn152_N8S19368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C2D1Ev,_ZTv0_n48_N8S19368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19368C2D1Ev,_ZThn152_N8S19368C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19368C2D0Ev,_ZTv0_n56_N8S19368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19368C2D0Ev,_ZThn68_N8S19368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19368C2D1Ev,_ZTv0_n56_N8S19368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19368C2D1Ev,_ZThn68_N8S19368C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19368C1D0Ev,_ZTv0_n24_N8S19368C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19368C1D0Ev,_ZThn184_N8S19368C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19368C1D1Ev,_ZTv0_n24_N8S19368C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19368C1D1Ev,_ZThn184_N8S19368C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C1D0Ev,_ZTv0_n48_N8S19368C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19368C1D0Ev,_ZThn168_N8S19368C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19368C1D1Ev,_ZTv0_n48_N8S19368C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19368C1D1Ev,_ZThn168_N8S19368C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19368C1D0Ev,_ZTv0_n56_N8S19368C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19368C1D0Ev,_ZThn84_N8S19368C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19368C1D1Ev,_ZTv0_n56_N8S19368C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19368C1D1Ev,_ZThn84_N8S19368C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19368C1D0Ev,_ZTv0_n36_N8S19368C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19368C1D0Ev,_ZThn16_N8S19368C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19368C1D1Ev,_ZTv0_n36_N8S19368C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19368C1D1Ev,_ZThn16_N8S19368C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19368C1 = {  "S19368C1", // class name
  bases_S19368C1, 14,
  &(vtc_S19368C1[0]), // expected_vtbl_contents
  &(vtt_S19368C1[0]), // expected_vtt_contents
  ABISELECT(528,272), // object size
  NSPAIRA(_ZTI8S19368C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19368C1),267, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19368C1),37, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5411C3  {
  void *s5411c3f0;
  ::S2382C25 s5411c3f1;
  ::S2403C17_nt s5411c3f2;
  char s5411c3f3;
  virtual  ~S5411C3(); // _ZN7S5411C3D1Ev
  virtual void  v8(); // _ZN7S5411C32v8Ev
  virtual void  v9(); // _ZN7S5411C32v9Ev
  virtual void  v10(); // _ZN7S5411C33v10Ev
  virtual void  v11(); // _ZN7S5411C33v11Ev
  virtual void  v12(); // _ZN7S5411C33v12Ev
  virtual void  v13(); // _ZN7S5411C33v13Ev
  virtual void  v14(); // _ZN7S5411C33v14Ev
  virtual void  v15(); // _ZN7S5411C33v15Ev
  virtual void  v16(); // _ZN7S5411C33v16Ev
  virtual void  v17(); // _ZN7S5411C33v17Ev
  virtual void  v18(); // _ZN7S5411C33v18Ev
  virtual void  v19(); // _ZN7S5411C33v19Ev
  S5411C3(); // tgen
};
//SIG(-1 S5411C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S5411C3 ::~S5411C3(){ note_dtor("S5411C3", this);}
void  S5411C3 ::v8(){vfunc_called(this, "_ZN7S5411C32v8Ev");}
void  S5411C3 ::v9(){vfunc_called(this, "_ZN7S5411C32v9Ev");}
void  S5411C3 ::v10(){vfunc_called(this, "_ZN7S5411C33v10Ev");}
void  S5411C3 ::v11(){vfunc_called(this, "_ZN7S5411C33v11Ev");}
void  S5411C3 ::v12(){vfunc_called(this, "_ZN7S5411C33v12Ev");}
void  S5411C3 ::v13(){vfunc_called(this, "_ZN7S5411C33v13Ev");}
void  S5411C3 ::v14(){vfunc_called(this, "_ZN7S5411C33v14Ev");}
void  S5411C3 ::v15(){vfunc_called(this, "_ZN7S5411C33v15Ev");}
void  S5411C3 ::v16(){vfunc_called(this, "_ZN7S5411C33v16Ev");}
void  S5411C3 ::v17(){vfunc_called(this, "_ZN7S5411C33v17Ev");}
void  S5411C3 ::v18(){vfunc_called(this, "_ZN7S5411C33v18Ev");}
void  S5411C3 ::v19(){vfunc_called(this, "_ZN7S5411C33v19Ev");}
S5411C3 ::S5411C3(){ note_ctor("S5411C3", this);} // tgen

static void Test_S5411C3()
{
  extern Class_Descriptor cd_S5411C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S5411C3, buf);
    S5411C3 *dp, &lv = *(dp=new (buf) S5411C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5411C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5411C3)");
    check_field_offset(lv, s5411c3f0, ABISELECT(8,4), "S5411C3.s5411c3f0");
    check_field_offset(lv, s5411c3f1, ABISELECT(16,8), "S5411C3.s5411c3f1");
    check_field_offset(lv, s5411c3f2, ABISELECT(32,20), "S5411C3.s5411c3f2");
    check_field_offset(lv, s5411c3f3, ABISELECT(64,52), "S5411C3.s5411c3f3");
    test_class_info(&lv, &cd_S5411C3);
    dp->~S5411C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5411C3(Test_S5411C3, "S5411C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S5411C3C1Ev();
extern void _ZN7S5411C3D1Ev();
Name_Map name_map_S5411C3[] = {
  NSPAIR(_ZN7S5411C3C1Ev),
  NSPAIR(_ZN7S5411C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5411C3[];
extern void _ZN7S5411C3D1Ev();
extern void _ZN7S5411C3D0Ev();
extern void _ZN7S5411C32v8Ev();
extern void _ZN7S5411C32v9Ev();
extern void _ZN7S5411C33v10Ev();
extern void _ZN7S5411C33v11Ev();
extern void _ZN7S5411C33v12Ev();
extern void _ZN7S5411C33v13Ev();
extern void _ZN7S5411C33v14Ev();
extern void _ZN7S5411C33v15Ev();
extern void _ZN7S5411C33v16Ev();
extern void _ZN7S5411C33v17Ev();
extern void _ZN7S5411C33v18Ev();
extern void _ZN7S5411C33v19Ev();
static  VTBL_ENTRY vtc_S5411C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5411C3[0]),
  (VTBL_ENTRY)&_ZN7S5411C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5411C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5411C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5411C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v18Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v19Ev,
};
extern VTBL_ENTRY _ZTI7S5411C3[];
extern  VTBL_ENTRY _ZTV7S5411C3[];
Class_Descriptor cd_S5411C3 = {  "S5411C3", // class name
  0,0,//no base classes
  &(vtc_S5411C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S5411C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5411C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5411C2  : S5411C3 {
  ::S4247C19_nt s5411c2f0;
  virtual  ~S5411C2(); // _ZN7S5411C2D1Ev
  virtual void  v20(); // _ZN7S5411C23v20Ev
  virtual void  v21(); // _ZN7S5411C23v21Ev
  virtual void  v22(); // _ZN7S5411C23v22Ev
  virtual void  v23(); // _ZN7S5411C23v23Ev
  virtual void  v24(); // _ZN7S5411C23v24Ev
  virtual void  v25(); // _ZN7S5411C23v25Ev
  virtual void  v26(); // _ZN7S5411C23v26Ev
  S5411C2(); // tgen
};
//SIG(-1 S5411C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S5411C2 ::~S5411C2(){ note_dtor("S5411C2", this);}
void  S5411C2 ::v20(){vfunc_called(this, "_ZN7S5411C23v20Ev");}
void  S5411C2 ::v21(){vfunc_called(this, "_ZN7S5411C23v21Ev");}
void  S5411C2 ::v22(){vfunc_called(this, "_ZN7S5411C23v22Ev");}
void  S5411C2 ::v23(){vfunc_called(this, "_ZN7S5411C23v23Ev");}
void  S5411C2 ::v24(){vfunc_called(this, "_ZN7S5411C23v24Ev");}
void  S5411C2 ::v25(){vfunc_called(this, "_ZN7S5411C23v25Ev");}
void  S5411C2 ::v26(){vfunc_called(this, "_ZN7S5411C23v26Ev");}
S5411C2 ::S5411C2(){ note_ctor("S5411C2", this);} // tgen

static void Test_S5411C2()
{
  extern Class_Descriptor cd_S5411C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S5411C2, buf);
    S5411C2 *dp, &lv = *(dp=new (buf) S5411C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S5411C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5411C2)");
    check_base_class_offset(lv, (S5411C3*), 0, "S5411C2");
    check_field_offset(lv, s5411c2f0, ABISELECT(72,56), "S5411C2.s5411c2f0");
    test_class_info(&lv, &cd_S5411C2);
    dp->~S5411C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5411C2(Test_S5411C2, "S5411C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S5411C2C1Ev();
extern void _ZN7S5411C2D1Ev();
Name_Map name_map_S5411C2[] = {
  NSPAIR(_ZN7S5411C2C1Ev),
  NSPAIR(_ZN7S5411C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5411C3;
extern VTBL_ENTRY _ZTI7S5411C3[];
extern  VTBL_ENTRY _ZTV7S5411C3[];
static Base_Class bases_S5411C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5411C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5411C2[];
extern void _ZN7S5411C2D1Ev();
extern void _ZN7S5411C2D0Ev();
extern void _ZN7S5411C32v8Ev();
extern void _ZN7S5411C32v9Ev();
extern void _ZN7S5411C33v10Ev();
extern void _ZN7S5411C33v11Ev();
extern void _ZN7S5411C33v12Ev();
extern void _ZN7S5411C33v13Ev();
extern void _ZN7S5411C33v14Ev();
extern void _ZN7S5411C33v15Ev();
extern void _ZN7S5411C33v16Ev();
extern void _ZN7S5411C33v17Ev();
extern void _ZN7S5411C33v18Ev();
extern void _ZN7S5411C33v19Ev();
extern void _ZN7S5411C23v20Ev();
extern void _ZN7S5411C23v21Ev();
extern void _ZN7S5411C23v22Ev();
extern void _ZN7S5411C23v23Ev();
extern void _ZN7S5411C23v24Ev();
extern void _ZN7S5411C23v25Ev();
extern void _ZN7S5411C23v26Ev();
static  VTBL_ENTRY vtc_S5411C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5411C2[0]),
  (VTBL_ENTRY)&_ZN7S5411C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5411C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5411C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5411C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v18Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v19Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S5411C2[];
extern  VTBL_ENTRY _ZTV7S5411C2[];
Class_Descriptor cd_S5411C2 = {  "S5411C2", // class name
  bases_S5411C2, 1,
  &(vtc_S5411C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S5411C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5411C2),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  S5411C13  {
  virtual  ~S5411C13(); // _ZN8S5411C13D1Ev
  virtual void  v27(); // _ZN8S5411C133v27Ev
  virtual void  v28(); // _ZN8S5411C133v28Ev
  virtual void  v29(); // _ZN8S5411C133v29Ev
  S5411C13(); // tgen
};
//SIG(-1 S5411C13) C1{ vd v1 v2 v3}


 S5411C13 ::~S5411C13(){ note_dtor("S5411C13", this);}
void  S5411C13 ::v27(){vfunc_called(this, "_ZN8S5411C133v27Ev");}
void  S5411C13 ::v28(){vfunc_called(this, "_ZN8S5411C133v28Ev");}
void  S5411C13 ::v29(){vfunc_called(this, "_ZN8S5411C133v29Ev");}
S5411C13 ::S5411C13(){ note_ctor("S5411C13", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S5411C13C1Ev();
extern void _ZN8S5411C13D1Ev();
Name_Map name_map_S5411C13[] = {
  NSPAIR(_ZN8S5411C13C1Ev),
  NSPAIR(_ZN8S5411C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5411C13[];
extern void _ZN8S5411C13D1Ev();
extern void _ZN8S5411C13D0Ev();
extern void _ZN8S5411C133v27Ev();
extern void _ZN8S5411C133v28Ev();
extern void _ZN8S5411C133v29Ev();
static  VTBL_ENTRY vtc_S5411C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5411C13[0]),
  (VTBL_ENTRY)&_ZN8S5411C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5411C13D0Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v27Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v28Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v29Ev,
};
extern VTBL_ENTRY _ZTI8S5411C13[];
extern  VTBL_ENTRY _ZTV8S5411C13[];
Class_Descriptor cd_S5411C13 = {  "S5411C13", // class name
  0,0,//no base classes
  &(vtc_S5411C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5411C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5411C13),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  S5411C12  : S5411C13 {
  virtual  ~S5411C12(); // _ZN8S5411C12D1Ev
  virtual void  v30(); // _ZN8S5411C123v30Ev
  virtual void  v31(); // _ZN8S5411C123v31Ev
  virtual void  v32(); // _ZN8S5411C123v32Ev
  virtual void  v33(); // _ZN8S5411C123v33Ev
  S5411C12(); // tgen
};
//SIG(-1 S5411C12) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S5411C12 ::~S5411C12(){ note_dtor("S5411C12", this);}
void  S5411C12 ::v30(){vfunc_called(this, "_ZN8S5411C123v30Ev");}
void  S5411C12 ::v31(){vfunc_called(this, "_ZN8S5411C123v31Ev");}
void  S5411C12 ::v32(){vfunc_called(this, "_ZN8S5411C123v32Ev");}
void  S5411C12 ::v33(){vfunc_called(this, "_ZN8S5411C123v33Ev");}
S5411C12 ::S5411C12(){ note_ctor("S5411C12", this);} // tgen

static void Test_S5411C12()
{
  extern Class_Descriptor cd_S5411C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5411C12, buf);
    S5411C12 *dp, &lv = *(dp=new (buf) S5411C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5411C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5411C12)");
    check_base_class_offset(lv, (S5411C13*), 0, "S5411C12");
    test_class_info(&lv, &cd_S5411C12);
    dp->~S5411C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5411C12(Test_S5411C12, "S5411C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S5411C12C1Ev();
extern void _ZN8S5411C12D1Ev();
Name_Map name_map_S5411C12[] = {
  NSPAIR(_ZN8S5411C12C1Ev),
  NSPAIR(_ZN8S5411C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5411C13;
extern VTBL_ENTRY _ZTI8S5411C13[];
extern  VTBL_ENTRY _ZTV8S5411C13[];
static Base_Class bases_S5411C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5411C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5411C12[];
extern void _ZN8S5411C12D1Ev();
extern void _ZN8S5411C12D0Ev();
extern void _ZN8S5411C133v27Ev();
extern void _ZN8S5411C133v28Ev();
extern void _ZN8S5411C133v29Ev();
extern void _ZN8S5411C123v30Ev();
extern void _ZN8S5411C123v31Ev();
extern void _ZN8S5411C123v32Ev();
extern void _ZN8S5411C123v33Ev();
static  VTBL_ENTRY vtc_S5411C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5411C12[0]),
  (VTBL_ENTRY)&_ZN8S5411C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5411C12D0Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v27Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v28Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v29Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v30Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v31Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v32Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v33Ev,
};
extern VTBL_ENTRY _ZTI8S5411C12[];
extern  VTBL_ENTRY _ZTV8S5411C12[];
Class_Descriptor cd_S5411C12 = {  "S5411C12", // class name
  bases_S5411C12, 1,
  &(vtc_S5411C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5411C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S5411C12),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5411C11  : S5411C12 {
  ::S2382C37 s5411c11f0;
  ::S888C10_nt s5411c11f1;
  char s5411c11f2;
  virtual  ~S5411C11(); // _ZN8S5411C11D1Ev
  virtual void  v34(); // _ZN8S5411C113v34Ev
  virtual void  v35(); // _ZN8S5411C113v35Ev
  virtual void  v36(); // _ZN8S5411C113v36Ev
  S5411C11(); // tgen
};
//SIG(-1 S5411C11) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S5411C11 ::~S5411C11(){ note_dtor("S5411C11", this);}
void  S5411C11 ::v34(){vfunc_called(this, "_ZN8S5411C113v34Ev");}
void  S5411C11 ::v35(){vfunc_called(this, "_ZN8S5411C113v35Ev");}
void  S5411C11 ::v36(){vfunc_called(this, "_ZN8S5411C113v36Ev");}
S5411C11 ::S5411C11(){ note_ctor("S5411C11", this);} // tgen

static void Test_S5411C11()
{
  extern Class_Descriptor cd_S5411C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S5411C11, buf);
    S5411C11 *dp, &lv = *(dp=new (buf) S5411C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5411C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5411C11)");
    check_base_class_offset(lv, (S5411C13*)(S5411C12*), 0, "S5411C11");
    check_base_class_offset(lv, (S5411C12*), 0, "S5411C11");
    check_field_offset(lv, s5411c11f0, ABISELECT(8,4), "S5411C11.s5411c11f0");
    check_field_offset(lv, s5411c11f1, ABISELECT(32,20), "S5411C11.s5411c11f1");
    check_field_offset(lv, s5411c11f2, ABISELECT(64,52), "S5411C11.s5411c11f2");
    test_class_info(&lv, &cd_S5411C11);
    dp->~S5411C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5411C11(Test_S5411C11, "S5411C11", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S5411C11C1Ev();
extern void _ZN8S5411C11D1Ev();
Name_Map name_map_S5411C11[] = {
  NSPAIR(_ZN8S5411C11C1Ev),
  NSPAIR(_ZN8S5411C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5411C13;
extern VTBL_ENTRY _ZTI8S5411C13[];
extern  VTBL_ENTRY _ZTV8S5411C13[];
extern Class_Descriptor cd_S5411C12;
extern VTBL_ENTRY _ZTI8S5411C12[];
extern  VTBL_ENTRY _ZTV8S5411C12[];
static Base_Class bases_S5411C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5411C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5411C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S5411C11[];
extern void _ZN8S5411C11D1Ev();
extern void _ZN8S5411C11D0Ev();
extern void _ZN8S5411C133v27Ev();
extern void _ZN8S5411C133v28Ev();
extern void _ZN8S5411C133v29Ev();
extern void _ZN8S5411C123v30Ev();
extern void _ZN8S5411C123v31Ev();
extern void _ZN8S5411C123v32Ev();
extern void _ZN8S5411C123v33Ev();
extern void _ZN8S5411C113v34Ev();
extern void _ZN8S5411C113v35Ev();
extern void _ZN8S5411C113v36Ev();
static  VTBL_ENTRY vtc_S5411C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5411C11[0]),
  (VTBL_ENTRY)&_ZN8S5411C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5411C11D0Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v27Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v28Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v29Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v30Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v31Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v32Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v33Ev,
  (VTBL_ENTRY)&_ZN8S5411C113v34Ev,
  (VTBL_ENTRY)&_ZN8S5411C113v35Ev,
  (VTBL_ENTRY)&_ZN8S5411C113v36Ev,
};
extern VTBL_ENTRY _ZTI8S5411C11[];
extern  VTBL_ENTRY _ZTV8S5411C11[];
Class_Descriptor cd_S5411C11 = {  "S5411C11", // class name
  bases_S5411C11, 2,
  &(vtc_S5411C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S5411C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S5411C11),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  S5411C1  : S5411C2 , S5411C11 {
  ::S4257C17_nt s5411c1f0;
  ::S2403C17_nt s5411c1f1;
  ::S888C23 s5411c1f2;
  int s5411c1f3;
  virtual  ~S5411C1(); // _ZN7S5411C1D1Ev
  virtual void  v1(); // _ZN7S5411C12v1Ev
  virtual void  v2(); // _ZN7S5411C12v2Ev
  virtual void  v3(); // _ZN7S5411C12v3Ev
  virtual void  v4(); // _ZN7S5411C12v4Ev
  virtual void  v5(); // _ZN7S5411C12v5Ev
  virtual void  v6(); // _ZN7S5411C12v6Ev
  virtual void  v7(); // _ZN7S5411C12v7Ev
  S5411C1(); // tgen
};
//SIG(1 S5411C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m FL[4]} Fc} vd v20 v21 v22 v23 v24 v25 v26 FC8{ m Fp Fi[2] FC9{ m}}} BC10{ BC11{ BC12{ vd v27 v28 v29} vd v30 v31 v32 v33} vd v34 v35 v36 FC13{ m Fp Fi[2] FC9} FC14{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC15{ BC16{}} FC7 FC17{ m Fp FC14 FC18{ m Fp FC19{ Fi[4]}} Fi Fc} Fi}


 S5411C1 ::~S5411C1(){ note_dtor("S5411C1", this);}
void  S5411C1 ::v1(){vfunc_called(this, "_ZN7S5411C12v1Ev");}
void  S5411C1 ::v2(){vfunc_called(this, "_ZN7S5411C12v2Ev");}
void  S5411C1 ::v3(){vfunc_called(this, "_ZN7S5411C12v3Ev");}
void  S5411C1 ::v4(){vfunc_called(this, "_ZN7S5411C12v4Ev");}
void  S5411C1 ::v5(){vfunc_called(this, "_ZN7S5411C12v5Ev");}
void  S5411C1 ::v6(){vfunc_called(this, "_ZN7S5411C12v6Ev");}
void  S5411C1 ::v7(){vfunc_called(this, "_ZN7S5411C12v7Ev");}
S5411C1 ::S5411C1(){ note_ctor("S5411C1", this);} // tgen

static void Test_S5411C1()
{
  extern Class_Descriptor cd_S5411C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,58)];
    init_test(&cd_S5411C1, buf);
    S5411C1 *dp, &lv = *(dp=new (buf) S5411C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,228), "sizeof(S5411C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5411C1)");
    check_base_class_offset(lv, (S5411C3*)(S5411C2*), 0, "S5411C1");
    check_base_class_offset(lv, (S5411C2*), 0, "S5411C1");
    check_base_class_offset(lv, (S5411C13*)(S5411C12*)(S5411C11*), ABISELECT(96,72), "S5411C1");
    check_base_class_offset(lv, (S5411C12*)(S5411C11*), ABISELECT(96,72), "S5411C1");
    check_base_class_offset(lv, (S5411C11*), ABISELECT(96,72), "S5411C1");
    check_field_offset(lv, s5411c1f0, ABISELECT(161,125), "S5411C1.s5411c1f0");
    check_field_offset(lv, s5411c1f1, ABISELECT(168,128), "S5411C1.s5411c1f1");
    check_field_offset(lv, s5411c1f2, ABISELECT(200,160), "S5411C1.s5411c1f2");
    check_field_offset(lv, s5411c1f3, ABISELECT(272,224), "S5411C1.s5411c1f3");
    test_class_info(&lv, &cd_S5411C1);
    dp->~S5411C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5411C1(Test_S5411C1, "S5411C1", ABISELECT(280,228));

#else // __cplusplus

extern void _ZN7S5411C1C1Ev();
extern void _ZN7S5411C1D1Ev();
Name_Map name_map_S5411C1[] = {
  NSPAIR(_ZN7S5411C1C1Ev),
  NSPAIR(_ZN7S5411C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5411C3;
extern VTBL_ENTRY _ZTI7S5411C3[];
extern  VTBL_ENTRY _ZTV7S5411C3[];
extern Class_Descriptor cd_S5411C2;
extern VTBL_ENTRY _ZTI7S5411C2[];
extern  VTBL_ENTRY _ZTV7S5411C2[];
extern Class_Descriptor cd_S5411C13;
extern VTBL_ENTRY _ZTI8S5411C13[];
extern  VTBL_ENTRY _ZTV8S5411C13[];
extern Class_Descriptor cd_S5411C12;
extern VTBL_ENTRY _ZTI8S5411C12[];
extern  VTBL_ENTRY _ZTV8S5411C12[];
extern Class_Descriptor cd_S5411C11;
extern VTBL_ENTRY _ZTI8S5411C11[];
extern  VTBL_ENTRY _ZTV8S5411C11[];
static Base_Class bases_S5411C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5411C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5411C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5411C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5411C12,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5411C11,    ABISELECT(96,72), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5411C1[];
extern void _ZN7S5411C1D1Ev();
extern void _ZN7S5411C1D0Ev();
extern void _ZN7S5411C32v8Ev();
extern void _ZN7S5411C32v9Ev();
extern void _ZN7S5411C33v10Ev();
extern void _ZN7S5411C33v11Ev();
extern void _ZN7S5411C33v12Ev();
extern void _ZN7S5411C33v13Ev();
extern void _ZN7S5411C33v14Ev();
extern void _ZN7S5411C33v15Ev();
extern void _ZN7S5411C33v16Ev();
extern void _ZN7S5411C33v17Ev();
extern void _ZN7S5411C33v18Ev();
extern void _ZN7S5411C33v19Ev();
extern void _ZN7S5411C23v20Ev();
extern void _ZN7S5411C23v21Ev();
extern void _ZN7S5411C23v22Ev();
extern void _ZN7S5411C23v23Ev();
extern void _ZN7S5411C23v24Ev();
extern void _ZN7S5411C23v25Ev();
extern void _ZN7S5411C23v26Ev();
extern void _ZN7S5411C12v1Ev();
extern void _ZN7S5411C12v2Ev();
extern void _ZN7S5411C12v3Ev();
extern void _ZN7S5411C12v4Ev();
extern void _ZN7S5411C12v5Ev();
extern void _ZN7S5411C12v6Ev();
extern void _ZN7S5411C12v7Ev();
extern void ABISELECT(_ZThn96_N7S5411C1D1Ev,_ZThn72_N7S5411C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S5411C1D0Ev,_ZThn72_N7S5411C1D0Ev)();
extern void _ZN8S5411C133v27Ev();
extern void _ZN8S5411C133v28Ev();
extern void _ZN8S5411C133v29Ev();
extern void _ZN8S5411C123v30Ev();
extern void _ZN8S5411C123v31Ev();
extern void _ZN8S5411C123v32Ev();
extern void _ZN8S5411C123v33Ev();
extern void _ZN8S5411C113v34Ev();
extern void _ZN8S5411C113v35Ev();
extern void _ZN8S5411C113v36Ev();
static  VTBL_ENTRY vtc_S5411C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5411C1[0]),
  (VTBL_ENTRY)&_ZN7S5411C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5411C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5411C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5411C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v18Ev,
  (VTBL_ENTRY)&_ZN7S5411C33v19Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5411C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5411C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5411C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5411C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5411C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5411C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5411C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5411C12v7Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S5411C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5411C1D1Ev,_ZThn72_N7S5411C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S5411C1D0Ev,_ZThn72_N7S5411C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5411C133v27Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v28Ev,
  (VTBL_ENTRY)&_ZN8S5411C133v29Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v30Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v31Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v32Ev,
  (VTBL_ENTRY)&_ZN8S5411C123v33Ev,
  (VTBL_ENTRY)&_ZN8S5411C113v34Ev,
  (VTBL_ENTRY)&_ZN8S5411C113v35Ev,
  (VTBL_ENTRY)&_ZN8S5411C113v36Ev,
};
extern VTBL_ENTRY _ZTI7S5411C1[];
extern  VTBL_ENTRY _ZTV7S5411C1[];
Class_Descriptor cd_S5411C1 = {  "S5411C1", // class name
  bases_S5411C1, 5,
  &(vtc_S5411C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,228), // object size
  NSPAIRA(_ZTI7S5411C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5411C1),44, //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  S19404C3  {
  virtual  ~S19404C3(); // _ZN8S19404C3D1Ev
  virtual void  v7(); // _ZN8S19404C32v7Ev
  S19404C3(); // tgen
};
//SIG(-1 S19404C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN8S19404C3C1Ev();
extern void _ZN8S19404C3D1Ev();
Name_Map name_map_S19404C3[] = {
  NSPAIR(_ZN8S19404C3C1Ev),
  NSPAIR(_ZN8S19404C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19404C3[];
extern void _ZN8S19404C3D1Ev();
extern void _ZN8S19404C3D0Ev();
extern void _ZN8S19404C32v7Ev();
static  VTBL_ENTRY vtc_S19404C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19404C3[0]),
  (VTBL_ENTRY)&_ZN8S19404C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19404C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
};
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
Class_Descriptor cd_S19404C3 = {  "S19404C3", // class name
  0,0,//no base classes
  &(vtc_S19404C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19404C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19404C3),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  S19404C2_nt  : S19404C3 {
  virtual  ~S19404C2_nt(); // _ZN11S19404C2_ntD1Ev
  virtual void  v8(); // _ZN11S19404C2_nt2v8Ev
  virtual void  v9(); // _ZN11S19404C2_nt2v9Ev
  S19404C2_nt(); // tgen
};
//SIG(-1 S19404C2_nt) C1{ BC2{ vd v3} vd v1 v2}


 S19404C2_nt ::~S19404C2_nt(){ note_dtor("S19404C2_nt", this);}
void  S19404C2_nt ::v8(){vfunc_called(this, "_ZN11S19404C2_nt2v8Ev");}
void  S19404C2_nt ::v9(){vfunc_called(this, "_ZN11S19404C2_nt2v9Ev");}
S19404C2_nt ::S19404C2_nt(){ note_ctor("S19404C2_nt", this);} // tgen

//skip512 S19404C2_nt

#else // __cplusplus

extern void _ZN11S19404C2_ntC1Ev();
extern void _ZN11S19404C2_ntD1Ev();
Name_Map name_map_S19404C2_nt[] = {
  NSPAIR(_ZN11S19404C2_ntC1Ev),
  NSPAIR(_ZN11S19404C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
static Base_Class bases_S19404C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern void _ZN11S19404C2_ntD1Ev();
extern void _ZN11S19404C2_ntD0Ev();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
static  VTBL_ENTRY vtc_S19404C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19404C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
VTBL_ENTRY *P__ZTI11S19404C2_nt = _ZTI11S19404C2_nt; 
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
Class_Descriptor cd_S19404C2_nt = {  "S19404C2_nt", // class name
  bases_S19404C2_nt, 1,
  &(vtc_S19404C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19404C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S19404C2_nt),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  S19404C5_nt  {
  int s19404c5f0;
  char s19404c5f1;
  int s19404c5f2;
  void *s19404c5f3[10];
  virtual  ~S19404C5_nt(); // _ZN11S19404C5_ntD1Ev
  virtual void  v10(); // _ZN11S19404C5_nt3v10Ev
  virtual void  v11(); // _ZN11S19404C5_nt3v11Ev
  virtual void  v12(); // _ZN11S19404C5_nt3v12Ev
  virtual void  v13(); // _ZN11S19404C5_nt3v13Ev
  S19404C5_nt(); // tgen
};
//SIG(-1 S19404C5_nt) C1{ vd v1 v2 v3 v4 Fi Fc Fi Fp[10]}


 S19404C5_nt ::~S19404C5_nt(){ note_dtor("S19404C5_nt", this);}
void  S19404C5_nt ::v10(){vfunc_called(this, "_ZN11S19404C5_nt3v10Ev");}
void  S19404C5_nt ::v11(){vfunc_called(this, "_ZN11S19404C5_nt3v11Ev");}
void  S19404C5_nt ::v12(){vfunc_called(this, "_ZN11S19404C5_nt3v12Ev");}
void  S19404C5_nt ::v13(){vfunc_called(this, "_ZN11S19404C5_nt3v13Ev");}
S19404C5_nt ::S19404C5_nt(){ note_ctor("S19404C5_nt", this);} // tgen

//skip512 S19404C5_nt

#else // __cplusplus

extern void _ZN11S19404C5_ntC1Ev();
extern void _ZN11S19404C5_ntD1Ev();
Name_Map name_map_S19404C5_nt[] = {
  NSPAIR(_ZN11S19404C5_ntC1Ev),
  NSPAIR(_ZN11S19404C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern void _ZN11S19404C5_ntD1Ev();
extern void _ZN11S19404C5_ntD0Ev();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY vtc_S19404C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19404C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
VTBL_ENTRY *P__ZTI11S19404C5_nt = _ZTI11S19404C5_nt; 
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
Class_Descriptor cd_S19404C5_nt = {  "S19404C5_nt", // class name
  0,0,//no base classes
  &(vtc_S19404C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI11S19404C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19404C5_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  S19404C6_nt  : S19404C3 , S19404C5_nt {
  __tsi64 s19404c6f0;
  void *s19404c6f1[6];
  virtual  ~S19404C6_nt(); // _ZN11S19404C6_ntD1Ev
  virtual void  v14(); // _ZN11S19404C6_nt3v14Ev
  virtual void  v15(); // _ZN11S19404C6_nt3v15Ev
  virtual void  v16(); // _ZN11S19404C6_nt3v16Ev
  virtual void  v17(); // _ZN11S19404C6_nt3v17Ev
  virtual void  v18(); // _ZN11S19404C6_nt3v18Ev
  virtual void  v19(); // _ZN11S19404C6_nt3v19Ev
  S19404C6_nt(); // tgen
};
//SIG(-1 S19404C6_nt) C1{ BC2{ vd v7} BC3{ vd v8 v9 v10 v11 Fi Fc Fi Fp[10]} vd v1 v2 v3 v4 v5 v6 FL Fp[6]}


 S19404C6_nt ::~S19404C6_nt(){ note_dtor("S19404C6_nt", this);}
void  S19404C6_nt ::v14(){vfunc_called(this, "_ZN11S19404C6_nt3v14Ev");}
void  S19404C6_nt ::v15(){vfunc_called(this, "_ZN11S19404C6_nt3v15Ev");}
void  S19404C6_nt ::v16(){vfunc_called(this, "_ZN11S19404C6_nt3v16Ev");}
void  S19404C6_nt ::v17(){vfunc_called(this, "_ZN11S19404C6_nt3v17Ev");}
void  S19404C6_nt ::v18(){vfunc_called(this, "_ZN11S19404C6_nt3v18Ev");}
void  S19404C6_nt ::v19(){vfunc_called(this, "_ZN11S19404C6_nt3v19Ev");}
S19404C6_nt ::S19404C6_nt(){ note_ctor("S19404C6_nt", this);} // tgen

//skip512 S19404C6_nt

#else // __cplusplus

extern void _ZN11S19404C6_ntC1Ev();
extern void _ZN11S19404C6_ntD1Ev();
Name_Map name_map_S19404C6_nt[] = {
  NSPAIR(_ZN11S19404C6_ntC1Ev),
  NSPAIR(_ZN11S19404C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
static Base_Class bases_S19404C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19404C5_nt,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19404C6_nt[];
extern void _ZN11S19404C6_ntD1Ev();
extern void _ZN11S19404C6_ntD0Ev();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C6_nt3v14Ev();
extern void _ZN11S19404C6_nt3v15Ev();
extern void _ZN11S19404C6_nt3v16Ev();
extern void _ZN11S19404C6_nt3v17Ev();
extern void _ZN11S19404C6_nt3v18Ev();
extern void _ZN11S19404C6_nt3v19Ev();
extern void ABISELECT(_ZThn8_N11S19404C6_ntD1Ev,_ZThn4_N11S19404C6_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S19404C6_ntD0Ev,_ZThn4_N11S19404C6_ntD0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY vtc_S19404C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S19404C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v19Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S19404C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N11S19404C6_ntD1Ev,_ZThn4_N11S19404C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N11S19404C6_ntD0Ev,_ZThn4_N11S19404C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI11S19404C6_nt[];
VTBL_ENTRY *P__ZTI11S19404C6_nt = _ZTI11S19404C6_nt; 
extern  VTBL_ENTRY _ZTV11S19404C6_nt[];
Class_Descriptor cd_S19404C6_nt = {  "S19404C6_nt", // class name
  bases_S19404C6_nt, 2,
  &(vtc_S19404C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,92), // object size
  NSPAIRA(_ZTI11S19404C6_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S19404C6_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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19404C4_nt  : virtual S19404C5_nt , virtual S19404C6_nt {
  virtual void  v20(); // _ZN11S19404C4_nt3v20Ev
  virtual void  v21(); // _ZN11S19404C4_nt3v21Ev
  virtual void  v22(); // _ZN11S19404C4_nt3v22Ev
  virtual void  v23(); // _ZN11S19404C4_nt3v23Ev
  ~S19404C4_nt(); // tgen
  S19404C4_nt(); // tgen
};
//SIG(-1 S19404C4_nt) C1{ VBC2{ vd v5 v6 v7 v8 Fi Fc Fi Fp[10]} VBC3{ BC4{ vd v9} BC2 vd v10 v11 v12 v13 v14 v15 FL Fp[6]} v1 v2 v3 v4}


void  S19404C4_nt ::v20(){vfunc_called(this, "_ZN11S19404C4_nt3v20Ev");}
void  S19404C4_nt ::v21(){vfunc_called(this, "_ZN11S19404C4_nt3v21Ev");}
void  S19404C4_nt ::v22(){vfunc_called(this, "_ZN11S19404C4_nt3v22Ev");}
void  S19404C4_nt ::v23(){vfunc_called(this, "_ZN11S19404C4_nt3v23Ev");}
S19404C4_nt ::~S19404C4_nt(){ note_dtor("S19404C4_nt", this);} // tgen
S19404C4_nt ::S19404C4_nt(){ note_ctor("S19404C4_nt", this);} // tgen

//skip512 S19404C4_nt

#else // __cplusplus

extern void _ZN11S19404C4_ntC1Ev();
extern void _ZN11S19404C4_ntD1Ev();
Name_Map name_map_S19404C4_nt[] = {
  NSPAIR(_ZN11S19404C4_ntC1Ev),
  NSPAIR(_ZN11S19404C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C6_nt;
extern VTBL_ENTRY _ZTI11S19404C6_nt[];
extern  VTBL_ENTRY _ZTV11S19404C6_nt[];
static Base_Class bases_S19404C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C5_nt,    ABISELECT(8,4), //bcp->offset
    10, //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_S19404C3,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19404C5_nt,    ABISELECT(120,64), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19404C6_nt,    ABISELECT(112,60), //bcp->offset
    23, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    3, //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 _ZTI11S19404C4_nt[];
extern void _ZN11S19404C4_nt3v20Ev();
extern void _ZN11S19404C4_nt3v21Ev();
extern void _ZN11S19404C4_nt3v22Ev();
extern void _ZN11S19404C4_nt3v23Ev();
extern void _ZN11S19404C4_ntD1Ev();
extern void _ZN11S19404C4_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S19404C4_ntD1Ev,_ZThn4_N11S19404C4_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev)();
extern void ABISELECT(_ZThn8_N11S19404C4_ntD0Ev,_ZThn4_N11S19404C4_ntD0Ev)() __attribute__((weak));
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev)();
extern void ABISELECT(_ZThn112_N11S19404C4_ntD1Ev,_ZThn60_N11S19404C4_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev)();
extern void ABISELECT(_ZThn112_N11S19404C4_ntD0Ev,_ZThn60_N11S19404C4_ntD0Ev)() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C6_nt3v14Ev();
extern void _ZN11S19404C6_nt3v15Ev();
extern void _ZN11S19404C6_nt3v16Ev();
extern void _ZN11S19404C6_nt3v17Ev();
extern void _ZN11S19404C6_nt3v18Ev();
extern void _ZN11S19404C6_nt3v19Ev();
extern void ABISELECT(_ZTvn8_n24_N11S19404C4_ntD1Ev,_ZTvn4_n12_N11S19404C4_ntD1Ev)();
extern void ABISELECT(_ZTvn8_n24_N11S19404C4_ntD0Ev,_ZTvn4_n12_N11S19404C4_ntD0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY vtc_S19404C4_nt[] = {
  ABISELECT(112,60),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_ntD0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v19Ev,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N11S19404C4_ntD1Ev,_ZTvn4_n12_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N11S19404C4_ntD0Ev,_ZTvn4_n12_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV11S19404C4_nt[];
static  VTT_ENTRY vtt_S19404C4_nt[] = {
  {&(_ZTV11S19404C4_nt[4]),  4,54},
  {&(_ZTV11S19404C4_nt[17]),  17,54},
  {&(_ZTV11S19404C4_nt[37]),  37,54},
  {&(_ZTV11S19404C4_nt[48]),  48,54},
};
extern VTBL_ENTRY _ZTI11S19404C4_nt[];
VTBL_ENTRY *P__ZTI11S19404C4_nt = _ZTI11S19404C4_nt; 
extern  VTBL_ENTRY _ZTV11S19404C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19404C4_nt[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N11S19404C4_ntD0Ev,_ZThn60_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S19404C4_ntD0Ev,_ZThn4_N11S19404C4_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N11S19404C4_ntD1Ev,_ZThn60_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S19404C4_ntD1Ev,_ZThn4_N11S19404C4_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19404C4_nt = {  "S19404C4_nt", // class name
  bases_S19404C4_nt, 4,
  &(vtc_S19404C4_nt[0]), // expected_vtbl_contents
  &(vtt_S19404C4_nt[0]), // expected_vtt_contents
  ABISELECT(280,152), // object size
  NSPAIRA(_ZTI11S19404C4_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S19404C4_nt),54, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19404C4_nt),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19404C11_nt  {
  long double s19404c11f0[3];
  virtual void  v24(); // _ZN12S19404C11_nt3v24Ev
  virtual void  v25(); // _ZN12S19404C11_nt3v25Ev
  ~S19404C11_nt(); // tgen
  S19404C11_nt(); // tgen
};
//SIG(-1 S19404C11_nt) C1{ v1 v2 FD[3]}


void  S19404C11_nt ::v24(){vfunc_called(this, "_ZN12S19404C11_nt3v24Ev");}
void  S19404C11_nt ::v25(){vfunc_called(this, "_ZN12S19404C11_nt3v25Ev");}
S19404C11_nt ::~S19404C11_nt(){ note_dtor("S19404C11_nt", this);} // tgen
S19404C11_nt ::S19404C11_nt(){ note_ctor("S19404C11_nt", this);} // tgen

//skip512 S19404C11_nt

#else // __cplusplus

extern void _ZN12S19404C11_ntC1Ev();
extern void _ZN12S19404C11_ntD1Ev();
Name_Map name_map_S19404C11_nt[] = {
  NSPAIR(_ZN12S19404C11_ntC1Ev),
  NSPAIR(_ZN12S19404C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
static  VTBL_ENTRY vtc_S19404C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19404C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
VTBL_ENTRY *P__ZTI12S19404C11_nt = _ZTI12S19404C11_nt; 
extern  VTBL_ENTRY _ZTV12S19404C11_nt[];
Class_Descriptor cd_S19404C11_nt = {  "S19404C11_nt", // class name
  0,0,//no base classes
  &(vtc_S19404C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI12S19404C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S19404C11_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  S19404C10_nt  : S19404C11_nt {
  virtual void  v26(); // _ZN12S19404C10_nt3v26Ev
  virtual void  v27(); // _ZN12S19404C10_nt3v27Ev
  virtual void  v28(); // _ZN12S19404C10_nt3v28Ev
  ~S19404C10_nt(); // tgen
  S19404C10_nt(); // tgen
};
//SIG(-1 S19404C10_nt) C1{ BC2{ v4 v5 FD[3]} v1 v2 v3}


void  S19404C10_nt ::v26(){vfunc_called(this, "_ZN12S19404C10_nt3v26Ev");}
void  S19404C10_nt ::v27(){vfunc_called(this, "_ZN12S19404C10_nt3v27Ev");}
void  S19404C10_nt ::v28(){vfunc_called(this, "_ZN12S19404C10_nt3v28Ev");}
S19404C10_nt ::~S19404C10_nt(){ note_dtor("S19404C10_nt", this);} // tgen
S19404C10_nt ::S19404C10_nt(){ note_ctor("S19404C10_nt", this);} // tgen

//skip512 S19404C10_nt

#else // __cplusplus

extern void _ZN12S19404C10_ntC1Ev();
extern void _ZN12S19404C10_ntD1Ev();
Name_Map name_map_S19404C10_nt[] = {
  NSPAIR(_ZN12S19404C10_ntC1Ev),
  NSPAIR(_ZN12S19404C10_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C11_nt;
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
extern  VTBL_ENTRY _ZTV12S19404C11_nt[];
static Base_Class bases_S19404C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S19404C10_nt[];
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
static  VTBL_ENTRY vtc_S19404C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19404C10_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
};
extern VTBL_ENTRY _ZTI12S19404C10_nt[];
VTBL_ENTRY *P__ZTI12S19404C10_nt = _ZTI12S19404C10_nt; 
extern  VTBL_ENTRY _ZTV12S19404C10_nt[];
Class_Descriptor cd_S19404C10_nt = {  "S19404C10_nt", // class name
  bases_S19404C10_nt, 1,
  &(vtc_S19404C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI12S19404C10_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV12S19404C10_nt),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  S19404C9_nt  : S19404C10_nt {
  int s19404c9f0[2];
  virtual void  v29(); // _ZN11S19404C9_nt3v29Ev
  virtual void  v30(); // _ZN11S19404C9_nt3v30Ev
  virtual void  v31(); // _ZN11S19404C9_nt3v31Ev
  ~S19404C9_nt(); // tgen
  S19404C9_nt(); // tgen
};
//SIG(-1 S19404C9_nt) C1{ BC2{ BC3{ v4 v5 FD[3]} v6 v7 v8} v1 v2 v3 Fi[2]}


void  S19404C9_nt ::v29(){vfunc_called(this, "_ZN11S19404C9_nt3v29Ev");}
void  S19404C9_nt ::v30(){vfunc_called(this, "_ZN11S19404C9_nt3v30Ev");}
void  S19404C9_nt ::v31(){vfunc_called(this, "_ZN11S19404C9_nt3v31Ev");}
S19404C9_nt ::~S19404C9_nt(){ note_dtor("S19404C9_nt", this);} // tgen
S19404C9_nt ::S19404C9_nt(){ note_ctor("S19404C9_nt", this);} // tgen

//skip512 S19404C9_nt

#else // __cplusplus

extern void _ZN11S19404C9_ntC1Ev();
extern void _ZN11S19404C9_ntD1Ev();
Name_Map name_map_S19404C9_nt[] = {
  NSPAIR(_ZN11S19404C9_ntC1Ev),
  NSPAIR(_ZN11S19404C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C11_nt;
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
extern  VTBL_ENTRY _ZTV12S19404C11_nt[];
extern Class_Descriptor cd_S19404C10_nt;
extern VTBL_ENTRY _ZTI12S19404C10_nt[];
extern  VTBL_ENTRY _ZTV12S19404C10_nt[];
static Base_Class bases_S19404C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19404C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI11S19404C9_nt[];
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
static  VTBL_ENTRY vtc_S19404C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C9_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
};
extern VTBL_ENTRY _ZTI11S19404C9_nt[];
VTBL_ENTRY *P__ZTI11S19404C9_nt = _ZTI11S19404C9_nt; 
extern  VTBL_ENTRY _ZTV11S19404C9_nt[];
Class_Descriptor cd_S19404C9_nt = {  "S19404C9_nt", // class name
  bases_S19404C9_nt, 2,
  &(vtc_S19404C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI11S19404C9_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S19404C9_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  S19404C12_nt  {
  int s19404c12f0;
  virtual void  v32(); // _ZN12S19404C12_nt3v32Ev
  virtual void  v33(); // _ZN12S19404C12_nt3v33Ev
  virtual void  v34(); // _ZN12S19404C12_nt3v34Ev
  virtual void  v35(); // _ZN12S19404C12_nt3v35Ev
  ~S19404C12_nt(); // tgen
  S19404C12_nt(); // tgen
};
//SIG(-1 S19404C12_nt) C1{ v1 v2 v3 v4 Fi}


void  S19404C12_nt ::v32(){vfunc_called(this, "_ZN12S19404C12_nt3v32Ev");}
void  S19404C12_nt ::v33(){vfunc_called(this, "_ZN12S19404C12_nt3v33Ev");}
void  S19404C12_nt ::v34(){vfunc_called(this, "_ZN12S19404C12_nt3v34Ev");}
void  S19404C12_nt ::v35(){vfunc_called(this, "_ZN12S19404C12_nt3v35Ev");}
S19404C12_nt ::~S19404C12_nt(){ note_dtor("S19404C12_nt", this);} // tgen
S19404C12_nt ::S19404C12_nt(){ note_ctor("S19404C12_nt", this);} // tgen

//skip512 S19404C12_nt

#else // __cplusplus

extern void _ZN12S19404C12_ntC1Ev();
extern void _ZN12S19404C12_ntD1Ev();
Name_Map name_map_S19404C12_nt[] = {
  NSPAIR(_ZN12S19404C12_ntC1Ev),
  NSPAIR(_ZN12S19404C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S19404C12_nt[];
extern void _ZN12S19404C12_nt3v32Ev();
extern void _ZN12S19404C12_nt3v33Ev();
extern void _ZN12S19404C12_nt3v34Ev();
extern void _ZN12S19404C12_nt3v35Ev();
static  VTBL_ENTRY vtc_S19404C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19404C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v35Ev,
};
extern VTBL_ENTRY _ZTI12S19404C12_nt[];
VTBL_ENTRY *P__ZTI12S19404C12_nt = _ZTI12S19404C12_nt; 
extern  VTBL_ENTRY _ZTV12S19404C12_nt[];
Class_Descriptor cd_S19404C12_nt = {  "S19404C12_nt", // class name
  0,0,//no base classes
  &(vtc_S19404C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI12S19404C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S19404C12_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  S19404C8_nt  : virtual S19404C9_nt , virtual S19404C12_nt , virtual S19404C2_nt , virtual S19404C5_nt {
  ::S21103C10 s19404c8f0;
  virtual void  v36(); // _ZN11S19404C8_nt3v36Ev
  virtual void  v37(); // _ZN11S19404C8_nt3v37Ev
  ~S19404C8_nt(); // tgen
  S19404C8_nt(); // tgen
};
//SIG(-1 S19404C8_nt) C1{ VBC2{ BC3{ BC4{ v3 v4 FD[3]} v5 v6 v7} v8 v9 v10 Fi[2]} VBC5{ v11 v12 v13 v14 Fi} VBC6{ BC7{ vd v15} vd v16 v17} VBC8{ vd v18 v19 v20 v21 Fi Fc Fi Fp[10]} v1 v2 FU9{ m Fl}}


void  S19404C8_nt ::v36(){vfunc_called(this, "_ZN11S19404C8_nt3v36Ev");}
void  S19404C8_nt ::v37(){vfunc_called(this, "_ZN11S19404C8_nt3v37Ev");}
S19404C8_nt ::~S19404C8_nt(){ note_dtor("S19404C8_nt", this);} // tgen
S19404C8_nt ::S19404C8_nt(){ note_ctor("S19404C8_nt", this);} // tgen

//skip512 S19404C8_nt

#else // __cplusplus

extern void _ZN11S19404C8_ntC1Ev();
extern void _ZN11S19404C8_ntD1Ev();
Name_Map name_map_S19404C8_nt[] = {
  NSPAIR(_ZN11S19404C8_ntC1Ev),
  NSPAIR(_ZN11S19404C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C11_nt;
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
extern  VTBL_ENTRY _ZTV12S19404C11_nt[];
extern Class_Descriptor cd_S19404C10_nt;
extern VTBL_ENTRY _ZTI12S19404C10_nt[];
extern  VTBL_ENTRY _ZTV12S19404C10_nt[];
extern Class_Descriptor cd_S19404C9_nt;
extern VTBL_ENTRY _ZTI11S19404C9_nt[];
extern  VTBL_ENTRY _ZTV11S19404C9_nt[];
extern Class_Descriptor cd_S19404C12_nt;
extern VTBL_ENTRY _ZTI12S19404C12_nt[];
extern  VTBL_ENTRY _ZTV12S19404C12_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
static Base_Class bases_S19404C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C11_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19404C10_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19404C9_nt,    ABISELECT(16,8), //bcp->offset
    17, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19404C12_nt,    ABISELECT(88,56), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19404C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19404C5_nt,    ABISELECT(104,64), //bcp->offset
    45, //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
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19404C8_nt[];
extern void _ZN11S19404C8_ntD1Ev();
extern void _ZN11S19404C8_ntD0Ev();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN11S19404C8_nt3v36Ev();
extern void _ZN11S19404C8_nt3v37Ev();
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
extern void _ZN12S19404C12_nt3v32Ev();
extern void _ZN12S19404C12_nt3v33Ev();
extern void _ZN12S19404C12_nt3v34Ev();
extern void _ZN12S19404C12_nt3v35Ev();
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev)();
extern void ABISELECT(_ZThn104_N11S19404C8_ntD1Ev,_ZThn64_N11S19404C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev)();
extern void ABISELECT(_ZThn104_N11S19404C8_ntD0Ev,_ZThn64_N11S19404C8_ntD0Ev)() __attribute__((weak));
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY vtc_S19404C8_nt[] = {
  ABISELECT(104,64),
  0,
  ABISELECT(88,56),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S19404C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v35Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV11S19404C8_nt[];
static  VTT_ENTRY vtt_S19404C8_nt[] = {
  {&(_ZTV11S19404C8_nt[10]),  10,58},
  {&(_ZTV11S19404C8_nt[27]),  27,58},
  {&(_ZTV11S19404C8_nt[41]),  41,58},
  {&(_ZTV11S19404C8_nt[10]),  10,58},
  {&(_ZTV11S19404C8_nt[52]),  52,58},
};
extern VTBL_ENTRY _ZTI11S19404C8_nt[];
VTBL_ENTRY *P__ZTI11S19404C8_nt = _ZTI11S19404C8_nt; 
extern  VTBL_ENTRY _ZTV11S19404C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19404C8_nt[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19404C8_ntD0Ev,_ZThn64_N11S19404C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19404C8_ntD1Ev,_ZThn64_N11S19404C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19404C8_nt = {  "S19404C8_nt", // class name
  bases_S19404C8_nt, 7,
  &(vtc_S19404C8_nt[0]), // expected_vtbl_contents
  &(vtt_S19404C8_nt[0]), // expected_vtt_contents
  ABISELECT(208,120), // object size
  NSPAIRA(_ZTI11S19404C8_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV11S19404C8_nt),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19404C8_nt),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19404C14_nt  : S19404C2_nt , S19404C6_nt {
  virtual  ~S19404C14_nt(); // _ZN12S19404C14_ntD1Ev
  virtual void  v38(); // _ZN12S19404C14_nt3v38Ev
  virtual void  v39(); // _ZN12S19404C14_nt3v39Ev
  S19404C14_nt(); // tgen
};
//SIG(-1 S19404C14_nt) C1{ BC2{ BC3{ vd v3} vd v4 v5} BC4{ BC3 BC5{ vd v6 v7 v8 v9 Fi Fc Fi Fp[10]} vd v10 v11 v12 v13 v14 v15 FL Fp[6]} vd v1 v2}


 S19404C14_nt ::~S19404C14_nt(){ note_dtor("S19404C14_nt", this);}
void  S19404C14_nt ::v38(){vfunc_called(this, "_ZN12S19404C14_nt3v38Ev");}
void  S19404C14_nt ::v39(){vfunc_called(this, "_ZN12S19404C14_nt3v39Ev");}
S19404C14_nt ::S19404C14_nt(){ note_ctor("S19404C14_nt", this);} // tgen

//skip512 S19404C14_nt

#else // __cplusplus

extern void _ZN12S19404C14_ntC1Ev();
extern void _ZN12S19404C14_ntD1Ev();
Name_Map name_map_S19404C14_nt[] = {
  NSPAIR(_ZN12S19404C14_ntC1Ev),
  NSPAIR(_ZN12S19404C14_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C6_nt;
extern VTBL_ENTRY _ZTI11S19404C6_nt[];
extern  VTBL_ENTRY _ZTV11S19404C6_nt[];
static Base_Class bases_S19404C14_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19404C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19404C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19404C5_nt,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19404C6_nt,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S19404C14_nt[];
extern void _ZN12S19404C14_ntD1Ev();
extern void _ZN12S19404C14_ntD0Ev();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN12S19404C14_nt3v38Ev();
extern void _ZN12S19404C14_nt3v39Ev();
extern void ABISELECT(_ZThn8_N12S19404C14_ntD1Ev,_ZThn4_N12S19404C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S19404C14_ntD0Ev,_ZThn4_N12S19404C14_ntD0Ev)();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C6_nt3v14Ev();
extern void _ZN11S19404C6_nt3v15Ev();
extern void _ZN11S19404C6_nt3v16Ev();
extern void _ZN11S19404C6_nt3v17Ev();
extern void _ZN11S19404C6_nt3v18Ev();
extern void _ZN11S19404C6_nt3v19Ev();
extern void ABISELECT(_ZThn16_N12S19404C14_ntD1Ev,_ZThn8_N12S19404C14_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S19404C14_ntD0Ev,_ZThn8_N12S19404C14_ntD0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY vtc_S19404C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19404C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19404C14_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN12S19404C14_nt3v38Ev,
  (VTBL_ENTRY)&_ZN12S19404C14_nt3v39Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S19404C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S19404C14_ntD1Ev,_ZThn4_N12S19404C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S19404C14_ntD0Ev,_ZThn4_N12S19404C14_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v19Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S19404C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S19404C14_ntD1Ev,_ZThn8_N12S19404C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S19404C14_ntD0Ev,_ZThn8_N12S19404C14_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI12S19404C14_nt[];
VTBL_ENTRY *P__ZTI12S19404C14_nt = _ZTI12S19404C14_nt; 
extern  VTBL_ENTRY _ZTV12S19404C14_nt[];
Class_Descriptor cd_S19404C14_nt = {  "S19404C14_nt", // class name
  bases_S19404C14_nt, 5,
  &(vtc_S19404C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,96), // object size
  NSPAIRA(_ZTI12S19404C14_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S19404C14_nt),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19404C7  : virtual S19404C8_nt , S19404C2_nt , S19404C14_nt , S19404C5_nt {
  virtual void  v40(); // _ZN8S19404C73v40Ev
  virtual void  v41(); // _ZN8S19404C73v41Ev
  ~S19404C7(); // tgen
  S19404C7(); // tgen
};
//SIG(-1 S19404C7) C1{ VBC2{ VBC3{ BC4{ BC5{ v3 v4 FD[3]} v5 v6 v7} v8 v9 v10 Fi[2]} VBC6{ v11 v12 v13 v14 Fi} VBC7{ BC8{ vd v15} vd v16 v17} VBC9{ vd v18 v19 v20 v21 Fi Fc Fi Fp[10]} v22 v23 FU10{ m Fl}} BC7 BC11{ BC7 BC12{ BC8 BC9 vd v24 v25 v26 v27 v28 v29 FL Fp[6]} vd v30 v31} BC9 v1 v2}


void  S19404C7 ::v40(){vfunc_called(this, "_ZN8S19404C73v40Ev");}
void  S19404C7 ::v41(){vfunc_called(this, "_ZN8S19404C73v41Ev");}
S19404C7 ::~S19404C7(){ note_dtor("S19404C7", this);} // tgen
S19404C7 ::S19404C7(){ note_ctor("S19404C7", this);} // tgen

static void Test_S19404C7()
{
  extern Class_Descriptor cd_S19404C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,70)];
    init_test(&cd_S19404C7, buf);
    S19404C7 *dp, &lv = *(dp=new (buf) S19404C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,276), "sizeof(S19404C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19404C7)");
    check_base_class_offset(lv, (S19404C11_nt*)(S19404C10_nt*)(S19404C9_nt*), ABISELECT(304,164), "S19404C7");
    check_base_class_offset(lv, (S19404C10_nt*)(S19404C9_nt*), ABISELECT(304,164), "S19404C7");
    check_base_class_offset(lv, (S19404C9_nt*)(S19404C8_nt*), ABISELECT(304,164), "S19404C7");
    check_base_class_offset(lv, (S19404C12_nt*)(S19404C8_nt*), ABISELECT(376,212), "S19404C7");
    /*is_ambiguous_... S19404C7::S19404C2_nt */ AMB_check_base_class_offset(lv, (S19404C3*)(S19404C2_nt*), ABISELECT(288,156), "S19404C7");
    check_base_class_offset(lv, (S19404C2_nt*)(S19404C8_nt*), ABISELECT(288,156), "S19404C7");
    check_base_class_offset(lv, (S19404C5_nt*)(S19404C8_nt*), ABISELECT(392,220), "S19404C7");
    check_base_class_offset(lv, (S19404C8_nt*), ABISELECT(288,156), "S19404C7");
    /*is_ambiguous_... S19404C7::S19404C2_nt */ AMB_check_base_class_offset(lv, (S19404C3*)(S19404C2_nt*), 0, "S19404C7");
    /*is_ambiguous_... S19404C7::S19404C2_nt */ AMB_check_base_class_offset(lv, (S19404C2_nt*), 0, "S19404C7");
    check_base_class_offset(lv, (S19404C3*)(S19404C2_nt*)(S19404C14_nt*), ABISELECT(8,4), "S19404C7");
    check_base_class_offset(lv, (S19404C2_nt*)(S19404C14_nt*), ABISELECT(8,4), "S19404C7");
    check_base_class_offset(lv, (S19404C3*)(S19404C6_nt*)(S19404C14_nt*), ABISELECT(16,8), "S19404C7");
    check_base_class_offset(lv, (S19404C5_nt*)(S19404C6_nt*)(S19404C14_nt*), ABISELECT(24,12), "S19404C7");
    check_base_class_offset(lv, (S19404C6_nt*)(S19404C14_nt*), ABISELECT(16,8), "S19404C7");
    check_base_class_offset(lv, (S19404C14_nt*), ABISELECT(8,4), "S19404C7");
    /*is_ambiguous_... S19404C7::S19404C5_nt */ AMB_check_base_class_offset(lv, (S19404C5_nt*), ABISELECT(184,100), "S19404C7");
    test_class_info(&lv, &cd_S19404C7);
    dp->~S19404C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19404C7(Test_S19404C7, "S19404C7", ABISELECT(496,276));

#else // __cplusplus

extern void _ZN8S19404C7C1Ev();
extern void _ZN8S19404C7D1Ev();
Name_Map name_map_S19404C7[] = {
  NSPAIR(_ZN8S19404C7C1Ev),
  NSPAIR(_ZN8S19404C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C11_nt;
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
extern  VTBL_ENTRY _ZTV12S19404C11_nt[];
extern Class_Descriptor cd_S19404C10_nt;
extern VTBL_ENTRY _ZTI12S19404C10_nt[];
extern  VTBL_ENTRY _ZTV12S19404C10_nt[];
extern Class_Descriptor cd_S19404C9_nt;
extern VTBL_ENTRY _ZTI11S19404C9_nt[];
extern  VTBL_ENTRY _ZTV11S19404C9_nt[];
extern Class_Descriptor cd_S19404C12_nt;
extern VTBL_ENTRY _ZTI12S19404C12_nt[];
extern  VTBL_ENTRY _ZTV12S19404C12_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C8_nt;
extern VTBL_ENTRY _ZTI11S19404C8_nt[];
extern  VTBL_ENTRY _ZTV11S19404C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19404C8_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C6_nt;
extern VTBL_ENTRY _ZTI11S19404C6_nt[];
extern  VTBL_ENTRY _ZTV11S19404C6_nt[];
extern Class_Descriptor cd_S19404C14_nt;
extern VTBL_ENTRY _ZTI12S19404C14_nt[];
extern  VTBL_ENTRY _ZTV12S19404C14_nt[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
static Base_Class bases_S19404C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C11_nt,    ABISELECT(304,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19404C10_nt,    ABISELECT(304,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19404C9_nt,    ABISELECT(304,164), //bcp->offset
    69, //bcp->virtual_function_table_offset
    10, //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
    7, //immediately_derived
  0, 1},
  {&cd_S19404C12_nt,    ABISELECT(376,212), //bcp->offset
    87, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19404C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19404C2_nt,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19404C5_nt,    ABISELECT(392,220), //bcp->offset
    97, //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
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19404C8_nt,    ABISELECT(288,156), //bcp->offset
    50, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19404C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19404C3,    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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19404C2_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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19404C3,    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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19404C5_nt,    ABISELECT(24,12), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19404C6_nt,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19404C14_nt,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19404C5_nt,    ABISELECT(184,100), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19404C7[];
extern void _ZN8S19404C7D1Ev();
extern void _ZN8S19404C7D0Ev();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN8S19404C73v40Ev();
extern void _ZN8S19404C73v41Ev();
extern void ABISELECT(_ZThn8_N8S19404C7D1Ev,_ZThn4_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S19404C7D0Ev,_ZThn4_N8S19404C7D0Ev)();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN12S19404C14_nt3v38Ev();
extern void _ZN12S19404C14_nt3v39Ev();
extern void ABISELECT(_ZThn16_N8S19404C7D1Ev,_ZThn8_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19404C7D0Ev,_ZThn8_N8S19404C7D0Ev)();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C6_nt3v14Ev();
extern void _ZN11S19404C6_nt3v15Ev();
extern void _ZN11S19404C6_nt3v16Ev();
extern void _ZN11S19404C6_nt3v17Ev();
extern void _ZN11S19404C6_nt3v18Ev();
extern void _ZN11S19404C6_nt3v19Ev();
extern void ABISELECT(_ZThn24_N8S19404C7D1Ev,_ZThn12_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19404C7D0Ev,_ZThn12_N8S19404C7D0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
extern void ABISELECT(_ZThn184_N8S19404C7D1Ev,_ZThn100_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn184_N8S19404C7D0Ev,_ZThn100_N8S19404C7D0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
extern void ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn288_N8S19404C7D1Ev,_ZThn156_N8S19404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev)();
extern void ABISELECT(_ZThn288_N8S19404C7D0Ev,_ZThn156_N8S19404C7D0Ev)() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN11S19404C8_nt3v36Ev();
extern void _ZN11S19404C8_nt3v37Ev();
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
extern void _ZN12S19404C12_nt3v32Ev();
extern void _ZN12S19404C12_nt3v33Ev();
extern void _ZN12S19404C12_nt3v34Ev();
extern void _ZN12S19404C12_nt3v35Ev();
extern void ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn392_N8S19404C7D1Ev,_ZThn220_N8S19404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev)();
extern void ABISELECT(_ZThn392_N8S19404C7D0Ev,_ZThn220_N8S19404C7D0Ev)() __attribute__((weak));
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY vtc_S19404C7[] = {
  ABISELECT(392,220),
  ABISELECT(288,156),
  ABISELECT(376,212),
  ABISELECT(304,164),
  ABISELECT(288,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&_ZN8S19404C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19404C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S19404C73v40Ev,
  (VTBL_ENTRY)&_ZN8S19404C73v41Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19404C7D1Ev,_ZThn4_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19404C7D0Ev,_ZThn4_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN12S19404C14_nt3v38Ev,
  (VTBL_ENTRY)&_ZN12S19404C14_nt3v39Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19404C7D1Ev,_ZThn8_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19404C7D0Ev,_ZThn8_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v19Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19404C7D1Ev,_ZThn12_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19404C7D0Ev,_ZThn12_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S19404C7D1Ev,_ZThn100_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S19404C7D0Ev,_ZThn100_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
  0,
  0,
  ABISELECT(104,64),
  0,
  ABISELECT(88,56),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-156),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-212),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v35Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-392,-220),
  ABISELECT(-392,-220),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV8S19404C7[];
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev)();
extern void _ZN11S19404C8_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev)();
extern void _ZN11S19404C8_ntD0Ev() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN11S19404C8_nt3v36Ev();
extern void _ZN11S19404C8_nt3v37Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C8_nt__8S19404C7[] = {
  ABISELECT(104,64),
  0,
  ABISELECT(88,56),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v37Ev,
};
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C9_nt__11S19404C8_nt__8S19404C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
};
extern void _ZN12S19404C12_nt3v32Ev();
extern void _ZN12S19404C12_nt3v33Ev();
extern void _ZN12S19404C12_nt3v34Ev();
extern void _ZN12S19404C12_nt3v35Ev();
static  VTBL_ENTRY _tg__ZTV12S19404C12_nt__11S19404C8_nt__8S19404C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev)();
extern void ABISELECT(_ZThn104_N11S19404C8_ntD1Ev,_ZThn64_N11S19404C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev)();
extern void ABISELECT(_ZThn104_N11S19404C8_ntD0Ev,_ZThn64_N11S19404C8_ntD0Ev)() __attribute__((weak));
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C5_nt__11S19404C8_nt__8S19404C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
static  VTT_ENTRY vtt_S19404C7[] = {
  {&(_ZTV8S19404C7[7]),  7,110},
  {&(_ZTV8S19404C7[62]),  62,110},
  {&(_ZTV8S19404C7[79]),  79,110},
  {&(_ZTV8S19404C7[93]),  93,110},
  {&(_ZTV8S19404C7[62]),  62,110},
  {&(_ZTV8S19404C7[104]),  104,110},
  {&(_tg__ZTV11S19404C8_nt__8S19404C7[10]),  10,17},
  {&(_tg__ZTV11S19404C9_nt__11S19404C8_nt__8S19404C7[10]),  10,18},
  {&(_tg__ZTV12S19404C12_nt__11S19404C8_nt__8S19404C7[6]),  6,10},
  {&(_tg__ZTV11S19404C8_nt__8S19404C7[10]),  10,17},
  {&(_tg__ZTV11S19404C5_nt__11S19404C8_nt__8S19404C7[7]),  7,13},
};
extern VTBL_ENTRY _ZTI8S19404C7[];
extern  VTBL_ENTRY _ZTV8S19404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19404C7[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19404C8_ntD0Ev,_ZThn64_N11S19404C8_ntD0Ev),
  (VTBL_ENTRY)_ZN11S19404C8_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19404C8_ntD1Ev,_ZThn64_N11S19404C8_ntD1Ev),
  (VTBL_ENTRY)_ZN11S19404C8_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S19404C7D0Ev,_ZThn220_N8S19404C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19404C7D0Ev,_ZThn156_N8S19404C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S19404C7D1Ev,_ZThn220_N8S19404C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19404C7D1Ev,_ZThn156_N8S19404C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19404C7 = {  "S19404C7", // class name
  bases_S19404C7, 17,
  &(vtc_S19404C7[0]), // expected_vtbl_contents
  &(vtt_S19404C7[0]), // expected_vtt_contents
  ABISELECT(496,276), // object size
  NSPAIRA(_ZTI8S19404C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19404C7),110, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19404C7),11, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19404C1  : virtual S19404C2_nt , virtual S19404C4_nt , S19404C7 , S19404C9_nt {
  __tsi64 s19404c1f0;
  virtual void  v1(); // _ZN8S19404C12v1Ev
  virtual void  v2(); // _ZN8S19404C12v2Ev
  virtual void  v3(); // _ZN8S19404C12v3Ev
  virtual void  v4(); // _ZN8S19404C12v4Ev
  virtual void  v5(); // _ZN8S19404C12v5Ev
  virtual void  v6(); // _ZN8S19404C12v6Ev
  ~S19404C1(); // tgen
  S19404C1(); // tgen
};
//SIG(1 S19404C1) C1{ VBC2{ BC3{ vd v7} vd v8 v9} VBC4{ VBC5{ vd v10 v11 v12 v13 Fi Fc Fi Fp[10]} VBC6{ BC3 BC5 vd v14 v15 v16 v17 v18 v19 FL Fp[6]} v20 v21 v22 v23} BC7{ VBC8{ VBC9{ BC10{ BC11{ v24 v25 FD[3]} v26 v27 v28} v29 v30 v31 Fi[2]} VBC12{ v32 v33 v34 v35 Fi} VBC2 VBC5 v36 v37 FU13{ m Fl}} BC2 BC14{ BC2 BC6 vd v38 v39} BC5 v40 v41} BC9 v1 v2 v3 v4 v5 v6 FL}


void  S19404C1 ::v1(){vfunc_called(this, "_ZN8S19404C12v1Ev");}
void  S19404C1 ::v2(){vfunc_called(this, "_ZN8S19404C12v2Ev");}
void  S19404C1 ::v3(){vfunc_called(this, "_ZN8S19404C12v3Ev");}
void  S19404C1 ::v4(){vfunc_called(this, "_ZN8S19404C12v4Ev");}
void  S19404C1 ::v5(){vfunc_called(this, "_ZN8S19404C12v5Ev");}
void  S19404C1 ::v6(){vfunc_called(this, "_ZN8S19404C12v6Ev");}
S19404C1 ::~S19404C1(){ note_dtor("S19404C1", this);} // tgen
S19404C1 ::S19404C1(){ note_ctor("S19404C1", this);} // tgen

static void Test_S19404C1()
{
  extern Class_Descriptor cd_S19404C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,108)];
    init_test(&cd_S19404C1, buf);
    S19404C1 *dp, &lv = *(dp=new (buf) S19404C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,428), "sizeof(S19404C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19404C1)");
    /*is_ambiguous_... S19404C1::S19404C2_nt */ AMB_check_base_class_offset(lv, (S19404C3*)(S19404C2_nt*), ABISELECT(648,364), "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C2_nt */ AMB_check_base_class_offset(lv, (S19404C2_nt*), ABISELECT(648,364), "S19404C1");
    check_base_class_offset(lv, (S19404C2_nt*)(S19404C8_nt*), ABISELECT(648,364), "S19404C1");
    /*is_ambiguous_... S19404C4_nt::S19404C5_nt */ AMB_check_base_class_offset(lv, (S19404C5_nt*)(S19404C4_nt*), ABISELECT(376,216), "S19404C1");
    check_base_class_offset(lv, (S19404C5_nt*)(S19404C8_nt*), ABISELECT(376,216), "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C6_nt */ AMB_check_base_class_offset(lv, (S19404C3*)(S19404C6_nt*), ABISELECT(480,272), "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C6_nt */ AMB_check_base_class_offset(lv, (S19404C5_nt*)(S19404C6_nt*), ABISELECT(488,276), "S19404C1");
    check_base_class_offset(lv, (S19404C6_nt*)(S19404C4_nt*), ABISELECT(480,272), "S19404C1");
    check_base_class_offset(lv, (S19404C4_nt*), ABISELECT(368,212), "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C9_nt */ AMB_check_base_class_offset(lv, (S19404C11_nt*)(S19404C10_nt*)(S19404C9_nt*), ABISELECT(672,372), "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C9_nt */ AMB_check_base_class_offset(lv, (S19404C10_nt*)(S19404C9_nt*), ABISELECT(672,372), "S19404C1");
    check_base_class_offset(lv, (S19404C9_nt*)(S19404C8_nt*), ABISELECT(672,372), "S19404C1");
    check_base_class_offset(lv, (S19404C12_nt*)(S19404C8_nt*), ABISELECT(744,420), "S19404C1");
    check_base_class_offset(lv, (S19404C8_nt*)(S19404C7*), ABISELECT(648,364), "S19404C1");
    /*is_ambiguous_... S19404C7::S19404C2_nt */ AMB_check_base_class_offset(lv, (S19404C3*)(S19404C2_nt*)(S19404C7*), 0, "S19404C1");
    /*is_ambiguous_... S19404C7::S19404C2_nt */ AMB_check_base_class_offset(lv, (S19404C2_nt*)(S19404C7*), 0, "S19404C1");
    check_base_class_offset(lv, (S19404C3*)(S19404C2_nt*)(S19404C14_nt*)(S19404C7*), ABISELECT(8,4), "S19404C1");
    check_base_class_offset(lv, (S19404C2_nt*)(S19404C14_nt*)(S19404C7*), ABISELECT(8,4), "S19404C1");
    check_base_class_offset(lv, (S19404C3*)(S19404C6_nt*)(S19404C14_nt*)(S19404C7*), ABISELECT(16,8), "S19404C1");
    check_base_class_offset(lv, (S19404C5_nt*)(S19404C6_nt*)(S19404C14_nt*)(S19404C7*), ABISELECT(24,12), "S19404C1");
    check_base_class_offset(lv, (S19404C6_nt*)(S19404C14_nt*)(S19404C7*), ABISELECT(16,8), "S19404C1");
    check_base_class_offset(lv, (S19404C14_nt*)(S19404C7*), ABISELECT(8,4), "S19404C1");
    /*is_ambiguous_... S19404C7::S19404C5_nt */ AMB_check_base_class_offset(lv, (S19404C5_nt*)(S19404C7*), ABISELECT(184,100), "S19404C1");
    check_base_class_offset(lv, (S19404C7*), 0, "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C9_nt */ AMB_check_base_class_offset(lv, (S19404C11_nt*)(S19404C10_nt*)(S19404C9_nt*), ABISELECT(288,156), "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C9_nt */ AMB_check_base_class_offset(lv, (S19404C10_nt*)(S19404C9_nt*), ABISELECT(288,156), "S19404C1");
    /*is_ambiguous_... S19404C1::S19404C9_nt */ AMB_check_base_class_offset(lv, (S19404C9_nt*), ABISELECT(288,156), "S19404C1");
    check_field_offset(lv, s19404c1f0, ABISELECT(360,204), "S19404C1.s19404c1f0");
    test_class_info(&lv, &cd_S19404C1);
    dp->~S19404C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19404C1(Test_S19404C1, "S19404C1", ABISELECT(768,428));

#else // __cplusplus

extern void _ZN8S19404C1C1Ev();
extern void _ZN8S19404C1D1Ev();
Name_Map name_map_S19404C1[] = {
  NSPAIR(_ZN8S19404C1C1Ev),
  NSPAIR(_ZN8S19404C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C6_nt;
extern VTBL_ENTRY _ZTI11S19404C6_nt[];
extern  VTBL_ENTRY _ZTV11S19404C6_nt[];
extern Class_Descriptor cd_S19404C4_nt;
extern VTBL_ENTRY _ZTI11S19404C4_nt[];
extern  VTBL_ENTRY _ZTV11S19404C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19404C4_nt[];
extern Class_Descriptor cd_S19404C11_nt;
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
extern  VTBL_ENTRY _ZTV12S19404C11_nt[];
extern Class_Descriptor cd_S19404C10_nt;
extern VTBL_ENTRY _ZTI12S19404C10_nt[];
extern  VTBL_ENTRY _ZTV12S19404C10_nt[];
extern Class_Descriptor cd_S19404C9_nt;
extern VTBL_ENTRY _ZTI11S19404C9_nt[];
extern  VTBL_ENTRY _ZTV11S19404C9_nt[];
extern Class_Descriptor cd_S19404C12_nt;
extern VTBL_ENTRY _ZTI12S19404C12_nt[];
extern  VTBL_ENTRY _ZTV12S19404C12_nt[];
extern Class_Descriptor cd_S19404C8_nt;
extern VTBL_ENTRY _ZTI11S19404C8_nt[];
extern  VTBL_ENTRY _ZTV11S19404C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19404C8_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C2_nt;
extern VTBL_ENTRY _ZTI11S19404C2_nt[];
extern  VTBL_ENTRY _ZTV11S19404C2_nt[];
extern Class_Descriptor cd_S19404C3;
extern VTBL_ENTRY _ZTI8S19404C3[];
extern  VTBL_ENTRY _ZTV8S19404C3[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C6_nt;
extern VTBL_ENTRY _ZTI11S19404C6_nt[];
extern  VTBL_ENTRY _ZTV11S19404C6_nt[];
extern Class_Descriptor cd_S19404C14_nt;
extern VTBL_ENTRY _ZTI12S19404C14_nt[];
extern  VTBL_ENTRY _ZTV12S19404C14_nt[];
extern Class_Descriptor cd_S19404C5_nt;
extern VTBL_ENTRY _ZTI11S19404C5_nt[];
extern  VTBL_ENTRY _ZTV11S19404C5_nt[];
extern Class_Descriptor cd_S19404C7;
extern VTBL_ENTRY _ZTI8S19404C7[];
extern  VTBL_ENTRY _ZTV8S19404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19404C7[];
extern Class_Descriptor cd_S19404C11_nt;
extern VTBL_ENTRY _ZTI12S19404C11_nt[];
extern  VTBL_ENTRY _ZTV12S19404C11_nt[];
extern Class_Descriptor cd_S19404C10_nt;
extern VTBL_ENTRY _ZTI12S19404C10_nt[];
extern  VTBL_ENTRY _ZTV12S19404C10_nt[];
extern Class_Descriptor cd_S19404C9_nt;
extern VTBL_ENTRY _ZTI11S19404C9_nt[];
extern  VTBL_ENTRY _ZTV11S19404C9_nt[];
static Base_Class bases_S19404C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19404C3,    ABISELECT(648,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19404C2_nt,    ABISELECT(648,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19404C5_nt,    ABISELECT(376,216), //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
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19404C3,    ABISELECT(480,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19404C5_nt,    ABISELECT(488,276), //bcp->offset
    119, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19404C6_nt,    ABISELECT(480,272), //bcp->offset
    96, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19404C4_nt,    ABISELECT(368,212), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19404C11_nt,    ABISELECT(672,372), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19404C10_nt,    ABISELECT(672,372), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19404C9_nt,    ABISELECT(672,372), //bcp->offset
    146, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19404C12_nt,    ABISELECT(744,420), //bcp->offset
    164, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19404C8_nt,    ABISELECT(648,364), //bcp->offset
    127, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19404C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19404C3,    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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19404C2_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
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19404C3,    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
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19404C5_nt,    ABISELECT(24,12), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19404C6_nt,    ABISELECT(16,8), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19404C14_nt,    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
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19404C5_nt,    ABISELECT(184,100), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19404C7,    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},
  {&cd_S19404C11_nt,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19404C10_nt,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19404C9_nt,    ABISELECT(288,156), //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
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19404C1[];
extern void _ZN8S19404C1D1Ev();
extern void _ZN8S19404C1D0Ev();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN8S19404C73v40Ev();
extern void _ZN8S19404C73v41Ev();
extern void _ZN8S19404C12v1Ev();
extern void _ZN8S19404C12v2Ev();
extern void _ZN8S19404C12v3Ev();
extern void _ZN8S19404C12v4Ev();
extern void _ZN8S19404C12v5Ev();
extern void _ZN8S19404C12v6Ev();
extern void ABISELECT(_ZThn8_N8S19404C1D1Ev,_ZThn4_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19404C1D0Ev,_ZThn4_N8S19404C1D0Ev)();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN12S19404C14_nt3v38Ev();
extern void _ZN12S19404C14_nt3v39Ev();
extern void ABISELECT(_ZThn16_N8S19404C1D1Ev,_ZThn8_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19404C1D0Ev,_ZThn8_N8S19404C1D0Ev)();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C6_nt3v14Ev();
extern void _ZN11S19404C6_nt3v15Ev();
extern void _ZN11S19404C6_nt3v16Ev();
extern void _ZN11S19404C6_nt3v17Ev();
extern void _ZN11S19404C6_nt3v18Ev();
extern void _ZN11S19404C6_nt3v19Ev();
extern void ABISELECT(_ZThn24_N8S19404C1D1Ev,_ZThn12_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19404C1D0Ev,_ZThn12_N8S19404C1D0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
extern void ABISELECT(_ZThn184_N8S19404C1D1Ev,_ZThn100_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S19404C1D0Ev,_ZThn100_N8S19404C1D0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
extern void _ZN11S19404C4_nt3v20Ev();
extern void _ZN11S19404C4_nt3v21Ev();
extern void _ZN11S19404C4_nt3v22Ev();
extern void _ZN11S19404C4_nt3v23Ev();
extern void ABISELECT(_ZTv0_n72_N8S19404C1D1Ev,_ZTv0_n36_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn368_N8S19404C1D1Ev,_ZThn212_N8S19404C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19404C1D0Ev,_ZTv0_n36_N8S19404C1D0Ev)();
extern void ABISELECT(_ZThn368_N8S19404C1D0Ev,_ZThn212_N8S19404C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C1D1Ev,_ZTv0_n12_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn376_N8S19404C1D1Ev,_ZThn216_N8S19404C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C1D0Ev,_ZTv0_n12_N8S19404C1D0Ev)();
extern void ABISELECT(_ZThn376_N8S19404C1D0Ev,_ZThn216_N8S19404C1D0Ev)() __attribute__((weak));
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
extern void ABISELECT(_ZTv0_n24_N8S19404C1D1Ev,_ZTv0_n12_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S19404C1D1Ev,_ZThn272_N8S19404C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C1D0Ev,_ZTv0_n12_N8S19404C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S19404C1D0Ev,_ZThn272_N8S19404C1D0Ev)() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C6_nt3v14Ev();
extern void _ZN11S19404C6_nt3v15Ev();
extern void _ZN11S19404C6_nt3v16Ev();
extern void _ZN11S19404C6_nt3v17Ev();
extern void _ZN11S19404C6_nt3v18Ev();
extern void _ZN11S19404C6_nt3v19Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19404C1D1Ev,_ZTvn4_n12_N8S19404C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19404C1D0Ev,_ZTvn4_n12_N8S19404C1D0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
extern void ABISELECT(_ZTv0_n24_N8S19404C1D1Ev,_ZTv0_n12_N8S19404C1D1Ev)();
extern void ABISELECT(_ZThn648_N8S19404C1D1Ev,_ZThn364_N8S19404C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C1D0Ev,_ZTv0_n12_N8S19404C1D0Ev)();
extern void ABISELECT(_ZThn648_N8S19404C1D0Ev,_ZThn364_N8S19404C1D0Ev)() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN11S19404C8_nt3v36Ev();
extern void _ZN11S19404C8_nt3v37Ev();
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
extern void _ZN12S19404C12_nt3v32Ev();
extern void _ZN12S19404C12_nt3v33Ev();
extern void _ZN12S19404C12_nt3v34Ev();
extern void _ZN12S19404C12_nt3v35Ev();
static  VTBL_ENTRY vtc_S19404C1[] = {
  ABISELECT(480,272),
  ABISELECT(368,212),
  ABISELECT(376,216),
  ABISELECT(648,364),
  ABISELECT(744,420),
  ABISELECT(672,372),
  ABISELECT(648,364),
  0,
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&_ZN8S19404C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19404C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S19404C73v40Ev,
  (VTBL_ENTRY)&_ZN8S19404C73v41Ev,
  (VTBL_ENTRY)&_ZN8S19404C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19404C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19404C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19404C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19404C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19404C12v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19404C1D1Ev,_ZThn4_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19404C1D0Ev,_ZThn4_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN12S19404C14_nt3v38Ev,
  (VTBL_ENTRY)&_ZN12S19404C14_nt3v39Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19404C1D1Ev,_ZThn8_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19404C1D0Ev,_ZThn8_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v19Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19404C1D1Ev,_ZThn12_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19404C1D0Ev,_ZThn12_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S19404C1D1Ev,_ZThn100_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S19404C1D0Ev,_ZThn100_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
  ABISELECT(-368,-212),
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(8,4),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19404C1D1Ev,_ZTv0_n36_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19404C1D0Ev,_ZTv0_n36_N8S19404C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-376,-216),
  ABISELECT(-376,-216),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C1D1Ev,_ZTv0_n12_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C1D0Ev,_ZTv0_n12_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-272),
  ABISELECT(-480,-272),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C1D1Ev,_ZTv0_n12_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C1D0Ev,_ZTv0_n12_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v19Ev,
  ABISELECT(-488,-276),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19404C1D1Ev,_ZTvn4_n12_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19404C1D0Ev,_ZTvn4_n12_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
  0,
  0,
  ABISELECT(-272,-148),
  0,
  ABISELECT(96,56),
  ABISELECT(24,8),
  0,
  0,
  0,
  ABISELECT(-648,-364),
  ABISELECT(-648,-364),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C1D1Ev,_ZTv0_n12_N8S19404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C1D0Ev,_ZTv0_n12_N8S19404C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-672,-372),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-744,-420),
  (VTBL_ENTRY)&(_ZTI8S19404C1[0]),
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v35Ev,
};
extern VTBL_ENTRY _ZTV8S19404C1[];
extern void _ZN8S19404C7D1Ev();
extern void _ZN8S19404C7D0Ev();
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN8S19404C73v40Ev();
extern void _ZN8S19404C73v41Ev();
static  VTBL_ENTRY _tg__ZTV8S19404C7__8S19404C1[] = {
  ABISELECT(376,216),
  ABISELECT(648,364),
  ABISELECT(744,420),
  ABISELECT(672,372),
  ABISELECT(648,364),
  0,
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&_ZN8S19404C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19404C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S19404C73v40Ev,
  (VTBL_ENTRY)&_ZN8S19404C73v41Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn648_N8S19404C7D1Ev,_ZThn364_N8S19404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev)();
extern void ABISELECT(_ZThn648_N8S19404C7D0Ev,_ZThn364_N8S19404C7D0Ev)() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN11S19404C8_nt3v36Ev();
extern void _ZN11S19404C8_nt3v37Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C8_nt__8S19404C7__8S19404C1[] = {
  0,
  0,
  ABISELECT(-272,-148),
  0,
  ABISELECT(96,56),
  ABISELECT(24,8),
  0,
  0,
  0,
  ABISELECT(-648,-364),
  ABISELECT(-648,-364),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v37Ev,
};
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C9_nt__8S19404C7__8S19404C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-672,-372),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
};
extern void _ZN12S19404C12_nt3v32Ev();
extern void _ZN12S19404C12_nt3v33Ev();
extern void _ZN12S19404C12_nt3v34Ev();
extern void _ZN12S19404C12_nt3v35Ev();
static  VTBL_ENTRY _tg__ZTV12S19404C12_nt__8S19404C7__8S19404C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-744,-420),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev)();
extern void ABISELECT(_ZThn376_N8S19404C7D1Ev,_ZThn216_N8S19404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev)();
extern void ABISELECT(_ZThn376_N8S19404C7D0Ev,_ZThn216_N8S19404C7D0Ev)() __attribute__((weak));
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C5_nt__8S19404C7__8S19404C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-376,-216),
  ABISELECT(-376,-216),
  (VTBL_ENTRY)&(_ZTI8S19404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern void _ZN11S19404C4_nt3v20Ev();
extern void _ZN11S19404C4_nt3v21Ev();
extern void _ZN11S19404C4_nt3v22Ev();
extern void _ZN11S19404C4_nt3v23Ev();
extern void _ZN11S19404C4_ntD1Ev();
extern void _ZN11S19404C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C4_nt__8S19404C1[] = {
  ABISELECT(112,60),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19404C4_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S19404C4_ntD1Ev,_ZThn4_N11S19404C4_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev)();
extern void ABISELECT(_ZThn8_N11S19404C4_ntD0Ev,_ZThn4_N11S19404C4_ntD0Ev)() __attribute__((weak));
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C5_nt__11S19404C4_nt__8S19404C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev)();
extern void ABISELECT(_ZThn112_N11S19404C4_ntD1Ev,_ZThn60_N11S19404C4_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev)();
extern void ABISELECT(_ZThn112_N11S19404C4_ntD0Ev,_ZThn60_N11S19404C4_ntD0Ev)() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C6_nt3v14Ev();
extern void _ZN11S19404C6_nt3v15Ev();
extern void _ZN11S19404C6_nt3v16Ev();
extern void _ZN11S19404C6_nt3v17Ev();
extern void _ZN11S19404C6_nt3v18Ev();
extern void _ZN11S19404C6_nt3v19Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C6_nt__11S19404C4_nt__8S19404C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S19404C6_nt3v19Ev,
};
extern void ABISELECT(_ZTvn8_n24_N11S19404C4_ntD1Ev,_ZTvn4_n12_N11S19404C4_ntD1Ev)();
extern void ABISELECT(_ZTvn8_n24_N11S19404C4_ntD0Ev,_ZTvn4_n12_N11S19404C4_ntD0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C5_nt11S19404C6_nt__A1__11S19404C4_nt__8S19404C1[] = {
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI11S19404C4_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N11S19404C4_ntD1Ev,_ZTvn4_n12_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N11S19404C4_ntD0Ev,_ZTvn4_n12_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev)();
extern void _ZN11S19404C8_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev)();
extern void _ZN11S19404C8_ntD0Ev() __attribute__((weak));
extern void _ZN8S19404C32v7Ev();
extern void _ZN11S19404C2_nt2v8Ev();
extern void _ZN11S19404C2_nt2v9Ev();
extern void _ZN11S19404C8_nt3v36Ev();
extern void _ZN11S19404C8_nt3v37Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C8_nt__8S19404C1[] = {
  ABISELECT(-272,-148),
  0,
  ABISELECT(96,56),
  ABISELECT(24,8),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S19404C32v7Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19404C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN11S19404C8_nt3v37Ev,
};
extern void _ZN12S19404C11_nt3v24Ev();
extern void _ZN12S19404C11_nt3v25Ev();
extern void _ZN12S19404C10_nt3v26Ev();
extern void _ZN12S19404C10_nt3v27Ev();
extern void _ZN12S19404C10_nt3v28Ev();
extern void _ZN11S19404C9_nt3v29Ev();
extern void _ZN11S19404C9_nt3v30Ev();
extern void _ZN11S19404C9_nt3v31Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C9_nt__11S19404C8_nt__8S19404C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S19404C11_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S19404C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S19404C9_nt3v31Ev,
};
extern void _ZN12S19404C12_nt3v32Ev();
extern void _ZN12S19404C12_nt3v33Ev();
extern void _ZN12S19404C12_nt3v34Ev();
extern void _ZN12S19404C12_nt3v35Ev();
static  VTBL_ENTRY _tg__ZTV12S19404C12_nt__11S19404C8_nt__8S19404C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S19404C12_nt3v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev)();
extern void _ZN11S19404C5_nt3v10Ev();
extern void _ZN11S19404C5_nt3v11Ev();
extern void _ZN11S19404C5_nt3v12Ev();
extern void _ZN11S19404C5_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV11S19404C5_nt__11S19404C8_nt__8S19404C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(272,148),
  ABISELECT(272,148),
  (VTBL_ENTRY)&(_ZTI11S19404C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev),
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19404C5_nt3v13Ev,
};
static  VTT_ENTRY vtt_S19404C1[] = {
  {&(_ZTV8S19404C1[9]),  9,174},
  {&(_tg__ZTV8S19404C7__8S19404C1[7]),  7,14},
  {&(_tg__ZTV11S19404C8_nt__8S19404C7__8S19404C1[12]),  12,19},
  {&(_tg__ZTV11S19404C9_nt__8S19404C7__8S19404C1[10]),  10,18},
  {&(_tg__ZTV12S19404C12_nt__8S19404C7__8S19404C1[6]),  6,10},
  {&(_tg__ZTV11S19404C8_nt__8S19404C7__8S19404C1[12]),  12,19},
  {&(_tg__ZTV11S19404C5_nt__8S19404C7__8S19404C1[7]),  7,13},
  {&(_ZTV8S19404C1[139]),  139,174},
  {&(_ZTV8S19404C1[77]),  77,174},
  {&(_ZTV8S19404C1[90]),  90,174},
  {&(_ZTV8S19404C1[110]),  110,174},
  {&(_ZTV8S19404C1[121]),  121,174},
  {&(_ZTV8S19404C1[139]),  139,174},
  {&(_ZTV8S19404C1[156]),  156,174},
  {&(_ZTV8S19404C1[170]),  170,174},
  {&(_tg__ZTV11S19404C4_nt__8S19404C1[4]),  4,10},
  {&(_tg__ZTV11S19404C5_nt__11S19404C4_nt__8S19404C1[7]),  7,13},
  {&(_tg__ZTV11S19404C6_nt__11S19404C4_nt__8S19404C1[14]),  14,23},
  {&(_tg__ZTV11S19404C5_nt11S19404C6_nt__A1__11S19404C4_nt__8S19404C1[2]),  2,8},
  {&(_tg__ZTV11S19404C8_nt__8S19404C1[10]),  10,17},
  {&(_tg__ZTV11S19404C9_nt__11S19404C8_nt__8S19404C1[10]),  10,18},
  {&(_tg__ZTV12S19404C12_nt__11S19404C8_nt__8S19404C1[6]),  6,10},
  {&(_tg__ZTV11S19404C8_nt__8S19404C1[10]),  10,17},
  {&(_tg__ZTV11S19404C5_nt__11S19404C8_nt__8S19404C1[7]),  7,13},
};
extern VTBL_ENTRY _ZTI8S19404C1[];
extern  VTBL_ENTRY _ZTV8S19404C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19404C1[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C8_ntD0Ev,_ZTv0_n12_N11S19404C8_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S19404C8_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C8_ntD1Ev,_ZTv0_n12_N11S19404C8_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S19404C8_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C4_ntD0Ev,_ZTv0_n12_N11S19404C4_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N11S19404C4_ntD0Ev,_ZThn60_N11S19404C4_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S19404C4_ntD0Ev,_ZThn4_N11S19404C4_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S19404C4_ntD1Ev,_ZTv0_n12_N11S19404C4_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N11S19404C4_ntD1Ev,_ZThn60_N11S19404C4_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S19404C4_ntD1Ev,_ZThn4_N11S19404C4_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19404C7D0Ev,_ZTv0_n12_N8S19404C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S19404C7D0Ev,_ZThn216_N8S19404C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19404C7D0Ev,_ZThn364_N8S19404C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19404C7D1Ev,_ZTv0_n12_N8S19404C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S19404C7D1Ev,_ZThn216_N8S19404C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19404C7D1Ev,_ZThn364_N8S19404C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19404C1D0Ev,_ZTv0_n12_N8S19404C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19404C1D0Ev,_ZThn364_N8S19404C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19404C1D0Ev,_ZThn272_N8S19404C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S19404C1D0Ev,_ZThn216_N8S19404C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19404C1D1Ev,_ZTv0_n12_N8S19404C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19404C1D1Ev,_ZThn364_N8S19404C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19404C1D1Ev,_ZThn272_N8S19404C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S19404C1D1Ev,_ZThn216_N8S19404C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19404C1D0Ev,_ZTv0_n36_N8S19404C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19404C1D0Ev,_ZThn212_N8S19404C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19404C1D1Ev,_ZTv0_n36_N8S19404C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19404C1D1Ev,_ZThn212_N8S19404C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19404C1 = {  "S19404C1", // class name
  bases_S19404C1, 25,
  &(vtc_S19404C1[0]), // expected_vtbl_contents
  &(vtt_S19404C1[0]), // expected_vtt_contents
  ABISELECT(768,428), // object size
  NSPAIRA(_ZTI8S19404C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19404C1),174, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19404C1),24, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4202C3  {
  void *s4202c3f0;
  ::S2382C25 s4202c3f1;
  ::S2403C17_nt s4202c3f2;
  char s4202c3f3;
  virtual  ~S4202C3(); // _ZN7S4202C3D1Ev
  virtual void  v10(); // _ZN7S4202C33v10Ev
  virtual void  v11(); // _ZN7S4202C33v11Ev
  virtual void  v12(); // _ZN7S4202C33v12Ev
  virtual void  v13(); // _ZN7S4202C33v13Ev
  virtual void  v14(); // _ZN7S4202C33v14Ev
  virtual void  v15(); // _ZN7S4202C33v15Ev
  virtual void  v16(); // _ZN7S4202C33v16Ev
  virtual void  v17(); // _ZN7S4202C33v17Ev
  virtual void  v18(); // _ZN7S4202C33v18Ev
  virtual void  v19(); // _ZN7S4202C33v19Ev
  virtual void  v20(); // _ZN7S4202C33v20Ev
  virtual void  v21(); // _ZN7S4202C33v21Ev
  S4202C3(); // tgen
};
//SIG(-1 S4202C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S4202C3 ::~S4202C3(){ note_dtor("S4202C3", this);}
void  S4202C3 ::v10(){vfunc_called(this, "_ZN7S4202C33v10Ev");}
void  S4202C3 ::v11(){vfunc_called(this, "_ZN7S4202C33v11Ev");}
void  S4202C3 ::v12(){vfunc_called(this, "_ZN7S4202C33v12Ev");}
void  S4202C3 ::v13(){vfunc_called(this, "_ZN7S4202C33v13Ev");}
void  S4202C3 ::v14(){vfunc_called(this, "_ZN7S4202C33v14Ev");}
void  S4202C3 ::v15(){vfunc_called(this, "_ZN7S4202C33v15Ev");}
void  S4202C3 ::v16(){vfunc_called(this, "_ZN7S4202C33v16Ev");}
void  S4202C3 ::v17(){vfunc_called(this, "_ZN7S4202C33v17Ev");}
void  S4202C3 ::v18(){vfunc_called(this, "_ZN7S4202C33v18Ev");}
void  S4202C3 ::v19(){vfunc_called(this, "_ZN7S4202C33v19Ev");}
void  S4202C3 ::v20(){vfunc_called(this, "_ZN7S4202C33v20Ev");}
void  S4202C3 ::v21(){vfunc_called(this, "_ZN7S4202C33v21Ev");}
S4202C3 ::S4202C3(){ note_ctor("S4202C3", this);} // tgen

static void Test_S4202C3()
{
  extern Class_Descriptor cd_S4202C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4202C3, buf);
    S4202C3 *dp, &lv = *(dp=new (buf) S4202C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4202C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4202C3)");
    check_field_offset(lv, s4202c3f0, ABISELECT(8,4), "S4202C3.s4202c3f0");
    check_field_offset(lv, s4202c3f1, ABISELECT(16,8), "S4202C3.s4202c3f1");
    check_field_offset(lv, s4202c3f2, ABISELECT(32,20), "S4202C3.s4202c3f2");
    check_field_offset(lv, s4202c3f3, ABISELECT(64,52), "S4202C3.s4202c3f3");
    test_class_info(&lv, &cd_S4202C3);
    dp->~S4202C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4202C3(Test_S4202C3, "S4202C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S4202C3C1Ev();
extern void _ZN7S4202C3D1Ev();
Name_Map name_map_S4202C3[] = {
  NSPAIR(_ZN7S4202C3C1Ev),
  NSPAIR(_ZN7S4202C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4202C3[];
extern void _ZN7S4202C3D1Ev();
extern void _ZN7S4202C3D0Ev();
extern void _ZN7S4202C33v10Ev();
extern void _ZN7S4202C33v11Ev();
extern void _ZN7S4202C33v12Ev();
extern void _ZN7S4202C33v13Ev();
extern void _ZN7S4202C33v14Ev();
extern void _ZN7S4202C33v15Ev();
extern void _ZN7S4202C33v16Ev();
extern void _ZN7S4202C33v17Ev();
extern void _ZN7S4202C33v18Ev();
extern void _ZN7S4202C33v19Ev();
extern void _ZN7S4202C33v20Ev();
extern void _ZN7S4202C33v21Ev();
static  VTBL_ENTRY vtc_S4202C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4202C3[0]),
  (VTBL_ENTRY)&_ZN7S4202C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4202C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v21Ev,
};
extern VTBL_ENTRY _ZTI7S4202C3[];
extern  VTBL_ENTRY _ZTV7S4202C3[];
Class_Descriptor cd_S4202C3 = {  "S4202C3", // class name
  0,0,//no base classes
  &(vtc_S4202C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S4202C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4202C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4202C2  : S4202C3 {
  ::S4247C19_nt s4202c2f0;
  virtual  ~S4202C2(); // _ZN7S4202C2D1Ev
  virtual void  v22(); // _ZN7S4202C23v22Ev
  virtual void  v23(); // _ZN7S4202C23v23Ev
  virtual void  v24(); // _ZN7S4202C23v24Ev
  virtual void  v25(); // _ZN7S4202C23v25Ev
  virtual void  v26(); // _ZN7S4202C23v26Ev
  virtual void  v27(); // _ZN7S4202C23v27Ev
  virtual void  v28(); // _ZN7S4202C23v28Ev
  S4202C2(); // tgen
};
//SIG(-1 S4202C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S4202C2 ::~S4202C2(){ note_dtor("S4202C2", this);}
void  S4202C2 ::v22(){vfunc_called(this, "_ZN7S4202C23v22Ev");}
void  S4202C2 ::v23(){vfunc_called(this, "_ZN7S4202C23v23Ev");}
void  S4202C2 ::v24(){vfunc_called(this, "_ZN7S4202C23v24Ev");}
void  S4202C2 ::v25(){vfunc_called(this, "_ZN7S4202C23v25Ev");}
void  S4202C2 ::v26(){vfunc_called(this, "_ZN7S4202C23v26Ev");}
void  S4202C2 ::v27(){vfunc_called(this, "_ZN7S4202C23v27Ev");}
void  S4202C2 ::v28(){vfunc_called(this, "_ZN7S4202C23v28Ev");}
S4202C2 ::S4202C2(){ note_ctor("S4202C2", this);} // tgen

static void Test_S4202C2()
{
  extern Class_Descriptor cd_S4202C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4202C2, buf);
    S4202C2 *dp, &lv = *(dp=new (buf) S4202C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4202C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4202C2)");
    check_base_class_offset(lv, (S4202C3*), 0, "S4202C2");
    check_field_offset(lv, s4202c2f0, ABISELECT(72,56), "S4202C2.s4202c2f0");
    test_class_info(&lv, &cd_S4202C2);
    dp->~S4202C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4202C2(Test_S4202C2, "S4202C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4202C2C1Ev();
extern void _ZN7S4202C2D1Ev();
Name_Map name_map_S4202C2[] = {
  NSPAIR(_ZN7S4202C2C1Ev),
  NSPAIR(_ZN7S4202C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4202C3;
extern VTBL_ENTRY _ZTI7S4202C3[];
extern  VTBL_ENTRY _ZTV7S4202C3[];
static Base_Class bases_S4202C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4202C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4202C2[];
extern void _ZN7S4202C2D1Ev();
extern void _ZN7S4202C2D0Ev();
extern void _ZN7S4202C33v10Ev();
extern void _ZN7S4202C33v11Ev();
extern void _ZN7S4202C33v12Ev();
extern void _ZN7S4202C33v13Ev();
extern void _ZN7S4202C33v14Ev();
extern void _ZN7S4202C33v15Ev();
extern void _ZN7S4202C33v16Ev();
extern void _ZN7S4202C33v17Ev();
extern void _ZN7S4202C33v18Ev();
extern void _ZN7S4202C33v19Ev();
extern void _ZN7S4202C33v20Ev();
extern void _ZN7S4202C33v21Ev();
extern void _ZN7S4202C23v22Ev();
extern void _ZN7S4202C23v23Ev();
extern void _ZN7S4202C23v24Ev();
extern void _ZN7S4202C23v25Ev();
extern void _ZN7S4202C23v26Ev();
extern void _ZN7S4202C23v27Ev();
extern void _ZN7S4202C23v28Ev();
static  VTBL_ENTRY vtc_S4202C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4202C2[0]),
  (VTBL_ENTRY)&_ZN7S4202C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4202C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S4202C2[];
extern  VTBL_ENTRY _ZTV7S4202C2[];
Class_Descriptor cd_S4202C2 = {  "S4202C2", // class name
  bases_S4202C2, 1,
  &(vtc_S4202C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4202C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4202C2),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  S4202C13  {
  virtual  ~S4202C13(); // _ZN8S4202C13D1Ev
  virtual void  v29(); // _ZN8S4202C133v29Ev
  virtual void  v30(); // _ZN8S4202C133v30Ev
  virtual void  v31(); // _ZN8S4202C133v31Ev
  S4202C13(); // tgen
};
//SIG(-1 S4202C13) C1{ vd v1 v2 v3}


 S4202C13 ::~S4202C13(){ note_dtor("S4202C13", this);}
void  S4202C13 ::v29(){vfunc_called(this, "_ZN8S4202C133v29Ev");}
void  S4202C13 ::v30(){vfunc_called(this, "_ZN8S4202C133v30Ev");}
void  S4202C13 ::v31(){vfunc_called(this, "_ZN8S4202C133v31Ev");}
S4202C13 ::S4202C13(){ note_ctor("S4202C13", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S4202C13C1Ev();
extern void _ZN8S4202C13D1Ev();
Name_Map name_map_S4202C13[] = {
  NSPAIR(_ZN8S4202C13C1Ev),
  NSPAIR(_ZN8S4202C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4202C13[];
extern void _ZN8S4202C13D1Ev();
extern void _ZN8S4202C13D0Ev();
extern void _ZN8S4202C133v29Ev();
extern void _ZN8S4202C133v30Ev();
extern void _ZN8S4202C133v31Ev();
static  VTBL_ENTRY vtc_S4202C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4202C13[0]),
  (VTBL_ENTRY)&_ZN8S4202C13D1Ev,
  (VTBL_ENTRY)&_ZN8S4202C13D0Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v29Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v30Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v31Ev,
};
extern VTBL_ENTRY _ZTI8S4202C13[];
extern  VTBL_ENTRY _ZTV8S4202C13[];
Class_Descriptor cd_S4202C13 = {  "S4202C13", // class name
  0,0,//no base classes
  &(vtc_S4202C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4202C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4202C13),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  S4202C12  : S4202C13 {
  virtual  ~S4202C12(); // _ZN8S4202C12D1Ev
  virtual void  v32(); // _ZN8S4202C123v32Ev
  virtual void  v33(); // _ZN8S4202C123v33Ev
  virtual void  v34(); // _ZN8S4202C123v34Ev
  virtual void  v35(); // _ZN8S4202C123v35Ev
  S4202C12(); // tgen
};
//SIG(-1 S4202C12) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S4202C12 ::~S4202C12(){ note_dtor("S4202C12", this);}
void  S4202C12 ::v32(){vfunc_called(this, "_ZN8S4202C123v32Ev");}
void  S4202C12 ::v33(){vfunc_called(this, "_ZN8S4202C123v33Ev");}
void  S4202C12 ::v34(){vfunc_called(this, "_ZN8S4202C123v34Ev");}
void  S4202C12 ::v35(){vfunc_called(this, "_ZN8S4202C123v35Ev");}
S4202C12 ::S4202C12(){ note_ctor("S4202C12", this);} // tgen

static void Test_S4202C12()
{
  extern Class_Descriptor cd_S4202C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4202C12, buf);
    S4202C12 *dp, &lv = *(dp=new (buf) S4202C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4202C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4202C12)");
    check_base_class_offset(lv, (S4202C13*), 0, "S4202C12");
    test_class_info(&lv, &cd_S4202C12);
    dp->~S4202C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4202C12(Test_S4202C12, "S4202C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4202C12C1Ev();
extern void _ZN8S4202C12D1Ev();
Name_Map name_map_S4202C12[] = {
  NSPAIR(_ZN8S4202C12C1Ev),
  NSPAIR(_ZN8S4202C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4202C13;
extern VTBL_ENTRY _ZTI8S4202C13[];
extern  VTBL_ENTRY _ZTV8S4202C13[];
static Base_Class bases_S4202C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4202C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S4202C12[];
extern void _ZN8S4202C12D1Ev();
extern void _ZN8S4202C12D0Ev();
extern void _ZN8S4202C133v29Ev();
extern void _ZN8S4202C133v30Ev();
extern void _ZN8S4202C133v31Ev();
extern void _ZN8S4202C123v32Ev();
extern void _ZN8S4202C123v33Ev();
extern void _ZN8S4202C123v34Ev();
extern void _ZN8S4202C123v35Ev();
static  VTBL_ENTRY vtc_S4202C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4202C12[0]),
  (VTBL_ENTRY)&_ZN8S4202C12D1Ev,
  (VTBL_ENTRY)&_ZN8S4202C12D0Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v29Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v30Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v31Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v32Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v33Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v34Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v35Ev,
};
extern VTBL_ENTRY _ZTI8S4202C12[];
extern  VTBL_ENTRY _ZTV8S4202C12[];
Class_Descriptor cd_S4202C12 = {  "S4202C12", // class name
  bases_S4202C12, 1,
  &(vtc_S4202C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4202C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4202C12),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4202C11  : S4202C12 {
  ::S2382C37 s4202c11f0;
  ::S888C10_nt s4202c11f1;
  char s4202c11f2;
  virtual  ~S4202C11(); // _ZN8S4202C11D1Ev
  virtual void  v36(); // _ZN8S4202C113v36Ev
  virtual void  v37(); // _ZN8S4202C113v37Ev
  virtual void  v38(); // _ZN8S4202C113v38Ev
  S4202C11(); // tgen
};
//SIG(-1 S4202C11) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S4202C11 ::~S4202C11(){ note_dtor("S4202C11", this);}
void  S4202C11 ::v36(){vfunc_called(this, "_ZN8S4202C113v36Ev");}
void  S4202C11 ::v37(){vfunc_called(this, "_ZN8S4202C113v37Ev");}
void  S4202C11 ::v38(){vfunc_called(this, "_ZN8S4202C113v38Ev");}
S4202C11 ::S4202C11(){ note_ctor("S4202C11", this);} // tgen

static void Test_S4202C11()
{
  extern Class_Descriptor cd_S4202C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4202C11, buf);
    S4202C11 *dp, &lv = *(dp=new (buf) S4202C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4202C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4202C11)");
    check_base_class_offset(lv, (S4202C13*)(S4202C12*), 0, "S4202C11");
    check_base_class_offset(lv, (S4202C12*), 0, "S4202C11");
    check_field_offset(lv, s4202c11f0, ABISELECT(8,4), "S4202C11.s4202c11f0");
    check_field_offset(lv, s4202c11f1, ABISELECT(32,20), "S4202C11.s4202c11f1");
    check_field_offset(lv, s4202c11f2, ABISELECT(64,52), "S4202C11.s4202c11f2");
    test_class_info(&lv, &cd_S4202C11);
    dp->~S4202C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4202C11(Test_S4202C11, "S4202C11", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S4202C11C1Ev();
extern void _ZN8S4202C11D1Ev();
Name_Map name_map_S4202C11[] = {
  NSPAIR(_ZN8S4202C11C1Ev),
  NSPAIR(_ZN8S4202C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4202C13;
extern VTBL_ENTRY _ZTI8S4202C13[];
extern  VTBL_ENTRY _ZTV8S4202C13[];
extern Class_Descriptor cd_S4202C12;
extern VTBL_ENTRY _ZTI8S4202C12[];
extern  VTBL_ENTRY _ZTV8S4202C12[];
static Base_Class bases_S4202C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4202C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4202C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S4202C11[];
extern void _ZN8S4202C11D1Ev();
extern void _ZN8S4202C11D0Ev();
extern void _ZN8S4202C133v29Ev();
extern void _ZN8S4202C133v30Ev();
extern void _ZN8S4202C133v31Ev();
extern void _ZN8S4202C123v32Ev();
extern void _ZN8S4202C123v33Ev();
extern void _ZN8S4202C123v34Ev();
extern void _ZN8S4202C123v35Ev();
extern void _ZN8S4202C113v36Ev();
extern void _ZN8S4202C113v37Ev();
extern void _ZN8S4202C113v38Ev();
static  VTBL_ENTRY vtc_S4202C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4202C11[0]),
  (VTBL_ENTRY)&_ZN8S4202C11D1Ev,
  (VTBL_ENTRY)&_ZN8S4202C11D0Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v29Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v30Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v31Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v32Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v33Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v34Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v35Ev,
  (VTBL_ENTRY)&_ZN8S4202C113v36Ev,
  (VTBL_ENTRY)&_ZN8S4202C113v37Ev,
  (VTBL_ENTRY)&_ZN8S4202C113v38Ev,
};
extern VTBL_ENTRY _ZTI8S4202C11[];
extern  VTBL_ENTRY _ZTV8S4202C11[];
Class_Descriptor cd_S4202C11 = {  "S4202C11", // class name
  bases_S4202C11, 2,
  &(vtc_S4202C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S4202C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4202C11),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  S4202C17_nt  : S7511C9_nt {
  int s4202c17f0[2];
  char s4202c17f1;
};
//SIG(-1 S4202C17_nt) C1{ BC2{} Fi[2] Fc}



//skip512 S4202C17_nt

#else // __cplusplus

extern Class_Descriptor cd_S7511C9_nt;
static Base_Class bases_S4202C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S4202C1  : S4202C2 , S4202C11 {
  ::S4202C17_nt s4202c1f0;
  virtual  ~S4202C1(); // _ZN7S4202C1D1Ev
  virtual void  v1(); // _ZN7S4202C12v1Ev
  virtual void  v2(); // _ZN7S4202C12v2Ev
  virtual void  v3(); // _ZN7S4202C12v3Ev
  virtual void  v4(); // _ZN7S4202C12v4Ev
  virtual void  v5(); // _ZN7S4202C12v5Ev
  virtual void  v6(); // _ZN7S4202C12v6Ev
  virtual void  v7(); // _ZN7S4202C12v7Ev
  virtual void  v8(); // _ZN7S4202C12v8Ev
  virtual void  v9(); // _ZN7S4202C12v9Ev
  S4202C1(); // tgen
};
//SIG(1 S4202C1) C1{ BC2{ BC3{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m FL[4]} Fc} vd v22 v23 v24 v25 v26 v27 v28 FC8{ m Fp Fi[2] FC9{ m}}} BC10{ BC11{ BC12{ vd v29 v30 v31} vd v32 v33 v34 v35} vd v36 v37 v38 FC13{ m Fp Fi[2] FC9} FC14{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC15{ BC16{} Fi[2] Fc}}


 S4202C1 ::~S4202C1(){ note_dtor("S4202C1", this);}
void  S4202C1 ::v1(){vfunc_called(this, "_ZN7S4202C12v1Ev");}
void  S4202C1 ::v2(){vfunc_called(this, "_ZN7S4202C12v2Ev");}
void  S4202C1 ::v3(){vfunc_called(this, "_ZN7S4202C12v3Ev");}
void  S4202C1 ::v4(){vfunc_called(this, "_ZN7S4202C12v4Ev");}
void  S4202C1 ::v5(){vfunc_called(this, "_ZN7S4202C12v5Ev");}
void  S4202C1 ::v6(){vfunc_called(this, "_ZN7S4202C12v6Ev");}
void  S4202C1 ::v7(){vfunc_called(this, "_ZN7S4202C12v7Ev");}
void  S4202C1 ::v8(){vfunc_called(this, "_ZN7S4202C12v8Ev");}
void  S4202C1 ::v9(){vfunc_called(this, "_ZN7S4202C12v9Ev");}
S4202C1 ::S4202C1(){ note_ctor("S4202C1", this);} // tgen

static void Test_S4202C1()
{
  extern Class_Descriptor cd_S4202C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,36)];
    init_test(&cd_S4202C1, buf);
    S4202C1 *dp, &lv = *(dp=new (buf) S4202C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,140), "sizeof(S4202C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4202C1)");
    check_base_class_offset(lv, (S4202C3*)(S4202C2*), 0, "S4202C1");
    check_base_class_offset(lv, (S4202C2*), 0, "S4202C1");
    check_base_class_offset(lv, (S4202C13*)(S4202C12*)(S4202C11*), ABISELECT(96,72), "S4202C1");
    check_base_class_offset(lv, (S4202C12*)(S4202C11*), ABISELECT(96,72), "S4202C1");
    check_base_class_offset(lv, (S4202C11*), ABISELECT(96,72), "S4202C1");
    check_field_offset(lv, s4202c1f0, ABISELECT(164,128), "S4202C1.s4202c1f0");
    test_class_info(&lv, &cd_S4202C1);
    dp->~S4202C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4202C1(Test_S4202C1, "S4202C1", ABISELECT(176,140));

#else // __cplusplus

extern void _ZN7S4202C1C1Ev();
extern void _ZN7S4202C1D1Ev();
Name_Map name_map_S4202C1[] = {
  NSPAIR(_ZN7S4202C1C1Ev),
  NSPAIR(_ZN7S4202C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4202C3;
extern VTBL_ENTRY _ZTI7S4202C3[];
extern  VTBL_ENTRY _ZTV7S4202C3[];
extern Class_Descriptor cd_S4202C2;
extern VTBL_ENTRY _ZTI7S4202C2[];
extern  VTBL_ENTRY _ZTV7S4202C2[];
extern Class_Descriptor cd_S4202C13;
extern VTBL_ENTRY _ZTI8S4202C13[];
extern  VTBL_ENTRY _ZTV8S4202C13[];
extern Class_Descriptor cd_S4202C12;
extern VTBL_ENTRY _ZTI8S4202C12[];
extern  VTBL_ENTRY _ZTV8S4202C12[];
extern Class_Descriptor cd_S4202C11;
extern VTBL_ENTRY _ZTI8S4202C11[];
extern  VTBL_ENTRY _ZTV8S4202C11[];
static Base_Class bases_S4202C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4202C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4202C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4202C13,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4202C12,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S4202C11,    ABISELECT(96,72), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4202C1[];
extern void _ZN7S4202C1D1Ev();
extern void _ZN7S4202C1D0Ev();
extern void _ZN7S4202C33v10Ev();
extern void _ZN7S4202C33v11Ev();
extern void _ZN7S4202C33v12Ev();
extern void _ZN7S4202C33v13Ev();
extern void _ZN7S4202C33v14Ev();
extern void _ZN7S4202C33v15Ev();
extern void _ZN7S4202C33v16Ev();
extern void _ZN7S4202C33v17Ev();
extern void _ZN7S4202C33v18Ev();
extern void _ZN7S4202C33v19Ev();
extern void _ZN7S4202C33v20Ev();
extern void _ZN7S4202C33v21Ev();
extern void _ZN7S4202C23v22Ev();
extern void _ZN7S4202C23v23Ev();
extern void _ZN7S4202C23v24Ev();
extern void _ZN7S4202C23v25Ev();
extern void _ZN7S4202C23v26Ev();
extern void _ZN7S4202C23v27Ev();
extern void _ZN7S4202C23v28Ev();
extern void _ZN7S4202C12v1Ev();
extern void _ZN7S4202C12v2Ev();
extern void _ZN7S4202C12v3Ev();
extern void _ZN7S4202C12v4Ev();
extern void _ZN7S4202C12v5Ev();
extern void _ZN7S4202C12v6Ev();
extern void _ZN7S4202C12v7Ev();
extern void _ZN7S4202C12v8Ev();
extern void _ZN7S4202C12v9Ev();
extern void ABISELECT(_ZThn96_N7S4202C1D1Ev,_ZThn72_N7S4202C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S4202C1D0Ev,_ZThn72_N7S4202C1D0Ev)();
extern void _ZN8S4202C133v29Ev();
extern void _ZN8S4202C133v30Ev();
extern void _ZN8S4202C133v31Ev();
extern void _ZN8S4202C123v32Ev();
extern void _ZN8S4202C123v33Ev();
extern void _ZN8S4202C123v34Ev();
extern void _ZN8S4202C123v35Ev();
extern void _ZN8S4202C113v36Ev();
extern void _ZN8S4202C113v37Ev();
extern void _ZN8S4202C113v38Ev();
static  VTBL_ENTRY vtc_S4202C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4202C1[0]),
  (VTBL_ENTRY)&_ZN7S4202C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4202C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4202C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4202C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4202C12v9Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S4202C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S4202C1D1Ev,_ZThn72_N7S4202C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S4202C1D0Ev,_ZThn72_N7S4202C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4202C133v29Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v30Ev,
  (VTBL_ENTRY)&_ZN8S4202C133v31Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v32Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v33Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v34Ev,
  (VTBL_ENTRY)&_ZN8S4202C123v35Ev,
  (VTBL_ENTRY)&_ZN8S4202C113v36Ev,
  (VTBL_ENTRY)&_ZN8S4202C113v37Ev,
  (VTBL_ENTRY)&_ZN8S4202C113v38Ev,
};
extern VTBL_ENTRY _ZTI7S4202C1[];
extern  VTBL_ENTRY _ZTV7S4202C1[];
Class_Descriptor cd_S4202C1 = {  "S4202C1", // class name
  bases_S4202C1, 5,
  &(vtc_S4202C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,140), // object size
  NSPAIRA(_ZTI7S4202C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4202C1),46, //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  S5406C3_nt  {
  void *s5406c3f0;
  virtual  ~S5406C3_nt(); // _ZN10S5406C3_ntD1Ev
  virtual void  v8(); // _ZN10S5406C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5406C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5406C3_nt3v10Ev
  virtual void  v11(); // _ZN10S5406C3_nt3v11Ev
  virtual void  v12(); // _ZN10S5406C3_nt3v12Ev
  virtual void  v13(); // _ZN10S5406C3_nt3v13Ev
  virtual void  v14(); // _ZN10S5406C3_nt3v14Ev
  virtual void  v15(); // _ZN10S5406C3_nt3v15Ev
  S5406C3_nt(); // tgen
};
//SIG(-1 S5406C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp}


 S5406C3_nt ::~S5406C3_nt(){ note_dtor("S5406C3_nt", this);}
void  S5406C3_nt ::v8(){vfunc_called(this, "_ZN10S5406C3_nt2v8Ev");}
void  S5406C3_nt ::v9(){vfunc_called(this, "_ZN10S5406C3_nt2v9Ev");}
void  S5406C3_nt ::v10(){vfunc_called(this, "_ZN10S5406C3_nt3v10Ev");}
void  S5406C3_nt ::v11(){vfunc_called(this, "_ZN10S5406C3_nt3v11Ev");}
void  S5406C3_nt ::v12(){vfunc_called(this, "_ZN10S5406C3_nt3v12Ev");}
void  S5406C3_nt ::v13(){vfunc_called(this, "_ZN10S5406C3_nt3v13Ev");}
void  S5406C3_nt ::v14(){vfunc_called(this, "_ZN10S5406C3_nt3v14Ev");}
void  S5406C3_nt ::v15(){vfunc_called(this, "_ZN10S5406C3_nt3v15Ev");}
S5406C3_nt ::S5406C3_nt(){ note_ctor("S5406C3_nt", this);} // tgen

//skip512 S5406C3_nt

#else // __cplusplus

extern void _ZN10S5406C3_ntC1Ev();
extern void _ZN10S5406C3_ntD1Ev();
Name_Map name_map_S5406C3_nt[] = {
  NSPAIR(_ZN10S5406C3_ntC1Ev),
  NSPAIR(_ZN10S5406C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5406C3_nt[];
extern void _ZN10S5406C3_ntD1Ev();
extern void _ZN10S5406C3_ntD0Ev();
extern void _ZN10S5406C3_nt2v8Ev();
extern void _ZN10S5406C3_nt2v9Ev();
extern void _ZN10S5406C3_nt3v10Ev();
extern void _ZN10S5406C3_nt3v11Ev();
extern void _ZN10S5406C3_nt3v12Ev();
extern void _ZN10S5406C3_nt3v13Ev();
extern void _ZN10S5406C3_nt3v14Ev();
extern void _ZN10S5406C3_nt3v15Ev();
static  VTBL_ENTRY vtc_S5406C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5406C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5406C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI10S5406C3_nt[];
VTBL_ENTRY *P__ZTI10S5406C3_nt = _ZTI10S5406C3_nt; 
extern  VTBL_ENTRY _ZTV10S5406C3_nt[];
Class_Descriptor cd_S5406C3_nt = {  "S5406C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5406C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S5406C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5406C3_nt),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5406C2_nt  : S5406C3_nt {
  ::S4247C19_nt s5406c2f0;
  virtual  ~S5406C2_nt(); // _ZN10S5406C2_ntD1Ev
  virtual void  v16(); // _ZN10S5406C2_nt3v16Ev
  virtual void  v17(); // _ZN10S5406C2_nt3v17Ev
  virtual void  v18(); // _ZN10S5406C2_nt3v18Ev
  virtual void  v19(); // _ZN10S5406C2_nt3v19Ev
  virtual void  v20(); // _ZN10S5406C2_nt3v20Ev
  virtual void  v21(); // _ZN10S5406C2_nt3v21Ev
  virtual void  v22(); // _ZN10S5406C2_nt3v22Ev
  S5406C2_nt(); // tgen
};
//SIG(-1 S5406C2_nt) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 Fp} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S5406C2_nt ::~S5406C2_nt(){ note_dtor("S5406C2_nt", this);}
void  S5406C2_nt ::v16(){vfunc_called(this, "_ZN10S5406C2_nt3v16Ev");}
void  S5406C2_nt ::v17(){vfunc_called(this, "_ZN10S5406C2_nt3v17Ev");}
void  S5406C2_nt ::v18(){vfunc_called(this, "_ZN10S5406C2_nt3v18Ev");}
void  S5406C2_nt ::v19(){vfunc_called(this, "_ZN10S5406C2_nt3v19Ev");}
void  S5406C2_nt ::v20(){vfunc_called(this, "_ZN10S5406C2_nt3v20Ev");}
void  S5406C2_nt ::v21(){vfunc_called(this, "_ZN10S5406C2_nt3v21Ev");}
void  S5406C2_nt ::v22(){vfunc_called(this, "_ZN10S5406C2_nt3v22Ev");}
S5406C2_nt ::S5406C2_nt(){ note_ctor("S5406C2_nt", this);} // tgen

//skip512 S5406C2_nt

#else // __cplusplus

extern void _ZN10S5406C2_ntC1Ev();
extern void _ZN10S5406C2_ntD1Ev();
Name_Map name_map_S5406C2_nt[] = {
  NSPAIR(_ZN10S5406C2_ntC1Ev),
  NSPAIR(_ZN10S5406C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5406C3_nt;
extern VTBL_ENTRY _ZTI10S5406C3_nt[];
extern  VTBL_ENTRY _ZTV10S5406C3_nt[];
static Base_Class bases_S5406C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5406C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5406C2_nt[];
extern void _ZN10S5406C2_ntD1Ev();
extern void _ZN10S5406C2_ntD0Ev();
extern void _ZN10S5406C3_nt2v8Ev();
extern void _ZN10S5406C3_nt2v9Ev();
extern void _ZN10S5406C3_nt3v10Ev();
extern void _ZN10S5406C3_nt3v11Ev();
extern void _ZN10S5406C3_nt3v12Ev();
extern void _ZN10S5406C3_nt3v13Ev();
extern void _ZN10S5406C3_nt3v14Ev();
extern void _ZN10S5406C3_nt3v15Ev();
extern void _ZN10S5406C2_nt3v16Ev();
extern void _ZN10S5406C2_nt3v17Ev();
extern void _ZN10S5406C2_nt3v18Ev();
extern void _ZN10S5406C2_nt3v19Ev();
extern void _ZN10S5406C2_nt3v20Ev();
extern void _ZN10S5406C2_nt3v21Ev();
extern void _ZN10S5406C2_nt3v22Ev();
static  VTBL_ENTRY vtc_S5406C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5406C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5406C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v22Ev,
};
extern VTBL_ENTRY _ZTI10S5406C2_nt[];
VTBL_ENTRY *P__ZTI10S5406C2_nt = _ZTI10S5406C2_nt; 
extern  VTBL_ENTRY _ZTV10S5406C2_nt[];
Class_Descriptor cd_S5406C2_nt = {  "S5406C2_nt", // class name
  bases_S5406C2_nt, 1,
  &(vtc_S5406C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI10S5406C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5406C2_nt),19, //virtual function table var
  2, // 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  S5406C8  {
  virtual  ~S5406C8(); // _ZN7S5406C8D1Ev
  virtual void  v23(); // _ZN7S5406C83v23Ev
  virtual void  v24(); // _ZN7S5406C83v24Ev
  virtual void  v25(); // _ZN7S5406C83v25Ev
  S5406C8(); // tgen
};
//SIG(-1 S5406C8) C1{ vd v1 v2 v3}


 S5406C8 ::~S5406C8(){ note_dtor("S5406C8", this);}
void  S5406C8 ::v23(){vfunc_called(this, "_ZN7S5406C83v23Ev");}
void  S5406C8 ::v24(){vfunc_called(this, "_ZN7S5406C83v24Ev");}
void  S5406C8 ::v25(){vfunc_called(this, "_ZN7S5406C83v25Ev");}
S5406C8 ::S5406C8(){ note_ctor("S5406C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5406C8C1Ev();
extern void _ZN7S5406C8D1Ev();
Name_Map name_map_S5406C8[] = {
  NSPAIR(_ZN7S5406C8C1Ev),
  NSPAIR(_ZN7S5406C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5406C8[];
extern void _ZN7S5406C8D1Ev();
extern void _ZN7S5406C8D0Ev();
extern void _ZN7S5406C83v23Ev();
extern void _ZN7S5406C83v24Ev();
extern void _ZN7S5406C83v25Ev();
static  VTBL_ENTRY vtc_S5406C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5406C8[0]),
  (VTBL_ENTRY)&_ZN7S5406C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5406C8D0Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v23Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v24Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v25Ev,
};
extern VTBL_ENTRY _ZTI7S5406C8[];
extern  VTBL_ENTRY _ZTV7S5406C8[];
Class_Descriptor cd_S5406C8 = {  "S5406C8", // class name
  0,0,//no base classes
  &(vtc_S5406C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5406C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5406C8),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  S5406C7  : S5406C8 {
  virtual  ~S5406C7(); // _ZN7S5406C7D1Ev
  virtual void  v26(); // _ZN7S5406C73v26Ev
  virtual void  v27(); // _ZN7S5406C73v27Ev
  virtual void  v28(); // _ZN7S5406C73v28Ev
  virtual void  v29(); // _ZN7S5406C73v29Ev
  S5406C7(); // tgen
};
//SIG(-1 S5406C7) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S5406C7 ::~S5406C7(){ note_dtor("S5406C7", this);}
void  S5406C7 ::v26(){vfunc_called(this, "_ZN7S5406C73v26Ev");}
void  S5406C7 ::v27(){vfunc_called(this, "_ZN7S5406C73v27Ev");}
void  S5406C7 ::v28(){vfunc_called(this, "_ZN7S5406C73v28Ev");}
void  S5406C7 ::v29(){vfunc_called(this, "_ZN7S5406C73v29Ev");}
S5406C7 ::S5406C7(){ note_ctor("S5406C7", this);} // tgen

static void Test_S5406C7()
{
  extern Class_Descriptor cd_S5406C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5406C7, buf);
    S5406C7 *dp, &lv = *(dp=new (buf) S5406C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5406C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5406C7)");
    check_base_class_offset(lv, (S5406C8*), 0, "S5406C7");
    test_class_info(&lv, &cd_S5406C7);
    dp->~S5406C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5406C7(Test_S5406C7, "S5406C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5406C7C1Ev();
extern void _ZN7S5406C7D1Ev();
Name_Map name_map_S5406C7[] = {
  NSPAIR(_ZN7S5406C7C1Ev),
  NSPAIR(_ZN7S5406C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5406C8;
extern VTBL_ENTRY _ZTI7S5406C8[];
extern  VTBL_ENTRY _ZTV7S5406C8[];
static Base_Class bases_S5406C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5406C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5406C7[];
extern void _ZN7S5406C7D1Ev();
extern void _ZN7S5406C7D0Ev();
extern void _ZN7S5406C83v23Ev();
extern void _ZN7S5406C83v24Ev();
extern void _ZN7S5406C83v25Ev();
extern void _ZN7S5406C73v26Ev();
extern void _ZN7S5406C73v27Ev();
extern void _ZN7S5406C73v28Ev();
extern void _ZN7S5406C73v29Ev();
static  VTBL_ENTRY vtc_S5406C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5406C7[0]),
  (VTBL_ENTRY)&_ZN7S5406C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5406C7D0Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v23Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v24Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v25Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v26Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v27Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v28Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v29Ev,
};
extern VTBL_ENTRY _ZTI7S5406C7[];
extern  VTBL_ENTRY _ZTV7S5406C7[];
Class_Descriptor cd_S5406C7 = {  "S5406C7", // class name
  bases_S5406C7, 1,
  &(vtc_S5406C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5406C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5406C7),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5406C6  : S5406C7 {
  ::S2382C37 s5406c6f0;
  ::S2403C17_nt s5406c6f1;
  char s5406c6f2;
  virtual  ~S5406C6(); // _ZN7S5406C6D1Ev
  virtual void  v30(); // _ZN7S5406C63v30Ev
  virtual void  v31(); // _ZN7S5406C63v31Ev
  virtual void  v32(); // _ZN7S5406C63v32Ev
  S5406C6(); // tgen
};
//SIG(-1 S5406C6) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S5406C6 ::~S5406C6(){ note_dtor("S5406C6", this);}
void  S5406C6 ::v30(){vfunc_called(this, "_ZN7S5406C63v30Ev");}
void  S5406C6 ::v31(){vfunc_called(this, "_ZN7S5406C63v31Ev");}
void  S5406C6 ::v32(){vfunc_called(this, "_ZN7S5406C63v32Ev");}
S5406C6 ::S5406C6(){ note_ctor("S5406C6", this);} // tgen

static void Test_S5406C6()
{
  extern Class_Descriptor cd_S5406C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S5406C6, buf);
    S5406C6 *dp, &lv = *(dp=new (buf) S5406C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5406C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5406C6)");
    check_base_class_offset(lv, (S5406C8*)(S5406C7*), 0, "S5406C6");
    check_base_class_offset(lv, (S5406C7*), 0, "S5406C6");
    check_field_offset(lv, s5406c6f0, ABISELECT(8,4), "S5406C6.s5406c6f0");
    check_field_offset(lv, s5406c6f1, ABISELECT(32,20), "S5406C6.s5406c6f1");
    check_field_offset(lv, s5406c6f2, ABISELECT(64,52), "S5406C6.s5406c6f2");
    test_class_info(&lv, &cd_S5406C6);
    dp->~S5406C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5406C6(Test_S5406C6, "S5406C6", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S5406C6C1Ev();
extern void _ZN7S5406C6D1Ev();
Name_Map name_map_S5406C6[] = {
  NSPAIR(_ZN7S5406C6C1Ev),
  NSPAIR(_ZN7S5406C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5406C8;
extern VTBL_ENTRY _ZTI7S5406C8[];
extern  VTBL_ENTRY _ZTV7S5406C8[];
extern Class_Descriptor cd_S5406C7;
extern VTBL_ENTRY _ZTI7S5406C7[];
extern  VTBL_ENTRY _ZTV7S5406C7[];
static Base_Class bases_S5406C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5406C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5406C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5406C6[];
extern void _ZN7S5406C6D1Ev();
extern void _ZN7S5406C6D0Ev();
extern void _ZN7S5406C83v23Ev();
extern void _ZN7S5406C83v24Ev();
extern void _ZN7S5406C83v25Ev();
extern void _ZN7S5406C73v26Ev();
extern void _ZN7S5406C73v27Ev();
extern void _ZN7S5406C73v28Ev();
extern void _ZN7S5406C73v29Ev();
extern void _ZN7S5406C63v30Ev();
extern void _ZN7S5406C63v31Ev();
extern void _ZN7S5406C63v32Ev();
static  VTBL_ENTRY vtc_S5406C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5406C6[0]),
  (VTBL_ENTRY)&_ZN7S5406C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5406C6D0Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v23Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v24Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v25Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v26Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v27Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v28Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v29Ev,
  (VTBL_ENTRY)&_ZN7S5406C63v30Ev,
  (VTBL_ENTRY)&_ZN7S5406C63v31Ev,
  (VTBL_ENTRY)&_ZN7S5406C63v32Ev,
};
extern VTBL_ENTRY _ZTI7S5406C6[];
extern  VTBL_ENTRY _ZTV7S5406C6[];
Class_Descriptor cd_S5406C6 = {  "S5406C6", // class name
  bases_S5406C6, 2,
  &(vtc_S5406C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S5406C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5406C6),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  S5406C12  {
  virtual  ~S5406C12(); // _ZN8S5406C12D1Ev
  virtual void  v33(); // _ZN8S5406C123v33Ev
  S5406C12(); // tgen
};
//SIG(-1 S5406C12) C1{ vd v1}


 S5406C12 ::~S5406C12(){ note_dtor("S5406C12", this);}
void  S5406C12 ::v33(){vfunc_called(this, "_ZN8S5406C123v33Ev");}
S5406C12 ::S5406C12(){ note_ctor("S5406C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S5406C12C1Ev();
extern void _ZN8S5406C12D1Ev();
Name_Map name_map_S5406C12[] = {
  NSPAIR(_ZN8S5406C12C1Ev),
  NSPAIR(_ZN8S5406C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5406C12[];
extern void _ZN8S5406C12D1Ev();
extern void _ZN8S5406C12D0Ev();
extern void _ZN8S5406C123v33Ev();
static  VTBL_ENTRY vtc_S5406C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5406C12[0]),
  (VTBL_ENTRY)&_ZN8S5406C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5406C12D0Ev,
  (VTBL_ENTRY)&_ZN8S5406C123v33Ev,
};
extern VTBL_ENTRY _ZTI8S5406C12[];
extern  VTBL_ENTRY _ZTV8S5406C12[];
Class_Descriptor cd_S5406C12 = {  "S5406C12", // class name
  0,0,//no base classes
  &(vtc_S5406C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5406C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5406C12),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  S5406C13_nt  : S7511C9_nt {
  ::S4247C18_nt s5406c13f0;
};
//SIG(-1 S5406C13_nt) C1{ BC2{} FC3{ BC4{ m Fp Fi[2] FC5{ m}} BC6{ vd v3 v4} vd v1 v2}}



//skip512 S5406C13_nt

#else // __cplusplus

extern Class_Descriptor cd_S7511C9_nt;
static Base_Class bases_S5406C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S5406C1  : S5406C2_nt , S5406C6 , S5406C12 {
  void *s5406c1f0;
  ::S5406C13_nt s5406c1f1;
  int s5406c1f2;
  virtual  ~S5406C1(); // _ZN7S5406C1D1Ev
  virtual void  v1(); // _ZN7S5406C12v1Ev
  virtual void  v2(); // _ZN7S5406C12v2Ev
  virtual void  v3(); // _ZN7S5406C12v3Ev
  virtual void  v4(); // _ZN7S5406C12v4Ev
  virtual void  v5(); // _ZN7S5406C12v5Ev
  virtual void  v6(); // _ZN7S5406C12v6Ev
  virtual void  v7(); // _ZN7S5406C12v7Ev
  S5406C1(); // tgen
};
//SIG(1 S5406C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 Fp} vd v16 v17 v18 v19 v20 v21 v22 FC4{ m Fp Fi[2] FC5{ m}}} BC6{ BC7{ BC8{ vd v23 v24 v25} vd v26 v27 v28 v29} vd v30 v31 v32 FC9{ m Fp Fi[2] FC5} FC10{ m FL[4]} Fc} BC11{ vd v33} vd v1 v2 v3 v4 v5 v6 v7 Fp FC12{ BC13{} FC14{ BC4 BC15{ vd v36 v37} vd v34 v35}} Fi}


 S5406C1 ::~S5406C1(){ note_dtor("S5406C1", this);}
void  S5406C1 ::v1(){vfunc_called(this, "_ZN7S5406C12v1Ev");}
void  S5406C1 ::v2(){vfunc_called(this, "_ZN7S5406C12v2Ev");}
void  S5406C1 ::v3(){vfunc_called(this, "_ZN7S5406C12v3Ev");}
void  S5406C1 ::v4(){vfunc_called(this, "_ZN7S5406C12v4Ev");}
void  S5406C1 ::v5(){vfunc_called(this, "_ZN7S5406C12v5Ev");}
void  S5406C1 ::v6(){vfunc_called(this, "_ZN7S5406C12v6Ev");}
void  S5406C1 ::v7(){vfunc_called(this, "_ZN7S5406C12v7Ev");}
S5406C1 ::S5406C1(){ note_ctor("S5406C1", this);} // tgen

static void Test_S5406C1()
{
  extern Class_Descriptor cd_S5406C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S5406C1, buf);
    S5406C1 *dp, &lv = *(dp=new (buf) S5406C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S5406C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5406C1)");
    check_base_class_offset(lv, (S5406C3_nt*)(S5406C2_nt*), 0, "S5406C1");
    check_base_class_offset(lv, (S5406C2_nt*), 0, "S5406C1");
    check_base_class_offset(lv, (S5406C8*)(S5406C7*)(S5406C6*), ABISELECT(40,24), "S5406C1");
    check_base_class_offset(lv, (S5406C7*)(S5406C6*), ABISELECT(40,24), "S5406C1");
    check_base_class_offset(lv, (S5406C6*), ABISELECT(40,24), "S5406C1");
    check_base_class_offset(lv, (S5406C12*), ABISELECT(112,80), "S5406C1");
    check_field_offset(lv, s5406c1f0, ABISELECT(120,84), "S5406C1.s5406c1f0");
    check_field_offset(lv, s5406c1f1, ABISELECT(128,88), "S5406C1.s5406c1f1");
    check_field_offset(lv, s5406c1f2, ABISELECT(160,108), "S5406C1.s5406c1f2");
    test_class_info(&lv, &cd_S5406C1);
    dp->~S5406C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5406C1(Test_S5406C1, "S5406C1", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S5406C1C1Ev();
extern void _ZN7S5406C1D1Ev();
Name_Map name_map_S5406C1[] = {
  NSPAIR(_ZN7S5406C1C1Ev),
  NSPAIR(_ZN7S5406C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5406C3_nt;
extern VTBL_ENTRY _ZTI10S5406C3_nt[];
extern  VTBL_ENTRY _ZTV10S5406C3_nt[];
extern Class_Descriptor cd_S5406C2_nt;
extern VTBL_ENTRY _ZTI10S5406C2_nt[];
extern  VTBL_ENTRY _ZTV10S5406C2_nt[];
extern Class_Descriptor cd_S5406C8;
extern VTBL_ENTRY _ZTI7S5406C8[];
extern  VTBL_ENTRY _ZTV7S5406C8[];
extern Class_Descriptor cd_S5406C7;
extern VTBL_ENTRY _ZTI7S5406C7[];
extern  VTBL_ENTRY _ZTV7S5406C7[];
extern Class_Descriptor cd_S5406C6;
extern VTBL_ENTRY _ZTI7S5406C6[];
extern  VTBL_ENTRY _ZTV7S5406C6[];
extern Class_Descriptor cd_S5406C12;
extern VTBL_ENTRY _ZTI8S5406C12[];
extern  VTBL_ENTRY _ZTV8S5406C12[];
static Base_Class bases_S5406C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5406C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5406C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5406C8,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5406C7,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5406C6,    ABISELECT(40,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5406C12,    ABISELECT(112,80), //bcp->offset
    40, //bcp->virtual_function_table_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 _ZTI7S5406C1[];
extern void _ZN7S5406C1D1Ev();
extern void _ZN7S5406C1D0Ev();
extern void _ZN10S5406C3_nt2v8Ev();
extern void _ZN10S5406C3_nt2v9Ev();
extern void _ZN10S5406C3_nt3v10Ev();
extern void _ZN10S5406C3_nt3v11Ev();
extern void _ZN10S5406C3_nt3v12Ev();
extern void _ZN10S5406C3_nt3v13Ev();
extern void _ZN10S5406C3_nt3v14Ev();
extern void _ZN10S5406C3_nt3v15Ev();
extern void _ZN10S5406C2_nt3v16Ev();
extern void _ZN10S5406C2_nt3v17Ev();
extern void _ZN10S5406C2_nt3v18Ev();
extern void _ZN10S5406C2_nt3v19Ev();
extern void _ZN10S5406C2_nt3v20Ev();
extern void _ZN10S5406C2_nt3v21Ev();
extern void _ZN10S5406C2_nt3v22Ev();
extern void _ZN7S5406C12v1Ev();
extern void _ZN7S5406C12v2Ev();
extern void _ZN7S5406C12v3Ev();
extern void _ZN7S5406C12v4Ev();
extern void _ZN7S5406C12v5Ev();
extern void _ZN7S5406C12v6Ev();
extern void _ZN7S5406C12v7Ev();
extern void ABISELECT(_ZThn40_N7S5406C1D1Ev,_ZThn24_N7S5406C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S5406C1D0Ev,_ZThn24_N7S5406C1D0Ev)();
extern void _ZN7S5406C83v23Ev();
extern void _ZN7S5406C83v24Ev();
extern void _ZN7S5406C83v25Ev();
extern void _ZN7S5406C73v26Ev();
extern void _ZN7S5406C73v27Ev();
extern void _ZN7S5406C73v28Ev();
extern void _ZN7S5406C73v29Ev();
extern void _ZN7S5406C63v30Ev();
extern void _ZN7S5406C63v31Ev();
extern void _ZN7S5406C63v32Ev();
extern void ABISELECT(_ZThn112_N7S5406C1D1Ev,_ZThn80_N7S5406C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S5406C1D0Ev,_ZThn80_N7S5406C1D0Ev)();
extern void _ZN8S5406C123v33Ev();
static  VTBL_ENTRY vtc_S5406C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5406C1[0]),
  (VTBL_ENTRY)&_ZN7S5406C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5406C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5406C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5406C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN7S5406C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5406C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5406C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5406C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5406C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5406C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5406C12v7Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S5406C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5406C1D1Ev,_ZThn24_N7S5406C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S5406C1D0Ev,_ZThn24_N7S5406C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5406C83v23Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v24Ev,
  (VTBL_ENTRY)&_ZN7S5406C83v25Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v26Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v27Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v28Ev,
  (VTBL_ENTRY)&_ZN7S5406C73v29Ev,
  (VTBL_ENTRY)&_ZN7S5406C63v30Ev,
  (VTBL_ENTRY)&_ZN7S5406C63v31Ev,
  (VTBL_ENTRY)&_ZN7S5406C63v32Ev,
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S5406C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5406C1D1Ev,_ZThn80_N7S5406C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5406C1D0Ev,_ZThn80_N7S5406C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5406C123v33Ev,
};
extern VTBL_ENTRY _ZTI7S5406C1[];
extern  VTBL_ENTRY _ZTV7S5406C1[];
Class_Descriptor cd_S5406C1 = {  "S5406C1", // class name
  bases_S5406C1, 6,
  &(vtc_S5406C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S5406C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5406C1),45, //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  S20509C4  {
  virtual void  v1(); // _ZN8S20509C42v1Ev
  virtual void  v2(); // _ZN8S20509C42v2Ev
  virtual void  v3(); // _ZN8S20509C42v3Ev
  ~S20509C4(); // tgen
  S20509C4(); // tgen
};
//SIG(-1 S20509C4) C1{ v1 v2 v3}


void  S20509C4 ::v1(){vfunc_called(this, "_ZN8S20509C42v1Ev");}
void  S20509C4 ::v2(){vfunc_called(this, "_ZN8S20509C42v2Ev");}
void  S20509C4 ::v3(){vfunc_called(this, "_ZN8S20509C42v3Ev");}
S20509C4 ::~S20509C4(){ note_dtor("S20509C4", this);} // tgen
S20509C4 ::S20509C4(){ note_ctor("S20509C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20509C4C1Ev();
extern void _ZN8S20509C4D1Ev();
Name_Map name_map_S20509C4[] = {
  NSPAIR(_ZN8S20509C4C1Ev),
  NSPAIR(_ZN8S20509C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20509C4[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY vtc_S20509C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C4[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
Class_Descriptor cd_S20509C4 = {  "S20509C4", // class name
  0,0,//no base classes
  &(vtc_S20509C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20509C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20509C4),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  S20509C3  : S20509C4 {
  virtual void  v4(); // _ZN8S20509C32v4Ev
  ~S20509C3(); // tgen
  S20509C3(); // tgen
};
//SIG(-1 S20509C3) C1{ BC2{ v2 v3 v4} v1}


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

static void Test_S20509C3()
{
  extern Class_Descriptor cd_S20509C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20509C3, buf);
    S20509C3 *dp, &lv = *(dp=new (buf) S20509C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20509C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20509C3)");
    check_base_class_offset(lv, (S20509C4*), 0, "S20509C3");
    test_class_info(&lv, &cd_S20509C3);
    dp->~S20509C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C3(Test_S20509C3, "S20509C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20509C3C1Ev();
extern void _ZN8S20509C3D1Ev();
Name_Map name_map_S20509C3[] = {
  NSPAIR(_ZN8S20509C3C1Ev),
  NSPAIR(_ZN8S20509C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
static Base_Class bases_S20509C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20509C3[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY vtc_S20509C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C3[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
Class_Descriptor cd_S20509C3 = {  "S20509C3", // class name
  bases_S20509C3, 1,
  &(vtc_S20509C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20509C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20509C3),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  S20509C5  {
  void *s20509c5f0[5];
  virtual void  v5(); // _ZN8S20509C52v5Ev
  virtual void  v6(); // _ZN8S20509C52v6Ev
  virtual void  v7(); // _ZN8S20509C52v7Ev
  virtual void  v8(); // _ZN8S20509C52v8Ev
  virtual void  v9(); // _ZN8S20509C52v9Ev
  virtual void  v10(); // _ZN8S20509C53v10Ev
  virtual void  v11(); // _ZN8S20509C53v11Ev
  virtual void  v12(); // _ZN8S20509C53v12Ev
  virtual void  v13(); // _ZN8S20509C53v13Ev
  ~S20509C5(); // tgen
  S20509C5(); // tgen
};
//SIG(-1 S20509C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S20509C5 ::v5(){vfunc_called(this, "_ZN8S20509C52v5Ev");}
void  S20509C5 ::v6(){vfunc_called(this, "_ZN8S20509C52v6Ev");}
void  S20509C5 ::v7(){vfunc_called(this, "_ZN8S20509C52v7Ev");}
void  S20509C5 ::v8(){vfunc_called(this, "_ZN8S20509C52v8Ev");}
void  S20509C5 ::v9(){vfunc_called(this, "_ZN8S20509C52v9Ev");}
void  S20509C5 ::v10(){vfunc_called(this, "_ZN8S20509C53v10Ev");}
void  S20509C5 ::v11(){vfunc_called(this, "_ZN8S20509C53v11Ev");}
void  S20509C5 ::v12(){vfunc_called(this, "_ZN8S20509C53v12Ev");}
void  S20509C5 ::v13(){vfunc_called(this, "_ZN8S20509C53v13Ev");}
S20509C5 ::~S20509C5(){ note_dtor("S20509C5", this);} // tgen
S20509C5 ::S20509C5(){ note_ctor("S20509C5", this);} // tgen

static void Test_S20509C5()
{
  extern Class_Descriptor cd_S20509C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20509C5, buf);
    S20509C5 *dp, &lv = *(dp=new (buf) S20509C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20509C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20509C5)");
    check_field_offset(lv, s20509c5f0, ABISELECT(8,4), "S20509C5.s20509c5f0");
    test_class_info(&lv, &cd_S20509C5);
    dp->~S20509C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C5(Test_S20509C5, "S20509C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20509C5C1Ev();
extern void _ZN8S20509C5D1Ev();
Name_Map name_map_S20509C5[] = {
  NSPAIR(_ZN8S20509C5C1Ev),
  NSPAIR(_ZN8S20509C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20509C5[];
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY vtc_S20509C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C5[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
Class_Descriptor cd_S20509C5 = {  "S20509C5", // class name
  0,0,//no base classes
  &(vtc_S20509C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20509C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20509C5),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  S20509C6  : virtual S20509C4 , virtual S20509C3 {
  void *s20509c6f0;
  short s20509c6f1;
  int s20509c6f2;
  ~S20509C6(); // tgen
  S20509C6(); // tgen
};
//SIG(-1 S20509C6) C1{ VBC2{ v1 v2 v3} VBC3{ BC2 v4} Fp Fs Fi}


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

static void Test_S20509C6()
{
  extern Class_Descriptor cd_S20509C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20509C6, buf);
    S20509C6 *dp, &lv = *(dp=new (buf) S20509C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20509C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20509C6)");
    /*is_ambiguous_... S20509C6::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*), 0, "S20509C6");
    check_base_class_offset(lv, (S20509C4*)(S20509C3*), ABISELECT(24,16), "S20509C6");
    check_base_class_offset(lv, (S20509C3*), ABISELECT(24,16), "S20509C6");
    check_field_offset(lv, s20509c6f0, ABISELECT(8,4), "S20509C6.s20509c6f0");
    check_field_offset(lv, s20509c6f1, ABISELECT(16,8), "S20509C6.s20509c6f1");
    check_field_offset(lv, s20509c6f2, ABISELECT(20,12), "S20509C6.s20509c6f2");
    test_class_info(&lv, &cd_S20509C6);
    dp->~S20509C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C6(Test_S20509C6, "S20509C6", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20509C6C1Ev();
extern void _ZN8S20509C6D1Ev();
Name_Map name_map_S20509C6[] = {
  NSPAIR(_ZN8S20509C6C1Ev),
  NSPAIR(_ZN8S20509C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
static Base_Class bases_S20509C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20509C6[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY vtc_S20509C6[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20509C6[];
static  VTT_ENTRY vtt_S20509C6[] = {
  {&(_ZTV8S20509C6[7]),  7,20},
  {&(_ZTV8S20509C6[7]),  7,20},
  {&(_ZTV8S20509C6[16]),  16,20},
};
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
Class_Descriptor cd_S20509C6 = {  "S20509C6", // class name
  bases_S20509C6, 3,
  &(vtc_S20509C6[0]), // expected_vtbl_contents
  &(vtt_S20509C6[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20509C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20509C6),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20509C6),3, //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  S20509C2  : virtual S20509C3 , S20509C5 , S20509C6 {
  void *s20509c2f0;
  virtual void  v14(); // _ZN8S20509C23v14Ev
  virtual void  v15(); // _ZN8S20509C23v15Ev
  ~S20509C2(); // tgen
  S20509C2(); // tgen
};
//SIG(-1 S20509C2) C1{ VBC2{ BC3{ v3 v4 v5} v6} BC4{ v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[5]} BC5{ VBC3 VBC2 Fp Fs Fi} v1 v2 Fp}


void  S20509C2 ::v14(){vfunc_called(this, "_ZN8S20509C23v14Ev");}
void  S20509C2 ::v15(){vfunc_called(this, "_ZN8S20509C23v15Ev");}
S20509C2 ::~S20509C2(){ note_dtor("S20509C2", this);} // tgen
S20509C2 ::S20509C2(){ note_ctor("S20509C2", this);} // tgen

static void Test_S20509C2()
{
  extern Class_Descriptor cd_S20509C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20509C2, buf);
    S20509C2 *dp, &lv = *(dp=new (buf) S20509C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20509C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20509C2)");
    check_base_class_offset(lv, (S20509C4*)(S20509C3*), ABISELECT(80,44), "S20509C2");
    check_base_class_offset(lv, (S20509C3*), ABISELECT(80,44), "S20509C2");
    check_base_class_offset(lv, (S20509C3*)(S20509C6*), ABISELECT(80,44), "S20509C2");
    check_base_class_offset(lv, (S20509C5*), 0, "S20509C2");
    /*is_ambiguous_... S20509C6::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*), ABISELECT(48,24), "S20509C2");
    check_base_class_offset(lv, (S20509C6*), ABISELECT(48,24), "S20509C2");
    check_field_offset(lv, s20509c2f0, ABISELECT(72,40), "S20509C2.s20509c2f0");
    test_class_info(&lv, &cd_S20509C2);
    dp->~S20509C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C2(Test_S20509C2, "S20509C2", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20509C2C1Ev();
extern void _ZN8S20509C2D1Ev();
Name_Map name_map_S20509C2[] = {
  NSPAIR(_ZN8S20509C2C1Ev),
  NSPAIR(_ZN8S20509C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
static Base_Class bases_S20509C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(80,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20509C4,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20509C6,    ABISELECT(48,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S20509C2[];
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY vtc_S20509C2[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20509C2[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C2[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C6__8S20509C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
static  VTT_ENTRY vtt_S20509C2[] = {
  {&(_ZTV8S20509C2[4]),  4,35},
  {&(_tg__ZTV8S20509C6__8S20509C2[7]),  7,10},
  {&(_tg__ZTV8S20509C6__8S20509C2[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C6__8S20509C2[6]),  6,10},
  {&(_ZTV8S20509C2[31]),  31,35},
  {&(_ZTV8S20509C2[22]),  22,35},
  {&(_ZTV8S20509C2[22]),  22,35},
};
extern VTBL_ENTRY _ZTI8S20509C2[];
extern  VTBL_ENTRY _ZTV8S20509C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C2[];
Class_Descriptor cd_S20509C2 = {  "S20509C2", // class name
  bases_S20509C2, 5,
  &(vtc_S20509C2[0]), // expected_vtbl_contents
  &(vtt_S20509C2[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20509C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20509C2),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20509C2),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20509C9  : virtual S20509C4 , virtual S20509C6 , S20509C3 {
  short s20509c9f0;
  long double s20509c9f1;
  virtual void  v16(); // _ZN8S20509C93v16Ev
  virtual void  v17(); // _ZN8S20509C93v17Ev
  virtual void  v18(); // _ZN8S20509C93v18Ev
  virtual void  v19(); // _ZN8S20509C93v19Ev
  ~S20509C9(); // tgen
  S20509C9(); // tgen
};
//SIG(-1 S20509C9) C1{ VBC2{ v5 v6 v7} VBC3{ VBC2 VBC4{ BC2 v8} Fp Fs Fi} BC4 v1 v2 v3 v4 Fs FD}


void  S20509C9 ::v16(){vfunc_called(this, "_ZN8S20509C93v16Ev");}
void  S20509C9 ::v17(){vfunc_called(this, "_ZN8S20509C93v17Ev");}
void  S20509C9 ::v18(){vfunc_called(this, "_ZN8S20509C93v18Ev");}
void  S20509C9 ::v19(){vfunc_called(this, "_ZN8S20509C93v19Ev");}
S20509C9 ::~S20509C9(){ note_dtor("S20509C9", this);} // tgen
S20509C9 ::S20509C9(){ note_ctor("S20509C9", this);} // tgen

static void Test_S20509C9()
{
  extern Class_Descriptor cd_S20509C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S20509C9, buf);
    S20509C9 *dp, &lv = *(dp=new (buf) S20509C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20509C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20509C9)");
    /*is_ambiguous_... S20509C9::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*), ABISELECT(32,20), "S20509C9");
    /*is_ambiguous_... S20509C6::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*), ABISELECT(32,20), "S20509C9");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*), ABISELECT(56,36), "S20509C9");
    check_base_class_offset(lv, (S20509C3*)(S20509C6*), ABISELECT(56,36), "S20509C9");
    check_base_class_offset(lv, (S20509C6*), ABISELECT(32,20), "S20509C9");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*), 0, "S20509C9");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*), 0, "S20509C9");
    check_field_offset(lv, s20509c9f0, ABISELECT(8,4), "S20509C9.s20509c9f0");
    check_field_offset(lv, s20509c9f1, ABISELECT(16,8), "S20509C9.s20509c9f1");
    test_class_info(&lv, &cd_S20509C9);
    dp->~S20509C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C9(Test_S20509C9, "S20509C9", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20509C9C1Ev();
extern void _ZN8S20509C9D1Ev();
Name_Map name_map_S20509C9[] = {
  NSPAIR(_ZN8S20509C9C1Ev),
  NSPAIR(_ZN8S20509C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
static Base_Class bases_S20509C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(56,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20509C6,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20509C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20509C9[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY vtc_S20509C9[] = {
  ABISELECT(56,36),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20509C9[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C9[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C6__8S20509C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
static  VTT_ENTRY vtt_S20509C9[] = {
  {&(_ZTV8S20509C9[5]),  5,33},
  {&(_ZTV8S20509C9[20]),  20,33},
  {&(_ZTV8S20509C9[20]),  20,33},
  {&(_ZTV8S20509C9[29]),  29,33},
  {&(_tg__ZTV8S20509C6__8S20509C9[7]),  7,10},
  {&(_tg__ZTV8S20509C6__8S20509C9[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C6__8S20509C9[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20509C9[];
extern  VTBL_ENTRY _ZTV8S20509C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C9[];
Class_Descriptor cd_S20509C9 = {  "S20509C9", // class name
  bases_S20509C9, 6,
  &(vtc_S20509C9[0]), // expected_vtbl_contents
  &(vtt_S20509C9[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20509C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20509C9),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20509C9),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20509C8  : virtual S20509C4 , virtual S20509C2 , S20509C3 , S20509C9 , virtual S20509C5 {
  __tsi64 s20509c8f0[10];
  int s20509c8f1;
  __tsi64 s20509c8f2;
  virtual void  v20(); // _ZN8S20509C83v20Ev
  virtual void  v21(); // _ZN8S20509C83v21Ev
  ~S20509C8(); // tgen
  S20509C8(); // tgen
};
//SIG(-1 S20509C8) C1{ VBC2{ v3 v4 v5} VBC3{ VBC4{ BC2 v6} BC5{ v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[5]} BC6{ VBC2 VBC4 Fp Fs Fi} v16 v17 Fp} BC4 BC7{ VBC2 VBC6 BC4 v18 v19 v20 v21 Fs FD} VBC5 v1 v2 FL[10] Fi FL}


void  S20509C8 ::v20(){vfunc_called(this, "_ZN8S20509C83v20Ev");}
void  S20509C8 ::v21(){vfunc_called(this, "_ZN8S20509C83v21Ev");}
S20509C8 ::~S20509C8(){ note_dtor("S20509C8", this);} // tgen
S20509C8 ::S20509C8(){ note_ctor("S20509C8", this);} // tgen

static void Test_S20509C8()
{
  extern Class_Descriptor cd_S20509C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,52)];
    init_test(&cd_S20509C8, buf);
    S20509C8 *dp, &lv = *(dp=new (buf) S20509C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,204), "sizeof(S20509C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20509C8)");
    /*is_ambiguous_... S20509C8::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*), ABISELECT(192,140), "S20509C8");
    /*is_ambiguous_... S20509C6::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*)(S20509C2*), ABISELECT(192,140), "S20509C8");
    /*is_ambiguous_... S20509C9::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C9*), ABISELECT(192,140), "S20509C8");
    /*is_ambiguous_... S20509C8::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*), ABISELECT(192,140), "S20509C8");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*), ABISELECT(224,160), "S20509C8");
    check_base_class_offset(lv, (S20509C3*)(S20509C2*), ABISELECT(224,160), "S20509C8");
    check_base_class_offset(lv, (S20509C3*)(S20509C6*)(S20509C2*), ABISELECT(224,160), "S20509C8");
    /*is_ambiguous_... S20509C8::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C6*), ABISELECT(224,160), "S20509C8");
    check_base_class_offset(lv, (S20509C5*)(S20509C2*), ABISELECT(144,116), "S20509C8");
    check_base_class_offset(lv, (S20509C6*)(S20509C2*), ABISELECT(192,140), "S20509C8");
    check_base_class_offset(lv, (S20509C2*), ABISELECT(144,116), "S20509C8");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*), 0, "S20509C8");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*), 0, "S20509C8");
    check_base_class_offset(lv, (S20509C6*)(S20509C9*), ABISELECT(232,164), "S20509C8");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C9*), ABISELECT(16,4), "S20509C8");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C9*), ABISELECT(16,4), "S20509C8");
    check_base_class_offset(lv, (S20509C9*), ABISELECT(16,4), "S20509C8");
    /*is_ambiguous_... S20509C8::S20509C5 */ AMB_check_base_class_offset(lv, (S20509C5*), ABISELECT(256,180), "S20509C8");
    check_field_offset(lv, s20509c8f0, ABISELECT(48,24), "S20509C8.s20509c8f0");
    check_field_offset(lv, s20509c8f1, ABISELECT(128,104), "S20509C8.s20509c8f1");
    check_field_offset(lv, s20509c8f2, ABISELECT(136,108), "S20509C8.s20509c8f2");
    test_class_info(&lv, &cd_S20509C8);
    dp->~S20509C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C8(Test_S20509C8, "S20509C8", ABISELECT(304,204));

#else // __cplusplus

extern void _ZN8S20509C8C1Ev();
extern void _ZN8S20509C8D1Ev();
Name_Map name_map_S20509C8[] = {
  NSPAIR(_ZN8S20509C8C1Ev),
  NSPAIR(_ZN8S20509C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C2;
extern VTBL_ENTRY _ZTI8S20509C2[];
extern  VTBL_ENTRY _ZTV8S20509C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C2[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C9;
extern VTBL_ENTRY _ZTI8S20509C9[];
extern  VTBL_ENTRY _ZTV8S20509C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C9[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
static Base_Class bases_S20509C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    ABISELECT(192,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C4,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(224,160), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //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_S20509C5,    ABISELECT(144,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20509C6,    ABISELECT(192,140), //bcp->offset
    52, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20509C2,    ABISELECT(144,116), //bcp->offset
    26, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S20509C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20509C6,    ABISELECT(232,164), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20509C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20509C3,    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
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20509C9,    ABISELECT(16,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20509C5,    ABISELECT(256,180), //bcp->offset
    82, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20509C8[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY vtc_S20509C8[] = {
  ABISELECT(256,180),
  ABISELECT(232,164),
  ABISELECT(224,160),
  ABISELECT(144,116),
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-180),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20509C8[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C9__8S20509C8[] = {
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C9__8S20509C8[] = {
  0,
  0,
  0,
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C9__8S20509C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C9__8S20509C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__8S20509C8[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__8S20509C8[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C68S20509C2__8S20509C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C2__8S20509C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C2__8S20509C8[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A1__8S20509C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C6__A1__8S20509C8[] = {
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C6__A1__8S20509C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
static  VTT_ENTRY vtt_S20509C8[] = {
  {&(_ZTV8S20509C8[7]),  7,102},
  {&(_tg__ZTV8S20509C9__8S20509C8[5]),  5,13},
  {&(_tg__ZTV8S20509C4__8S20509C9__8S20509C8[5]),  5,8},
  {&(_tg__ZTV8S20509C6__8S20509C9__8S20509C8[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C9__8S20509C8[6]),  6,10},
  {&(_ZTV8S20509C8[59]),  59,102},
  {&(_ZTV8S20509C8[41]),  41,102},
  {&(_ZTV8S20509C8[68]),  68,102},
  {&(_ZTV8S20509C8[59]),  59,102},
  {&(_ZTV8S20509C8[18]),  18,102},
  {&(_ZTV8S20509C8[79]),  79,102},
  {&(_ZTV8S20509C8[93]),  93,102},
  {&(_tg__ZTV8S20509C2__8S20509C8[4]),  4,15},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C8[7]),  7,10},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C8[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C68S20509C2__8S20509C8[6]),  6,10},
  {&(_tg__ZTV8S20509C3__8S20509C2__8S20509C8[6]),  6,10},
  {&(_tg__ZTV8S20509C6__8S20509C2__8S20509C8[7]),  7,10},
  {&(_tg__ZTV8S20509C6__8S20509C2__8S20509C8[7]),  7,10},
  {&(_tg__ZTV8S20509C6__A1__8S20509C8[7]),  7,10},
  {&(_tg__ZTV8S20509C4__8S20509C6__A1__8S20509C8[5]),  5,8},
  {&(_tg__ZTV8S20509C3__8S20509C6__A1__8S20509C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20509C8[];
extern  VTBL_ENTRY _ZTV8S20509C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C8[];
Class_Descriptor cd_S20509C8 = {  "S20509C8", // class name
  bases_S20509C8, 13,
  &(vtc_S20509C8[0]), // expected_vtbl_contents
  &(vtt_S20509C8[0]), // expected_vtt_contents
  ABISELECT(304,204), // object size
  NSPAIRA(_ZTI8S20509C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20509C8),102, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20509C8),22, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20509C7  : virtual S20509C3 , virtual S20509C4 , S20509C6 , virtual S20509C8 {
  ::S7639C14 s20509c7f0;
  long double s20509c7f1;
  virtual void  v22(); // _ZN8S20509C73v22Ev
  virtual void  v23(); // _ZN8S20509C73v23Ev
  virtual void  v24(); // _ZN8S20509C73v24Ev
  virtual void  v25(); // _ZN8S20509C73v25Ev
  ~S20509C7(); // tgen
  S20509C7(); // tgen
};
//SIG(-1 S20509C7) C1{ VBC2{ BC3{ v5 v6 v7} v8} VBC3 BC4{ VBC3 VBC2 Fp Fs Fi} VBC5{ VBC3 VBC6{ VBC2 BC7{ v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5]} BC4 v18 v19 Fp} BC2 BC8{ VBC3 VBC4 BC2 v20 v21 v22 v23 Fs FD} VBC7 v24 v25 FL[10] Fi FL} v1 v2 v3 v4 FU9{ m FL Fl[2]} FD}


void  S20509C7 ::v22(){vfunc_called(this, "_ZN8S20509C73v22Ev");}
void  S20509C7 ::v23(){vfunc_called(this, "_ZN8S20509C73v23Ev");}
void  S20509C7 ::v24(){vfunc_called(this, "_ZN8S20509C73v24Ev");}
void  S20509C7 ::v25(){vfunc_called(this, "_ZN8S20509C73v25Ev");}
S20509C7 ::~S20509C7(){ note_dtor("S20509C7", this);} // tgen
S20509C7 ::S20509C7(){ note_ctor("S20509C7", this);} // tgen

static void Test_S20509C7()
{
  extern Class_Descriptor cd_S20509C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,61)];
    init_test(&cd_S20509C7, buf);
    S20509C7 *dp, &lv = *(dp=new (buf) S20509C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,240), "sizeof(S20509C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20509C7)");
    /*is_ambiguous_... S20509C7::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*), ABISELECT(64,36), "S20509C7");
    /*is_ambiguous_... S20509C7::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*), ABISELECT(64,36), "S20509C7");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C6*), ABISELECT(64,36), "S20509C7");
    check_base_class_offset(lv, (S20509C3*)(S20509C2*), ABISELECT(64,36), "S20509C7");
    check_base_class_offset(lv, (S20509C3*)(S20509C6*)(S20509C2*), ABISELECT(64,36), "S20509C7");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C6*), ABISELECT(64,36), "S20509C7");
    /*is_ambiguous_... S20509C7::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*), 0, "S20509C7");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*), 0, "S20509C7");
    /*is_ambiguous_... S20509C8::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C8*), 0, "S20509C7");
    /*is_ambiguous_... S20509C6::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*)(S20509C2*), 0, "S20509C7");
    /*is_ambiguous_... S20509C9::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C9*)(S20509C8*), 0, "S20509C7");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*), 0, "S20509C7");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C6*), 0, "S20509C7");
    check_base_class_offset(lv, (S20509C5*)(S20509C2*), ABISELECT(224,156), "S20509C7");
    check_base_class_offset(lv, (S20509C6*)(S20509C2*), ABISELECT(272,180), "S20509C7");
    check_base_class_offset(lv, (S20509C2*)(S20509C8*), ABISELECT(224,156), "S20509C7");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C8*), ABISELECT(80,40), "S20509C7");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C8*), ABISELECT(80,40), "S20509C7");
    check_base_class_offset(lv, (S20509C6*)(S20509C9*)(S20509C8*), ABISELECT(304,200), "S20509C7");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C9*)(S20509C8*), ABISELECT(96,44), "S20509C7");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C9*)(S20509C8*), ABISELECT(96,44), "S20509C7");
    check_base_class_offset(lv, (S20509C9*)(S20509C8*), ABISELECT(96,44), "S20509C7");
    /*is_ambiguous_... S20509C8::S20509C5 */ AMB_check_base_class_offset(lv, (S20509C5*)(S20509C8*), ABISELECT(328,216), "S20509C7");
    check_base_class_offset(lv, (S20509C8*), ABISELECT(80,40), "S20509C7");
    check_field_offset(lv, s20509c7f0, ABISELECT(24,16), "S20509C7.s20509c7f0");
    check_field_offset(lv, s20509c7f1, ABISELECT(48,24), "S20509C7.s20509c7f1");
    test_class_info(&lv, &cd_S20509C7);
    dp->~S20509C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C7(Test_S20509C7, "S20509C7", ABISELECT(384,240));

#else // __cplusplus

extern void _ZN8S20509C7C1Ev();
extern void _ZN8S20509C7D1Ev();
Name_Map name_map_S20509C7[] = {
  NSPAIR(_ZN8S20509C7C1Ev),
  NSPAIR(_ZN8S20509C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C2;
extern VTBL_ENTRY _ZTI8S20509C2[];
extern  VTBL_ENTRY _ZTV8S20509C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C2[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C9;
extern VTBL_ENTRY _ZTI8S20509C9[];
extern  VTBL_ENTRY _ZTV8S20509C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C9[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C8;
extern VTBL_ENTRY _ZTI8S20509C8[];
extern  VTBL_ENTRY _ZTV8S20509C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C8[];
static Base_Class bases_S20509C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C6,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20509C5,    ABISELECT(224,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20509C6,    ABISELECT(272,180), //bcp->offset
    90, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20509C2,    ABISELECT(224,156), //bcp->offset
    64, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20509C4,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20509C6,    ABISELECT(304,200), //bcp->offset
    100, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20509C4,    ABISELECT(96,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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(96,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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20509C9,    ABISELECT(96,44), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20509C5,    ABISELECT(328,216), //bcp->offset
    110, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20509C8,    ABISELECT(80,40), //bcp->offset
    28, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20509C7[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C73v22Ev();
extern void _ZN8S20509C73v23Ev();
extern void _ZN8S20509C73v24Ev();
extern void _ZN8S20509C73v25Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY vtc_S20509C7[] = {
  ABISELECT(328,216),
  ABISELECT(304,200),
  ABISELECT(224,156),
  ABISELECT(80,40),
  ABISELECT(64,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v25Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,176),
  ABISELECT(224,160),
  ABISELECT(-16,-4),
  ABISELECT(144,116),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
  ABISELECT(-32,-8),
  ABISELECT(208,156),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-160,-120),
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20509C7[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A__8S20509C7[] = {
  ABISELECT(64,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C6__A__8S20509C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C8__8S20509C7[] = {
  ABISELECT(248,176),
  ABISELECT(224,160),
  ABISELECT(-16,-4),
  ABISELECT(144,116),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C98S20509C8__8S20509C7[] = {
  ABISELECT(-32,-8),
  ABISELECT(208,156),
  ABISELECT(-96,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C98S20509C8__8S20509C7[] = {
  0,
  0,
  0,
  ABISELECT(96,44),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C98S20509C8__8S20509C7[] = {
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C98S20509C8__8S20509C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,8),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C8__8S20509C7[] = {
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__8S20509C8__8S20509C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  ABISELECT(-160,-120),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C8__8S20509C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__8S20509C8__8S20509C7[] = {
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C9__8S20509C8__8S20509C7[] = {
  ABISELECT(-32,-8),
  ABISELECT(208,156),
  ABISELECT(-96,-44),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A1__8S20509C8__8S20509C7[] = {
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C5__A1__8S20509C8__8S20509C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-176),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__8S20509C7[] = {
  ABISELECT(-224,-156),
  ABISELECT(-160,-120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__A1__8S20509C7[] = {
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C68S20509C2__A1__8S20509C7[] = {
  0,
  0,
  0,
  ABISELECT(272,180),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C68S20509C2__A1__8S20509C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C2__8S20509C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,120),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C2__8S20509C7[] = {
  ABISELECT(-208,-144),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__A1__8S20509C2__8S20509C7[] = {
  0,
  0,
  0,
  ABISELECT(224,156),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A2__8S20509C7[] = {
  ABISELECT(-240,-164),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C6__A2__8S20509C7[] = {
  0,
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C6__A2__8S20509C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(240,164),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
static  VTT_ENTRY vtt_S20509C7[] = {
  {&(_ZTV8S20509C7[11]),  11,130},
  {&(_tg__ZTV8S20509C6__A__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C6__A__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C6__A__8S20509C7[6]),  6,10},
  {&(_ZTV8S20509C7[24]),  24,130},
  {&(_ZTV8S20509C7[11]),  11,130},
  {&(_ZTV8S20509C7[45]),  45,130},
  {&(_ZTV8S20509C7[79]),  79,130},
  {&(_ZTV8S20509C7[97]),  97,130},
  {&(_ZTV8S20509C7[56]),  56,130},
  {&(_ZTV8S20509C7[107]),  107,130},
  {&(_ZTV8S20509C7[121]),  121,130},
  {&(_tg__ZTV8S20509C8__8S20509C7[7]),  7,13},
  {&(_tg__ZTV8S20509C98S20509C8__8S20509C7[5]),  5,13},
  {&(_tg__ZTV8S20509C4__8S20509C98S20509C8__8S20509C7[5]),  5,8},
  {&(_tg__ZTV8S20509C6__8S20509C98S20509C8__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C98S20509C8__8S20509C7[6]),  6,10},
  {&(_tg__ZTV8S20509C4__8S20509C8__8S20509C7[5]),  5,8},
  {&(_tg__ZTV8S20509C2__8S20509C8__8S20509C7[15]),  15,26},
  {&(_tg__ZTV8S20509C3__8S20509C8__8S20509C7[6]),  6,10},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C8__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C9__8S20509C8__8S20509C7[5]),  5,13},
  {&(_tg__ZTV8S20509C6__A1__8S20509C8__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C5__A1__8S20509C8__8S20509C7[11]),  11,20},
  {&(_tg__ZTV8S20509C2__8S20509C7[4]),  4,15},
  {&(_tg__ZTV8S20509C68S20509C2__A1__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C4__8S20509C68S20509C2__A1__8S20509C7[5]),  5,8},
  {&(_tg__ZTV8S20509C3__8S20509C68S20509C2__A1__8S20509C7[6]),  6,10},
  {&(_tg__ZTV8S20509C3__8S20509C2__8S20509C7[6]),  6,10},
  {&(_tg__ZTV8S20509C6__8S20509C2__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C4__A1__8S20509C2__8S20509C7[5]),  5,8},
  {&(_tg__ZTV8S20509C6__A2__8S20509C7[7]),  7,10},
  {&(_tg__ZTV8S20509C4__8S20509C6__A2__8S20509C7[5]),  5,8},
  {&(_tg__ZTV8S20509C3__8S20509C6__A2__8S20509C7[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20509C7[];
extern  VTBL_ENTRY _ZTV8S20509C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C7[];
Class_Descriptor cd_S20509C7 = {  "S20509C7", // class name
  bases_S20509C7, 15,
  &(vtc_S20509C7[0]), // expected_vtbl_contents
  &(vtt_S20509C7[0]), // expected_vtt_contents
  ABISELECT(384,240), // object size
  NSPAIRA(_ZTI8S20509C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20509C7),130, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20509C7),34, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20509C12  {
  virtual  ~S20509C12(); // _ZN9S20509C12D1Ev
  virtual void  v26(); // _ZN9S20509C123v26Ev
  virtual void  v27(); // _ZN9S20509C123v27Ev
  virtual void  v28(); // _ZN9S20509C123v28Ev
  virtual void  v29(); // _ZN9S20509C123v29Ev
  S20509C12(); // tgen
};
//SIG(-1 S20509C12) C1{ vd v1 v2 v3 v4}


 S20509C12 ::~S20509C12(){ note_dtor("S20509C12", this);}
void  S20509C12 ::v26(){vfunc_called(this, "_ZN9S20509C123v26Ev");}
void  S20509C12 ::v27(){vfunc_called(this, "_ZN9S20509C123v27Ev");}
void  S20509C12 ::v28(){vfunc_called(this, "_ZN9S20509C123v28Ev");}
void  S20509C12 ::v29(){vfunc_called(this, "_ZN9S20509C123v29Ev");}
S20509C12 ::S20509C12(){ note_ctor("S20509C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S20509C12C1Ev();
extern void _ZN9S20509C12D1Ev();
Name_Map name_map_S20509C12[] = {
  NSPAIR(_ZN9S20509C12C1Ev),
  NSPAIR(_ZN9S20509C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20509C12[];
extern void _ZN9S20509C12D1Ev();
extern void _ZN9S20509C12D0Ev();
extern void _ZN9S20509C123v26Ev();
extern void _ZN9S20509C123v27Ev();
extern void _ZN9S20509C123v28Ev();
extern void _ZN9S20509C123v29Ev();
static  VTBL_ENTRY vtc_S20509C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20509C12[0]),
  (VTBL_ENTRY)&_ZN9S20509C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20509C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v26Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v27Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v28Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v29Ev,
};
extern VTBL_ENTRY _ZTI9S20509C12[];
extern  VTBL_ENTRY _ZTV9S20509C12[];
Class_Descriptor cd_S20509C12 = {  "S20509C12", // class name
  0,0,//no base classes
  &(vtc_S20509C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20509C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20509C12),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  S20509C11  : virtual S20509C8 , S20509C12 , virtual S20509C9 {
  ::S7511C9_nt s20509c11f0;
  virtual void  v30(); // _ZN9S20509C113v30Ev
  virtual void  v31(); // _ZN9S20509C113v31Ev
  ~S20509C11(); // tgen
  S20509C11(); // tgen
};
//SIG(-1 S20509C11) C1{ VBC2{ VBC3{ v3 v4 v5} VBC4{ VBC5{ BC3 v6} BC6{ v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[5]} BC7{ VBC3 VBC5 Fp Fs Fi} v16 v17 Fp} BC5 BC8{ VBC3 VBC7 BC5 v18 v19 v20 v21 Fs FD} VBC6 v22 v23 FL[10] Fi FL} BC9{ vd v24 v25 v26 v27} VBC8 v1 v2 FC10{}}


void  S20509C11 ::v30(){vfunc_called(this, "_ZN9S20509C113v30Ev");}
void  S20509C11 ::v31(){vfunc_called(this, "_ZN9S20509C113v31Ev");}
S20509C11 ::~S20509C11(){ note_dtor("S20509C11", this);} // tgen
S20509C11 ::S20509C11(){ note_ctor("S20509C11", this);} // tgen

static void Test_S20509C11()
{
  extern Class_Descriptor cd_S20509C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,59)];
    init_test(&cd_S20509C11, buf);
    S20509C11 *dp, &lv = *(dp=new (buf) S20509C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,232), "sizeof(S20509C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20509C11)");
    /*is_ambiguous_... S20509C8::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C8*), ABISELECT(208,148), "S20509C11");
    /*is_ambiguous_... S20509C6::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*)(S20509C2*), ABISELECT(208,148), "S20509C11");
    /*is_ambiguous_... S20509C9::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C9*)(S20509C8*), ABISELECT(208,148), "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*), ABISELECT(208,148), "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C9*), ABISELECT(208,148), "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*), ABISELECT(240,168), "S20509C11");
    check_base_class_offset(lv, (S20509C3*)(S20509C2*), ABISELECT(240,168), "S20509C11");
    check_base_class_offset(lv, (S20509C3*)(S20509C6*)(S20509C2*), ABISELECT(240,168), "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C6*), ABISELECT(240,168), "S20509C11");
    check_base_class_offset(lv, (S20509C5*)(S20509C2*), ABISELECT(160,124), "S20509C11");
    check_base_class_offset(lv, (S20509C6*)(S20509C2*), ABISELECT(208,148), "S20509C11");
    check_base_class_offset(lv, (S20509C2*)(S20509C8*), ABISELECT(160,124), "S20509C11");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C8*), ABISELECT(16,8), "S20509C11");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C8*), ABISELECT(16,8), "S20509C11");
    check_base_class_offset(lv, (S20509C6*)(S20509C9*)(S20509C8*), ABISELECT(248,172), "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C6*)(S20509C9*), ABISELECT(248,172), "S20509C11");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C9*)(S20509C8*), ABISELECT(32,12), "S20509C11");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C9*)(S20509C8*), ABISELECT(32,12), "S20509C11");
    check_base_class_offset(lv, (S20509C9*)(S20509C8*), ABISELECT(32,12), "S20509C11");
    /*is_ambiguous_... S20509C8::S20509C5 */ AMB_check_base_class_offset(lv, (S20509C5*)(S20509C8*), ABISELECT(272,188), "S20509C11");
    check_base_class_offset(lv, (S20509C8*), ABISELECT(16,8), "S20509C11");
    check_base_class_offset(lv, (S20509C12*), 0, "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C9*), ABISELECT(320,212), "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C9*), ABISELECT(320,212), "S20509C11");
    /*is_ambiguous_... S20509C11::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C9*), ABISELECT(320,212), "S20509C11");
    check_field_offset(lv, s20509c11f0, ABISELECT(8,4), "S20509C11.s20509c11f0");
    test_class_info(&lv, &cd_S20509C11);
    dp->~S20509C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C11(Test_S20509C11, "S20509C11", ABISELECT(352,232));

#else // __cplusplus

extern void _ZN9S20509C11C1Ev();
extern void _ZN9S20509C11D1Ev();
Name_Map name_map_S20509C11[] = {
  NSPAIR(_ZN9S20509C11C1Ev),
  NSPAIR(_ZN9S20509C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C2;
extern VTBL_ENTRY _ZTI8S20509C2[];
extern  VTBL_ENTRY _ZTV8S20509C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C2[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C9;
extern VTBL_ENTRY _ZTI8S20509C9[];
extern  VTBL_ENTRY _ZTV8S20509C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C9[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C8;
extern VTBL_ENTRY _ZTI8S20509C8[];
extern  VTBL_ENTRY _ZTV8S20509C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C8[];
extern Class_Descriptor cd_S20509C12;
extern VTBL_ENTRY _ZTI9S20509C12[];
extern  VTBL_ENTRY _ZTV9S20509C12[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C9;
extern VTBL_ENTRY _ZTI8S20509C9[];
extern  VTBL_ENTRY _ZTV8S20509C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C9[];
static Base_Class bases_S20509C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    ABISELECT(208,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20509C4,    ABISELECT(240,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(240,168), //bcp->offset
    89, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20509C5,    ABISELECT(160,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20509C6,    ABISELECT(208,148), //bcp->offset
    79, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20509C2,    ABISELECT(160,124), //bcp->offset
    53, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20509C4,    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
    9, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20509C3,    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
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20509C6,    ABISELECT(248,172), //bcp->offset
    99, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20509C4,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20509C9,    ABISELECT(32,12), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20509C5,    ABISELECT(272,188), //bcp->offset
    109, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20509C8,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20509C4,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20509C9,    ABISELECT(320,212), //bcp->offset
    129, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20509C11[];
extern void _ZN9S20509C11D1Ev();
extern void _ZN9S20509C11D0Ev();
extern void _ZN9S20509C123v26Ev();
extern void _ZN9S20509C123v27Ev();
extern void _ZN9S20509C123v28Ev();
extern void _ZN9S20509C123v29Ev();
extern void _ZN9S20509C113v30Ev();
extern void _ZN9S20509C113v31Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY vtc_S20509C11[] = {
  ABISELECT(320,212),
  ABISELECT(272,188),
  ABISELECT(248,172),
  ABISELECT(240,168),
  ABISELECT(160,124),
  ABISELECT(208,148),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN9S20509C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20509C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v26Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v27Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v28Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v29Ev,
  (VTBL_ENTRY)&_ZN9S20509C113v30Ev,
  (VTBL_ENTRY)&_ZN9S20509C113v31Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(256,180),
  ABISELECT(232,164),
  ABISELECT(224,160),
  ABISELECT(144,116),
  ABISELECT(192,140),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-160,-124),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-208,-148),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-168),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-248,-172),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-72,-40),
  ABISELECT(-112,-64),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern VTBL_ENTRY _ZTV9S20509C11[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C8__9S20509C11[] = {
  ABISELECT(256,180),
  ABISELECT(232,164),
  ABISELECT(224,160),
  ABISELECT(144,116),
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C98S20509C8__9S20509C11[] = {
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C98S20509C8__9S20509C11[] = {
  0,
  0,
  0,
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C98S20509C8__9S20509C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C98S20509C8__9S20509C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__8S20509C8__9S20509C11[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__8S20509C8__9S20509C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C8__9S20509C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C9__8S20509C8__9S20509C11[] = {
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A1__8S20509C8__9S20509C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C5__A1__8S20509C8__9S20509C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-180),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__9S20509C11[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__9S20509C11[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C68S20509C2__9S20509C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C2__9S20509C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C2__9S20509C11[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A1__9S20509C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C6__A1__9S20509C11[] = {
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C6__A1__9S20509C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C9__A1__9S20509C11[] = {
  ABISELECT(-80,-44),
  ABISELECT(-72,-40),
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C9__A1__9S20509C11[] = {
  0,
  0,
  0,
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C9__A1__9S20509C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C9__A1__9S20509C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
static  VTT_ENTRY vtt_S20509C11[] = {
  {&(_ZTV9S20509C11[9]),  9,150},
  {&(_ZTV9S20509C11[34]),  34,150},
  {&(_ZTV9S20509C11[86]),  86,150},
  {&(_ZTV9S20509C11[68]),  68,150},
  {&(_ZTV9S20509C11[95]),  95,150},
  {&(_ZTV9S20509C11[86]),  86,150},
  {&(_ZTV9S20509C11[45]),  45,150},
  {&(_ZTV9S20509C11[106]),  106,150},
  {&(_ZTV9S20509C11[120]),  120,150},
  {&(_ZTV9S20509C11[142]),  142,150},
  {&(_tg__ZTV8S20509C8__9S20509C11[7]),  7,13},
  {&(_tg__ZTV8S20509C98S20509C8__9S20509C11[5]),  5,13},
  {&(_tg__ZTV8S20509C4__8S20509C98S20509C8__9S20509C11[5]),  5,8},
  {&(_tg__ZTV8S20509C6__8S20509C98S20509C8__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C98S20509C8__9S20509C11[6]),  6,10},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C8__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C2__8S20509C8__9S20509C11[15]),  15,26},
  {&(_tg__ZTV8S20509C3__8S20509C8__9S20509C11[6]),  6,10},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C8__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C9__8S20509C8__9S20509C11[5]),  5,13},
  {&(_tg__ZTV8S20509C6__A1__8S20509C8__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C5__A1__8S20509C8__9S20509C11[11]),  11,20},
  {&(_tg__ZTV8S20509C2__9S20509C11[4]),  4,15},
  {&(_tg__ZTV8S20509C68S20509C2__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C68S20509C2__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C68S20509C2__9S20509C11[6]),  6,10},
  {&(_tg__ZTV8S20509C3__8S20509C2__9S20509C11[6]),  6,10},
  {&(_tg__ZTV8S20509C6__8S20509C2__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C6__8S20509C2__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C6__A1__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C4__8S20509C6__A1__9S20509C11[5]),  5,8},
  {&(_tg__ZTV8S20509C3__8S20509C6__A1__9S20509C11[6]),  6,10},
  {&(_tg__ZTV8S20509C9__A1__9S20509C11[5]),  5,13},
  {&(_tg__ZTV8S20509C4__8S20509C9__A1__9S20509C11[5]),  5,8},
  {&(_tg__ZTV8S20509C6__8S20509C9__A1__9S20509C11[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C9__A1__9S20509C11[6]),  6,10},
};
extern VTBL_ENTRY _ZTI9S20509C11[];
extern  VTBL_ENTRY _ZTV9S20509C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20509C11[];
Class_Descriptor cd_S20509C11 = {  "S20509C11", // class name
  bases_S20509C11, 18,
  &(vtc_S20509C11[0]), // expected_vtbl_contents
  &(vtt_S20509C11[0]), // expected_vtt_contents
  ABISELECT(352,232), // object size
  NSPAIRA(_ZTI9S20509C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20509C11),150, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20509C11),36, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20509C1  : virtual S20509C2 , S20509C7 , virtual S20509C11 {
  char s20509c1f0:8;
  virtual  ~S20509C1(); // _ZN8S20509C1D2Ev
  S20509C1(); // tgen
};
//SIG(1 S20509C1) C1{ VBC2{ VBC3{ BC4{ v1 v2 v3} v4} BC5{ v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[5]} BC6{ VBC4 VBC3 Fp Fs Fi} v14 v15 Fp} BC7{ VBC3 VBC4 BC6 VBC8{ VBC4 VBC2 BC3 BC9{ VBC4 VBC6 BC3 v16 v17 v18 v19 Fs FD} VBC5 v20 v21 FL[10] Fi FL} v22 v23 v24 v25 FU10{ m FL Fl[2]} FD} VBC11{ VBC8 BC12{ vd v26 v27 v28 v29} VBC9 v30 v31 FC13{}} vd Fc:8}


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

static void Test_S20509C1()
{
  extern Class_Descriptor cd_S20509C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,69)];
    init_test(&cd_S20509C1, buf);
    S20509C1 *dp, &lv = *(dp=new (buf) S20509C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,272), "sizeof(S20509C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20509C1)");
    /*is_ambiguous_... S20509C1::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*), ABISELECT(152,84), "S20509C1");
    check_base_class_offset(lv, (S20509C3*)(S20509C2*), ABISELECT(152,84), "S20509C1");
    check_base_class_offset(lv, (S20509C3*)(S20509C6*)(S20509C2*), ABISELECT(152,84), "S20509C1");
    /*is_ambiguous_... S20509C7::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C7*), ABISELECT(152,84), "S20509C1");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C6*)(S20509C7*), ABISELECT(152,84), "S20509C1");
    /*is_ambiguous_... S20509C1::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C6*), ABISELECT(152,84), "S20509C1");
    check_base_class_offset(lv, (S20509C5*)(S20509C2*), ABISELECT(72,40), "S20509C1");
    /*is_ambiguous_... S20509C6::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*)(S20509C2*), ABISELECT(120,64), "S20509C1");
    /*is_ambiguous_... S20509C7::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C7*), ABISELECT(120,64), "S20509C1");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*)(S20509C7*), ABISELECT(120,64), "S20509C1");
    /*is_ambiguous_... S20509C8::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C8*), ABISELECT(120,64), "S20509C1");
    /*is_ambiguous_... S20509C9::S20509C4 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C9*)(S20509C8*), ABISELECT(120,64), "S20509C1");
    /*is_ambiguous_... S20509C1::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C6*), ABISELECT(120,64), "S20509C1");
    /*is_ambiguous_... S20509C1::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C9*), ABISELECT(120,64), "S20509C1");
    check_base_class_offset(lv, (S20509C6*)(S20509C2*), ABISELECT(120,64), "S20509C1");
    check_base_class_offset(lv, (S20509C2*), ABISELECT(72,40), "S20509C1");
    check_base_class_offset(lv, (S20509C2*)(S20509C8*), ABISELECT(72,40), "S20509C1");
    /*is_ambiguous_... S20509C7::S20509C6 */ AMB_check_base_class_offset(lv, (S20509C6*)(S20509C7*), 0, "S20509C1");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C8*), ABISELECT(160,88), "S20509C1");
    /*is_ambiguous_... S20509C8::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C8*), ABISELECT(160,88), "S20509C1");
    check_base_class_offset(lv, (S20509C6*)(S20509C9*)(S20509C8*), ABISELECT(304,204), "S20509C1");
    /*is_ambiguous_... S20509C1::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C6*)(S20509C9*), ABISELECT(304,204), "S20509C1");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C9*)(S20509C8*), ABISELECT(176,92), "S20509C1");
    /*is_ambiguous_... S20509C9::S20509C3 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C9*)(S20509C8*), ABISELECT(176,92), "S20509C1");
    check_base_class_offset(lv, (S20509C9*)(S20509C8*), ABISELECT(176,92), "S20509C1");
    /*is_ambiguous_... S20509C8::S20509C5 */ AMB_check_base_class_offset(lv, (S20509C5*)(S20509C8*), ABISELECT(328,220), "S20509C1");
    check_base_class_offset(lv, (S20509C8*)(S20509C7*), ABISELECT(160,88), "S20509C1");
    check_base_class_offset(lv, (S20509C8*)(S20509C11*), ABISELECT(160,88), "S20509C1");
    check_base_class_offset(lv, (S20509C7*), 0, "S20509C1");
    check_base_class_offset(lv, (S20509C12*)(S20509C11*), ABISELECT(376,244), "S20509C1");
    /*is_ambiguous_... S20509C1::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C4*)(S20509C3*)(S20509C9*), ABISELECT(400,252), "S20509C1");
    /*is_ambiguous_... S20509C1::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C3*)(S20509C9*), ABISELECT(400,252), "S20509C1");
    /*is_ambiguous_... S20509C11::S20509C9 */ AMB_check_base_class_offset(lv, (S20509C9*)(S20509C11*), ABISELECT(400,252), "S20509C1");
    check_base_class_offset(lv, (S20509C11*), ABISELECT(376,244), "S20509C1");
    set_bf_and_test(lv, s20509c1f0, ABISELECT(64,36), 0, 8, 1, "S20509C1");
    set_bf_and_test(lv, s20509c1f0, ABISELECT(64,36), 0, 8, hide_sll(1LL<<7), "S20509C1");
    test_class_info(&lv, &cd_S20509C1);
    dp->~S20509C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20509C1(Test_S20509C1, "S20509C1", ABISELECT(432,272));

#else // __cplusplus

extern void _ZN8S20509C1C1Ev();
extern void _ZN8S20509C1D2Ev();
Name_Map name_map_S20509C1[] = {
  NSPAIR(_ZN8S20509C1C1Ev),
  NSPAIR(_ZN8S20509C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C2;
extern VTBL_ENTRY _ZTI8S20509C2[];
extern  VTBL_ENTRY _ZTV8S20509C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C2[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C6;
extern VTBL_ENTRY _ZTI8S20509C6[];
extern  VTBL_ENTRY _ZTV8S20509C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C6[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C9;
extern VTBL_ENTRY _ZTI8S20509C9[];
extern  VTBL_ENTRY _ZTV8S20509C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C9[];
extern Class_Descriptor cd_S20509C5;
extern VTBL_ENTRY _ZTI8S20509C5[];
extern  VTBL_ENTRY _ZTV8S20509C5[];
extern Class_Descriptor cd_S20509C8;
extern VTBL_ENTRY _ZTI8S20509C8[];
extern  VTBL_ENTRY _ZTV8S20509C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C8[];
extern Class_Descriptor cd_S20509C7;
extern VTBL_ENTRY _ZTI8S20509C7[];
extern  VTBL_ENTRY _ZTV8S20509C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C7[];
extern Class_Descriptor cd_S20509C12;
extern VTBL_ENTRY _ZTI9S20509C12[];
extern  VTBL_ENTRY _ZTV9S20509C12[];
extern Class_Descriptor cd_S20509C4;
extern VTBL_ENTRY _ZTI8S20509C4[];
extern  VTBL_ENTRY _ZTV8S20509C4[];
extern Class_Descriptor cd_S20509C3;
extern VTBL_ENTRY _ZTI8S20509C3[];
extern  VTBL_ENTRY _ZTV8S20509C3[];
extern Class_Descriptor cd_S20509C9;
extern VTBL_ENTRY _ZTI8S20509C9[];
extern  VTBL_ENTRY _ZTV8S20509C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C9[];
extern Class_Descriptor cd_S20509C11;
extern VTBL_ENTRY _ZTI9S20509C11[];
extern  VTBL_ENTRY _ZTV9S20509C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20509C11[];
static Base_Class bases_S20509C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20509C4,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(152,84), //bcp->offset
    58, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20509C5,    ABISELECT(72,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
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20509C4,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20509C6,    ABISELECT(120,64), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20509C2,    ABISELECT(72,40), //bcp->offset
    22, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20509C6,    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
    15, //immediately_derived
  0, 0},
  {&cd_S20509C4,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20509C6,    ABISELECT(304,204), //bcp->offset
    104, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20509C4,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20509C9,    ABISELECT(176,92), //bcp->offset
    91, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20509C5,    ABISELECT(328,220), //bcp->offset
    114, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20509C8,    ABISELECT(160,88), //bcp->offset
    68, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20509C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20509C12,    ABISELECT(376,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20509C4,    ABISELECT(400,252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S20509C3,    ABISELECT(400,252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S20509C9,    ABISELECT(400,252), //bcp->offset
    158, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S20509C11,    ABISELECT(376,244), //bcp->offset
    134, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20509C1[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C73v22Ev();
extern void _ZN8S20509C73v23Ev();
extern void _ZN8S20509C73v24Ev();
extern void _ZN8S20509C73v25Ev();
extern void _ZN8S20509C1D1Ev();
extern void _ZN8S20509C1D0Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void ABISELECT(_ZTv0_n80_N8S20509C1D1Ev,_ZTv0_n40_N8S20509C1D1Ev)();
extern void ABISELECT(_ZThn376_N8S20509C1D1Ev,_ZThn244_N8S20509C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20509C1D0Ev,_ZTv0_n40_N8S20509C1D0Ev)();
extern void ABISELECT(_ZThn376_N8S20509C1D0Ev,_ZThn244_N8S20509C1D0Ev)() __attribute__((weak));
extern void _ZN9S20509C123v26Ev();
extern void _ZN9S20509C123v27Ev();
extern void _ZN9S20509C123v28Ev();
extern void _ZN9S20509C123v29Ev();
extern void _ZN9S20509C113v30Ev();
extern void _ZN9S20509C113v31Ev();
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY vtc_S20509C1[] = {
  ABISELECT(400,252),
  ABISELECT(376,244),
  ABISELECT(328,220),
  ABISELECT(304,204),
  ABISELECT(72,40),
  ABISELECT(160,88),
  ABISELECT(152,84),
  ABISELECT(120,64),
  ABISELECT(120,64),
  ABISELECT(120,64),
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20509C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20509C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(144,116),
  ABISELECT(-8,-4),
  ABISELECT(-88,-48),
  ABISELECT(-40,-24),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
  ABISELECT(-24,-8),
  ABISELECT(128,112),
  ABISELECT(-56,-28),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
  ABISELECT(-152,-120),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-376,-244),
  ABISELECT(24,8),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  ABISELECT(-224,-160),
  ABISELECT(-304,-204),
  ABISELECT(-256,-180),
  ABISELECT(-216,-156),
  ABISELECT(-376,-244),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20509C1D1Ev,_ZTv0_n40_N8S20509C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20509C1D0Ev,_ZTv0_n40_N8S20509C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20509C123v26Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v27Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v28Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v29Ev,
  (VTBL_ENTRY)&_ZN9S20509C113v30Ev,
  (VTBL_ENTRY)&_ZN9S20509C113v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-168),
  ABISELECT(-96,-48),
  ABISELECT(-280,-188),
  ABISELECT(-400,-252),
  (VTBL_ENTRY)&(_ZTI8S20509C1[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern VTBL_ENTRY _ZTV8S20509C1[];
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C73v22Ev();
extern void _ZN8S20509C73v23Ev();
extern void _ZN8S20509C73v24Ev();
extern void _ZN8S20509C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C7__8S20509C1[] = {
  ABISELECT(328,220),
  ABISELECT(304,204),
  ABISELECT(72,40),
  ABISELECT(160,88),
  ABISELECT(152,84),
  ABISELECT(120,64),
  ABISELECT(120,64),
  ABISELECT(120,64),
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20509C73v25Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C7__A1__8S20509C1[] = {
  ABISELECT(152,84),
  ABISELECT(120,64),
  ABISELECT(120,64),
  ABISELECT(120,64),
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C68S20509C7__A1__8S20509C1[] = {
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C68S20509C7__A1__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C7__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__A1__8S20509C7__8S20509C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C8__8S20509C7__8S20509C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(144,116),
  ABISELECT(-8,-4),
  ABISELECT(-88,-48),
  ABISELECT(-40,-24),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__8S20509C7__8S20509C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C98S20509C8__8S20509C7__8S20509C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(128,112),
  ABISELECT(-56,-28),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A2__8S20509C7__8S20509C1[] = {
  ABISELECT(-152,-120),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C5__A1__8S20509C7__8S20509C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI8S20509C7[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__8S20509C1[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__8S20509C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C68S20509C2__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C2__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C2__8S20509C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20509C2[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C8__8S20509C1[] = {
  ABISELECT(168,132),
  ABISELECT(144,116),
  ABISELECT(-8,-4),
  ABISELECT(-88,-48),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C98S20509C8__8S20509C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(128,112),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C98S20509C8__8S20509C1[] = {
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C98S20509C8__8S20509C1[] = {
  ABISELECT(-152,-120),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-128,-112),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C98S20509C8__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,8),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__8S20509C8__8S20509C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__8S20509C8__8S20509C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C8__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C9__8S20509C8__8S20509C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(128,112),
  ABISELECT(-56,-28),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A1__8S20509C8__8S20509C1[] = {
  ABISELECT(-152,-120),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C5__A1__8S20509C8__8S20509C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-132),
  (VTBL_ENTRY)&(_ZTI8S20509C8[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A2__8S20509C1[] = {
  ABISELECT(-152,-120),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C6__A2__8S20509C1[] = {
  0,
  0,
  0,
  ABISELECT(184,140),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C6__A2__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(152,120),
  (VTBL_ENTRY)&(_ZTI8S20509C6[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN9S20509C11D1Ev();
extern void _ZN9S20509C11D0Ev();
extern void _ZN9S20509C123v26Ev();
extern void _ZN9S20509C123v27Ev();
extern void _ZN9S20509C123v28Ev();
extern void _ZN9S20509C123v29Ev();
extern void _ZN9S20509C113v30Ev();
extern void _ZN9S20509C113v31Ev();
static  VTBL_ENTRY _tg__ZTV9S20509C11__8S20509C1[] = {
  ABISELECT(24,8),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  ABISELECT(-224,-160),
  ABISELECT(-304,-204),
  ABISELECT(-256,-180),
  ABISELECT(-216,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN9S20509C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20509C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v26Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v27Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v28Ev,
  (VTBL_ENTRY)&_ZN9S20509C123v29Ev,
  (VTBL_ENTRY)&_ZN9S20509C113v30Ev,
  (VTBL_ENTRY)&_ZN9S20509C113v31Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C83v20Ev();
extern void _ZN8S20509C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C8__9S20509C11__8S20509C1[] = {
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(144,116),
  ABISELECT(-8,-4),
  ABISELECT(-88,-48),
  ABISELECT(-40,-24),
  ABISELECT(216,156),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v20Ev,
  (VTBL_ENTRY)&_ZN8S20509C83v21Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C68S20509C2__9S20509C11__8S20509C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(256,180),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
extern void _ZN8S20509C23v14Ev();
extern void _ZN8S20509C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C2__9S20509C11__8S20509C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20509C23v15Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__9S20509C11__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(224,160),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C98S20509C8__9S20509C11__8S20509C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(128,112),
  ABISELECT(-56,-28),
  ABISELECT(200,152),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__A1__9S20509C11__8S20509C1[] = {
  ABISELECT(-152,-120),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C52v5Ev();
extern void _ZN8S20509C52v6Ev();
extern void _ZN8S20509C52v7Ev();
extern void _ZN8S20509C52v8Ev();
extern void _ZN8S20509C52v9Ev();
extern void _ZN8S20509C53v10Ev();
extern void _ZN8S20509C53v11Ev();
extern void _ZN8S20509C53v12Ev();
extern void _ZN8S20509C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C5__A1__9S20509C11__8S20509C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20509C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20509C53v13Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C9__A1__9S20509C11__8S20509C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-168),
  ABISELECT(-96,-48),
  ABISELECT(-280,-188),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI9S20509C11[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
extern void _ZN8S20509C93v16Ev();
extern void _ZN8S20509C93v17Ev();
extern void _ZN8S20509C93v18Ev();
extern void _ZN8S20509C93v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C9__A1__8S20509C1[] = {
  ABISELECT(-248,-168),
  ABISELECT(-96,-48),
  ABISELECT(-280,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20509C93v19Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C4__8S20509C9__A1__8S20509C1[] = {
  0,
  0,
  0,
  ABISELECT(280,188),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C6__8S20509C9__A1__8S20509C1[] = {
  ABISELECT(-152,-120),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
};
extern void _ZN8S20509C42v1Ev();
extern void _ZN8S20509C42v2Ev();
extern void _ZN8S20509C42v3Ev();
extern void _ZN8S20509C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20509C3__8S20509C9__A1__8S20509C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(248,168),
  (VTBL_ENTRY)&(_ZTI8S20509C9[0]),
  (VTBL_ENTRY)&_ZN8S20509C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20509C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20509C32v4Ev,
};
static  VTT_ENTRY vtt_S20509C1[] = {
  {&(_ZTV8S20509C1[13]),  13,179},
  {&(_tg__ZTV8S20509C7__8S20509C1[11]),  11,18},
  {&(_tg__ZTV8S20509C68S20509C7__A1__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C4__8S20509C68S20509C7__A1__8S20509C1[5]),  5,8},
  {&(_tg__ZTV8S20509C3__8S20509C68S20509C7__A1__8S20509C1[6]),  6,10},
  {&(_tg__ZTV8S20509C3__8S20509C7__8S20509C1[6]),  6,10},
  {&(_tg__ZTV8S20509C68S20509C2__A1__8S20509C7__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C8__8S20509C7__8S20509C1[17]),  17,23},
  {&(_tg__ZTV8S20509C2__8S20509C7__8S20509C1[15]),  15,26},
  {&(_tg__ZTV8S20509C68S20509C2__A1__8S20509C7__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C98S20509C8__8S20509C7__8S20509C1[5]),  5,13},
  {&(_tg__ZTV8S20509C6__A2__8S20509C7__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C5__A1__8S20509C7__8S20509C1[11]),  11,20},
  {&(_ZTV8S20509C1[37]),  37,179},
  {&(_ZTV8S20509C1[64]),  64,179},
  {&(_ZTV8S20509C1[55]),  55,179},
  {&(_ZTV8S20509C1[55]),  55,179},
  {&(_ZTV8S20509C1[85]),  85,179},
  {&(_ZTV8S20509C1[96]),  96,179},
  {&(_ZTV8S20509C1[111]),  111,179},
  {&(_ZTV8S20509C1[125]),  125,179},
  {&(_ZTV8S20509C1[150]),  150,179},
  {&(_ZTV8S20509C1[171]),  171,179},
  {&(_tg__ZTV8S20509C2__8S20509C1[4]),  4,15},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C68S20509C2__8S20509C1[6]),  6,10},
  {&(_tg__ZTV8S20509C3__8S20509C2__8S20509C1[6]),  6,10},
  {&(_tg__ZTV8S20509C6__8S20509C2__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C6__8S20509C2__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C8__8S20509C1[7]),  7,13},
  {&(_tg__ZTV8S20509C98S20509C8__8S20509C1[5]),  5,13},
  {&(_tg__ZTV8S20509C4__8S20509C98S20509C8__8S20509C1[5]),  5,8},
  {&(_tg__ZTV8S20509C6__8S20509C98S20509C8__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C98S20509C8__8S20509C1[6]),  6,10},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C8__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C2__8S20509C8__8S20509C1[15]),  15,26},
  {&(_tg__ZTV8S20509C3__8S20509C8__8S20509C1[6]),  6,10},
  {&(_tg__ZTV8S20509C68S20509C2__8S20509C8__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C9__8S20509C8__8S20509C1[5]),  5,13},
  {&(_tg__ZTV8S20509C6__A1__8S20509C8__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C5__A1__8S20509C8__8S20509C1[11]),  11,20},
  {&(_tg__ZTV8S20509C6__A2__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C4__8S20509C6__A2__8S20509C1[5]),  5,8},
  {&(_tg__ZTV8S20509C3__8S20509C6__A2__8S20509C1[6]),  6,10},
  {&(_tg__ZTV9S20509C11__8S20509C1[9]),  9,17},
  {&(_tg__ZTV8S20509C8__9S20509C11__8S20509C1[17]),  17,23},
  {&(_tg__ZTV8S20509C68S20509C2__9S20509C11__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C2__9S20509C11__8S20509C1[15]),  15,26},
  {&(_tg__ZTV8S20509C3__9S20509C11__8S20509C1[6]),  6,10},
  {&(_tg__ZTV8S20509C68S20509C2__9S20509C11__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C98S20509C8__9S20509C11__8S20509C1[5]),  5,13},
  {&(_tg__ZTV8S20509C6__A1__9S20509C11__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C5__A1__9S20509C11__8S20509C1[11]),  11,20},
  {&(_tg__ZTV8S20509C9__A1__9S20509C11__8S20509C1[13]),  13,21},
  {&(_tg__ZTV8S20509C9__A1__8S20509C1[5]),  5,13},
  {&(_tg__ZTV8S20509C4__8S20509C9__A1__8S20509C1[5]),  5,8},
  {&(_tg__ZTV8S20509C6__8S20509C9__A1__8S20509C1[7]),  7,10},
  {&(_tg__ZTV8S20509C3__8S20509C9__A1__8S20509C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20509C1[];
extern  VTBL_ENTRY _ZTV8S20509C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20509C1[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20509C1D0Ev,_ZTv0_n40_N8S20509C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S20509C1D0Ev,_ZThn244_N8S20509C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20509C1D1Ev,_ZTv0_n40_N8S20509C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S20509C1D1Ev,_ZThn244_N8S20509C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20509C1 = {  "S20509C1", // class name
  bases_S20509C1, 21,
  &(vtc_S20509C1[0]), // expected_vtbl_contents
  &(vtt_S20509C1[0]), // expected_vtt_contents
  ABISELECT(432,272), // object size
  NSPAIRA(_ZTI8S20509C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20509C1),179, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20509C1),59, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20108C2  {
  virtual void  v24(); // _ZN8S20108C23v24Ev
  virtual void  v25(); // _ZN8S20108C23v25Ev
  virtual void  v26(); // _ZN8S20108C23v26Ev
  ~S20108C2(); // tgen
  S20108C2(); // tgen
};
//SIG(-1 S20108C2) C1{ v1 v2 v3}


void  S20108C2 ::v24(){vfunc_called(this, "_ZN8S20108C23v24Ev");}
void  S20108C2 ::v25(){vfunc_called(this, "_ZN8S20108C23v25Ev");}
void  S20108C2 ::v26(){vfunc_called(this, "_ZN8S20108C23v26Ev");}
S20108C2 ::~S20108C2(){ note_dtor("S20108C2", this);} // tgen
S20108C2 ::S20108C2(){ note_ctor("S20108C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20108C2C1Ev();
extern void _ZN8S20108C2D1Ev();
Name_Map name_map_S20108C2[] = {
  NSPAIR(_ZN8S20108C2C1Ev),
  NSPAIR(_ZN8S20108C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20108C2[];
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
static  VTBL_ENTRY vtc_S20108C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C2[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
};
extern VTBL_ENTRY _ZTI8S20108C2[];
extern  VTBL_ENTRY _ZTV8S20108C2[];
Class_Descriptor cd_S20108C2 = {  "S20108C2", // class name
  0,0,//no base classes
  &(vtc_S20108C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20108C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20108C2),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  S20108C4  {
  virtual void  v7(); // _ZN8S20108C42v7Ev
  virtual void  v8(); // _ZN8S20108C42v8Ev
  virtual void  v9(); // _ZN8S20108C42v9Ev
  virtual void  v10(); // _ZN8S20108C43v10Ev
  virtual void  v11(); // _ZN8S20108C43v11Ev
  virtual void  v12(); // _ZN8S20108C43v12Ev
  virtual void  v13(); // _ZN8S20108C43v13Ev
  ~S20108C4(); // tgen
  S20108C4(); // tgen
};
//SIG(-1 S20108C4) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S20108C4 ::v7(){vfunc_called(this, "_ZN8S20108C42v7Ev");}
void  S20108C4 ::v8(){vfunc_called(this, "_ZN8S20108C42v8Ev");}
void  S20108C4 ::v9(){vfunc_called(this, "_ZN8S20108C42v9Ev");}
void  S20108C4 ::v10(){vfunc_called(this, "_ZN8S20108C43v10Ev");}
void  S20108C4 ::v11(){vfunc_called(this, "_ZN8S20108C43v11Ev");}
void  S20108C4 ::v12(){vfunc_called(this, "_ZN8S20108C43v12Ev");}
void  S20108C4 ::v13(){vfunc_called(this, "_ZN8S20108C43v13Ev");}
S20108C4 ::~S20108C4(){ note_dtor("S20108C4", this);} // tgen
S20108C4 ::S20108C4(){ note_ctor("S20108C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20108C4C1Ev();
extern void _ZN8S20108C4D1Ev();
Name_Map name_map_S20108C4[] = {
  NSPAIR(_ZN8S20108C4C1Ev),
  NSPAIR(_ZN8S20108C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20108C4[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY vtc_S20108C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C4[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
Class_Descriptor cd_S20108C4 = {  "S20108C4", // class name
  0,0,//no base classes
  &(vtc_S20108C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20108C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20108C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20108C6  {
  virtual  ~S20108C6(); // _ZN8S20108C6D1Ev
  virtual void  v14(); // _ZN8S20108C63v14Ev
  virtual void  v15(); // _ZN8S20108C63v15Ev
  virtual void  v16(); // _ZN8S20108C63v16Ev
  virtual void  v17(); // _ZN8S20108C63v17Ev
  virtual void  v18(); // _ZN8S20108C63v18Ev
  S20108C6(); // tgen
};
//SIG(-1 S20108C6) C1{ vd v1 v2 v3 v4 v5}


 S20108C6 ::~S20108C6(){ note_dtor("S20108C6", this);}
void  S20108C6 ::v14(){vfunc_called(this, "_ZN8S20108C63v14Ev");}
void  S20108C6 ::v15(){vfunc_called(this, "_ZN8S20108C63v15Ev");}
void  S20108C6 ::v16(){vfunc_called(this, "_ZN8S20108C63v16Ev");}
void  S20108C6 ::v17(){vfunc_called(this, "_ZN8S20108C63v17Ev");}
void  S20108C6 ::v18(){vfunc_called(this, "_ZN8S20108C63v18Ev");}
S20108C6 ::S20108C6(){ note_ctor("S20108C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20108C6C1Ev();
extern void _ZN8S20108C6D1Ev();
Name_Map name_map_S20108C6[] = {
  NSPAIR(_ZN8S20108C6C1Ev),
  NSPAIR(_ZN8S20108C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20108C6[];
extern void _ZN8S20108C6D1Ev();
extern void _ZN8S20108C6D0Ev();
extern void _ZN8S20108C63v14Ev();
extern void _ZN8S20108C63v15Ev();
extern void _ZN8S20108C63v16Ev();
extern void _ZN8S20108C63v17Ev();
extern void _ZN8S20108C63v18Ev();
static  VTBL_ENTRY vtc_S20108C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C6[0]),
  (VTBL_ENTRY)&_ZN8S20108C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20108C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v18Ev,
};
extern VTBL_ENTRY _ZTI8S20108C6[];
extern  VTBL_ENTRY _ZTV8S20108C6[];
Class_Descriptor cd_S20108C6 = {  "S20108C6", // class name
  0,0,//no base classes
  &(vtc_S20108C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20108C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20108C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20108C7  : virtual S20108C4 {
  long double s20108c7f0[9];
  virtual void  v19(); // _ZN8S20108C73v19Ev
  virtual void  v20(); // _ZN8S20108C73v20Ev
  virtual void  v21(); // _ZN8S20108C73v21Ev
  ~S20108C7(); // tgen
  S20108C7(); // tgen
};
//SIG(-1 S20108C7) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10} v1 v2 v3 FD[9]}


void  S20108C7 ::v19(){vfunc_called(this, "_ZN8S20108C73v19Ev");}
void  S20108C7 ::v20(){vfunc_called(this, "_ZN8S20108C73v20Ev");}
void  S20108C7 ::v21(){vfunc_called(this, "_ZN8S20108C73v21Ev");}
S20108C7 ::~S20108C7(){ note_dtor("S20108C7", this);} // tgen
S20108C7 ::S20108C7(){ note_ctor("S20108C7", this);} // tgen

static void Test_S20108C7()
{
  extern Class_Descriptor cd_S20108C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20108C7, buf);
    S20108C7 *dp, &lv = *(dp=new (buf) S20108C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20108C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20108C7)");
    check_base_class_offset(lv, (S20108C4*), 0, "S20108C7");
    check_field_offset(lv, s20108c7f0, ABISELECT(16,4), "S20108C7.s20108c7f0");
    test_class_info(&lv, &cd_S20108C7);
    dp->~S20108C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C7(Test_S20108C7, "S20108C7", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S20108C7C1Ev();
extern void _ZN8S20108C7D1Ev();
Name_Map name_map_S20108C7[] = {
  NSPAIR(_ZN8S20108C7C1Ev),
  NSPAIR(_ZN8S20108C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
static Base_Class bases_S20108C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20108C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20108C7[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY vtc_S20108C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern VTBL_ENTRY _ZTV8S20108C7[];
static  VTT_ENTRY vtt_S20108C7[] = {
  {&(_ZTV8S20108C7[10]),  10,20},
  {&(_ZTV8S20108C7[10]),  10,20},
};
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
Class_Descriptor cd_S20108C7 = {  "S20108C7", // class name
  bases_S20108C7, 1,
  &(vtc_S20108C7[0]), // expected_vtbl_contents
  &(vtt_S20108C7[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20108C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20108C7),20, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20108C7),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  S20108C9  : S20108C4 {
  virtual void  v22(); // _ZN8S20108C93v22Ev
  ~S20108C9(); // tgen
  S20108C9(); // tgen
};
//SIG(-1 S20108C9) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


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

static void Test_S20108C9()
{
  extern Class_Descriptor cd_S20108C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20108C9, buf);
    S20108C9 *dp, &lv = *(dp=new (buf) S20108C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20108C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20108C9)");
    check_base_class_offset(lv, (S20108C4*), 0, "S20108C9");
    test_class_info(&lv, &cd_S20108C9);
    dp->~S20108C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C9(Test_S20108C9, "S20108C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20108C9C1Ev();
extern void _ZN8S20108C9D1Ev();
Name_Map name_map_S20108C9[] = {
  NSPAIR(_ZN8S20108C9C1Ev),
  NSPAIR(_ZN8S20108C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
static Base_Class bases_S20108C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20108C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20108C9[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY vtc_S20108C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C9[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
Class_Descriptor cd_S20108C9 = {  "S20108C9", // class name
  bases_S20108C9, 1,
  &(vtc_S20108C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20108C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20108C9),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  S20108C8  : virtual S20108C4 , S20108C7 , virtual S20108C9 {
  long double s20108c8f0;
  virtual void  v23(); // _ZN8S20108C83v23Ev
  ~S20108C8(); // tgen
  S20108C8(); // tgen
};
//SIG(-1 S20108C8) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8} BC3{ VBC2 v9 v10 v11 FD[9]} VBC4{ BC2 v12} v1 FD}


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

static void Test_S20108C8()
{
  extern Class_Descriptor cd_S20108C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S20108C8, buf);
    S20108C8 *dp, &lv = *(dp=new (buf) S20108C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S20108C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20108C8)");
    /*is_ambiguous_... S20108C8::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*), 0, "S20108C8");
    check_base_class_offset(lv, (S20108C4*)(S20108C7*), 0, "S20108C8");
    check_base_class_offset(lv, (S20108C7*), 0, "S20108C8");
    check_base_class_offset(lv, (S20108C4*)(S20108C9*), ABISELECT(176,124), "S20108C8");
    check_base_class_offset(lv, (S20108C9*), ABISELECT(176,124), "S20108C8");
    check_field_offset(lv, s20108c8f0, ABISELECT(160,112), "S20108C8.s20108c8f0");
    test_class_info(&lv, &cd_S20108C8);
    dp->~S20108C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C8(Test_S20108C8, "S20108C8", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S20108C8C1Ev();
extern void _ZN8S20108C8D1Ev();
Name_Map name_map_S20108C8[] = {
  NSPAIR(_ZN8S20108C8C1Ev),
  NSPAIR(_ZN8S20108C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
static Base_Class bases_S20108C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20108C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20108C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20108C4,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(176,124), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20108C8[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY vtc_S20108C8[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern VTBL_ENTRY _ZTV8S20108C8[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__8S20108C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
static  VTT_ENTRY vtt_S20108C8[] = {
  {&(_ZTV8S20108C8[11]),  11,40},
  {&(_tg__ZTV8S20108C7__8S20108C8[10]),  10,20},
  {&(_tg__ZTV8S20108C7__8S20108C8[10]),  10,20},
  {&(_ZTV8S20108C8[11]),  11,40},
  {&(_ZTV8S20108C8[32]),  32,40},
};
extern VTBL_ENTRY _ZTI8S20108C8[];
extern  VTBL_ENTRY _ZTV8S20108C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C8[];
Class_Descriptor cd_S20108C8 = {  "S20108C8", // class name
  bases_S20108C8, 4,
  &(vtc_S20108C8[0]), // expected_vtbl_contents
  &(vtt_S20108C8[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S20108C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20108C8),40, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20108C8),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20108C5  : S20108C6 , virtual S20108C4 , virtual S20108C7 , S20108C8 , virtual S20108C2 {
  char s20108c5f0;
  __tsi64 s20108c5f1;
  virtual  ~S20108C5(); // _ZN8S20108C5D2Ev
  virtual void  v27(); // _ZN8S20108C53v27Ev
  virtual void  v28(); // _ZN8S20108C53v28Ev
  virtual void  v29(); // _ZN8S20108C53v29Ev
  virtual void  v30(); // _ZN8S20108C53v30Ev
  virtual void  v31(); // _ZN8S20108C53v31Ev
  virtual void  v32(); // _ZN8S20108C53v32Ev
  virtual void  v33(); // _ZN8S20108C53v33Ev
  S20108C5(); // tgen
};
//SIG(-1 S20108C5) C1{ BC2{ vd v8 v9 v10 v11 v12} VBC3{ v13 v14 v15 v16 v17 v18 v19} VBC4{ VBC3 v20 v21 v22 FD[9]} BC5{ VBC3 BC4 VBC6{ BC3 v23} v24 FD} VBC7{ v25 v26 v27} vd v1 v2 v3 v4 v5 v6 v7 Fc FL}


 S20108C5 ::~S20108C5(){ note_dtor("S20108C5", this);}
void  S20108C5 ::v27(){vfunc_called(this, "_ZN8S20108C53v27Ev");}
void  S20108C5 ::v28(){vfunc_called(this, "_ZN8S20108C53v28Ev");}
void  S20108C5 ::v29(){vfunc_called(this, "_ZN8S20108C53v29Ev");}
void  S20108C5 ::v30(){vfunc_called(this, "_ZN8S20108C53v30Ev");}
void  S20108C5 ::v31(){vfunc_called(this, "_ZN8S20108C53v31Ev");}
void  S20108C5 ::v32(){vfunc_called(this, "_ZN8S20108C53v32Ev");}
void  S20108C5 ::v33(){vfunc_called(this, "_ZN8S20108C53v33Ev");}
S20108C5 ::S20108C5(){ note_ctor("S20108C5", this);} // tgen

static void Test_S20108C5()
{
  extern Class_Descriptor cd_S20108C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,66)];
    init_test(&cd_S20108C5, buf);
    S20108C5 *dp, &lv = *(dp=new (buf) S20108C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,260), "sizeof(S20108C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20108C5)");
    check_base_class_offset(lv, (S20108C6*), 0, "S20108C5");
    /*is_ambiguous_... S20108C5::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*), ABISELECT(208,140), "S20108C5");
    /*is_ambiguous_... S20108C5::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C7*), ABISELECT(208,140), "S20108C5");
    /*is_ambiguous_... S20108C8::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C8*), ABISELECT(208,140), "S20108C5");
    check_base_class_offset(lv, (S20108C4*)(S20108C7*)(S20108C8*), ABISELECT(208,140), "S20108C5");
    /*is_ambiguous_... S20108C5::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C7*), ABISELECT(208,140), "S20108C5");
    check_base_class_offset(lv, (S20108C7*)(S20108C8*), ABISELECT(16,4), "S20108C5");
    check_base_class_offset(lv, (S20108C4*)(S20108C9*), ABISELECT(368,252), "S20108C5");
    check_base_class_offset(lv, (S20108C9*)(S20108C8*), ABISELECT(368,252), "S20108C5");
    check_base_class_offset(lv, (S20108C8*), ABISELECT(16,4), "S20108C5");
    check_base_class_offset(lv, (S20108C2*), ABISELECT(376,256), "S20108C5");
    check_field_offset(lv, s20108c5f0, ABISELECT(192,128), "S20108C5.s20108c5f0");
    check_field_offset(lv, s20108c5f1, ABISELECT(200,132), "S20108C5.s20108c5f1");
    test_class_info(&lv, &cd_S20108C5);
    dp->~S20108C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C5(Test_S20108C5, "S20108C5", ABISELECT(384,260));

#else // __cplusplus

extern void _ZN8S20108C5C1Ev();
extern void _ZN8S20108C5D2Ev();
Name_Map name_map_S20108C5[] = {
  NSPAIR(_ZN8S20108C5C1Ev),
  NSPAIR(_ZN8S20108C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20108C6;
extern VTBL_ENTRY _ZTI8S20108C6[];
extern  VTBL_ENTRY _ZTV8S20108C6[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
extern Class_Descriptor cd_S20108C8;
extern VTBL_ENTRY _ZTI8S20108C8[];
extern  VTBL_ENTRY _ZTV8S20108C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C8[];
extern Class_Descriptor cd_S20108C2;
extern VTBL_ENTRY _ZTI8S20108C2[];
extern  VTBL_ENTRY _ZTV8S20108C2[];
static Base_Class bases_S20108C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20108C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20108C4,    ABISELECT(208,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20108C7,    ABISELECT(208,140), //bcp->offset
    42, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20108C7,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20108C4,    ABISELECT(368,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(368,252), //bcp->offset
    65, //bcp->virtual_function_table_offset
    10, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20108C8,    ABISELECT(16,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20108C2,    ABISELECT(376,256), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20108C5[];
extern void _ZN8S20108C5D1Ev();
extern void _ZN8S20108C5D0Ev();
extern void _ZN8S20108C63v14Ev();
extern void _ZN8S20108C63v15Ev();
extern void _ZN8S20108C63v16Ev();
extern void _ZN8S20108C63v17Ev();
extern void _ZN8S20108C63v18Ev();
extern void _ZN8S20108C53v27Ev();
extern void _ZN8S20108C53v28Ev();
extern void _ZN8S20108C53v29Ev();
extern void _ZN8S20108C53v30Ev();
extern void _ZN8S20108C53v31Ev();
extern void _ZN8S20108C53v32Ev();
extern void _ZN8S20108C53v33Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
static  VTBL_ENTRY vtc_S20108C5[] = {
  ABISELECT(376,256),
  ABISELECT(368,252),
  ABISELECT(208,140),
  ABISELECT(208,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20108C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v33Ev,
  ABISELECT(352,248),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-140),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-252),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  0,
  0,
  0,
  ABISELECT(-376,-256),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S20108C5[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C8__8S20108C5[] = {
  ABISELECT(352,248),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C78S20108C8__A1__8S20108C5[] = {
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C78S20108C8__A1__8S20108C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C8__8S20108C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C8__8S20108C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-248),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__8S20108C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
static  VTT_ENTRY vtt_S20108C5[] = {
  {&(_ZTV8S20108C5[6]),  6,91},
  {&(_tg__ZTV8S20108C8__8S20108C5[11]),  11,22},
  {&(_tg__ZTV8S20108C78S20108C8__A1__8S20108C5[10]),  10,20},
  {&(_tg__ZTV8S20108C4__8S20108C78S20108C8__A1__8S20108C5[9]),  9,16},
  {&(_tg__ZTV8S20108C4__8S20108C8__8S20108C5[9]),  9,16},
  {&(_tg__ZTV8S20108C9__8S20108C8__8S20108C5[10]),  10,18},
  {&(_ZTV8S20108C5[55]),  55,91},
  {&(_ZTV8S20108C5[55]),  55,91},
  {&(_ZTV8S20108C5[31]),  31,91},
  {&(_ZTV8S20108C5[75]),  75,91},
  {&(_ZTV8S20108C5[88]),  88,91},
  {&(_tg__ZTV8S20108C7__8S20108C5[10]),  10,20},
  {&(_tg__ZTV8S20108C7__8S20108C5[10]),  10,20},
};
extern VTBL_ENTRY _ZTI8S20108C5[];
extern  VTBL_ENTRY _ZTV8S20108C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C5[];
Class_Descriptor cd_S20108C5 = {  "S20108C5", // class name
  bases_S20108C5, 8,
  &(vtc_S20108C5[0]), // expected_vtbl_contents
  &(vtt_S20108C5[0]), // expected_vtt_contents
  ABISELECT(384,260), // object size
  NSPAIRA(_ZTI8S20108C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20108C5),91, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20108C5),13, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20108C3  : S20108C4 , S20108C5 , S20108C9 {
  __tsi64 s20108c3f0;
  virtual void  v34(); // _ZN8S20108C33v34Ev
  virtual void  v35(); // _ZN8S20108C33v35Ev
  ~S20108C3(); // tgen
  S20108C3(); // tgen
};
//SIG(-1 S20108C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9} BC3{ BC4{ vd v10 v11 v12 v13 v14} VBC2 VBC5{ VBC2 v15 v16 v17 FD[9]} BC6{ VBC2 BC5 VBC7{ BC2 v18} v19 FD} VBC8{ v20 v21 v22} vd v23 v24 v25 v26 v27 v28 v29 Fc FL} BC7 v1 v2 FL}


void  S20108C3 ::v34(){vfunc_called(this, "_ZN8S20108C33v34Ev");}
void  S20108C3 ::v35(){vfunc_called(this, "_ZN8S20108C33v35Ev");}
S20108C3 ::~S20108C3(){ note_dtor("S20108C3", this);} // tgen
S20108C3 ::S20108C3(){ note_ctor("S20108C3", this);} // tgen

static void Test_S20108C3()
{
  extern Class_Descriptor cd_S20108C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,70)];
    init_test(&cd_S20108C3, buf);
    S20108C3 *dp, &lv = *(dp=new (buf) S20108C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,276), "sizeof(S20108C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20108C3)");
    /*is_ambiguous_... S20108C3::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*), 0, "S20108C3");
    check_base_class_offset(lv, (S20108C6*)(S20108C5*), ABISELECT(16,4), "S20108C3");
    /*is_ambiguous_... S20108C5::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C5*), ABISELECT(240,156), "S20108C3");
    /*is_ambiguous_... S20108C3::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C7*), ABISELECT(240,156), "S20108C3");
    /*is_ambiguous_... S20108C8::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C8*)(S20108C5*), ABISELECT(240,156), "S20108C3");
    check_base_class_offset(lv, (S20108C4*)(S20108C7*)(S20108C8*)(S20108C5*), ABISELECT(240,156), "S20108C3");
    /*is_ambiguous_... S20108C5::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C7*)(S20108C5*), ABISELECT(240,156), "S20108C3");
    check_base_class_offset(lv, (S20108C7*)(S20108C8*)(S20108C5*), ABISELECT(32,8), "S20108C3");
    /*is_ambiguous_... S20108C3::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C9*), ABISELECT(400,268), "S20108C3");
    check_base_class_offset(lv, (S20108C9*)(S20108C8*)(S20108C5*), ABISELECT(400,268), "S20108C3");
    check_base_class_offset(lv, (S20108C8*)(S20108C5*), ABISELECT(32,8), "S20108C3");
    check_base_class_offset(lv, (S20108C2*)(S20108C5*), ABISELECT(408,272), "S20108C3");
    check_base_class_offset(lv, (S20108C5*), ABISELECT(16,4), "S20108C3");
    /*is_ambiguous_... S20108C3::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C9*), ABISELECT(224,144), "S20108C3");
    /*is_ambiguous_... S20108C3::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C9*), ABISELECT(224,144), "S20108C3");
    check_field_offset(lv, s20108c3f0, ABISELECT(232,148), "S20108C3.s20108c3f0");
    test_class_info(&lv, &cd_S20108C3);
    dp->~S20108C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C3(Test_S20108C3, "S20108C3", ABISELECT(416,276));

#else // __cplusplus

extern void _ZN8S20108C3C1Ev();
extern void _ZN8S20108C3D1Ev();
Name_Map name_map_S20108C3[] = {
  NSPAIR(_ZN8S20108C3C1Ev),
  NSPAIR(_ZN8S20108C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C6;
extern VTBL_ENTRY _ZTI8S20108C6[];
extern  VTBL_ENTRY _ZTV8S20108C6[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
extern Class_Descriptor cd_S20108C8;
extern VTBL_ENTRY _ZTI8S20108C8[];
extern  VTBL_ENTRY _ZTV8S20108C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C8[];
extern Class_Descriptor cd_S20108C2;
extern VTBL_ENTRY _ZTI8S20108C2[];
extern  VTBL_ENTRY _ZTV8S20108C2[];
extern Class_Descriptor cd_S20108C5;
extern VTBL_ENTRY _ZTI8S20108C5[];
extern  VTBL_ENTRY _ZTV8S20108C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C5[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
static Base_Class bases_S20108C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20108C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20108C6,    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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20108C4,    ABISELECT(240,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20108C7,    ABISELECT(240,156), //bcp->offset
    69, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20108C7,    ABISELECT(32,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20108C4,    ABISELECT(400,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(400,268), //bcp->offset
    92, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20108C8,    ABISELECT(32,8), //bcp->offset
    37, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20108C2,    ABISELECT(408,272), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20108C5,    ABISELECT(16,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20108C4,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(224,144), //bcp->offset
    59, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20108C3[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C33v34Ev();
extern void _ZN8S20108C33v35Ev();
extern void _ZN8S20108C3D1Ev();
extern void _ZN8S20108C3D0Ev();
extern void ABISELECT(_ZThn16_N8S20108C3D1Ev,_ZThn4_N8S20108C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20108C3D0Ev,_ZThn4_N8S20108C3D0Ev)();
extern void _ZN8S20108C63v14Ev();
extern void _ZN8S20108C63v15Ev();
extern void _ZN8S20108C63v16Ev();
extern void _ZN8S20108C63v17Ev();
extern void _ZN8S20108C63v18Ev();
extern void _ZN8S20108C53v27Ev();
extern void _ZN8S20108C53v28Ev();
extern void _ZN8S20108C53v29Ev();
extern void _ZN8S20108C53v30Ev();
extern void _ZN8S20108C53v31Ev();
extern void _ZN8S20108C53v32Ev();
extern void _ZN8S20108C53v33Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
static  VTBL_ENTRY vtc_S20108C3[] = {
  ABISELECT(408,272),
  ABISELECT(400,268),
  ABISELECT(240,156),
  ABISELECT(240,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C33v34Ev,
  (VTBL_ENTRY)&_ZN8S20108C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20108C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20108C3D0Ev,
  ABISELECT(392,268),
  ABISELECT(384,264),
  ABISELECT(224,152),
  ABISELECT(224,152),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20108C3D1Ev,_ZThn4_N8S20108C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20108C3D0Ev,_ZThn4_N8S20108C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20108C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v33Ev,
  ABISELECT(368,260),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(-32,-8),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-268),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  0,
  0,
  0,
  ABISELECT(-408,-272),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S20108C3[];
extern void _ZN8S20108C5D1Ev();
extern void _ZN8S20108C5D0Ev();
extern void _ZN8S20108C63v14Ev();
extern void _ZN8S20108C63v15Ev();
extern void _ZN8S20108C63v16Ev();
extern void _ZN8S20108C63v17Ev();
extern void _ZN8S20108C63v18Ev();
extern void _ZN8S20108C53v27Ev();
extern void _ZN8S20108C53v28Ev();
extern void _ZN8S20108C53v29Ev();
extern void _ZN8S20108C53v30Ev();
extern void _ZN8S20108C53v31Ev();
extern void _ZN8S20108C53v32Ev();
extern void _ZN8S20108C53v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C5__8S20108C3[] = {
  ABISELECT(392,268),
  ABISELECT(384,264),
  ABISELECT(224,152),
  ABISELECT(224,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20108C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v33Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C88S20108C5__8S20108C3[] = {
  ABISELECT(368,260),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C78S20108C88S20108C5__A1__8S20108C3[] = {
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C78S20108C88S20108C5__A1__8S20108C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-148),
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C88S20108C5__8S20108C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-148),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C88S20108C5__8S20108C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-260),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__8S20108C5__8S20108C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C8__8S20108C5__8S20108C3[] = {
  ABISELECT(368,260),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C5__8S20108C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-264),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C2__8S20108C5__8S20108C3[] = {
  0,
  0,
  0,
  ABISELECT(-392,-268),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__8S20108C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
static  VTT_ENTRY vtt_S20108C3[] = {
  {&(_ZTV8S20108C3[6]),  6,118},
  {&(_tg__ZTV8S20108C5__8S20108C3[6]),  6,20},
  {&(_tg__ZTV8S20108C88S20108C5__8S20108C3[11]),  11,22},
  {&(_tg__ZTV8S20108C78S20108C88S20108C5__A1__8S20108C3[10]),  10,20},
  {&(_tg__ZTV8S20108C4__8S20108C78S20108C88S20108C5__A1__8S20108C3[9]),  9,16},
  {&(_tg__ZTV8S20108C4__8S20108C88S20108C5__8S20108C3[9]),  9,16},
  {&(_tg__ZTV8S20108C9__8S20108C88S20108C5__8S20108C3[10]),  10,18},
  {&(_tg__ZTV8S20108C7__8S20108C5__8S20108C3[13]),  13,23},
  {&(_tg__ZTV8S20108C7__8S20108C5__8S20108C3[13]),  13,23},
  {&(_tg__ZTV8S20108C8__8S20108C5__8S20108C3[11]),  11,22},
  {&(_tg__ZTV8S20108C9__8S20108C5__8S20108C3[10]),  10,18},
  {&(_tg__ZTV8S20108C2__8S20108C5__8S20108C3[5]),  5,8},
  {&(_ZTV8S20108C3[23]),  23,118},
  {&(_ZTV8S20108C3[82]),  82,118},
  {&(_ZTV8S20108C3[82]),  82,118},
  {&(_ZTV8S20108C3[48]),  48,118},
  {&(_ZTV8S20108C3[102]),  102,118},
  {&(_ZTV8S20108C3[115]),  115,118},
  {&(_tg__ZTV8S20108C7__8S20108C3[10]),  10,20},
  {&(_tg__ZTV8S20108C7__8S20108C3[10]),  10,20},
};
extern VTBL_ENTRY _ZTI8S20108C3[];
extern  VTBL_ENTRY _ZTV8S20108C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C3[];
Class_Descriptor cd_S20108C3 = {  "S20108C3", // class name
  bases_S20108C3, 12,
  &(vtc_S20108C3[0]), // expected_vtbl_contents
  &(vtt_S20108C3[0]), // expected_vtt_contents
  ABISELECT(416,276), // object size
  NSPAIRA(_ZTI8S20108C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20108C3),118, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20108C3),20, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20108C10  {
  __tsi64 s20108c10f0;
  virtual void  v36(); // _ZN9S20108C103v36Ev
  ~S20108C10(); // tgen
  S20108C10(); // tgen
};
//SIG(-1 S20108C10) C1{ v1 FL}


void  S20108C10 ::v36(){vfunc_called(this, "_ZN9S20108C103v36Ev");}
S20108C10 ::~S20108C10(){ note_dtor("S20108C10", this);} // tgen
S20108C10 ::S20108C10(){ note_ctor("S20108C10", this);} // tgen

static void Test_S20108C10()
{
  extern Class_Descriptor cd_S20108C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20108C10, buf);
    S20108C10 *dp, &lv = *(dp=new (buf) S20108C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20108C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20108C10)");
    check_field_offset(lv, s20108c10f0, ABISELECT(8,4), "S20108C10.s20108c10f0");
    test_class_info(&lv, &cd_S20108C10);
    dp->~S20108C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C10(Test_S20108C10, "S20108C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20108C10C1Ev();
extern void _ZN9S20108C10D1Ev();
Name_Map name_map_S20108C10[] = {
  NSPAIR(_ZN9S20108C10C1Ev),
  NSPAIR(_ZN9S20108C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20108C10[];
extern void _ZN9S20108C103v36Ev();
static  VTBL_ENTRY vtc_S20108C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20108C10[0]),
  (VTBL_ENTRY)&_ZN9S20108C103v36Ev,
};
extern VTBL_ENTRY _ZTI9S20108C10[];
extern  VTBL_ENTRY _ZTV9S20108C10[];
Class_Descriptor cd_S20108C10 = {  "S20108C10", // class name
  0,0,//no base classes
  &(vtc_S20108C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20108C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20108C10),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  S20108C11  : virtual S20108C8 , S20108C9 , S20108C7 , S20108C2 {
  virtual  ~S20108C11(); // _ZN9S20108C11D2Ev
  virtual void  v37(); // _ZN9S20108C113v37Ev
  virtual void  v38(); // _ZN9S20108C113v38Ev
  virtual void  v39(); // _ZN9S20108C113v39Ev
  virtual void  v40(); // _ZN9S20108C113v40Ev
  virtual void  v41(); // _ZN9S20108C113v41Ev
  virtual void  v42(); // _ZN9S20108C113v42Ev
  virtual void  v43(); // _ZN9S20108C113v43Ev
  virtual void  v44(); // _ZN9S20108C113v44Ev
  S20108C11(); // tgen
};
//SIG(-1 S20108C11) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13 v14 v15} BC4{ VBC3 v16 v17 v18 FD[9]} VBC5{ BC3 v19} v20 FD} BC5 BC4 BC6{ v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S20108C11 ::~S20108C11(){ note_dtor("S20108C11", this);}
void  S20108C11 ::v37(){vfunc_called(this, "_ZN9S20108C113v37Ev");}
void  S20108C11 ::v38(){vfunc_called(this, "_ZN9S20108C113v38Ev");}
void  S20108C11 ::v39(){vfunc_called(this, "_ZN9S20108C113v39Ev");}
void  S20108C11 ::v40(){vfunc_called(this, "_ZN9S20108C113v40Ev");}
void  S20108C11 ::v41(){vfunc_called(this, "_ZN9S20108C113v41Ev");}
void  S20108C11 ::v42(){vfunc_called(this, "_ZN9S20108C113v42Ev");}
void  S20108C11 ::v43(){vfunc_called(this, "_ZN9S20108C113v43Ev");}
void  S20108C11 ::v44(){vfunc_called(this, "_ZN9S20108C113v44Ev");}
S20108C11 ::S20108C11(){ note_ctor("S20108C11", this);} // tgen

static void Test_S20108C11()
{
  extern Class_Descriptor cd_S20108C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S20108C11, buf);
    S20108C11 *dp, &lv = *(dp=new (buf) S20108C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S20108C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20108C11)");
    /*is_ambiguous_... S20108C8::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C8*), ABISELECT(192,120), "S20108C11");
    check_base_class_offset(lv, (S20108C4*)(S20108C7*)(S20108C8*), ABISELECT(192,120), "S20108C11");
    /*is_ambiguous_... S20108C11::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C7*), ABISELECT(192,120), "S20108C11");
    check_base_class_offset(lv, (S20108C7*)(S20108C8*), ABISELECT(192,120), "S20108C11");
    /*is_ambiguous_... S20108C11::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C9*), ABISELECT(368,244), "S20108C11");
    check_base_class_offset(lv, (S20108C9*)(S20108C8*), ABISELECT(368,244), "S20108C11");
    check_base_class_offset(lv, (S20108C8*), ABISELECT(192,120), "S20108C11");
    /*is_ambiguous_... S20108C11::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C9*), 0, "S20108C11");
    /*is_ambiguous_... S20108C11::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C9*), 0, "S20108C11");
    /*is_ambiguous_... S20108C11::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C7*), ABISELECT(16,4), "S20108C11");
    check_base_class_offset(lv, (S20108C2*), ABISELECT(176,116), "S20108C11");
    test_class_info(&lv, &cd_S20108C11);
    dp->~S20108C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C11(Test_S20108C11, "S20108C11", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN9S20108C11C1Ev();
extern void _ZN9S20108C11D2Ev();
Name_Map name_map_S20108C11[] = {
  NSPAIR(_ZN9S20108C11C1Ev),
  NSPAIR(_ZN9S20108C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
extern Class_Descriptor cd_S20108C8;
extern VTBL_ENTRY _ZTI8S20108C8[];
extern  VTBL_ENTRY _ZTV8S20108C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C8[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C2;
extern VTBL_ENTRY _ZTI8S20108C2[];
extern  VTBL_ENTRY _ZTV8S20108C2[];
static Base_Class bases_S20108C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20108C4,    ABISELECT(192,120), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20108C7,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20108C4,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(368,244), //bcp->offset
    74, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20108C8,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20108C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20108C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20108C7,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20108C2,    ABISELECT(176,116), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20108C11[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void _ZN9S20108C11D1Ev();
extern void _ZN9S20108C11D0Ev();
extern void _ZN9S20108C113v37Ev();
extern void _ZN9S20108C113v38Ev();
extern void _ZN9S20108C113v39Ev();
extern void _ZN9S20108C113v40Ev();
extern void _ZN9S20108C113v41Ev();
extern void _ZN9S20108C113v42Ev();
extern void _ZN9S20108C113v43Ev();
extern void _ZN9S20108C113v44Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY vtc_S20108C11[] = {
  ABISELECT(368,244),
  ABISELECT(192,120),
  ABISELECT(192,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  (VTBL_ENTRY)&_ZN9S20108C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20108C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v44Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern VTBL_ENTRY _ZTV9S20108C11[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__A1__9S20108C11[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C7__A1__9S20108C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C8__9S20108C11[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C78S20108C8__9S20108C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C8__9S20108C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
static  VTT_ENTRY vtt_S20108C11[] = {
  {&(_ZTV9S20108C11[5]),  5,92},
  {&(_tg__ZTV8S20108C7__A1__9S20108C11[10]),  10,20},
  {&(_tg__ZTV8S20108C4__8S20108C7__A1__9S20108C11[9]),  9,16},
  {&(_ZTV9S20108C11[63]),  63,92},
  {&(_ZTV9S20108C11[63]),  63,92},
  {&(_ZTV9S20108C11[84]),  84,92},
  {&(_ZTV9S20108C11[33]),  33,92},
  {&(_tg__ZTV8S20108C8__9S20108C11[11]),  11,22},
  {&(_tg__ZTV8S20108C78S20108C8__9S20108C11[10]),  10,20},
  {&(_tg__ZTV8S20108C78S20108C8__9S20108C11[10]),  10,20},
  {&(_tg__ZTV8S20108C8__9S20108C11[11]),  11,22},
  {&(_tg__ZTV8S20108C9__8S20108C8__9S20108C11[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20108C11[];
extern  VTBL_ENTRY _ZTV9S20108C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20108C11[];
Class_Descriptor cd_S20108C11 = {  "S20108C11", // class name
  bases_S20108C11, 9,
  &(vtc_S20108C11[0]), // expected_vtbl_contents
  &(vtt_S20108C11[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI9S20108C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20108C11),92, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20108C11),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20108C1  : virtual S20108C2 , virtual S20108C3 , S20108C10 , S20108C11 {
  virtual  ~S20108C1(); // _ZN8S20108C1D2Ev
  virtual void  v1(); // _ZN8S20108C12v1Ev
  virtual void  v2(); // _ZN8S20108C12v2Ev
  virtual void  v3(); // _ZN8S20108C12v3Ev
  virtual void  v4(); // _ZN8S20108C12v4Ev
  virtual void  v5(); // _ZN8S20108C12v5Ev
  virtual void  v6(); // _ZN8S20108C12v6Ev
  S20108C1(); // tgen
};
//SIG(1 S20108C1) C1{ VBC2{ v7 v8 v9} VBC3{ BC4{ v10 v11 v12 v13 v14 v15 v16} BC5{ BC6{ vd v17 v18 v19 v20 v21} VBC4 VBC7{ VBC4 v22 v23 v24 FD[9]} BC8{ VBC4 BC7 VBC9{ BC4 v25} v26 FD} VBC2 vd v27 v28 v29 v30 v31 v32 v33 Fc FL} BC9 v34 v35 FL} BC10{ v36 FL} BC11{ VBC8 BC9 BC7 BC2 vd v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6}


 S20108C1 ::~S20108C1(){ note_dtor("S20108C1", this);}
void  S20108C1 ::v1(){vfunc_called(this, "_ZN8S20108C12v1Ev");}
void  S20108C1 ::v2(){vfunc_called(this, "_ZN8S20108C12v2Ev");}
void  S20108C1 ::v3(){vfunc_called(this, "_ZN8S20108C12v3Ev");}
void  S20108C1 ::v4(){vfunc_called(this, "_ZN8S20108C12v4Ev");}
void  S20108C1 ::v5(){vfunc_called(this, "_ZN8S20108C12v5Ev");}
void  S20108C1 ::v6(){vfunc_called(this, "_ZN8S20108C12v6Ev");}
S20108C1 ::S20108C1(){ note_ctor("S20108C1", this);} // tgen

static void Test_S20108C1()
{
  extern Class_Descriptor cd_S20108C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,134)];
    init_test(&cd_S20108C1, buf);
    S20108C1 *dp, &lv = *(dp=new (buf) S20108C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,532), "sizeof(S20108C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20108C1)");
    /*is_ambiguous_... S20108C1::S20108C2 */ AMB_check_base_class_offset(lv, (S20108C2*), ABISELECT(200,132), "S20108C1");
    check_base_class_offset(lv, (S20108C2*)(S20108C5*)(S20108C3*), ABISELECT(200,132), "S20108C1");
    /*is_ambiguous_... S20108C3::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C3*), ABISELECT(208,136), "S20108C1");
    check_base_class_offset(lv, (S20108C6*)(S20108C5*)(S20108C3*), ABISELECT(224,140), "S20108C1");
    /*is_ambiguous_... S20108C5::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C5*)(S20108C3*), ABISELECT(448,292), "S20108C1");
    /*is_ambiguous_... S20108C1::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C7*), ABISELECT(448,292), "S20108C1");
    /*is_ambiguous_... S20108C8::S20108C4 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C8*)(S20108C5*)(S20108C3*), ABISELECT(448,292), "S20108C1");
    check_base_class_offset(lv, (S20108C4*)(S20108C7*)(S20108C8*)(S20108C5*)(S20108C3*), ABISELECT(448,292), "S20108C1");
    /*is_ambiguous_... S20108C1::S20108C8 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C8*), ABISELECT(448,292), "S20108C1");
    /*is_ambiguous_... S20108C1::S20108C8 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C7*)(S20108C8*), ABISELECT(448,292), "S20108C1");
    /*is_ambiguous_... S20108C11::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C7*)(S20108C11*), ABISELECT(448,292), "S20108C1");
    /*is_ambiguous_... S20108C5::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C7*)(S20108C5*)(S20108C3*), ABISELECT(448,292), "S20108C1");
    check_base_class_offset(lv, (S20108C7*)(S20108C8*)(S20108C5*)(S20108C3*), ABISELECT(240,144), "S20108C1");
    /*is_ambiguous_... S20108C1::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C9*), ABISELECT(608,404), "S20108C1");
    check_base_class_offset(lv, (S20108C9*)(S20108C8*)(S20108C5*)(S20108C3*), ABISELECT(608,404), "S20108C1");
    /*is_ambiguous_... S20108C1::S20108C8 */ AMB_check_base_class_offset(lv, (S20108C9*)(S20108C8*), ABISELECT(608,404), "S20108C1");
    check_base_class_offset(lv, (S20108C8*)(S20108C5*)(S20108C3*), ABISELECT(240,144), "S20108C1");
    check_base_class_offset(lv, (S20108C5*)(S20108C3*), ABISELECT(224,140), "S20108C1");
    /*is_ambiguous_... S20108C3::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C9*)(S20108C3*), ABISELECT(432,280), "S20108C1");
    /*is_ambiguous_... S20108C3::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C9*)(S20108C3*), ABISELECT(432,280), "S20108C1");
    check_base_class_offset(lv, (S20108C3*), ABISELECT(208,136), "S20108C1");
    check_base_class_offset(lv, (S20108C10*), 0, "S20108C1");
    /*is_ambiguous_... S20108C1::S20108C8 */ AMB_check_base_class_offset(lv, (S20108C7*)(S20108C8*), ABISELECT(624,408), "S20108C1");
    check_base_class_offset(lv, (S20108C8*)(S20108C11*), ABISELECT(624,408), "S20108C1");
    /*is_ambiguous_... S20108C11::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C4*)(S20108C9*)(S20108C11*), ABISELECT(16,12), "S20108C1");
    /*is_ambiguous_... S20108C11::S20108C9 */ AMB_check_base_class_offset(lv, (S20108C9*)(S20108C11*), ABISELECT(16,12), "S20108C1");
    /*is_ambiguous_... S20108C11::S20108C7 */ AMB_check_base_class_offset(lv, (S20108C7*)(S20108C11*), ABISELECT(32,16), "S20108C1");
    check_base_class_offset(lv, (S20108C2*)(S20108C11*), ABISELECT(192,128), "S20108C1");
    check_base_class_offset(lv, (S20108C11*), ABISELECT(16,12), "S20108C1");
    test_class_info(&lv, &cd_S20108C1);
    dp->~S20108C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20108C1(Test_S20108C1, "S20108C1", ABISELECT(800,532));

#else // __cplusplus

extern void _ZN8S20108C1C1Ev();
extern void _ZN8S20108C1D2Ev();
Name_Map name_map_S20108C1[] = {
  NSPAIR(_ZN8S20108C1C1Ev),
  NSPAIR(_ZN8S20108C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20108C2;
extern VTBL_ENTRY _ZTI8S20108C2[];
extern  VTBL_ENTRY _ZTV8S20108C2[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C6;
extern VTBL_ENTRY _ZTI8S20108C6[];
extern  VTBL_ENTRY _ZTV8S20108C6[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
extern Class_Descriptor cd_S20108C8;
extern VTBL_ENTRY _ZTI8S20108C8[];
extern  VTBL_ENTRY _ZTV8S20108C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C8[];
extern Class_Descriptor cd_S20108C5;
extern VTBL_ENTRY _ZTI8S20108C5[];
extern  VTBL_ENTRY _ZTV8S20108C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C5[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
extern Class_Descriptor cd_S20108C3;
extern VTBL_ENTRY _ZTI8S20108C3[];
extern  VTBL_ENTRY _ZTV8S20108C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C3[];
extern Class_Descriptor cd_S20108C10;
extern VTBL_ENTRY _ZTI9S20108C10[];
extern  VTBL_ENTRY _ZTV9S20108C10[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C8;
extern VTBL_ENTRY _ZTI8S20108C8[];
extern  VTBL_ENTRY _ZTV8S20108C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C8[];
extern Class_Descriptor cd_S20108C4;
extern VTBL_ENTRY _ZTI8S20108C4[];
extern  VTBL_ENTRY _ZTV8S20108C4[];
extern Class_Descriptor cd_S20108C9;
extern VTBL_ENTRY _ZTI8S20108C9[];
extern  VTBL_ENTRY _ZTV8S20108C9[];
extern Class_Descriptor cd_S20108C7;
extern VTBL_ENTRY _ZTI8S20108C7[];
extern  VTBL_ENTRY _ZTV8S20108C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C7[];
extern Class_Descriptor cd_S20108C2;
extern VTBL_ENTRY _ZTI8S20108C2[];
extern  VTBL_ENTRY _ZTV8S20108C2[];
extern Class_Descriptor cd_S20108C11;
extern VTBL_ENTRY _ZTI9S20108C11[];
extern  VTBL_ENTRY _ZTV9S20108C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20108C11[];
static Base_Class bases_S20108C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20108C2,    ABISELECT(200,132), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20108C4,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S20108C6,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20108C4,    ABISELECT(448,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20108C7,    ABISELECT(448,292), //bcp->offset
    169, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20108C7,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20108C4,    ABISELECT(608,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(608,404), //bcp->offset
    192, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20108C8,    ABISELECT(240,144), //bcp->offset
    137, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20108C5,    ABISELECT(224,140), //bcp->offset
    117, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20108C4,    ABISELECT(432,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(432,280), //bcp->offset
    159, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20108C3,    ABISELECT(208,136), //bcp->offset
    73, //bcp->virtual_function_table_offset
    33, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20108C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20108C7,    ABISELECT(624,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20108C8,    ABISELECT(624,408), //bcp->offset
    210, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S20108C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20108C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20108C7,    ABISELECT(32,16), //bcp->offset
    40, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20108C2,    ABISELECT(192,128), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20108C11,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20108C1[];
extern void _ZN9S20108C103v36Ev();
extern void _ZN8S20108C1D1Ev();
extern void _ZN8S20108C1D0Ev();
extern void _ZN8S20108C12v1Ev();
extern void _ZN8S20108C12v2Ev();
extern void _ZN8S20108C12v3Ev();
extern void _ZN8S20108C12v4Ev();
extern void _ZN8S20108C12v5Ev();
extern void _ZN8S20108C12v6Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void ABISELECT(_ZThn16_N8S20108C1D1Ev,_ZThn12_N8S20108C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20108C1D0Ev,_ZThn12_N8S20108C1D0Ev)();
extern void _ZN9S20108C113v37Ev();
extern void _ZN9S20108C113v38Ev();
extern void _ZN9S20108C113v39Ev();
extern void _ZN9S20108C113v40Ev();
extern void _ZN9S20108C113v41Ev();
extern void _ZN9S20108C113v42Ev();
extern void _ZN9S20108C113v43Ev();
extern void _ZN9S20108C113v44Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C33v34Ev();
extern void _ZN8S20108C33v35Ev();
extern void ABISELECT(_ZTv0_n128_N8S20108C1D1Ev,_ZTv0_n64_N8S20108C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20108C1D1Ev,_ZThn136_N8S20108C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S20108C1D0Ev,_ZTv0_n64_N8S20108C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20108C1D0Ev,_ZThn136_N8S20108C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n128_N8S20108C1D1Ev,_ZTvn4_n64_N8S20108C1D1Ev)();
extern void ABISELECT(_ZTvn16_n128_N8S20108C1D0Ev,_ZTvn4_n64_N8S20108C1D0Ev)();
extern void _ZN8S20108C63v14Ev();
extern void _ZN8S20108C63v15Ev();
extern void _ZN8S20108C63v16Ev();
extern void _ZN8S20108C63v17Ev();
extern void _ZN8S20108C63v18Ev();
extern void _ZN8S20108C53v27Ev();
extern void _ZN8S20108C53v28Ev();
extern void _ZN8S20108C53v29Ev();
extern void _ZN8S20108C53v30Ev();
extern void _ZN8S20108C53v31Ev();
extern void _ZN8S20108C53v32Ev();
extern void _ZN8S20108C53v33Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY vtc_S20108C1[] = {
  ABISELECT(624,408),
  ABISELECT(608,404),
  ABISELECT(448,292),
  ABISELECT(448,292),
  ABISELECT(208,136),
  ABISELECT(200,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN9S20108C103v36Ev,
  (VTBL_ENTRY)&_ZN8S20108C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20108C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20108C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20108C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20108C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20108C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20108C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20108C12v6Ev,
  ABISELECT(592,392),
  ABISELECT(432,280),
  ABISELECT(608,396),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20108C1D1Ev,_ZThn12_N8S20108C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20108C1D0Ev,_ZThn12_N8S20108C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20108C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v44Ev,
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
  0,
  0,
  0,
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
  ABISELECT(224,144),
  ABISELECT(32,8),
  ABISELECT(32,8),
  ABISELECT(32,8),
  ABISELECT(32,8),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(-208,-136),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(400,268),
  ABISELECT(240,156),
  ABISELECT(240,156),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C33v34Ev,
  (VTBL_ENTRY)&_ZN8S20108C33v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20108C1D1Ev,_ZTv0_n64_N8S20108C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20108C1D0Ev,_ZTv0_n64_N8S20108C1D0Ev),
  ABISELECT(-24,-8),
  ABISELECT(384,264),
  ABISELECT(224,152),
  ABISELECT(224,152),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n128_N8S20108C1D1Ev,_ZTvn4_n64_N8S20108C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n128_N8S20108C1D0Ev,_ZTvn4_n64_N8S20108C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20108C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v33Ev,
  ABISELECT(368,260),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-448,-292),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-404),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-624,-408),
  (VTBL_ENTRY)&(_ZTI8S20108C1[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern VTBL_ENTRY _ZTV8S20108C1[];
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
extern void _ZN9S20108C11D1Ev();
extern void _ZN9S20108C11D0Ev();
extern void _ZN9S20108C113v37Ev();
extern void _ZN9S20108C113v38Ev();
extern void _ZN9S20108C113v39Ev();
extern void _ZN9S20108C113v40Ev();
extern void _ZN9S20108C113v41Ev();
extern void _ZN9S20108C113v42Ev();
extern void _ZN9S20108C113v43Ev();
extern void _ZN9S20108C113v44Ev();
static  VTBL_ENTRY _tg__ZTV9S20108C11__8S20108C1[] = {
  ABISELECT(592,392),
  ABISELECT(432,280),
  ABISELECT(608,396),
  0,
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
  (VTBL_ENTRY)&_ZN9S20108C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20108C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20108C113v44Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C79S20108C11__A3__8S20108C1[] = {
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C79S20108C11__A3__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-276),
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C8__9S20108C11__8S20108C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__9S20108C11__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__9S20108C11__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__A1__9S20108C11__8S20108C1[] = {
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(416,276),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20108C11[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C33v34Ev();
extern void _ZN8S20108C33v35Ev();
extern void _ZN8S20108C3D1Ev();
extern void _ZN8S20108C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C3__8S20108C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(400,268),
  ABISELECT(240,156),
  ABISELECT(240,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C33v34Ev,
  (VTBL_ENTRY)&_ZN8S20108C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20108C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20108C3D0Ev,
};
extern void _ZN8S20108C5D1Ev();
extern void _ZN8S20108C5D0Ev();
extern void _ZN8S20108C63v14Ev();
extern void _ZN8S20108C63v15Ev();
extern void _ZN8S20108C63v16Ev();
extern void _ZN8S20108C63v17Ev();
extern void _ZN8S20108C63v18Ev();
extern void _ZN8S20108C53v27Ev();
extern void _ZN8S20108C53v28Ev();
extern void _ZN8S20108C53v29Ev();
extern void _ZN8S20108C53v30Ev();
extern void _ZN8S20108C53v31Ev();
extern void _ZN8S20108C53v32Ev();
extern void _ZN8S20108C53v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C58S20108C3__8S20108C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(384,264),
  ABISELECT(224,152),
  ABISELECT(224,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20108C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v33Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C88S20108C58S20108C3__8S20108C1[] = {
  ABISELECT(368,260),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C78S20108C88S20108C58S20108C3__A1__8S20108C1[] = {
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C78S20108C88S20108C58S20108C3__A1__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-148),
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C88S20108C58S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-148),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C88S20108C58S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-260),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__8S20108C58S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C8__8S20108C58S20108C3__8S20108C1[] = {
  ABISELECT(368,260),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C58S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-264),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C2__8S20108C58S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  ABISELECT(24,8),
  (VTBL_ENTRY)&(_ZTI8S20108C5[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
};
extern void ABISELECT(_ZThn16_N8S20108C3D1Ev,_ZThn4_N8S20108C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20108C3D0Ev,_ZThn4_N8S20108C3D0Ev)();
extern void _ZN8S20108C63v14Ev();
extern void _ZN8S20108C63v15Ev();
extern void _ZN8S20108C63v16Ev();
extern void _ZN8S20108C63v17Ev();
extern void _ZN8S20108C63v18Ev();
extern void _ZN8S20108C53v27Ev();
extern void _ZN8S20108C53v28Ev();
extern void _ZN8S20108C53v29Ev();
extern void _ZN8S20108C53v30Ev();
extern void _ZN8S20108C53v31Ev();
extern void _ZN8S20108C53v32Ev();
extern void _ZN8S20108C53v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C5__8S20108C3__8S20108C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(384,264),
  ABISELECT(224,152),
  ABISELECT(224,152),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20108C3D1Ev,_ZThn4_N8S20108C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20108C3D0Ev,_ZThn4_N8S20108C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20108C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20108C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20108C53v33Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__8S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C88S20108C5__8S20108C3__8S20108C1[] = {
  ABISELECT(368,260),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(208,148),
  ABISELECT(-32,-8),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-268),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
extern void _ZN8S20108C23v24Ev();
extern void _ZN8S20108C23v25Ev();
extern void _ZN8S20108C23v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C2__8S20108C3__8S20108C1[] = {
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20108C3[0]),
  (VTBL_ENTRY)&_ZN8S20108C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20108C23v26Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C7__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
extern void _ZN8S20108C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C8__A1__8S20108C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20108C83v23Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C73v19Ev();
extern void _ZN8S20108C73v20Ev();
extern void _ZN8S20108C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C78S20108C8__A2__8S20108C1[] = {
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20108C73v21Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C78S20108C8__A2__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(176,116),
  (VTBL_ENTRY)&(_ZTI8S20108C7[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C4__8S20108C8__A1__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(176,116),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
};
extern void _ZN8S20108C42v7Ev();
extern void _ZN8S20108C42v8Ev();
extern void _ZN8S20108C42v9Ev();
extern void _ZN8S20108C43v10Ev();
extern void _ZN8S20108C43v11Ev();
extern void _ZN8S20108C43v12Ev();
extern void _ZN8S20108C43v13Ev();
extern void _ZN8S20108C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20108C9__8S20108C8__A1__8S20108C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S20108C8[0]),
  (VTBL_ENTRY)&_ZN8S20108C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20108C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20108C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20108C93v22Ev,
};
static  VTT_ENTRY vtt_S20108C1[] = {
  {&(_ZTV8S20108C1[8]),  8,236},
  {&(_tg__ZTV9S20108C11__8S20108C1[5]),  5,23},
  {&(_tg__ZTV8S20108C79S20108C11__A3__8S20108C1[10]),  10,20},
  {&(_tg__ZTV8S20108C4__8S20108C79S20108C11__A3__8S20108C1[9]),  9,16},
  {&(_tg__ZTV8S20108C8__9S20108C11__8S20108C1[15]),  15,26},
  {&(_tg__ZTV8S20108C4__9S20108C11__8S20108C1[9]),  9,16},
  {&(_tg__ZTV8S20108C9__9S20108C11__8S20108C1[10]),  10,18},
  {&(_tg__ZTV8S20108C7__A1__9S20108C11__8S20108C1[10]),  10,20},
  {&(_ZTV8S20108C1[70]),  70,236},
  {&(_ZTV8S20108C1[106]),  106,236},
  {&(_ZTV8S20108C1[123]),  123,236},
  {&(_ZTV8S20108C1[182]),  182,236},
  {&(_ZTV8S20108C1[182]),  182,236},
  {&(_ZTV8S20108C1[148]),  148,236},
  {&(_ZTV8S20108C1[202]),  202,236},
  {&(_ZTV8S20108C1[161]),  161,236},
  {&(_ZTV8S20108C1[22]),  22,236},
  {&(_ZTV8S20108C1[225]),  225,236},
  {&(_ZTV8S20108C1[50]),  50,236},
  {&(_tg__ZTV8S20108C3__8S20108C1[6]),  6,17},
  {&(_tg__ZTV8S20108C58S20108C3__8S20108C1[6]),  6,20},
  {&(_tg__ZTV8S20108C88S20108C58S20108C3__8S20108C1[11]),  11,22},
  {&(_tg__ZTV8S20108C78S20108C88S20108C58S20108C3__A1__8S20108C1[10]),  10,20},
  {&(_tg__ZTV8S20108C4__8S20108C78S20108C88S20108C58S20108C3__A1__8S20108C1[9]),  9,16},
  {&(_tg__ZTV8S20108C4__8S20108C88S20108C58S20108C3__8S20108C1[9]),  9,16},
  {&(_tg__ZTV8S20108C9__8S20108C88S20108C58S20108C3__8S20108C1[10]),  10,18},
  {&(_tg__ZTV8S20108C7__8S20108C58S20108C3__8S20108C1[13]),  13,23},
  {&(_tg__ZTV8S20108C7__8S20108C58S20108C3__8S20108C1[13]),  13,23},
  {&(_tg__ZTV8S20108C8__8S20108C58S20108C3__8S20108C1[11]),  11,22},
  {&(_tg__ZTV8S20108C9__8S20108C58S20108C3__8S20108C1[10]),  10,18},
  {&(_tg__ZTV8S20108C2__8S20108C58S20108C3__8S20108C1[5]),  5,8},
  {&(_tg__ZTV8S20108C5__8S20108C3__8S20108C1[6]),  6,20},
  {&(_tg__ZTV8S20108C7__8S20108C3__8S20108C1[13]),  13,23},
  {&(_tg__ZTV8S20108C7__8S20108C3__8S20108C1[13]),  13,23},
  {&(_tg__ZTV8S20108C88S20108C5__8S20108C3__8S20108C1[11]),  11,22},
  {&(_tg__ZTV8S20108C9__8S20108C3__8S20108C1[10]),  10,18},
  {&(_tg__ZTV8S20108C2__8S20108C3__8S20108C1[5]),  5,8},
  {&(_tg__ZTV8S20108C7__8S20108C1[10]),  10,20},
  {&(_tg__ZTV8S20108C7__8S20108C1[10]),  10,20},
  {&(_tg__ZTV8S20108C8__A1__8S20108C1[11]),  11,22},
  {&(_tg__ZTV8S20108C78S20108C8__A2__8S20108C1[10]),  10,20},
  {&(_tg__ZTV8S20108C4__8S20108C78S20108C8__A2__8S20108C1[9]),  9,16},
  {&(_tg__ZTV8S20108C4__8S20108C8__A1__8S20108C1[9]),  9,16},
  {&(_tg__ZTV8S20108C9__8S20108C8__A1__8S20108C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20108C1[];
extern  VTBL_ENTRY _ZTV8S20108C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20108C1[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20108C1D0Ev,_ZTv0_n64_N8S20108C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20108C1D0Ev,_ZThn136_N8S20108C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20108C1D1Ev,_ZTv0_n64_N8S20108C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20108C1D1Ev,_ZThn136_N8S20108C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20108C1 = {  "S20108C1", // class name
  bases_S20108C1, 21,
  &(vtc_S20108C1[0]), // expected_vtbl_contents
  &(vtt_S20108C1[0]), // expected_vtt_contents
  ABISELECT(800,532), // object size
  NSPAIRA(_ZTI8S20108C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20108C1),236, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20108C1),44, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20107C2  {
  virtual void  v24(); // _ZN8S20107C23v24Ev
  virtual void  v25(); // _ZN8S20107C23v25Ev
  virtual void  v26(); // _ZN8S20107C23v26Ev
  ~S20107C2(); // tgen
  S20107C2(); // tgen
};
//SIG(-1 S20107C2) C1{ v1 v2 v3}


void  S20107C2 ::v24(){vfunc_called(this, "_ZN8S20107C23v24Ev");}
void  S20107C2 ::v25(){vfunc_called(this, "_ZN8S20107C23v25Ev");}
void  S20107C2 ::v26(){vfunc_called(this, "_ZN8S20107C23v26Ev");}
S20107C2 ::~S20107C2(){ note_dtor("S20107C2", this);} // tgen
S20107C2 ::S20107C2(){ note_ctor("S20107C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20107C2C1Ev();
extern void _ZN8S20107C2D1Ev();
Name_Map name_map_S20107C2[] = {
  NSPAIR(_ZN8S20107C2C1Ev),
  NSPAIR(_ZN8S20107C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20107C2[];
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
static  VTBL_ENTRY vtc_S20107C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C2[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
};
extern VTBL_ENTRY _ZTI8S20107C2[];
extern  VTBL_ENTRY _ZTV8S20107C2[];
Class_Descriptor cd_S20107C2 = {  "S20107C2", // class name
  0,0,//no base classes
  &(vtc_S20107C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20107C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20107C2),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  S20107C4  {
  virtual void  v7(); // _ZN8S20107C42v7Ev
  virtual void  v8(); // _ZN8S20107C42v8Ev
  virtual void  v9(); // _ZN8S20107C42v9Ev
  virtual void  v10(); // _ZN8S20107C43v10Ev
  virtual void  v11(); // _ZN8S20107C43v11Ev
  virtual void  v12(); // _ZN8S20107C43v12Ev
  virtual void  v13(); // _ZN8S20107C43v13Ev
  ~S20107C4(); // tgen
  S20107C4(); // tgen
};
//SIG(-1 S20107C4) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S20107C4 ::v7(){vfunc_called(this, "_ZN8S20107C42v7Ev");}
void  S20107C4 ::v8(){vfunc_called(this, "_ZN8S20107C42v8Ev");}
void  S20107C4 ::v9(){vfunc_called(this, "_ZN8S20107C42v9Ev");}
void  S20107C4 ::v10(){vfunc_called(this, "_ZN8S20107C43v10Ev");}
void  S20107C4 ::v11(){vfunc_called(this, "_ZN8S20107C43v11Ev");}
void  S20107C4 ::v12(){vfunc_called(this, "_ZN8S20107C43v12Ev");}
void  S20107C4 ::v13(){vfunc_called(this, "_ZN8S20107C43v13Ev");}
S20107C4 ::~S20107C4(){ note_dtor("S20107C4", this);} // tgen
S20107C4 ::S20107C4(){ note_ctor("S20107C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20107C4C1Ev();
extern void _ZN8S20107C4D1Ev();
Name_Map name_map_S20107C4[] = {
  NSPAIR(_ZN8S20107C4C1Ev),
  NSPAIR(_ZN8S20107C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20107C4[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY vtc_S20107C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C4[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
Class_Descriptor cd_S20107C4 = {  "S20107C4", // class name
  0,0,//no base classes
  &(vtc_S20107C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20107C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20107C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20107C6  {
  virtual  ~S20107C6(); // _ZN8S20107C6D1Ev
  virtual void  v14(); // _ZN8S20107C63v14Ev
  virtual void  v15(); // _ZN8S20107C63v15Ev
  virtual void  v16(); // _ZN8S20107C63v16Ev
  virtual void  v17(); // _ZN8S20107C63v17Ev
  virtual void  v18(); // _ZN8S20107C63v18Ev
  S20107C6(); // tgen
};
//SIG(-1 S20107C6) C1{ vd v1 v2 v3 v4 v5}


 S20107C6 ::~S20107C6(){ note_dtor("S20107C6", this);}
void  S20107C6 ::v14(){vfunc_called(this, "_ZN8S20107C63v14Ev");}
void  S20107C6 ::v15(){vfunc_called(this, "_ZN8S20107C63v15Ev");}
void  S20107C6 ::v16(){vfunc_called(this, "_ZN8S20107C63v16Ev");}
void  S20107C6 ::v17(){vfunc_called(this, "_ZN8S20107C63v17Ev");}
void  S20107C6 ::v18(){vfunc_called(this, "_ZN8S20107C63v18Ev");}
S20107C6 ::S20107C6(){ note_ctor("S20107C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20107C6C1Ev();
extern void _ZN8S20107C6D1Ev();
Name_Map name_map_S20107C6[] = {
  NSPAIR(_ZN8S20107C6C1Ev),
  NSPAIR(_ZN8S20107C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20107C6[];
extern void _ZN8S20107C6D1Ev();
extern void _ZN8S20107C6D0Ev();
extern void _ZN8S20107C63v14Ev();
extern void _ZN8S20107C63v15Ev();
extern void _ZN8S20107C63v16Ev();
extern void _ZN8S20107C63v17Ev();
extern void _ZN8S20107C63v18Ev();
static  VTBL_ENTRY vtc_S20107C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C6[0]),
  (VTBL_ENTRY)&_ZN8S20107C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20107C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v18Ev,
};
extern VTBL_ENTRY _ZTI8S20107C6[];
extern  VTBL_ENTRY _ZTV8S20107C6[];
Class_Descriptor cd_S20107C6 = {  "S20107C6", // class name
  0,0,//no base classes
  &(vtc_S20107C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20107C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20107C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20107C7  : virtual S20107C4 {
  long double s20107c7f0[9];
  virtual void  v19(); // _ZN8S20107C73v19Ev
  virtual void  v20(); // _ZN8S20107C73v20Ev
  virtual void  v21(); // _ZN8S20107C73v21Ev
  ~S20107C7(); // tgen
  S20107C7(); // tgen
};
//SIG(-1 S20107C7) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10} v1 v2 v3 FD[9]}


void  S20107C7 ::v19(){vfunc_called(this, "_ZN8S20107C73v19Ev");}
void  S20107C7 ::v20(){vfunc_called(this, "_ZN8S20107C73v20Ev");}
void  S20107C7 ::v21(){vfunc_called(this, "_ZN8S20107C73v21Ev");}
S20107C7 ::~S20107C7(){ note_dtor("S20107C7", this);} // tgen
S20107C7 ::S20107C7(){ note_ctor("S20107C7", this);} // tgen

static void Test_S20107C7()
{
  extern Class_Descriptor cd_S20107C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20107C7, buf);
    S20107C7 *dp, &lv = *(dp=new (buf) S20107C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20107C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20107C7)");
    check_base_class_offset(lv, (S20107C4*), 0, "S20107C7");
    check_field_offset(lv, s20107c7f0, ABISELECT(16,4), "S20107C7.s20107c7f0");
    test_class_info(&lv, &cd_S20107C7);
    dp->~S20107C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C7(Test_S20107C7, "S20107C7", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S20107C7C1Ev();
extern void _ZN8S20107C7D1Ev();
Name_Map name_map_S20107C7[] = {
  NSPAIR(_ZN8S20107C7C1Ev),
  NSPAIR(_ZN8S20107C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
static Base_Class bases_S20107C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20107C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20107C7[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY vtc_S20107C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern VTBL_ENTRY _ZTV8S20107C7[];
static  VTT_ENTRY vtt_S20107C7[] = {
  {&(_ZTV8S20107C7[10]),  10,20},
  {&(_ZTV8S20107C7[10]),  10,20},
};
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
Class_Descriptor cd_S20107C7 = {  "S20107C7", // class name
  bases_S20107C7, 1,
  &(vtc_S20107C7[0]), // expected_vtbl_contents
  &(vtt_S20107C7[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20107C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20107C7),20, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20107C7),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  S20107C9  : S20107C4 {
  virtual void  v22(); // _ZN8S20107C93v22Ev
  ~S20107C9(); // tgen
  S20107C9(); // tgen
};
//SIG(-1 S20107C9) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


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

static void Test_S20107C9()
{
  extern Class_Descriptor cd_S20107C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20107C9, buf);
    S20107C9 *dp, &lv = *(dp=new (buf) S20107C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20107C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20107C9)");
    check_base_class_offset(lv, (S20107C4*), 0, "S20107C9");
    test_class_info(&lv, &cd_S20107C9);
    dp->~S20107C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C9(Test_S20107C9, "S20107C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20107C9C1Ev();
extern void _ZN8S20107C9D1Ev();
Name_Map name_map_S20107C9[] = {
  NSPAIR(_ZN8S20107C9C1Ev),
  NSPAIR(_ZN8S20107C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
static Base_Class bases_S20107C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20107C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20107C9[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY vtc_S20107C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C9[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
Class_Descriptor cd_S20107C9 = {  "S20107C9", // class name
  bases_S20107C9, 1,
  &(vtc_S20107C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20107C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20107C9),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  S20107C8  : virtual S20107C4 , S20107C7 , virtual S20107C9 {
  long double s20107c8f0;
  virtual void  v23(); // _ZN8S20107C83v23Ev
  ~S20107C8(); // tgen
  S20107C8(); // tgen
};
//SIG(-1 S20107C8) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8} BC3{ VBC2 v9 v10 v11 FD[9]} VBC4{ BC2 v12} v1 FD}


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

static void Test_S20107C8()
{
  extern Class_Descriptor cd_S20107C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S20107C8, buf);
    S20107C8 *dp, &lv = *(dp=new (buf) S20107C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S20107C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20107C8)");
    /*is_ambiguous_... S20107C8::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*), 0, "S20107C8");
    check_base_class_offset(lv, (S20107C4*)(S20107C7*), 0, "S20107C8");
    check_base_class_offset(lv, (S20107C7*), 0, "S20107C8");
    check_base_class_offset(lv, (S20107C4*)(S20107C9*), ABISELECT(176,124), "S20107C8");
    check_base_class_offset(lv, (S20107C9*), ABISELECT(176,124), "S20107C8");
    check_field_offset(lv, s20107c8f0, ABISELECT(160,112), "S20107C8.s20107c8f0");
    test_class_info(&lv, &cd_S20107C8);
    dp->~S20107C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C8(Test_S20107C8, "S20107C8", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S20107C8C1Ev();
extern void _ZN8S20107C8D1Ev();
Name_Map name_map_S20107C8[] = {
  NSPAIR(_ZN8S20107C8C1Ev),
  NSPAIR(_ZN8S20107C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
static Base_Class bases_S20107C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20107C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20107C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20107C4,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(176,124), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20107C8[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY vtc_S20107C8[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern VTBL_ENTRY _ZTV8S20107C8[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__8S20107C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
static  VTT_ENTRY vtt_S20107C8[] = {
  {&(_ZTV8S20107C8[11]),  11,40},
  {&(_tg__ZTV8S20107C7__8S20107C8[10]),  10,20},
  {&(_tg__ZTV8S20107C7__8S20107C8[10]),  10,20},
  {&(_ZTV8S20107C8[11]),  11,40},
  {&(_ZTV8S20107C8[32]),  32,40},
};
extern VTBL_ENTRY _ZTI8S20107C8[];
extern  VTBL_ENTRY _ZTV8S20107C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C8[];
Class_Descriptor cd_S20107C8 = {  "S20107C8", // class name
  bases_S20107C8, 4,
  &(vtc_S20107C8[0]), // expected_vtbl_contents
  &(vtt_S20107C8[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S20107C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20107C8),40, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20107C8),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20107C5  : S20107C6 , virtual S20107C4 , virtual S20107C7 , S20107C8 , virtual S20107C2 {
  char s20107c5f0;
  __tsi64 s20107c5f1;
  virtual  ~S20107C5(); // _ZN8S20107C5D2Ev
  virtual void  v27(); // _ZN8S20107C53v27Ev
  virtual void  v28(); // _ZN8S20107C53v28Ev
  virtual void  v29(); // _ZN8S20107C53v29Ev
  virtual void  v30(); // _ZN8S20107C53v30Ev
  virtual void  v31(); // _ZN8S20107C53v31Ev
  virtual void  v32(); // _ZN8S20107C53v32Ev
  virtual void  v33(); // _ZN8S20107C53v33Ev
  S20107C5(); // tgen
};
//SIG(-1 S20107C5) C1{ BC2{ vd v8 v9 v10 v11 v12} VBC3{ v13 v14 v15 v16 v17 v18 v19} VBC4{ VBC3 v20 v21 v22 FD[9]} BC5{ VBC3 BC4 VBC6{ BC3 v23} v24 FD} VBC7{ v25 v26 v27} vd v1 v2 v3 v4 v5 v6 v7 Fc FL}


 S20107C5 ::~S20107C5(){ note_dtor("S20107C5", this);}
void  S20107C5 ::v27(){vfunc_called(this, "_ZN8S20107C53v27Ev");}
void  S20107C5 ::v28(){vfunc_called(this, "_ZN8S20107C53v28Ev");}
void  S20107C5 ::v29(){vfunc_called(this, "_ZN8S20107C53v29Ev");}
void  S20107C5 ::v30(){vfunc_called(this, "_ZN8S20107C53v30Ev");}
void  S20107C5 ::v31(){vfunc_called(this, "_ZN8S20107C53v31Ev");}
void  S20107C5 ::v32(){vfunc_called(this, "_ZN8S20107C53v32Ev");}
void  S20107C5 ::v33(){vfunc_called(this, "_ZN8S20107C53v33Ev");}
S20107C5 ::S20107C5(){ note_ctor("S20107C5", this);} // tgen

static void Test_S20107C5()
{
  extern Class_Descriptor cd_S20107C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,66)];
    init_test(&cd_S20107C5, buf);
    S20107C5 *dp, &lv = *(dp=new (buf) S20107C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,260), "sizeof(S20107C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20107C5)");
    check_base_class_offset(lv, (S20107C6*), 0, "S20107C5");
    /*is_ambiguous_... S20107C5::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*), ABISELECT(208,140), "S20107C5");
    /*is_ambiguous_... S20107C5::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C7*), ABISELECT(208,140), "S20107C5");
    /*is_ambiguous_... S20107C8::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C8*), ABISELECT(208,140), "S20107C5");
    check_base_class_offset(lv, (S20107C4*)(S20107C7*)(S20107C8*), ABISELECT(208,140), "S20107C5");
    /*is_ambiguous_... S20107C5::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C7*), ABISELECT(208,140), "S20107C5");
    check_base_class_offset(lv, (S20107C7*)(S20107C8*), ABISELECT(16,4), "S20107C5");
    check_base_class_offset(lv, (S20107C4*)(S20107C9*), ABISELECT(368,252), "S20107C5");
    check_base_class_offset(lv, (S20107C9*)(S20107C8*), ABISELECT(368,252), "S20107C5");
    check_base_class_offset(lv, (S20107C8*), ABISELECT(16,4), "S20107C5");
    check_base_class_offset(lv, (S20107C2*), ABISELECT(376,256), "S20107C5");
    check_field_offset(lv, s20107c5f0, ABISELECT(192,128), "S20107C5.s20107c5f0");
    check_field_offset(lv, s20107c5f1, ABISELECT(200,132), "S20107C5.s20107c5f1");
    test_class_info(&lv, &cd_S20107C5);
    dp->~S20107C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C5(Test_S20107C5, "S20107C5", ABISELECT(384,260));

#else // __cplusplus

extern void _ZN8S20107C5C1Ev();
extern void _ZN8S20107C5D2Ev();
Name_Map name_map_S20107C5[] = {
  NSPAIR(_ZN8S20107C5C1Ev),
  NSPAIR(_ZN8S20107C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20107C6;
extern VTBL_ENTRY _ZTI8S20107C6[];
extern  VTBL_ENTRY _ZTV8S20107C6[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
extern Class_Descriptor cd_S20107C8;
extern VTBL_ENTRY _ZTI8S20107C8[];
extern  VTBL_ENTRY _ZTV8S20107C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C8[];
extern Class_Descriptor cd_S20107C2;
extern VTBL_ENTRY _ZTI8S20107C2[];
extern  VTBL_ENTRY _ZTV8S20107C2[];
static Base_Class bases_S20107C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20107C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20107C4,    ABISELECT(208,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20107C7,    ABISELECT(208,140), //bcp->offset
    42, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20107C7,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20107C4,    ABISELECT(368,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(368,252), //bcp->offset
    65, //bcp->virtual_function_table_offset
    10, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20107C8,    ABISELECT(16,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20107C2,    ABISELECT(376,256), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20107C5[];
extern void _ZN8S20107C5D1Ev();
extern void _ZN8S20107C5D0Ev();
extern void _ZN8S20107C63v14Ev();
extern void _ZN8S20107C63v15Ev();
extern void _ZN8S20107C63v16Ev();
extern void _ZN8S20107C63v17Ev();
extern void _ZN8S20107C63v18Ev();
extern void _ZN8S20107C53v27Ev();
extern void _ZN8S20107C53v28Ev();
extern void _ZN8S20107C53v29Ev();
extern void _ZN8S20107C53v30Ev();
extern void _ZN8S20107C53v31Ev();
extern void _ZN8S20107C53v32Ev();
extern void _ZN8S20107C53v33Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
static  VTBL_ENTRY vtc_S20107C5[] = {
  ABISELECT(376,256),
  ABISELECT(368,252),
  ABISELECT(208,140),
  ABISELECT(208,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20107C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v33Ev,
  ABISELECT(352,248),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-140),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-252),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  0,
  0,
  0,
  ABISELECT(-376,-256),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S20107C5[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C8__8S20107C5[] = {
  ABISELECT(352,248),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C78S20107C8__A1__8S20107C5[] = {
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  ABISELECT(192,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C78S20107C8__A1__8S20107C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C8__8S20107C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C8__8S20107C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-248),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__8S20107C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
static  VTT_ENTRY vtt_S20107C5[] = {
  {&(_ZTV8S20107C5[6]),  6,91},
  {&(_tg__ZTV8S20107C8__8S20107C5[11]),  11,22},
  {&(_tg__ZTV8S20107C78S20107C8__A1__8S20107C5[10]),  10,20},
  {&(_tg__ZTV8S20107C4__8S20107C78S20107C8__A1__8S20107C5[9]),  9,16},
  {&(_tg__ZTV8S20107C4__8S20107C8__8S20107C5[9]),  9,16},
  {&(_tg__ZTV8S20107C9__8S20107C8__8S20107C5[10]),  10,18},
  {&(_ZTV8S20107C5[55]),  55,91},
  {&(_ZTV8S20107C5[55]),  55,91},
  {&(_ZTV8S20107C5[31]),  31,91},
  {&(_ZTV8S20107C5[75]),  75,91},
  {&(_ZTV8S20107C5[88]),  88,91},
  {&(_tg__ZTV8S20107C7__8S20107C5[10]),  10,20},
  {&(_tg__ZTV8S20107C7__8S20107C5[10]),  10,20},
};
extern VTBL_ENTRY _ZTI8S20107C5[];
extern  VTBL_ENTRY _ZTV8S20107C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C5[];
Class_Descriptor cd_S20107C5 = {  "S20107C5", // class name
  bases_S20107C5, 8,
  &(vtc_S20107C5[0]), // expected_vtbl_contents
  &(vtt_S20107C5[0]), // expected_vtt_contents
  ABISELECT(384,260), // object size
  NSPAIRA(_ZTI8S20107C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20107C5),91, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20107C5),13, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20107C3  : S20107C4 , S20107C5 , S20107C9 {
  long s20107c3f0;
  virtual void  v34(); // _ZN8S20107C33v34Ev
  virtual void  v35(); // _ZN8S20107C33v35Ev
  ~S20107C3(); // tgen
  S20107C3(); // tgen
};
//SIG(-1 S20107C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9} BC3{ BC4{ vd v10 v11 v12 v13 v14} VBC2 VBC5{ VBC2 v15 v16 v17 FD[9]} BC6{ VBC2 BC5 VBC7{ BC2 v18} v19 FD} VBC8{ v20 v21 v22} vd v23 v24 v25 v26 v27 v28 v29 Fc FL} BC7 v1 v2 Fl}


void  S20107C3 ::v34(){vfunc_called(this, "_ZN8S20107C33v34Ev");}
void  S20107C3 ::v35(){vfunc_called(this, "_ZN8S20107C33v35Ev");}
S20107C3 ::~S20107C3(){ note_dtor("S20107C3", this);} // tgen
S20107C3 ::S20107C3(){ note_ctor("S20107C3", this);} // tgen

static void Test_S20107C3()
{
  extern Class_Descriptor cd_S20107C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,69)];
    init_test(&cd_S20107C3, buf);
    S20107C3 *dp, &lv = *(dp=new (buf) S20107C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,272), "sizeof(S20107C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20107C3)");
    /*is_ambiguous_... S20107C3::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*), 0, "S20107C3");
    check_base_class_offset(lv, (S20107C6*)(S20107C5*), ABISELECT(16,4), "S20107C3");
    /*is_ambiguous_... S20107C5::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C5*), ABISELECT(240,152), "S20107C3");
    /*is_ambiguous_... S20107C3::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C7*), ABISELECT(240,152), "S20107C3");
    /*is_ambiguous_... S20107C8::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C8*)(S20107C5*), ABISELECT(240,152), "S20107C3");
    check_base_class_offset(lv, (S20107C4*)(S20107C7*)(S20107C8*)(S20107C5*), ABISELECT(240,152), "S20107C3");
    /*is_ambiguous_... S20107C5::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C7*)(S20107C5*), ABISELECT(240,152), "S20107C3");
    check_base_class_offset(lv, (S20107C7*)(S20107C8*)(S20107C5*), ABISELECT(32,8), "S20107C3");
    /*is_ambiguous_... S20107C3::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C9*), ABISELECT(400,264), "S20107C3");
    check_base_class_offset(lv, (S20107C9*)(S20107C8*)(S20107C5*), ABISELECT(400,264), "S20107C3");
    check_base_class_offset(lv, (S20107C8*)(S20107C5*), ABISELECT(32,8), "S20107C3");
    check_base_class_offset(lv, (S20107C2*)(S20107C5*), ABISELECT(408,268), "S20107C3");
    check_base_class_offset(lv, (S20107C5*), ABISELECT(16,4), "S20107C3");
    /*is_ambiguous_... S20107C3::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C9*), ABISELECT(224,144), "S20107C3");
    /*is_ambiguous_... S20107C3::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C9*), ABISELECT(224,144), "S20107C3");
    check_field_offset(lv, s20107c3f0, ABISELECT(232,148), "S20107C3.s20107c3f0");
    test_class_info(&lv, &cd_S20107C3);
    dp->~S20107C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C3(Test_S20107C3, "S20107C3", ABISELECT(416,272));

#else // __cplusplus

extern void _ZN8S20107C3C1Ev();
extern void _ZN8S20107C3D1Ev();
Name_Map name_map_S20107C3[] = {
  NSPAIR(_ZN8S20107C3C1Ev),
  NSPAIR(_ZN8S20107C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C6;
extern VTBL_ENTRY _ZTI8S20107C6[];
extern  VTBL_ENTRY _ZTV8S20107C6[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
extern Class_Descriptor cd_S20107C8;
extern VTBL_ENTRY _ZTI8S20107C8[];
extern  VTBL_ENTRY _ZTV8S20107C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C8[];
extern Class_Descriptor cd_S20107C2;
extern VTBL_ENTRY _ZTI8S20107C2[];
extern  VTBL_ENTRY _ZTV8S20107C2[];
extern Class_Descriptor cd_S20107C5;
extern VTBL_ENTRY _ZTI8S20107C5[];
extern  VTBL_ENTRY _ZTV8S20107C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C5[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
static Base_Class bases_S20107C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20107C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20107C6,    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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20107C4,    ABISELECT(240,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20107C7,    ABISELECT(240,152), //bcp->offset
    69, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20107C7,    ABISELECT(32,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20107C4,    ABISELECT(400,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(400,264), //bcp->offset
    92, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20107C8,    ABISELECT(32,8), //bcp->offset
    37, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20107C2,    ABISELECT(408,268), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20107C5,    ABISELECT(16,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20107C4,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(224,144), //bcp->offset
    59, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20107C3[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C33v34Ev();
extern void _ZN8S20107C33v35Ev();
extern void _ZN8S20107C3D1Ev();
extern void _ZN8S20107C3D0Ev();
extern void ABISELECT(_ZThn16_N8S20107C3D1Ev,_ZThn4_N8S20107C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20107C3D0Ev,_ZThn4_N8S20107C3D0Ev)();
extern void _ZN8S20107C63v14Ev();
extern void _ZN8S20107C63v15Ev();
extern void _ZN8S20107C63v16Ev();
extern void _ZN8S20107C63v17Ev();
extern void _ZN8S20107C63v18Ev();
extern void _ZN8S20107C53v27Ev();
extern void _ZN8S20107C53v28Ev();
extern void _ZN8S20107C53v29Ev();
extern void _ZN8S20107C53v30Ev();
extern void _ZN8S20107C53v31Ev();
extern void _ZN8S20107C53v32Ev();
extern void _ZN8S20107C53v33Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
static  VTBL_ENTRY vtc_S20107C3[] = {
  ABISELECT(408,268),
  ABISELECT(400,264),
  ABISELECT(240,152),
  ABISELECT(240,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C33v34Ev,
  (VTBL_ENTRY)&_ZN8S20107C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20107C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20107C3D0Ev,
  ABISELECT(392,264),
  ABISELECT(384,260),
  ABISELECT(224,148),
  ABISELECT(224,148),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20107C3D1Ev,_ZThn4_N8S20107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20107C3D0Ev,_ZThn4_N8S20107C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20107C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v33Ev,
  ABISELECT(368,256),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(-32,-8),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-264),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  0,
  0,
  0,
  ABISELECT(-408,-268),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
};
extern VTBL_ENTRY _ZTV8S20107C3[];
extern void _ZN8S20107C5D1Ev();
extern void _ZN8S20107C5D0Ev();
extern void _ZN8S20107C63v14Ev();
extern void _ZN8S20107C63v15Ev();
extern void _ZN8S20107C63v16Ev();
extern void _ZN8S20107C63v17Ev();
extern void _ZN8S20107C63v18Ev();
extern void _ZN8S20107C53v27Ev();
extern void _ZN8S20107C53v28Ev();
extern void _ZN8S20107C53v29Ev();
extern void _ZN8S20107C53v30Ev();
extern void _ZN8S20107C53v31Ev();
extern void _ZN8S20107C53v32Ev();
extern void _ZN8S20107C53v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C5__8S20107C3[] = {
  ABISELECT(392,264),
  ABISELECT(384,260),
  ABISELECT(224,148),
  ABISELECT(224,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20107C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v33Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C88S20107C5__8S20107C3[] = {
  ABISELECT(368,256),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C78S20107C88S20107C5__A1__8S20107C3[] = {
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C78S20107C88S20107C5__A1__8S20107C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C88S20107C5__8S20107C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C88S20107C5__8S20107C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__8S20107C5__8S20107C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C8__8S20107C5__8S20107C3[] = {
  ABISELECT(368,256),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C5__8S20107C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-260),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C2__8S20107C5__8S20107C3[] = {
  0,
  0,
  0,
  ABISELECT(-392,-264),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__8S20107C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
static  VTT_ENTRY vtt_S20107C3[] = {
  {&(_ZTV8S20107C3[6]),  6,118},
  {&(_tg__ZTV8S20107C5__8S20107C3[6]),  6,20},
  {&(_tg__ZTV8S20107C88S20107C5__8S20107C3[11]),  11,22},
  {&(_tg__ZTV8S20107C78S20107C88S20107C5__A1__8S20107C3[10]),  10,20},
  {&(_tg__ZTV8S20107C4__8S20107C78S20107C88S20107C5__A1__8S20107C3[9]),  9,16},
  {&(_tg__ZTV8S20107C4__8S20107C88S20107C5__8S20107C3[9]),  9,16},
  {&(_tg__ZTV8S20107C9__8S20107C88S20107C5__8S20107C3[10]),  10,18},
  {&(_tg__ZTV8S20107C7__8S20107C5__8S20107C3[13]),  13,23},
  {&(_tg__ZTV8S20107C7__8S20107C5__8S20107C3[13]),  13,23},
  {&(_tg__ZTV8S20107C8__8S20107C5__8S20107C3[11]),  11,22},
  {&(_tg__ZTV8S20107C9__8S20107C5__8S20107C3[10]),  10,18},
  {&(_tg__ZTV8S20107C2__8S20107C5__8S20107C3[5]),  5,8},
  {&(_ZTV8S20107C3[23]),  23,118},
  {&(_ZTV8S20107C3[82]),  82,118},
  {&(_ZTV8S20107C3[82]),  82,118},
  {&(_ZTV8S20107C3[48]),  48,118},
  {&(_ZTV8S20107C3[102]),  102,118},
  {&(_ZTV8S20107C3[115]),  115,118},
  {&(_tg__ZTV8S20107C7__8S20107C3[10]),  10,20},
  {&(_tg__ZTV8S20107C7__8S20107C3[10]),  10,20},
};
extern VTBL_ENTRY _ZTI8S20107C3[];
extern  VTBL_ENTRY _ZTV8S20107C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C3[];
Class_Descriptor cd_S20107C3 = {  "S20107C3", // class name
  bases_S20107C3, 12,
  &(vtc_S20107C3[0]), // expected_vtbl_contents
  &(vtt_S20107C3[0]), // expected_vtt_contents
  ABISELECT(416,272), // object size
  NSPAIRA(_ZTI8S20107C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20107C3),118, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20107C3),20, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20107C10  {
  __tsi64 s20107c10f0;
  virtual void  v36(); // _ZN9S20107C103v36Ev
  ~S20107C10(); // tgen
  S20107C10(); // tgen
};
//SIG(-1 S20107C10) C1{ v1 FL}


void  S20107C10 ::v36(){vfunc_called(this, "_ZN9S20107C103v36Ev");}
S20107C10 ::~S20107C10(){ note_dtor("S20107C10", this);} // tgen
S20107C10 ::S20107C10(){ note_ctor("S20107C10", this);} // tgen

static void Test_S20107C10()
{
  extern Class_Descriptor cd_S20107C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20107C10, buf);
    S20107C10 *dp, &lv = *(dp=new (buf) S20107C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20107C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20107C10)");
    check_field_offset(lv, s20107c10f0, ABISELECT(8,4), "S20107C10.s20107c10f0");
    test_class_info(&lv, &cd_S20107C10);
    dp->~S20107C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C10(Test_S20107C10, "S20107C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20107C10C1Ev();
extern void _ZN9S20107C10D1Ev();
Name_Map name_map_S20107C10[] = {
  NSPAIR(_ZN9S20107C10C1Ev),
  NSPAIR(_ZN9S20107C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20107C10[];
extern void _ZN9S20107C103v36Ev();
static  VTBL_ENTRY vtc_S20107C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20107C10[0]),
  (VTBL_ENTRY)&_ZN9S20107C103v36Ev,
};
extern VTBL_ENTRY _ZTI9S20107C10[];
extern  VTBL_ENTRY _ZTV9S20107C10[];
Class_Descriptor cd_S20107C10 = {  "S20107C10", // class name
  0,0,//no base classes
  &(vtc_S20107C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20107C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20107C10),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  S20107C11  : virtual S20107C8 , S20107C9 , S20107C7 , S20107C2 {
  virtual  ~S20107C11(); // _ZN9S20107C11D2Ev
  virtual void  v37(); // _ZN9S20107C113v37Ev
  virtual void  v38(); // _ZN9S20107C113v38Ev
  virtual void  v39(); // _ZN9S20107C113v39Ev
  virtual void  v40(); // _ZN9S20107C113v40Ev
  virtual void  v41(); // _ZN9S20107C113v41Ev
  virtual void  v42(); // _ZN9S20107C113v42Ev
  virtual void  v43(); // _ZN9S20107C113v43Ev
  virtual void  v44(); // _ZN9S20107C113v44Ev
  S20107C11(); // tgen
};
//SIG(-1 S20107C11) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13 v14 v15} BC4{ VBC3 v16 v17 v18 FD[9]} VBC5{ BC3 v19} v20 FD} BC5 BC4 BC6{ v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S20107C11 ::~S20107C11(){ note_dtor("S20107C11", this);}
void  S20107C11 ::v37(){vfunc_called(this, "_ZN9S20107C113v37Ev");}
void  S20107C11 ::v38(){vfunc_called(this, "_ZN9S20107C113v38Ev");}
void  S20107C11 ::v39(){vfunc_called(this, "_ZN9S20107C113v39Ev");}
void  S20107C11 ::v40(){vfunc_called(this, "_ZN9S20107C113v40Ev");}
void  S20107C11 ::v41(){vfunc_called(this, "_ZN9S20107C113v41Ev");}
void  S20107C11 ::v42(){vfunc_called(this, "_ZN9S20107C113v42Ev");}
void  S20107C11 ::v43(){vfunc_called(this, "_ZN9S20107C113v43Ev");}
void  S20107C11 ::v44(){vfunc_called(this, "_ZN9S20107C113v44Ev");}
S20107C11 ::S20107C11(){ note_ctor("S20107C11", this);} // tgen

static void Test_S20107C11()
{
  extern Class_Descriptor cd_S20107C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S20107C11, buf);
    S20107C11 *dp, &lv = *(dp=new (buf) S20107C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S20107C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20107C11)");
    /*is_ambiguous_... S20107C8::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C8*), ABISELECT(192,120), "S20107C11");
    check_base_class_offset(lv, (S20107C4*)(S20107C7*)(S20107C8*), ABISELECT(192,120), "S20107C11");
    /*is_ambiguous_... S20107C11::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C7*), ABISELECT(192,120), "S20107C11");
    check_base_class_offset(lv, (S20107C7*)(S20107C8*), ABISELECT(192,120), "S20107C11");
    /*is_ambiguous_... S20107C11::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C9*), ABISELECT(368,244), "S20107C11");
    check_base_class_offset(lv, (S20107C9*)(S20107C8*), ABISELECT(368,244), "S20107C11");
    check_base_class_offset(lv, (S20107C8*), ABISELECT(192,120), "S20107C11");
    /*is_ambiguous_... S20107C11::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C9*), 0, "S20107C11");
    /*is_ambiguous_... S20107C11::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C9*), 0, "S20107C11");
    /*is_ambiguous_... S20107C11::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C7*), ABISELECT(16,4), "S20107C11");
    check_base_class_offset(lv, (S20107C2*), ABISELECT(176,116), "S20107C11");
    test_class_info(&lv, &cd_S20107C11);
    dp->~S20107C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C11(Test_S20107C11, "S20107C11", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN9S20107C11C1Ev();
extern void _ZN9S20107C11D2Ev();
Name_Map name_map_S20107C11[] = {
  NSPAIR(_ZN9S20107C11C1Ev),
  NSPAIR(_ZN9S20107C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
extern Class_Descriptor cd_S20107C8;
extern VTBL_ENTRY _ZTI8S20107C8[];
extern  VTBL_ENTRY _ZTV8S20107C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C8[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C2;
extern VTBL_ENTRY _ZTI8S20107C2[];
extern  VTBL_ENTRY _ZTV8S20107C2[];
static Base_Class bases_S20107C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20107C4,    ABISELECT(192,120), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20107C7,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20107C4,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(368,244), //bcp->offset
    74, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20107C8,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20107C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20107C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20107C7,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20107C2,    ABISELECT(176,116), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20107C11[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void _ZN9S20107C11D1Ev();
extern void _ZN9S20107C11D0Ev();
extern void _ZN9S20107C113v37Ev();
extern void _ZN9S20107C113v38Ev();
extern void _ZN9S20107C113v39Ev();
extern void _ZN9S20107C113v40Ev();
extern void _ZN9S20107C113v41Ev();
extern void _ZN9S20107C113v42Ev();
extern void _ZN9S20107C113v43Ev();
extern void _ZN9S20107C113v44Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY vtc_S20107C11[] = {
  ABISELECT(368,244),
  ABISELECT(192,120),
  ABISELECT(192,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  (VTBL_ENTRY)&_ZN9S20107C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20107C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v44Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern VTBL_ENTRY _ZTV9S20107C11[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__A1__9S20107C11[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C7__A1__9S20107C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C8__9S20107C11[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C78S20107C8__9S20107C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C8__9S20107C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
static  VTT_ENTRY vtt_S20107C11[] = {
  {&(_ZTV9S20107C11[5]),  5,92},
  {&(_tg__ZTV8S20107C7__A1__9S20107C11[10]),  10,20},
  {&(_tg__ZTV8S20107C4__8S20107C7__A1__9S20107C11[9]),  9,16},
  {&(_ZTV9S20107C11[63]),  63,92},
  {&(_ZTV9S20107C11[63]),  63,92},
  {&(_ZTV9S20107C11[84]),  84,92},
  {&(_ZTV9S20107C11[33]),  33,92},
  {&(_tg__ZTV8S20107C8__9S20107C11[11]),  11,22},
  {&(_tg__ZTV8S20107C78S20107C8__9S20107C11[10]),  10,20},
  {&(_tg__ZTV8S20107C78S20107C8__9S20107C11[10]),  10,20},
  {&(_tg__ZTV8S20107C8__9S20107C11[11]),  11,22},
  {&(_tg__ZTV8S20107C9__8S20107C8__9S20107C11[10]),  10,18},
};
extern VTBL_ENTRY _ZTI9S20107C11[];
extern  VTBL_ENTRY _ZTV9S20107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20107C11[];
Class_Descriptor cd_S20107C11 = {  "S20107C11", // class name
  bases_S20107C11, 9,
  &(vtc_S20107C11[0]), // expected_vtbl_contents
  &(vtt_S20107C11[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI9S20107C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20107C11),92, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20107C11),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20107C1  : virtual S20107C2 , virtual S20107C3 , S20107C10 , S20107C11 {
  virtual  ~S20107C1(); // _ZN8S20107C1D2Ev
  virtual void  v1(); // _ZN8S20107C12v1Ev
  virtual void  v2(); // _ZN8S20107C12v2Ev
  virtual void  v3(); // _ZN8S20107C12v3Ev
  virtual void  v4(); // _ZN8S20107C12v4Ev
  virtual void  v5(); // _ZN8S20107C12v5Ev
  virtual void  v6(); // _ZN8S20107C12v6Ev
  S20107C1(); // tgen
};
//SIG(1 S20107C1) C1{ VBC2{ v7 v8 v9} VBC3{ BC4{ v10 v11 v12 v13 v14 v15 v16} BC5{ BC6{ vd v17 v18 v19 v20 v21} VBC4 VBC7{ VBC4 v22 v23 v24 FD[9]} BC8{ VBC4 BC7 VBC9{ BC4 v25} v26 FD} VBC2 vd v27 v28 v29 v30 v31 v32 v33 Fc FL} BC9 v34 v35 Fl} BC10{ v36 FL} BC11{ VBC8 BC9 BC7 BC2 vd v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6}


 S20107C1 ::~S20107C1(){ note_dtor("S20107C1", this);}
void  S20107C1 ::v1(){vfunc_called(this, "_ZN8S20107C12v1Ev");}
void  S20107C1 ::v2(){vfunc_called(this, "_ZN8S20107C12v2Ev");}
void  S20107C1 ::v3(){vfunc_called(this, "_ZN8S20107C12v3Ev");}
void  S20107C1 ::v4(){vfunc_called(this, "_ZN8S20107C12v4Ev");}
void  S20107C1 ::v5(){vfunc_called(this, "_ZN8S20107C12v5Ev");}
void  S20107C1 ::v6(){vfunc_called(this, "_ZN8S20107C12v6Ev");}
S20107C1 ::S20107C1(){ note_ctor("S20107C1", this);} // tgen

static void Test_S20107C1()
{
  extern Class_Descriptor cd_S20107C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(51,133)];
    init_test(&cd_S20107C1, buf);
    S20107C1 *dp, &lv = *(dp=new (buf) S20107C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,528), "sizeof(S20107C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20107C1)");
    /*is_ambiguous_... S20107C1::S20107C2 */ AMB_check_base_class_offset(lv, (S20107C2*), ABISELECT(200,132), "S20107C1");
    check_base_class_offset(lv, (S20107C2*)(S20107C5*)(S20107C3*), ABISELECT(200,132), "S20107C1");
    /*is_ambiguous_... S20107C3::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C3*), ABISELECT(208,136), "S20107C1");
    check_base_class_offset(lv, (S20107C6*)(S20107C5*)(S20107C3*), ABISELECT(224,140), "S20107C1");
    /*is_ambiguous_... S20107C5::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C5*)(S20107C3*), ABISELECT(448,288), "S20107C1");
    /*is_ambiguous_... S20107C1::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C7*), ABISELECT(448,288), "S20107C1");
    /*is_ambiguous_... S20107C8::S20107C4 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C8*)(S20107C5*)(S20107C3*), ABISELECT(448,288), "S20107C1");
    check_base_class_offset(lv, (S20107C4*)(S20107C7*)(S20107C8*)(S20107C5*)(S20107C3*), ABISELECT(448,288), "S20107C1");
    /*is_ambiguous_... S20107C1::S20107C8 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C8*), ABISELECT(448,288), "S20107C1");
    /*is_ambiguous_... S20107C1::S20107C8 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C7*)(S20107C8*), ABISELECT(448,288), "S20107C1");
    /*is_ambiguous_... S20107C11::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C7*)(S20107C11*), ABISELECT(448,288), "S20107C1");
    /*is_ambiguous_... S20107C5::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C7*)(S20107C5*)(S20107C3*), ABISELECT(448,288), "S20107C1");
    check_base_class_offset(lv, (S20107C7*)(S20107C8*)(S20107C5*)(S20107C3*), ABISELECT(240,144), "S20107C1");
    /*is_ambiguous_... S20107C1::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C9*), ABISELECT(608,400), "S20107C1");
    check_base_class_offset(lv, (S20107C9*)(S20107C8*)(S20107C5*)(S20107C3*), ABISELECT(608,400), "S20107C1");
    /*is_ambiguous_... S20107C1::S20107C8 */ AMB_check_base_class_offset(lv, (S20107C9*)(S20107C8*), ABISELECT(608,400), "S20107C1");
    check_base_class_offset(lv, (S20107C8*)(S20107C5*)(S20107C3*), ABISELECT(240,144), "S20107C1");
    check_base_class_offset(lv, (S20107C5*)(S20107C3*), ABISELECT(224,140), "S20107C1");
    /*is_ambiguous_... S20107C3::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C9*)(S20107C3*), ABISELECT(432,280), "S20107C1");
    /*is_ambiguous_... S20107C3::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C9*)(S20107C3*), ABISELECT(432,280), "S20107C1");
    check_base_class_offset(lv, (S20107C3*), ABISELECT(208,136), "S20107C1");
    check_base_class_offset(lv, (S20107C10*), 0, "S20107C1");
    /*is_ambiguous_... S20107C1::S20107C8 */ AMB_check_base_class_offset(lv, (S20107C7*)(S20107C8*), ABISELECT(624,404), "S20107C1");
    check_base_class_offset(lv, (S20107C8*)(S20107C11*), ABISELECT(624,404), "S20107C1");
    /*is_ambiguous_... S20107C11::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C4*)(S20107C9*)(S20107C11*), ABISELECT(16,12), "S20107C1");
    /*is_ambiguous_... S20107C11::S20107C9 */ AMB_check_base_class_offset(lv, (S20107C9*)(S20107C11*), ABISELECT(16,12), "S20107C1");
    /*is_ambiguous_... S20107C11::S20107C7 */ AMB_check_base_class_offset(lv, (S20107C7*)(S20107C11*), ABISELECT(32,16), "S20107C1");
    check_base_class_offset(lv, (S20107C2*)(S20107C11*), ABISELECT(192,128), "S20107C1");
    check_base_class_offset(lv, (S20107C11*), ABISELECT(16,12), "S20107C1");
    test_class_info(&lv, &cd_S20107C1);
    dp->~S20107C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20107C1(Test_S20107C1, "S20107C1", ABISELECT(800,528));

#else // __cplusplus

extern void _ZN8S20107C1C1Ev();
extern void _ZN8S20107C1D2Ev();
Name_Map name_map_S20107C1[] = {
  NSPAIR(_ZN8S20107C1C1Ev),
  NSPAIR(_ZN8S20107C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20107C2;
extern VTBL_ENTRY _ZTI8S20107C2[];
extern  VTBL_ENTRY _ZTV8S20107C2[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C6;
extern VTBL_ENTRY _ZTI8S20107C6[];
extern  VTBL_ENTRY _ZTV8S20107C6[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
extern Class_Descriptor cd_S20107C8;
extern VTBL_ENTRY _ZTI8S20107C8[];
extern  VTBL_ENTRY _ZTV8S20107C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C8[];
extern Class_Descriptor cd_S20107C5;
extern VTBL_ENTRY _ZTI8S20107C5[];
extern  VTBL_ENTRY _ZTV8S20107C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C5[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
extern Class_Descriptor cd_S20107C3;
extern VTBL_ENTRY _ZTI8S20107C3[];
extern  VTBL_ENTRY _ZTV8S20107C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C3[];
extern Class_Descriptor cd_S20107C10;
extern VTBL_ENTRY _ZTI9S20107C10[];
extern  VTBL_ENTRY _ZTV9S20107C10[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C8;
extern VTBL_ENTRY _ZTI8S20107C8[];
extern  VTBL_ENTRY _ZTV8S20107C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C8[];
extern Class_Descriptor cd_S20107C4;
extern VTBL_ENTRY _ZTI8S20107C4[];
extern  VTBL_ENTRY _ZTV8S20107C4[];
extern Class_Descriptor cd_S20107C9;
extern VTBL_ENTRY _ZTI8S20107C9[];
extern  VTBL_ENTRY _ZTV8S20107C9[];
extern Class_Descriptor cd_S20107C7;
extern VTBL_ENTRY _ZTI8S20107C7[];
extern  VTBL_ENTRY _ZTV8S20107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C7[];
extern Class_Descriptor cd_S20107C2;
extern VTBL_ENTRY _ZTI8S20107C2[];
extern  VTBL_ENTRY _ZTV8S20107C2[];
extern Class_Descriptor cd_S20107C11;
extern VTBL_ENTRY _ZTI9S20107C11[];
extern  VTBL_ENTRY _ZTV9S20107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20107C11[];
static Base_Class bases_S20107C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20107C2,    ABISELECT(200,132), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20107C4,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S20107C6,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20107C4,    ABISELECT(448,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20107C7,    ABISELECT(448,288), //bcp->offset
    169, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20107C7,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20107C4,    ABISELECT(608,400), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(608,400), //bcp->offset
    192, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20107C8,    ABISELECT(240,144), //bcp->offset
    137, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20107C5,    ABISELECT(224,140), //bcp->offset
    117, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20107C4,    ABISELECT(432,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(432,280), //bcp->offset
    159, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20107C3,    ABISELECT(208,136), //bcp->offset
    73, //bcp->virtual_function_table_offset
    33, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20107C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20107C7,    ABISELECT(624,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20107C8,    ABISELECT(624,404), //bcp->offset
    210, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S20107C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20107C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20107C7,    ABISELECT(32,16), //bcp->offset
    40, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20107C2,    ABISELECT(192,128), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20107C11,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20107C1[];
extern void _ZN9S20107C103v36Ev();
extern void _ZN8S20107C1D1Ev();
extern void _ZN8S20107C1D0Ev();
extern void _ZN8S20107C12v1Ev();
extern void _ZN8S20107C12v2Ev();
extern void _ZN8S20107C12v3Ev();
extern void _ZN8S20107C12v4Ev();
extern void _ZN8S20107C12v5Ev();
extern void _ZN8S20107C12v6Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void ABISELECT(_ZThn16_N8S20107C1D1Ev,_ZThn12_N8S20107C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20107C1D0Ev,_ZThn12_N8S20107C1D0Ev)();
extern void _ZN9S20107C113v37Ev();
extern void _ZN9S20107C113v38Ev();
extern void _ZN9S20107C113v39Ev();
extern void _ZN9S20107C113v40Ev();
extern void _ZN9S20107C113v41Ev();
extern void _ZN9S20107C113v42Ev();
extern void _ZN9S20107C113v43Ev();
extern void _ZN9S20107C113v44Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C33v34Ev();
extern void _ZN8S20107C33v35Ev();
extern void ABISELECT(_ZTv0_n128_N8S20107C1D1Ev,_ZTv0_n64_N8S20107C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20107C1D1Ev,_ZThn136_N8S20107C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S20107C1D0Ev,_ZTv0_n64_N8S20107C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20107C1D0Ev,_ZThn136_N8S20107C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n128_N8S20107C1D1Ev,_ZTvn4_n64_N8S20107C1D1Ev)();
extern void ABISELECT(_ZTvn16_n128_N8S20107C1D0Ev,_ZTvn4_n64_N8S20107C1D0Ev)();
extern void _ZN8S20107C63v14Ev();
extern void _ZN8S20107C63v15Ev();
extern void _ZN8S20107C63v16Ev();
extern void _ZN8S20107C63v17Ev();
extern void _ZN8S20107C63v18Ev();
extern void _ZN8S20107C53v27Ev();
extern void _ZN8S20107C53v28Ev();
extern void _ZN8S20107C53v29Ev();
extern void _ZN8S20107C53v30Ev();
extern void _ZN8S20107C53v31Ev();
extern void _ZN8S20107C53v32Ev();
extern void _ZN8S20107C53v33Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY vtc_S20107C1[] = {
  ABISELECT(624,404),
  ABISELECT(608,400),
  ABISELECT(448,288),
  ABISELECT(448,288),
  ABISELECT(208,136),
  ABISELECT(200,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN9S20107C103v36Ev,
  (VTBL_ENTRY)&_ZN8S20107C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20107C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20107C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20107C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20107C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20107C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20107C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20107C12v6Ev,
  ABISELECT(592,388),
  ABISELECT(432,276),
  ABISELECT(608,392),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20107C1D1Ev,_ZThn12_N8S20107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20107C1D0Ev,_ZThn12_N8S20107C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20107C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v44Ev,
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
  0,
  0,
  0,
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
  ABISELECT(224,144),
  ABISELECT(32,8),
  ABISELECT(32,8),
  ABISELECT(32,8),
  ABISELECT(32,8),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(-208,-136),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(400,264),
  ABISELECT(240,152),
  ABISELECT(240,152),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C33v34Ev,
  (VTBL_ENTRY)&_ZN8S20107C33v35Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20107C1D1Ev,_ZTv0_n64_N8S20107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S20107C1D0Ev,_ZTv0_n64_N8S20107C1D0Ev),
  ABISELECT(-24,-8),
  ABISELECT(384,260),
  ABISELECT(224,148),
  ABISELECT(224,148),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n128_N8S20107C1D1Ev,_ZTvn4_n64_N8S20107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n128_N8S20107C1D0Ev,_ZTvn4_n64_N8S20107C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20107C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v33Ev,
  ABISELECT(368,256),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-400),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-624,-404),
  (VTBL_ENTRY)&(_ZTI8S20107C1[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern VTBL_ENTRY _ZTV8S20107C1[];
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
extern void _ZN9S20107C11D1Ev();
extern void _ZN9S20107C11D0Ev();
extern void _ZN9S20107C113v37Ev();
extern void _ZN9S20107C113v38Ev();
extern void _ZN9S20107C113v39Ev();
extern void _ZN9S20107C113v40Ev();
extern void _ZN9S20107C113v41Ev();
extern void _ZN9S20107C113v42Ev();
extern void _ZN9S20107C113v43Ev();
extern void _ZN9S20107C113v44Ev();
static  VTBL_ENTRY _tg__ZTV9S20107C11__8S20107C1[] = {
  ABISELECT(592,388),
  ABISELECT(432,276),
  ABISELECT(608,392),
  0,
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
  (VTBL_ENTRY)&_ZN9S20107C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20107C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v37Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v38Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20107C113v44Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C79S20107C11__A3__8S20107C1[] = {
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C79S20107C11__A3__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-272),
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C8__9S20107C11__8S20107C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-608,-392),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__9S20107C11__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-276),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__9S20107C11__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-592,-388),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__A1__9S20107C11__8S20107C1[] = {
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(416,272),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20107C11[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C33v34Ev();
extern void _ZN8S20107C33v35Ev();
extern void _ZN8S20107C3D1Ev();
extern void _ZN8S20107C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C3__8S20107C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(400,264),
  ABISELECT(240,152),
  ABISELECT(240,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C33v34Ev,
  (VTBL_ENTRY)&_ZN8S20107C33v35Ev,
  (VTBL_ENTRY)&_ZN8S20107C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20107C3D0Ev,
};
extern void _ZN8S20107C5D1Ev();
extern void _ZN8S20107C5D0Ev();
extern void _ZN8S20107C63v14Ev();
extern void _ZN8S20107C63v15Ev();
extern void _ZN8S20107C63v16Ev();
extern void _ZN8S20107C63v17Ev();
extern void _ZN8S20107C63v18Ev();
extern void _ZN8S20107C53v27Ev();
extern void _ZN8S20107C53v28Ev();
extern void _ZN8S20107C53v29Ev();
extern void _ZN8S20107C53v30Ev();
extern void _ZN8S20107C53v31Ev();
extern void _ZN8S20107C53v32Ev();
extern void _ZN8S20107C53v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C58S20107C3__8S20107C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(384,260),
  ABISELECT(224,148),
  ABISELECT(224,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20107C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v33Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C88S20107C58S20107C3__8S20107C1[] = {
  ABISELECT(368,256),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C78S20107C88S20107C58S20107C3__A1__8S20107C1[] = {
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C78S20107C88S20107C58S20107C3__A1__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C88S20107C58S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C88S20107C58S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__8S20107C58S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C8__8S20107C58S20107C3__8S20107C1[] = {
  ABISELECT(368,256),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C58S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-260),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C2__8S20107C58S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  ABISELECT(24,8),
  (VTBL_ENTRY)&(_ZTI8S20107C5[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
};
extern void ABISELECT(_ZThn16_N8S20107C3D1Ev,_ZThn4_N8S20107C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20107C3D0Ev,_ZThn4_N8S20107C3D0Ev)();
extern void _ZN8S20107C63v14Ev();
extern void _ZN8S20107C63v15Ev();
extern void _ZN8S20107C63v16Ev();
extern void _ZN8S20107C63v17Ev();
extern void _ZN8S20107C63v18Ev();
extern void _ZN8S20107C53v27Ev();
extern void _ZN8S20107C53v28Ev();
extern void _ZN8S20107C53v29Ev();
extern void _ZN8S20107C53v30Ev();
extern void _ZN8S20107C53v31Ev();
extern void _ZN8S20107C53v32Ev();
extern void _ZN8S20107C53v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C5__8S20107C3__8S20107C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(384,260),
  ABISELECT(224,148),
  ABISELECT(224,148),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20107C3D1Ev,_ZThn4_N8S20107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20107C3D0Ev,_ZThn4_N8S20107C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20107C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20107C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v27Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20107C53v33Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__8S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C88S20107C5__8S20107C3__8S20107C1[] = {
  ABISELECT(368,256),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(-32,-8),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-264),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
extern void _ZN8S20107C23v24Ev();
extern void _ZN8S20107C23v25Ev();
extern void _ZN8S20107C23v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C2__8S20107C3__8S20107C1[] = {
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20107C3[0]),
  (VTBL_ENTRY)&_ZN8S20107C23v24Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v25Ev,
  (VTBL_ENTRY)&_ZN8S20107C23v26Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C7__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
extern void _ZN8S20107C83v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C8__A1__8S20107C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20107C83v23Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C73v19Ev();
extern void _ZN8S20107C73v20Ev();
extern void _ZN8S20107C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C78S20107C8__A2__8S20107C1[] = {
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20107C73v21Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C78S20107C8__A2__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(176,116),
  (VTBL_ENTRY)&(_ZTI8S20107C7[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C4__8S20107C8__A1__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(176,116),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
};
extern void _ZN8S20107C42v7Ev();
extern void _ZN8S20107C42v8Ev();
extern void _ZN8S20107C42v9Ev();
extern void _ZN8S20107C43v10Ev();
extern void _ZN8S20107C43v11Ev();
extern void _ZN8S20107C43v12Ev();
extern void _ZN8S20107C43v13Ev();
extern void _ZN8S20107C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20107C9__8S20107C8__A1__8S20107C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S20107C8[0]),
  (VTBL_ENTRY)&_ZN8S20107C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20107C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20107C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20107C93v22Ev,
};
static  VTT_ENTRY vtt_S20107C1[] = {
  {&(_ZTV8S20107C1[8]),  8,236},
  {&(_tg__ZTV9S20107C11__8S20107C1[5]),  5,23},
  {&(_tg__ZTV8S20107C79S20107C11__A3__8S20107C1[10]),  10,20},
  {&(_tg__ZTV8S20107C4__8S20107C79S20107C11__A3__8S20107C1[9]),  9,16},
  {&(_tg__ZTV8S20107C8__9S20107C11__8S20107C1[15]),  15,26},
  {&(_tg__ZTV8S20107C4__9S20107C11__8S20107C1[9]),  9,16},
  {&(_tg__ZTV8S20107C9__9S20107C11__8S20107C1[10]),  10,18},
  {&(_tg__ZTV8S20107C7__A1__9S20107C11__8S20107C1[10]),  10,20},
  {&(_ZTV8S20107C1[70]),  70,236},
  {&(_ZTV8S20107C1[106]),  106,236},
  {&(_ZTV8S20107C1[123]),  123,236},
  {&(_ZTV8S20107C1[182]),  182,236},
  {&(_ZTV8S20107C1[182]),  182,236},
  {&(_ZTV8S20107C1[148]),  148,236},
  {&(_ZTV8S20107C1[202]),  202,236},
  {&(_ZTV8S20107C1[161]),  161,236},
  {&(_ZTV8S20107C1[22]),  22,236},
  {&(_ZTV8S20107C1[225]),  225,236},
  {&(_ZTV8S20107C1[50]),  50,236},
  {&(_tg__ZTV8S20107C3__8S20107C1[6]),  6,17},
  {&(_tg__ZTV8S20107C58S20107C3__8S20107C1[6]),  6,20},
  {&(_tg__ZTV8S20107C88S20107C58S20107C3__8S20107C1[11]),  11,22},
  {&(_tg__ZTV8S20107C78S20107C88S20107C58S20107C3__A1__8S20107C1[10]),  10,20},
  {&(_tg__ZTV8S20107C4__8S20107C78S20107C88S20107C58S20107C3__A1__8S20107C1[9]),  9,16},
  {&(_tg__ZTV8S20107C4__8S20107C88S20107C58S20107C3__8S20107C1[9]),  9,16},
  {&(_tg__ZTV8S20107C9__8S20107C88S20107C58S20107C3__8S20107C1[10]),  10,18},
  {&(_tg__ZTV8S20107C7__8S20107C58S20107C3__8S20107C1[13]),  13,23},
  {&(_tg__ZTV8S20107C7__8S20107C58S20107C3__8S20107C1[13]),  13,23},
  {&(_tg__ZTV8S20107C8__8S20107C58S20107C3__8S20107C1[11]),  11,22},
  {&(_tg__ZTV8S20107C9__8S20107C58S20107C3__8S20107C1[10]),  10,18},
  {&(_tg__ZTV8S20107C2__8S20107C58S20107C3__8S20107C1[5]),  5,8},
  {&(_tg__ZTV8S20107C5__8S20107C3__8S20107C1[6]),  6,20},
  {&(_tg__ZTV8S20107C7__8S20107C3__8S20107C1[13]),  13,23},
  {&(_tg__ZTV8S20107C7__8S20107C3__8S20107C1[13]),  13,23},
  {&(_tg__ZTV8S20107C88S20107C5__8S20107C3__8S20107C1[11]),  11,22},
  {&(_tg__ZTV8S20107C9__8S20107C3__8S20107C1[10]),  10,18},
  {&(_tg__ZTV8S20107C2__8S20107C3__8S20107C1[5]),  5,8},
  {&(_tg__ZTV8S20107C7__8S20107C1[10]),  10,20},
  {&(_tg__ZTV8S20107C7__8S20107C1[10]),  10,20},
  {&(_tg__ZTV8S20107C8__A1__8S20107C1[11]),  11,22},
  {&(_tg__ZTV8S20107C78S20107C8__A2__8S20107C1[10]),  10,20},
  {&(_tg__ZTV8S20107C4__8S20107C78S20107C8__A2__8S20107C1[9]),  9,16},
  {&(_tg__ZTV8S20107C4__8S20107C8__A1__8S20107C1[9]),  9,16},
  {&(_tg__ZTV8S20107C9__8S20107C8__A1__8S20107C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20107C1[];
extern  VTBL_ENTRY _ZTV8S20107C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20107C1[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20107C1D0Ev,_ZTv0_n64_N8S20107C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20107C1D0Ev,_ZThn136_N8S20107C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S20107C1D1Ev,_ZTv0_n64_N8S20107C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20107C1D1Ev,_ZThn136_N8S20107C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20107C1 = {  "S20107C1", // class name
  bases_S20107C1, 21,
  &(vtc_S20107C1[0]), // expected_vtbl_contents
  &(vtt_S20107C1[0]), // expected_vtt_contents
  ABISELECT(800,528), // object size
  NSPAIRA(_ZTI8S20107C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20107C1),236, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20107C1),44, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2449C4  {
  virtual  ~S2449C4(); // _ZN7S2449C4D1Ev
  virtual void  v9(); // _ZN7S2449C42v9Ev
  virtual void  v10(); // _ZN7S2449C43v10Ev
  virtual void  v11(); // _ZN7S2449C43v11Ev
  S2449C4(); // tgen
};
//SIG(-1 S2449C4) C1{ vd v1 v2 v3}


 S2449C4 ::~S2449C4(){ note_dtor("S2449C4", this);}
void  S2449C4 ::v9(){vfunc_called(this, "_ZN7S2449C42v9Ev");}
void  S2449C4 ::v10(){vfunc_called(this, "_ZN7S2449C43v10Ev");}
void  S2449C4 ::v11(){vfunc_called(this, "_ZN7S2449C43v11Ev");}
S2449C4 ::S2449C4(){ note_ctor("S2449C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2449C4C1Ev();
extern void _ZN7S2449C4D1Ev();
Name_Map name_map_S2449C4[] = {
  NSPAIR(_ZN7S2449C4C1Ev),
  NSPAIR(_ZN7S2449C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2449C4[];
extern void _ZN7S2449C4D1Ev();
extern void _ZN7S2449C4D0Ev();
extern void _ZN7S2449C42v9Ev();
extern void _ZN7S2449C43v10Ev();
extern void _ZN7S2449C43v11Ev();
static  VTBL_ENTRY vtc_S2449C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2449C4[0]),
  (VTBL_ENTRY)&_ZN7S2449C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2449C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2449C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S2449C4[];
extern  VTBL_ENTRY _ZTV7S2449C4[];
Class_Descriptor cd_S2449C4 = {  "S2449C4", // class name
  0,0,//no base classes
  &(vtc_S2449C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2449C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2449C4),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  S2449C3  : S2449C4 {
  virtual  ~S2449C3(); // _ZN7S2449C3D1Ev
  virtual void  v12(); // _ZN7S2449C33v12Ev
  virtual void  v13(); // _ZN7S2449C33v13Ev
  virtual void  v14(); // _ZN7S2449C33v14Ev
  virtual void  v15(); // _ZN7S2449C33v15Ev
  S2449C3(); // tgen
};
//SIG(-1 S2449C3) C1{ BC2{ vd v5 v6 v7} vd v1 v2 v3 v4}


 S2449C3 ::~S2449C3(){ note_dtor("S2449C3", this);}
void  S2449C3 ::v12(){vfunc_called(this, "_ZN7S2449C33v12Ev");}
void  S2449C3 ::v13(){vfunc_called(this, "_ZN7S2449C33v13Ev");}
void  S2449C3 ::v14(){vfunc_called(this, "_ZN7S2449C33v14Ev");}
void  S2449C3 ::v15(){vfunc_called(this, "_ZN7S2449C33v15Ev");}
S2449C3 ::S2449C3(){ note_ctor("S2449C3", this);} // tgen

static void Test_S2449C3()
{
  extern Class_Descriptor cd_S2449C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2449C3, buf);
    S2449C3 *dp, &lv = *(dp=new (buf) S2449C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2449C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2449C3)");
    check_base_class_offset(lv, (S2449C4*), 0, "S2449C3");
    test_class_info(&lv, &cd_S2449C3);
    dp->~S2449C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2449C3(Test_S2449C3, "S2449C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2449C3C1Ev();
extern void _ZN7S2449C3D1Ev();
Name_Map name_map_S2449C3[] = {
  NSPAIR(_ZN7S2449C3C1Ev),
  NSPAIR(_ZN7S2449C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2449C4;
extern VTBL_ENTRY _ZTI7S2449C4[];
extern  VTBL_ENTRY _ZTV7S2449C4[];
static Base_Class bases_S2449C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2449C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2449C3[];
extern void _ZN7S2449C3D1Ev();
extern void _ZN7S2449C3D0Ev();
extern void _ZN7S2449C42v9Ev();
extern void _ZN7S2449C43v10Ev();
extern void _ZN7S2449C43v11Ev();
extern void _ZN7S2449C33v12Ev();
extern void _ZN7S2449C33v13Ev();
extern void _ZN7S2449C33v14Ev();
extern void _ZN7S2449C33v15Ev();
static  VTBL_ENTRY vtc_S2449C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2449C3[0]),
  (VTBL_ENTRY)&_ZN7S2449C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2449C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2449C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S2449C3[];
extern  VTBL_ENTRY _ZTV7S2449C3[];
Class_Descriptor cd_S2449C3 = {  "S2449C3", // class name
  bases_S2449C3, 1,
  &(vtc_S2449C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2449C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2449C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2449C2  : S2449C3 {
  ::S4247C19_nt s2449c2f0;
  ::S2403C17_nt s2449c2f1;
  char s2449c2f2;
  virtual  ~S2449C2(); // _ZN7S2449C2D1Ev
  virtual void  v16(); // _ZN7S2449C23v16Ev
  virtual void  v17(); // _ZN7S2449C23v17Ev
  virtual void  v18(); // _ZN7S2449C23v18Ev
  S2449C2(); // tgen
};
//SIG(-1 S2449C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S2449C2 ::~S2449C2(){ note_dtor("S2449C2", this);}
void  S2449C2 ::v16(){vfunc_called(this, "_ZN7S2449C23v16Ev");}
void  S2449C2 ::v17(){vfunc_called(this, "_ZN7S2449C23v17Ev");}
void  S2449C2 ::v18(){vfunc_called(this, "_ZN7S2449C23v18Ev");}
S2449C2 ::S2449C2(){ note_ctor("S2449C2", this);} // tgen

static void Test_S2449C2()
{
  extern Class_Descriptor cd_S2449C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2449C2, buf);
    S2449C2 *dp, &lv = *(dp=new (buf) S2449C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2449C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2449C2)");
    check_base_class_offset(lv, (S2449C4*)(S2449C3*), 0, "S2449C2");
    check_base_class_offset(lv, (S2449C3*), 0, "S2449C2");
    check_field_offset(lv, s2449c2f0, ABISELECT(8,4), "S2449C2.s2449c2f0");
    check_field_offset(lv, s2449c2f1, ABISELECT(32,20), "S2449C2.s2449c2f1");
    check_field_offset(lv, s2449c2f2, ABISELECT(64,52), "S2449C2.s2449c2f2");
    test_class_info(&lv, &cd_S2449C2);
    dp->~S2449C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2449C2(Test_S2449C2, "S2449C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2449C2C1Ev();
extern void _ZN7S2449C2D1Ev();
Name_Map name_map_S2449C2[] = {
  NSPAIR(_ZN7S2449C2C1Ev),
  NSPAIR(_ZN7S2449C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2449C4;
extern VTBL_ENTRY _ZTI7S2449C4[];
extern  VTBL_ENTRY _ZTV7S2449C4[];
extern Class_Descriptor cd_S2449C3;
extern VTBL_ENTRY _ZTI7S2449C3[];
extern  VTBL_ENTRY _ZTV7S2449C3[];
static Base_Class bases_S2449C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2449C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2449C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2449C2[];
extern void _ZN7S2449C2D1Ev();
extern void _ZN7S2449C2D0Ev();
extern void _ZN7S2449C42v9Ev();
extern void _ZN7S2449C43v10Ev();
extern void _ZN7S2449C43v11Ev();
extern void _ZN7S2449C33v12Ev();
extern void _ZN7S2449C33v13Ev();
extern void _ZN7S2449C33v14Ev();
extern void _ZN7S2449C33v15Ev();
extern void _ZN7S2449C23v16Ev();
extern void _ZN7S2449C23v17Ev();
extern void _ZN7S2449C23v18Ev();
static  VTBL_ENTRY vtc_S2449C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2449C2[0]),
  (VTBL_ENTRY)&_ZN7S2449C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2449C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2449C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2449C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2449C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2449C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S2449C2[];
extern  VTBL_ENTRY _ZTV7S2449C2[];
Class_Descriptor cd_S2449C2 = {  "S2449C2", // class name
  bases_S2449C2, 2,
  &(vtc_S2449C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2449C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2449C2),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  S2449C9  {
  void *s2449c9f0;
  ::S2382C25 s2449c9f1;
  ::S888C10_nt s2449c9f2;
  char s2449c9f3;
  virtual  ~S2449C9(); // _ZN7S2449C9D1Ev
  virtual void  v19(); // _ZN7S2449C93v19Ev
  virtual void  v20(); // _ZN7S2449C93v20Ev
  virtual void  v21(); // _ZN7S2449C93v21Ev
  virtual void  v22(); // _ZN7S2449C93v22Ev
  virtual void  v23(); // _ZN7S2449C93v23Ev
  virtual void  v24(); // _ZN7S2449C93v24Ev
  virtual void  v25(); // _ZN7S2449C93v25Ev
  virtual void  v26(); // _ZN7S2449C93v26Ev
  virtual void  v27(); // _ZN7S2449C93v27Ev
  virtual void  v28(); // _ZN7S2449C93v28Ev
  virtual void  v29(); // _ZN7S2449C93v29Ev
  virtual void  v30(); // _ZN7S2449C93v30Ev
  S2449C9(); // tgen
};
//SIG(-1 S2449C9) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ m FL[4]} Fc}


 S2449C9 ::~S2449C9(){ note_dtor("S2449C9", this);}
void  S2449C9 ::v19(){vfunc_called(this, "_ZN7S2449C93v19Ev");}
void  S2449C9 ::v20(){vfunc_called(this, "_ZN7S2449C93v20Ev");}
void  S2449C9 ::v21(){vfunc_called(this, "_ZN7S2449C93v21Ev");}
void  S2449C9 ::v22(){vfunc_called(this, "_ZN7S2449C93v22Ev");}
void  S2449C9 ::v23(){vfunc_called(this, "_ZN7S2449C93v23Ev");}
void  S2449C9 ::v24(){vfunc_called(this, "_ZN7S2449C93v24Ev");}
void  S2449C9 ::v25(){vfunc_called(this, "_ZN7S2449C93v25Ev");}
void  S2449C9 ::v26(){vfunc_called(this, "_ZN7S2449C93v26Ev");}
void  S2449C9 ::v27(){vfunc_called(this, "_ZN7S2449C93v27Ev");}
void  S2449C9 ::v28(){vfunc_called(this, "_ZN7S2449C93v28Ev");}
void  S2449C9 ::v29(){vfunc_called(this, "_ZN7S2449C93v29Ev");}
void  S2449C9 ::v30(){vfunc_called(this, "_ZN7S2449C93v30Ev");}
S2449C9 ::S2449C9(){ note_ctor("S2449C9", this);} // tgen

static void Test_S2449C9()
{
  extern Class_Descriptor cd_S2449C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2449C9, buf);
    S2449C9 *dp, &lv = *(dp=new (buf) S2449C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2449C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2449C9)");
    check_field_offset(lv, s2449c9f0, ABISELECT(8,4), "S2449C9.s2449c9f0");
    check_field_offset(lv, s2449c9f1, ABISELECT(16,8), "S2449C9.s2449c9f1");
    check_field_offset(lv, s2449c9f2, ABISELECT(32,20), "S2449C9.s2449c9f2");
    check_field_offset(lv, s2449c9f3, ABISELECT(64,52), "S2449C9.s2449c9f3");
    test_class_info(&lv, &cd_S2449C9);
    dp->~S2449C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2449C9(Test_S2449C9, "S2449C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2449C9C1Ev();
extern void _ZN7S2449C9D1Ev();
Name_Map name_map_S2449C9[] = {
  NSPAIR(_ZN7S2449C9C1Ev),
  NSPAIR(_ZN7S2449C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2449C9[];
extern void _ZN7S2449C9D1Ev();
extern void _ZN7S2449C9D0Ev();
extern void _ZN7S2449C93v19Ev();
extern void _ZN7S2449C93v20Ev();
extern void _ZN7S2449C93v21Ev();
extern void _ZN7S2449C93v22Ev();
extern void _ZN7S2449C93v23Ev();
extern void _ZN7S2449C93v24Ev();
extern void _ZN7S2449C93v25Ev();
extern void _ZN7S2449C93v26Ev();
extern void _ZN7S2449C93v27Ev();
extern void _ZN7S2449C93v28Ev();
extern void _ZN7S2449C93v29Ev();
extern void _ZN7S2449C93v30Ev();
static  VTBL_ENTRY vtc_S2449C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2449C9[0]),
  (VTBL_ENTRY)&_ZN7S2449C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2449C9D0Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v19Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v20Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v21Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v30Ev,
};
extern VTBL_ENTRY _ZTI7S2449C9[];
extern  VTBL_ENTRY _ZTV7S2449C9[];
Class_Descriptor cd_S2449C9 = {  "S2449C9", // class name
  0,0,//no base classes
  &(vtc_S2449C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2449C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2449C9),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2449C8  : S2449C9 {
  ::S2382C37 s2449c8f0;
  virtual  ~S2449C8(); // _ZN7S2449C8D1Ev
  virtual void  v31(); // _ZN7S2449C83v31Ev
  virtual void  v32(); // _ZN7S2449C83v32Ev
  virtual void  v33(); // _ZN7S2449C83v33Ev
  virtual void  v34(); // _ZN7S2449C83v34Ev
  virtual void  v35(); // _ZN7S2449C83v35Ev
  virtual void  v36(); // _ZN7S2449C83v36Ev
  virtual void  v37(); // _ZN7S2449C83v37Ev
  S2449C8(); // tgen
};
//SIG(-1 S2449C8) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 FC7{ m Fp Fi[2] FC8{ m}}}


 S2449C8 ::~S2449C8(){ note_dtor("S2449C8", this);}
void  S2449C8 ::v31(){vfunc_called(this, "_ZN7S2449C83v31Ev");}
void  S2449C8 ::v32(){vfunc_called(this, "_ZN7S2449C83v32Ev");}
void  S2449C8 ::v33(){vfunc_called(this, "_ZN7S2449C83v33Ev");}
void  S2449C8 ::v34(){vfunc_called(this, "_ZN7S2449C83v34Ev");}
void  S2449C8 ::v35(){vfunc_called(this, "_ZN7S2449C83v35Ev");}
void  S2449C8 ::v36(){vfunc_called(this, "_ZN7S2449C83v36Ev");}
void  S2449C8 ::v37(){vfunc_called(this, "_ZN7S2449C83v37Ev");}
S2449C8 ::S2449C8(){ note_ctor("S2449C8", this);} // tgen

static void Test_S2449C8()
{
  extern Class_Descriptor cd_S2449C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S2449C8, buf);
    S2449C8 *dp, &lv = *(dp=new (buf) S2449C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S2449C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2449C8)");
    check_base_class_offset(lv, (S2449C9*), 0, "S2449C8");
    check_field_offset(lv, s2449c8f0, ABISELECT(72,56), "S2449C8.s2449c8f0");
    test_class_info(&lv, &cd_S2449C8);
    dp->~S2449C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2449C8(Test_S2449C8, "S2449C8", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S2449C8C1Ev();
extern void _ZN7S2449C8D1Ev();
Name_Map name_map_S2449C8[] = {
  NSPAIR(_ZN7S2449C8C1Ev),
  NSPAIR(_ZN7S2449C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2449C9;
extern VTBL_ENTRY _ZTI7S2449C9[];
extern  VTBL_ENTRY _ZTV7S2449C9[];
static Base_Class bases_S2449C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2449C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2449C8[];
extern void _ZN7S2449C8D1Ev();
extern void _ZN7S2449C8D0Ev();
extern void _ZN7S2449C93v19Ev();
extern void _ZN7S2449C93v20Ev();
extern void _ZN7S2449C93v21Ev();
extern void _ZN7S2449C93v22Ev();
extern void _ZN7S2449C93v23Ev();
extern void _ZN7S2449C93v24Ev();
extern void _ZN7S2449C93v25Ev();
extern void _ZN7S2449C93v26Ev();
extern void _ZN7S2449C93v27Ev();
extern void _ZN7S2449C93v28Ev();
extern void _ZN7S2449C93v29Ev();
extern void _ZN7S2449C93v30Ev();
extern void _ZN7S2449C83v31Ev();
extern void _ZN7S2449C83v32Ev();
extern void _ZN7S2449C83v33Ev();
extern void _ZN7S2449C83v34Ev();
extern void _ZN7S2449C83v35Ev();
extern void _ZN7S2449C83v36Ev();
extern void _ZN7S2449C83v37Ev();
static  VTBL_ENTRY vtc_S2449C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2449C8[0]),
  (VTBL_ENTRY)&_ZN7S2449C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2449C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v19Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v20Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v21Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v31Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v32Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v33Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v34Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v35Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v36Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v37Ev,
};
extern VTBL_ENTRY _ZTI7S2449C8[];
extern  VTBL_ENTRY _ZTV7S2449C8[];
Class_Descriptor cd_S2449C8 = {  "S2449C8", // class name
  bases_S2449C8, 1,
  &(vtc_S2449C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S2449C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2449C8),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  S2449C1  : S2449C2 , S2449C8 {
  virtual  ~S2449C1(); // _ZN7S2449C1D1Ev
  virtual void  v1(); // _ZN7S2449C12v1Ev
  virtual void  v2(); // _ZN7S2449C12v2Ev
  virtual void  v3(); // _ZN7S2449C12v3Ev
  virtual void  v4(); // _ZN7S2449C12v4Ev
  virtual void  v5(); // _ZN7S2449C12v5Ev
  virtual void  v6(); // _ZN7S2449C12v6Ev
  virtual void  v7(); // _ZN7S2449C12v7Ev
  virtual void  v8(); // _ZN7S2449C12v8Ev
  S2449C1(); // tgen
};
//SIG(1 S2449C1) C1{ BC2{ BC3{ BC4{ vd v9 v10 v11} vd v12 v13 v14 v15} vd v16 v17 v18 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} BC8{ BC9{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC10{ BC11{ m Fp Fi FC12{ m} FC12}} FC13{ m FL[4]} Fc} vd v31 v32 v33 v34 v35 v36 v37 FC14{ m Fp Fi[2] FC6}} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S2449C1 ::~S2449C1(){ note_dtor("S2449C1", this);}
void  S2449C1 ::v1(){vfunc_called(this, "_ZN7S2449C12v1Ev");}
void  S2449C1 ::v2(){vfunc_called(this, "_ZN7S2449C12v2Ev");}
void  S2449C1 ::v3(){vfunc_called(this, "_ZN7S2449C12v3Ev");}
void  S2449C1 ::v4(){vfunc_called(this, "_ZN7S2449C12v4Ev");}
void  S2449C1 ::v5(){vfunc_called(this, "_ZN7S2449C12v5Ev");}
void  S2449C1 ::v6(){vfunc_called(this, "_ZN7S2449C12v6Ev");}
void  S2449C1 ::v7(){vfunc_called(this, "_ZN7S2449C12v7Ev");}
void  S2449C1 ::v8(){vfunc_called(this, "_ZN7S2449C12v8Ev");}
S2449C1 ::S2449C1(){ note_ctor("S2449C1", this);} // tgen

static void Test_S2449C1()
{
  extern Class_Descriptor cd_S2449C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2449C1, buf);
    S2449C1 *dp, &lv = *(dp=new (buf) S2449C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2449C1)");
    check_base_class_offset(lv, (S2449C4*)(S2449C3*)(S2449C2*), 0, "S2449C1");
    check_base_class_offset(lv, (S2449C3*)(S2449C2*), 0, "S2449C1");
    check_base_class_offset(lv, (S2449C2*), 0, "S2449C1");
    check_base_class_offset(lv, (S2449C9*)(S2449C8*), ABISELECT(72,56), "S2449C1");
    check_base_class_offset(lv, (S2449C8*), ABISELECT(72,56), "S2449C1");
    test_class_info(&lv, &cd_S2449C1);
    dp->~S2449C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2449C1(Test_S2449C1, "S2449C1", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2449C1C1Ev();
extern void _ZN7S2449C1D1Ev();
Name_Map name_map_S2449C1[] = {
  NSPAIR(_ZN7S2449C1C1Ev),
  NSPAIR(_ZN7S2449C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2449C4;
extern VTBL_ENTRY _ZTI7S2449C4[];
extern  VTBL_ENTRY _ZTV7S2449C4[];
extern Class_Descriptor cd_S2449C3;
extern VTBL_ENTRY _ZTI7S2449C3[];
extern  VTBL_ENTRY _ZTV7S2449C3[];
extern Class_Descriptor cd_S2449C2;
extern VTBL_ENTRY _ZTI7S2449C2[];
extern  VTBL_ENTRY _ZTV7S2449C2[];
extern Class_Descriptor cd_S2449C9;
extern VTBL_ENTRY _ZTI7S2449C9[];
extern  VTBL_ENTRY _ZTV7S2449C9[];
extern Class_Descriptor cd_S2449C8;
extern VTBL_ENTRY _ZTI7S2449C8[];
extern  VTBL_ENTRY _ZTV7S2449C8[];
static Base_Class bases_S2449C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2449C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2449C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2449C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2449C9,    ABISELECT(72,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2449C8,    ABISELECT(72,56), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2449C1[];
extern void _ZN7S2449C1D1Ev();
extern void _ZN7S2449C1D0Ev();
extern void _ZN7S2449C42v9Ev();
extern void _ZN7S2449C43v10Ev();
extern void _ZN7S2449C43v11Ev();
extern void _ZN7S2449C33v12Ev();
extern void _ZN7S2449C33v13Ev();
extern void _ZN7S2449C33v14Ev();
extern void _ZN7S2449C33v15Ev();
extern void _ZN7S2449C23v16Ev();
extern void _ZN7S2449C23v17Ev();
extern void _ZN7S2449C23v18Ev();
extern void _ZN7S2449C12v1Ev();
extern void _ZN7S2449C12v2Ev();
extern void _ZN7S2449C12v3Ev();
extern void _ZN7S2449C12v4Ev();
extern void _ZN7S2449C12v5Ev();
extern void _ZN7S2449C12v6Ev();
extern void _ZN7S2449C12v7Ev();
extern void _ZN7S2449C12v8Ev();
extern void ABISELECT(_ZThn72_N7S2449C1D1Ev,_ZThn56_N7S2449C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2449C1D0Ev,_ZThn56_N7S2449C1D0Ev)();
extern void _ZN7S2449C93v19Ev();
extern void _ZN7S2449C93v20Ev();
extern void _ZN7S2449C93v21Ev();
extern void _ZN7S2449C93v22Ev();
extern void _ZN7S2449C93v23Ev();
extern void _ZN7S2449C93v24Ev();
extern void _ZN7S2449C93v25Ev();
extern void _ZN7S2449C93v26Ev();
extern void _ZN7S2449C93v27Ev();
extern void _ZN7S2449C93v28Ev();
extern void _ZN7S2449C93v29Ev();
extern void _ZN7S2449C93v30Ev();
extern void _ZN7S2449C83v31Ev();
extern void _ZN7S2449C83v32Ev();
extern void _ZN7S2449C83v33Ev();
extern void _ZN7S2449C83v34Ev();
extern void _ZN7S2449C83v35Ev();
extern void _ZN7S2449C83v36Ev();
extern void _ZN7S2449C83v37Ev();
static  VTBL_ENTRY vtc_S2449C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2449C1[0]),
  (VTBL_ENTRY)&_ZN7S2449C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2449C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2449C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2449C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2449C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2449C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2449C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2449C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2449C12v8Ev,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S2449C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2449C1D1Ev,_ZThn56_N7S2449C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2449C1D0Ev,_ZThn56_N7S2449C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2449C93v19Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v20Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v21Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2449C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v31Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v32Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v33Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v34Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v35Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v36Ev,
  (VTBL_ENTRY)&_ZN7S2449C83v37Ev,
};
extern VTBL_ENTRY _ZTI7S2449C1[];
extern  VTBL_ENTRY _ZTV7S2449C1[];
Class_Descriptor cd_S2449C1 = {  "S2449C1", // class name
  bases_S2449C1, 5,
  &(vtc_S2449C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2449C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2449C1),45, //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  S5784C6  : virtual S7511C5 {
  ::S7511C5 s5784c6f0;
  ::S7511C5 s5784c6f1;
  void *s5784c6f2;
  int s5784c6f3;
  void *s5784c6f4[7];
  int s5784c6f5[2];
  ::S7511C5 s5784c6f6;
  ::S7511C5 s5784c6f7[6];
  __tsi64 s5784c6f8[2];
  void *s5784c6f9;
  int s5784c6f10;
  void *s5784c6f11;
  ~S5784C6(); // tgen
  S5784C6(); // tgen
};
//SIG(-1 S5784C6) C1{ VBC2{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC2 FC2 Fp Fi Fp[7] Fi[2] FC2 FC2[6] FL[2] Fp Fi Fp}


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

static void Test_S5784C6()
{
  extern Class_Descriptor cd_S5784C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,210)];
    init_test(&cd_S5784C6, buf);
    S5784C6 *dp, &lv = *(dp=new (buf) S5784C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,836), "sizeof(S5784C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5784C6)");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1296,760), "S5784C6");
    check_field_offset(lv, s5784c6f0, ABISELECT(16,4), "S5784C6.s5784c6f0");
    check_field_offset(lv, s5784c6f1, ABISELECT(144,80), "S5784C6.s5784c6f1");
    check_field_offset(lv, s5784c6f2, ABISELECT(272,156), "S5784C6.s5784c6f2");
    check_field_offset(lv, s5784c6f3, ABISELECT(280,160), "S5784C6.s5784c6f3");
    check_field_offset(lv, s5784c6f4, ABISELECT(288,164), "S5784C6.s5784c6f4");
    check_field_offset(lv, s5784c6f5, ABISELECT(344,192), "S5784C6.s5784c6f5");
    check_field_offset(lv, s5784c6f6, ABISELECT(352,200), "S5784C6.s5784c6f6");
    check_field_offset(lv, s5784c6f7, ABISELECT(480,276), "S5784C6.s5784c6f7");
    check_field_offset(lv, s5784c6f8, ABISELECT(1248,732), "S5784C6.s5784c6f8");
    check_field_offset(lv, s5784c6f9, ABISELECT(1264,748), "S5784C6.s5784c6f9");
    check_field_offset(lv, s5784c6f10, ABISELECT(1272,752), "S5784C6.s5784c6f10");
    check_field_offset(lv, s5784c6f11, ABISELECT(1280,756), "S5784C6.s5784c6f11");
    test_class_info(&lv, &cd_S5784C6);
    dp->~S5784C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5784C6(Test_S5784C6, "S5784C6", ABISELECT(1424,836));

#else // __cplusplus

extern void _ZN7S5784C6C1Ev();
extern void _ZN7S5784C6D1Ev();
Name_Map name_map_S5784C6[] = {
  NSPAIR(_ZN7S5784C6C1Ev),
  NSPAIR(_ZN7S5784C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
static Base_Class bases_S5784C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C5,    ABISELECT(1296,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5784C6[];
static  VTBL_ENTRY vtc_S5784C6[] = {
  ABISELECT(1296,760),
  0,
  (VTBL_ENTRY)&(_ZTI7S5784C6[0]),
};
extern VTBL_ENTRY _ZTV7S5784C6[];
static  VTT_ENTRY vtt_S5784C6[] = {
  {&(_ZTV7S5784C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5784C6[];
extern  VTBL_ENTRY _ZTV7S5784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5784C6[];
Class_Descriptor cd_S5784C6 = {  "S5784C6", // class name
  bases_S5784C6, 1,
  &(vtc_S5784C6[0]), // expected_vtbl_contents
  &(vtt_S5784C6[0]), // expected_vtt_contents
  ABISELECT(1424,836), // object size
  NSPAIRA(_ZTI7S5784C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5784C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5784C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5784C7  {
  int s5784c7f0[2];
  char s5784c7f1:3;
  int s5784c7f2[5];
  int s5784c7f3:4;
  int s5784c7f4;
  ::S5784C6 s5784c7f5;
  virtual void  v3(); // _ZN7S5784C72v3Ev
  virtual void  v4(); // _ZN7S5784C72v4Ev
  ~S5784C7(); // tgen
  S5784C7(); // tgen
};
//SIG(-1 S5784C7) C1{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC2{ VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp}}


void  S5784C7 ::v3(){vfunc_called(this, "_ZN7S5784C72v3Ev");}
void  S5784C7 ::v4(){vfunc_called(this, "_ZN7S5784C72v4Ev");}
S5784C7 ::~S5784C7(){ note_dtor("S5784C7", this);} // tgen
S5784C7 ::S5784C7(){ note_ctor("S5784C7", this);} // tgen

static void Test_S5784C7()
{
  extern Class_Descriptor cd_S5784C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,221)];
    init_test(&cd_S5784C7, buf);
    S5784C7 *dp, &lv = *(dp=new (buf) S5784C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,880), "sizeof(S5784C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5784C7)");
    check_field_offset(lv, s5784c7f0, ABISELECT(8,4), "S5784C7.s5784c7f0");
    set_bf_and_test(lv, s5784c7f1, ABISELECT(16,12), 0, 3, 1, "S5784C7");
    set_bf_and_test(lv, s5784c7f1, ABISELECT(16,12), 0, 3, hide_sll(1LL<<2), "S5784C7");
    check_field_offset(lv, s5784c7f2, ABISELECT(20,16), "S5784C7.s5784c7f2");
    set_bf_and_test(lv, s5784c7f3, ABISELECT(40,36), 0, 4, 1, "S5784C7");
    set_bf_and_test(lv, s5784c7f3, ABISELECT(40,36), 0, 4, hide_sll(1LL<<3), "S5784C7");
    check_field_offset(lv, s5784c7f4, ABISELECT(44,40), "S5784C7.s5784c7f4");
    check_field_offset(lv, s5784c7f5, ABISELECT(48,44), "S5784C7.s5784c7f5");
    test_class_info(&lv, &cd_S5784C7);
    dp->~S5784C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5784C7(Test_S5784C7, "S5784C7", ABISELECT(1472,880));

#else // __cplusplus

extern void _ZN7S5784C7C1Ev();
extern void _ZN7S5784C7D1Ev();
Name_Map name_map_S5784C7[] = {
  NSPAIR(_ZN7S5784C7C1Ev),
  NSPAIR(_ZN7S5784C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5784C7[];
extern void _ZN7S5784C72v3Ev();
extern void _ZN7S5784C72v4Ev();
static  VTBL_ENTRY vtc_S5784C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5784C7[0]),
  (VTBL_ENTRY)&_ZN7S5784C72v3Ev,
  (VTBL_ENTRY)&_ZN7S5784C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S5784C7[];
extern  VTBL_ENTRY _ZTV7S5784C7[];
Class_Descriptor cd_S5784C7 = {  "S5784C7", // class name
  0,0,//no base classes
  &(vtc_S5784C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1472,880), // object size
  NSPAIRA(_ZTI7S5784C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5784C7),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  S5784C4  : S7511C10 , virtual S7511C5 , S5784C6 , virtual S5784C7 , S2524C7 {
  short s5784c4f0;
  ::S2524C7 s5784c4f1;
  int s5784c4f2[2];
  ~S5784C4(); // tgen
  S5784C4(); // tgen
};
//SIG(-1 S5784C4) C1{ BC2{ m Fi Fs FL Fp} VBC3{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC4{ VBC3 FC3 FC3 Fp Fi Fp[7] Fi[2] FC3 FC3[6] FL[2] Fp Fi Fp} VBC5{ v1 v2 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC4} BC6{ m Fi[2] FL Fp[6]} Fs FC6 Fi[2]}


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

static void Test_S5784C4()
{
  extern Class_Descriptor cd_S5784C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(192,458)];
    init_test(&cd_S5784C4, buf);
    S5784C4 *dp, &lv = *(dp=new (buf) S5784C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3056,1828), "sizeof(S5784C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5784C4)");
    check_base_class_offset(lv, (S7511C10*), ABISELECT(1288,760), "S5784C4");
    check_base_class_offset(lv, (S7511C5*), ABISELECT(1456,872), "S5784C4");
    check_base_class_offset(lv, (S7511C5*)(S5784C6*), ABISELECT(1456,872), "S5784C4");
    check_base_class_offset(lv, (S5784C6*), 0, "S5784C4");
    check_base_class_offset(lv, (S5784C7*), ABISELECT(1584,948), "S5784C4");
    check_base_class_offset(lv, (S2524C7*), ABISELECT(1312,780), "S5784C4");
    check_field_offset(lv, s5784c4f0, ABISELECT(1376,820), "S5784C4.s5784c4f0");
    check_field_offset(lv, s5784c4f1, ABISELECT(1384,824), "S5784C4.s5784c4f1");
    check_field_offset(lv, s5784c4f2, ABISELECT(1448,864), "S5784C4.s5784c4f2");
    test_class_info(&lv, &cd_S5784C4);
    dp->~S5784C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5784C4(Test_S5784C4, "S5784C4", ABISELECT(3056,1828));

#else // __cplusplus

extern void _ZN7S5784C4C1Ev();
extern void _ZN7S5784C4D1Ev();
Name_Map name_map_S5784C4[] = {
  NSPAIR(_ZN7S5784C4C1Ev),
  NSPAIR(_ZN7S5784C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5784C6;
extern VTBL_ENTRY _ZTI7S5784C6[];
extern  VTBL_ENTRY _ZTV7S5784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5784C6[];
extern Class_Descriptor cd_S5784C7;
extern VTBL_ENTRY _ZTI7S5784C7[];
extern  VTBL_ENTRY _ZTV7S5784C7[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
static Base_Class bases_S5784C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C10,    ABISELECT(1288,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7511C5,    ABISELECT(1456,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5784C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5784C7,    ABISELECT(1584,948), //bcp->offset
    4, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2524C7,    ABISELECT(1312,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5784C4[];
extern void _ZN7S5784C72v3Ev();
extern void _ZN7S5784C72v4Ev();
static  VTBL_ENTRY vtc_S5784C4[] = {
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S5784C4[0]),
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI7S5784C4[0]),
  (VTBL_ENTRY)&_ZN7S5784C72v3Ev,
  (VTBL_ENTRY)&_ZN7S5784C72v4Ev,
};
extern VTBL_ENTRY _ZTV7S5784C4[];
static  VTBL_ENTRY _tg__ZTV7S5784C6__7S5784C4[] = {
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S5784C6[0]),
};
static  VTT_ENTRY vtt_S5784C4[] = {
  {&(_ZTV7S5784C4[4]),  4,10},
  {&(_tg__ZTV7S5784C6__7S5784C4[3]),  3,3},
  {&(_ZTV7S5784C4[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S5784C4[];
extern  VTBL_ENTRY _ZTV7S5784C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5784C4[];
Class_Descriptor cd_S5784C4 = {  "S5784C4", // class name
  bases_S5784C4, 5,
  &(vtc_S5784C4[0]), // expected_vtbl_contents
  &(vtt_S5784C4[0]), // expected_vtt_contents
  ABISELECT(3056,1828), // object size
  NSPAIRA(_ZTI7S5784C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S5784C4),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5784C4),3, //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  S5784C1  : S2524C7 , S7511C10 , virtual S5784C4 {
  int s5784c1f0[2];
  char s5784c1f1;
  ::S7511C5 s5784c1f2[7];
  char s5784c1f3;
  ::S7511C19 s5784c1f4;
  int s5784c1f5;
  void *s5784c1f6;
  ::S2524C7 s5784c1f7;
  int s5784c1f8;
  int s5784c1f9;
  virtual void  v1(); // _ZN7S5784C12v1Ev
  virtual void  v2(); // _ZN7S5784C12v2Ev
  ~S5784C1(); // tgen
  S5784C1(); // tgen
};
//SIG(1 S5784C1) C1{ BC2{ m Fi[2] FL Fp[6]} BC3{ m Fi Fs FL Fp} VBC4{ BC3 VBC5{ m Fl Fs Fc[5] Fp[3] Fc FD Fp FL[2] Fl Fp[3]} BC6{ VBC5 FC5 FC5 Fp Fi Fp[7] Fi[2] FC5 FC5[6] FL[2] Fp Fi Fp} VBC7{ v3 v4 Fi[2] Fc:3 Fi[5] Fi:4 Fi FC6} BC2 Fs FC2 Fi[2]} v1 v2 Fi[2] Fc FC5[7] Fc FU8{ m Fp FL Fc Fi Fi FD} Fi Fp FC2 Fi Fi}


void  S5784C1 ::v1(){vfunc_called(this, "_ZN7S5784C12v1Ev");}
void  S5784C1 ::v2(){vfunc_called(this, "_ZN7S5784C12v2Ev");}
S5784C1 ::~S5784C1(){ note_dtor("S5784C1", this);} // tgen
S5784C1 ::S5784C1(){ note_ctor("S5784C1", this);} // tgen

static void Test_S5784C1()
{
  extern Class_Descriptor cd_S5784C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(263,628)];
    init_test(&cd_S5784C1, buf);
    S5784C1 *dp, &lv = *(dp=new (buf) S5784C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4192,2508), "sizeof(S5784C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5784C1)");
    /*is_ambiguous_... S5784C1::S2524C7 */ AMB_check_base_class_offset(lv, (S2524C7*), ABISELECT(8,4), "S5784C1");
    /*is_ambiguous_... S5784C1::S7511C10 */ AMB_check_base_class_offset(lv, (S7511C10*), ABISELECT(72,44), "S5784C1");
    check_base_class_offset(lv, (S7511C10*)(S5784C4*), ABISELECT(2424,1440), "S5784C1");
    check_base_class_offset(lv, (S7511C5*)(S5784C4*), ABISELECT(2592,1552), "S5784C1");
    check_base_class_offset(lv, (S7511C5*)(S5784C6*)(S5784C4*), ABISELECT(2592,1552), "S5784C1");
    check_base_class_offset(lv, (S5784C6*)(S5784C4*), ABISELECT(1136,680), "S5784C1");
    check_base_class_offset(lv, (S5784C7*)(S5784C4*), ABISELECT(2720,1628), "S5784C1");
    check_base_class_offset(lv, (S2524C7*)(S5784C4*), ABISELECT(2448,1460), "S5784C1");
    check_base_class_offset(lv, (S5784C4*), ABISELECT(1136,680), "S5784C1");
    check_field_offset(lv, s5784c1f0, ABISELECT(96,64), "S5784C1.s5784c1f0");
    check_field_offset(lv, s5784c1f1, ABISELECT(104,72), "S5784C1.s5784c1f1");
    check_field_offset(lv, s5784c1f2, ABISELECT(112,76), "S5784C1.s5784c1f2");
    check_field_offset(lv, s5784c1f3, ABISELECT(1008,608), "S5784C1.s5784c1f3");
    check_field_offset(lv, s5784c1f4, ABISELECT(1024,612), "S5784C1.s5784c1f4");
    check_field_offset(lv, s5784c1f5, ABISELECT(1040,624), "S5784C1.s5784c1f5");
    check_field_offset(lv, s5784c1f6, ABISELECT(1048,628), "S5784C1.s5784c1f6");
    check_field_offset(lv, s5784c1f7, ABISELECT(1056,632), "S5784C1.s5784c1f7");
    check_field_offset(lv, s5784c1f8, ABISELECT(1120,672), "S5784C1.s5784c1f8");
    check_field_offset(lv, s5784c1f9, ABISELECT(1124,676), "S5784C1.s5784c1f9");
    test_class_info(&lv, &cd_S5784C1);
    dp->~S5784C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5784C1(Test_S5784C1, "S5784C1", ABISELECT(4192,2508));

#else // __cplusplus

extern void _ZN7S5784C1C1Ev();
extern void _ZN7S5784C1D1Ev();
Name_Map name_map_S5784C1[] = {
  NSPAIR(_ZN7S5784C1C1Ev),
  NSPAIR(_ZN7S5784C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C10;
extern VTBL_ENTRY _ZTI8S7511C10[];
extern Class_Descriptor cd_S7511C5;
extern VTBL_ENTRY _ZTI7S7511C5[];
extern Class_Descriptor cd_S5784C6;
extern VTBL_ENTRY _ZTI7S5784C6[];
extern  VTBL_ENTRY _ZTV7S5784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5784C6[];
extern Class_Descriptor cd_S5784C7;
extern VTBL_ENTRY _ZTI7S5784C7[];
extern  VTBL_ENTRY _ZTV7S5784C7[];
extern Class_Descriptor cd_S2524C7;
extern VTBL_ENTRY _ZTI7S2524C7[];
extern Class_Descriptor cd_S5784C4;
extern VTBL_ENTRY _ZTI7S5784C4[];
extern  VTBL_ENTRY _ZTV7S5784C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5784C4[];
static Base_Class bases_S5784C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2524C7,    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_S7511C10,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7511C10,    ABISELECT(2424,1440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7511C5,    ABISELECT(2592,1552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5784C6,    ABISELECT(1136,680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5784C7,    ABISELECT(2720,1628), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2524C7,    ABISELECT(2448,1460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5784C4,    ABISELECT(1136,680), //bcp->offset
    7, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5784C1[];
extern void _ZN7S5784C12v1Ev();
extern void _ZN7S5784C12v2Ev();
extern void _ZN7S5784C72v3Ev();
extern void _ZN7S5784C72v4Ev();
static  VTBL_ENTRY vtc_S5784C1[] = {
  ABISELECT(2720,1628),
  ABISELECT(2592,1552),
  ABISELECT(1136,680),
  0,
  (VTBL_ENTRY)&(_ZTI7S5784C1[0]),
  (VTBL_ENTRY)&_ZN7S5784C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5784C12v2Ev,
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  ABISELECT(-1136,-680),
  (VTBL_ENTRY)&(_ZTI7S5784C1[0]),
  0,
  0,
  ABISELECT(-2720,-1628),
  (VTBL_ENTRY)&(_ZTI7S5784C1[0]),
  (VTBL_ENTRY)&_ZN7S5784C72v3Ev,
  (VTBL_ENTRY)&_ZN7S5784C72v4Ev,
};
extern VTBL_ENTRY _ZTV7S5784C1[];
static  VTBL_ENTRY _tg__ZTV7S5784C4__7S5784C1[] = {
  ABISELECT(1584,948),
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S5784C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5784C67S5784C4__7S5784C1[] = {
  ABISELECT(1456,872),
  0,
  (VTBL_ENTRY)&(_ZTI7S5784C6[0]),
};
extern void _ZN7S5784C72v3Ev();
extern void _ZN7S5784C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S5784C7__7S5784C4__7S5784C1[] = {
  0,
  0,
  ABISELECT(-1584,-948),
  (VTBL_ENTRY)&(_ZTI7S5784C4[0]),
  (VTBL_ENTRY)&_ZN7S5784C72v3Ev,
  (VTBL_ENTRY)&_ZN7S5784C72v4Ev,
};
static  VTT_ENTRY vtt_S5784C1[] = {
  {&(_ZTV7S5784C1[5]),  5,17},
  {&(_ZTV7S5784C1[11]),  11,17},
  {&(_ZTV7S5784C1[15]),  15,17},
  {&(_tg__ZTV7S5784C4__7S5784C1[4]),  4,4},
  {&(_tg__ZTV7S5784C67S5784C4__7S5784C1[3]),  3,3},
  {&(_tg__ZTV7S5784C7__7S5784C4__7S5784C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5784C1[];
extern  VTBL_ENTRY _ZTV7S5784C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5784C1[];
Class_Descriptor cd_S5784C1 = {  "S5784C1", // class name
  bases_S5784C1, 8,
  &(vtc_S5784C1[0]), // expected_vtbl_contents
  &(vtt_S5784C1[0]), // expected_vtt_contents
  ABISELECT(4192,2508), // object size
  NSPAIRA(_ZTI7S5784C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5784C1),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5784C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20305C2  {
  ::S7817C7 s20305c2f0;
  __tsi64 s20305c2f1;
  virtual void  v6(); // _ZN8S20305C22v6Ev
  virtual void  v7(); // _ZN8S20305C22v7Ev
  virtual void  v8(); // _ZN8S20305C22v8Ev
  virtual void  v9(); // _ZN8S20305C22v9Ev
  virtual void  v10(); // _ZN8S20305C23v10Ev
  virtual void  v11(); // _ZN8S20305C23v11Ev
  ~S20305C2(); // tgen
  S20305C2(); // tgen
};
//SIG(-1 S20305C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} FL}


void  S20305C2 ::v6(){vfunc_called(this, "_ZN8S20305C22v6Ev");}
void  S20305C2 ::v7(){vfunc_called(this, "_ZN8S20305C22v7Ev");}
void  S20305C2 ::v8(){vfunc_called(this, "_ZN8S20305C22v8Ev");}
void  S20305C2 ::v9(){vfunc_called(this, "_ZN8S20305C22v9Ev");}
void  S20305C2 ::v10(){vfunc_called(this, "_ZN8S20305C23v10Ev");}
void  S20305C2 ::v11(){vfunc_called(this, "_ZN8S20305C23v11Ev");}
S20305C2 ::~S20305C2(){ note_dtor("S20305C2", this);} // tgen
S20305C2 ::S20305C2(){ note_ctor("S20305C2", this);} // tgen

static void Test_S20305C2()
{
  extern Class_Descriptor cd_S20305C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,30)];
    init_test(&cd_S20305C2, buf);
    S20305C2 *dp, &lv = *(dp=new (buf) S20305C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S20305C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20305C2)");
    check_field_offset(lv, s20305c2f0, ABISELECT(8,4), "S20305C2.s20305c2f0");
    check_field_offset(lv, s20305c2f1, ABISELECT(152,108), "S20305C2.s20305c2f1");
    test_class_info(&lv, &cd_S20305C2);
    dp->~S20305C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20305C2(Test_S20305C2, "S20305C2", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN8S20305C2C1Ev();
extern void _ZN8S20305C2D1Ev();
Name_Map name_map_S20305C2[] = {
  NSPAIR(_ZN8S20305C2C1Ev),
  NSPAIR(_ZN8S20305C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20305C2[];
extern void _ZN8S20305C22v6Ev();
extern void _ZN8S20305C22v7Ev();
extern void _ZN8S20305C22v8Ev();
extern void _ZN8S20305C22v9Ev();
extern void _ZN8S20305C23v10Ev();
extern void _ZN8S20305C23v11Ev();
static  VTBL_ENTRY vtc_S20305C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20305C2[0]),
  (VTBL_ENTRY)&_ZN8S20305C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20305C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20305C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20305C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20305C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20305C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S20305C2[];
extern  VTBL_ENTRY _ZTV8S20305C2[];
Class_Descriptor cd_S20305C2 = {  "S20305C2", // class name
  0,0,//no base classes
  &(vtc_S20305C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI8S20305C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20305C2),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  S20305C7  {
  int s20305c7f0;
  virtual void  v12(); // _ZN8S20305C73v12Ev
  virtual void  v13(); // _ZN8S20305C73v13Ev
  virtual void  v14(); // _ZN8S20305C73v14Ev
  ~S20305C7(); // tgen
  S20305C7(); // tgen
};
//SIG(-1 S20305C7) C1{ v1 v2 v3 Fi}


void  S20305C7 ::v12(){vfunc_called(this, "_ZN8S20305C73v12Ev");}
void  S20305C7 ::v13(){vfunc_called(this, "_ZN8S20305C73v13Ev");}
void  S20305C7 ::v14(){vfunc_called(this, "_ZN8S20305C73v14Ev");}
S20305C7 ::~S20305C7(){ note_dtor("S20305C7", this);} // tgen
S20305C7 ::S20305C7(){ note_ctor("S20305C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20305C7C1Ev();
extern void _ZN8S20305C7D1Ev();
Name_Map name_map_S20305C7[] = {
  NSPAIR(_ZN8S20305C7C1Ev),
  NSPAIR(_ZN8S20305C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20305C7[];
extern void _ZN8S20305C73v12Ev();
extern void _ZN8S20305C73v13Ev();
extern void _ZN8S20305C73v14Ev();
static  VTBL_ENTRY vtc_S20305C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20305C7[0]),
  (VTBL_ENTRY)&_ZN8S20305C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20305C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20305C73v14Ev,
};
extern VTBL_ENTRY _ZTI8S20305C7[];
extern  VTBL_ENTRY _ZTV8S20305C7[];
Class_Descriptor cd_S20305C7 = {  "S20305C7", // class name
  0,0,//no base classes
  &(vtc_S20305C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20305C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20305C7),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  S20305C9_nt  {
  virtual void  v15(); // _ZN11S20305C9_nt3v15Ev
  virtual void  v16(); // _ZN11S20305C9_nt3v16Ev
  virtual void  v17(); // _ZN11S20305C9_nt3v17Ev
  virtual void  v18(); // _ZN11S20305C9_nt3v18Ev
  ~S20305C9_nt(); // tgen
  S20305C9_nt(); // tgen
};
//SIG(-1 S20305C9_nt) C1{ v1 v2 v3 v4}


void  S20305C9_nt ::v15(){vfunc_called(this, "_ZN11S20305C9_nt3v15Ev");}
void  S20305C9_nt ::v16(){vfunc_called(this, "_ZN11S20305C9_nt3v16Ev");}
void  S20305C9_nt ::v17(){vfunc_called(this, "_ZN11S20305C9_nt3v17Ev");}
void  S20305C9_nt ::v18(){vfunc_called(this, "_ZN11S20305C9_nt3v18Ev");}
S20305C9_nt ::~S20305C9_nt(){ note_dtor("S20305C9_nt", this);} // tgen
S20305C9_nt ::S20305C9_nt(){ note_ctor("S20305C9_nt", this);} // tgen

//skip512 S20305C9_nt

#else // __cplusplus

extern void _ZN11S20305C9_ntC1Ev();
extern void _ZN11S20305C9_ntD1Ev();
Name_Map name_map_S20305C9_nt[] = {
  NSPAIR(_ZN11S20305C9_ntC1Ev),
  NSPAIR(_ZN11S20305C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20305C9_nt[];
extern void _ZN11S20305C9_nt3v15Ev();
extern void _ZN11S20305C9_nt3v16Ev();
extern void _ZN11S20305C9_nt3v17Ev();
extern void _ZN11S20305C9_nt3v18Ev();
static  VTBL_ENTRY vtc_S20305C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20305C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S20305C9_nt[];
VTBL_ENTRY *P__ZTI11S20305C9_nt = _ZTI11S20305C9_nt; 
extern  VTBL_ENTRY _ZTV11S20305C9_nt[];
Class_Descriptor cd_S20305C9_nt = {  "S20305C9_nt", // class name
  0,0,//no base classes
  &(vtc_S20305C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20305C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20305C9_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  S20305C1  : virtual S20305C2 , virtual S20305C7 , S20305C9_nt {
  void *s20305c1f0[6];
  virtual void  v1(); // _ZN8S20305C12v1Ev
  virtual void  v2(); // _ZN8S20305C12v2Ev
  virtual void  v3(); // _ZN8S20305C12v3Ev
  virtual void  v4(); // _ZN8S20305C12v4Ev
  virtual void  v5(); // _ZN8S20305C12v5Ev
  ~S20305C1(); // tgen
  S20305C1(); // tgen
};
//SIG(1 S20305C1) C1{ VBC2{ v6 v7 v8 v9 v10 v11 FC3{ VBC4{ v23 v24 v25 v26 v27 v28 v29 v30 FL} VBC5{ VBC4 v31 v32 v33 v34 v35 v36 FC4 Fi Fp} BC6{ VBC5 vd v37 v38 v39 v40 v41 Fs[6] Fi Fs Fc[6]} VBC7{ v42 v43 v44 Fi} BC8{ VBC5 VBC6 vd v45 v46} vd v19 v20 v21 v22} FL} VBC9{ v12 v13 v14 Fi} BC10{ v15 v16 v17 v18} v1 v2 v3 v4 v5 Fp[6]}


void  S20305C1 ::v1(){vfunc_called(this, "_ZN8S20305C12v1Ev");}
void  S20305C1 ::v2(){vfunc_called(this, "_ZN8S20305C12v2Ev");}
void  S20305C1 ::v3(){vfunc_called(this, "_ZN8S20305C12v3Ev");}
void  S20305C1 ::v4(){vfunc_called(this, "_ZN8S20305C12v4Ev");}
void  S20305C1 ::v5(){vfunc_called(this, "_ZN8S20305C12v5Ev");}
S20305C1 ::~S20305C1(){ note_dtor("S20305C1", this);} // tgen
S20305C1 ::S20305C1(){ note_ctor("S20305C1", this);} // tgen

static void Test_S20305C1()
{
  extern Class_Descriptor cd_S20305C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,39)];
    init_test(&cd_S20305C1, buf);
    S20305C1 *dp, &lv = *(dp=new (buf) S20305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,152), "sizeof(S20305C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20305C1)");
    check_base_class_offset(lv, (S20305C2*), ABISELECT(56,28), "S20305C1");
    check_base_class_offset(lv, (S20305C7*), ABISELECT(216,144), "S20305C1");
    check_base_class_offset(lv, (S20305C9_nt*), 0, "S20305C1");
    check_field_offset(lv, s20305c1f0, ABISELECT(8,4), "S20305C1.s20305c1f0");
    test_class_info(&lv, &cd_S20305C1);
    dp->~S20305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20305C1(Test_S20305C1, "S20305C1", ABISELECT(232,152));

#else // __cplusplus

extern void _ZN8S20305C1C1Ev();
extern void _ZN8S20305C1D1Ev();
Name_Map name_map_S20305C1[] = {
  NSPAIR(_ZN8S20305C1C1Ev),
  NSPAIR(_ZN8S20305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20305C2;
extern VTBL_ENTRY _ZTI8S20305C2[];
extern  VTBL_ENTRY _ZTV8S20305C2[];
extern Class_Descriptor cd_S20305C7;
extern VTBL_ENTRY _ZTI8S20305C7[];
extern  VTBL_ENTRY _ZTV8S20305C7[];
extern Class_Descriptor cd_S20305C9_nt;
extern VTBL_ENTRY _ZTI11S20305C9_nt[];
extern  VTBL_ENTRY _ZTV11S20305C9_nt[];
static Base_Class bases_S20305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20305C2,    ABISELECT(56,28), //bcp->offset
    13, //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_S20305C7,    ABISELECT(216,144), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20305C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20305C1[];
extern void _ZN11S20305C9_nt3v15Ev();
extern void _ZN11S20305C9_nt3v16Ev();
extern void _ZN11S20305C9_nt3v17Ev();
extern void _ZN11S20305C9_nt3v18Ev();
extern void _ZN8S20305C12v1Ev();
extern void _ZN8S20305C12v2Ev();
extern void _ZN8S20305C12v3Ev();
extern void _ZN8S20305C12v4Ev();
extern void _ZN8S20305C12v5Ev();
extern void _ZN8S20305C22v6Ev();
extern void _ZN8S20305C22v7Ev();
extern void _ZN8S20305C22v8Ev();
extern void _ZN8S20305C22v9Ev();
extern void _ZN8S20305C23v10Ev();
extern void _ZN8S20305C23v11Ev();
extern void _ZN8S20305C73v12Ev();
extern void _ZN8S20305C73v13Ev();
extern void _ZN8S20305C73v14Ev();
static  VTBL_ENTRY vtc_S20305C1[] = {
  ABISELECT(216,144),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20305C1[0]),
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S20305C9_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S20305C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20305C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20305C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20305C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20305C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20305C1[0]),
  (VTBL_ENTRY)&_ZN8S20305C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20305C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20305C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20305C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20305C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20305C23v11Ev,
  0,
  0,
  0,
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI8S20305C1[0]),
  (VTBL_ENTRY)&_ZN8S20305C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20305C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20305C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S20305C1[];
static  VTT_ENTRY vtt_S20305C1[] = {
  {&(_ZTV8S20305C1[4]),  4,35},
  {&(_ZTV8S20305C1[21]),  21,35},
  {&(_ZTV8S20305C1[32]),  32,35},
};
extern VTBL_ENTRY _ZTI8S20305C1[];
extern  VTBL_ENTRY _ZTV8S20305C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20305C1[];
Class_Descriptor cd_S20305C1 = {  "S20305C1", // class name
  bases_S20305C1, 3,
  &(vtc_S20305C1[0]), // expected_vtbl_contents
  &(vtt_S20305C1[0]), // expected_vtt_contents
  ABISELECT(232,152), // object size
  NSPAIRA(_ZTI8S20305C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20305C1),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20305C1),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20304C2  {
  ::S7817C7 s20304c2f0;
  long s20304c2f1;
  virtual void  v6(); // _ZN8S20304C22v6Ev
  virtual void  v7(); // _ZN8S20304C22v7Ev
  virtual void  v8(); // _ZN8S20304C22v8Ev
  virtual void  v9(); // _ZN8S20304C22v9Ev
  virtual void  v10(); // _ZN8S20304C23v10Ev
  virtual void  v11(); // _ZN8S20304C23v11Ev
  ~S20304C2(); // tgen
  S20304C2(); // tgen
};
//SIG(-1 S20304C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} Fl}


void  S20304C2 ::v6(){vfunc_called(this, "_ZN8S20304C22v6Ev");}
void  S20304C2 ::v7(){vfunc_called(this, "_ZN8S20304C22v7Ev");}
void  S20304C2 ::v8(){vfunc_called(this, "_ZN8S20304C22v8Ev");}
void  S20304C2 ::v9(){vfunc_called(this, "_ZN8S20304C22v9Ev");}
void  S20304C2 ::v10(){vfunc_called(this, "_ZN8S20304C23v10Ev");}
void  S20304C2 ::v11(){vfunc_called(this, "_ZN8S20304C23v11Ev");}
S20304C2 ::~S20304C2(){ note_dtor("S20304C2", this);} // tgen
S20304C2 ::S20304C2(){ note_ctor("S20304C2", this);} // tgen

static void Test_S20304C2()
{
  extern Class_Descriptor cd_S20304C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S20304C2, buf);
    S20304C2 *dp, &lv = *(dp=new (buf) S20304C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20304C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20304C2)");
    check_field_offset(lv, s20304c2f0, ABISELECT(8,4), "S20304C2.s20304c2f0");
    check_field_offset(lv, s20304c2f1, ABISELECT(152,108), "S20304C2.s20304c2f1");
    test_class_info(&lv, &cd_S20304C2);
    dp->~S20304C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20304C2(Test_S20304C2, "S20304C2", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN8S20304C2C1Ev();
extern void _ZN8S20304C2D1Ev();
Name_Map name_map_S20304C2[] = {
  NSPAIR(_ZN8S20304C2C1Ev),
  NSPAIR(_ZN8S20304C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20304C2[];
extern void _ZN8S20304C22v6Ev();
extern void _ZN8S20304C22v7Ev();
extern void _ZN8S20304C22v8Ev();
extern void _ZN8S20304C22v9Ev();
extern void _ZN8S20304C23v10Ev();
extern void _ZN8S20304C23v11Ev();
static  VTBL_ENTRY vtc_S20304C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20304C2[0]),
  (VTBL_ENTRY)&_ZN8S20304C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20304C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20304C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20304C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20304C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20304C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S20304C2[];
extern  VTBL_ENTRY _ZTV8S20304C2[];
Class_Descriptor cd_S20304C2 = {  "S20304C2", // class name
  0,0,//no base classes
  &(vtc_S20304C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20304C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20304C2),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  S20304C7  {
  int s20304c7f0;
  virtual void  v12(); // _ZN8S20304C73v12Ev
  virtual void  v13(); // _ZN8S20304C73v13Ev
  virtual void  v14(); // _ZN8S20304C73v14Ev
  ~S20304C7(); // tgen
  S20304C7(); // tgen
};
//SIG(-1 S20304C7) C1{ v1 v2 v3 Fi}


void  S20304C7 ::v12(){vfunc_called(this, "_ZN8S20304C73v12Ev");}
void  S20304C7 ::v13(){vfunc_called(this, "_ZN8S20304C73v13Ev");}
void  S20304C7 ::v14(){vfunc_called(this, "_ZN8S20304C73v14Ev");}
S20304C7 ::~S20304C7(){ note_dtor("S20304C7", this);} // tgen
S20304C7 ::S20304C7(){ note_ctor("S20304C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20304C7C1Ev();
extern void _ZN8S20304C7D1Ev();
Name_Map name_map_S20304C7[] = {
  NSPAIR(_ZN8S20304C7C1Ev),
  NSPAIR(_ZN8S20304C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20304C7[];
extern void _ZN8S20304C73v12Ev();
extern void _ZN8S20304C73v13Ev();
extern void _ZN8S20304C73v14Ev();
static  VTBL_ENTRY vtc_S20304C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20304C7[0]),
  (VTBL_ENTRY)&_ZN8S20304C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20304C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20304C73v14Ev,
};
extern VTBL_ENTRY _ZTI8S20304C7[];
extern  VTBL_ENTRY _ZTV8S20304C7[];
Class_Descriptor cd_S20304C7 = {  "S20304C7", // class name
  0,0,//no base classes
  &(vtc_S20304C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20304C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20304C7),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  S20304C9  {
  virtual void  v15(); // _ZN8S20304C93v15Ev
  virtual void  v16(); // _ZN8S20304C93v16Ev
  virtual void  v17(); // _ZN8S20304C93v17Ev
  virtual void  v18(); // _ZN8S20304C93v18Ev
  ~S20304C9(); // tgen
  S20304C9(); // tgen
};
//SIG(-1 S20304C9) C1{ v1 v2 v3 v4}


void  S20304C9 ::v15(){vfunc_called(this, "_ZN8S20304C93v15Ev");}
void  S20304C9 ::v16(){vfunc_called(this, "_ZN8S20304C93v16Ev");}
void  S20304C9 ::v17(){vfunc_called(this, "_ZN8S20304C93v17Ev");}
void  S20304C9 ::v18(){vfunc_called(this, "_ZN8S20304C93v18Ev");}
S20304C9 ::~S20304C9(){ note_dtor("S20304C9", this);} // tgen
S20304C9 ::S20304C9(){ note_ctor("S20304C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20304C9C1Ev();
extern void _ZN8S20304C9D1Ev();
Name_Map name_map_S20304C9[] = {
  NSPAIR(_ZN8S20304C9C1Ev),
  NSPAIR(_ZN8S20304C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20304C9[];
extern void _ZN8S20304C93v15Ev();
extern void _ZN8S20304C93v16Ev();
extern void _ZN8S20304C93v17Ev();
extern void _ZN8S20304C93v18Ev();
static  VTBL_ENTRY vtc_S20304C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20304C9[0]),
  (VTBL_ENTRY)&_ZN8S20304C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20304C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20304C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20304C93v18Ev,
};
extern VTBL_ENTRY _ZTI8S20304C9[];
extern  VTBL_ENTRY _ZTV8S20304C9[];
Class_Descriptor cd_S20304C9 = {  "S20304C9", // class name
  0,0,//no base classes
  &(vtc_S20304C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20304C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20304C9),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  S20304C1  : virtual S20304C2 , virtual S20304C7 , S20304C9 {
  void *s20304c1f0[6];
  virtual void  v1(); // _ZN8S20304C12v1Ev
  virtual void  v2(); // _ZN8S20304C12v2Ev
  virtual void  v3(); // _ZN8S20304C12v3Ev
  virtual void  v4(); // _ZN8S20304C12v4Ev
  virtual void  v5(); // _ZN8S20304C12v5Ev
  ~S20304C1(); // tgen
  S20304C1(); // tgen
};
//SIG(1 S20304C1) C1{ VBC2{ v6 v7 v8 v9 v10 v11 FC3{ VBC4{ v23 v24 v25 v26 v27 v28 v29 v30 FL} VBC5{ VBC4 v31 v32 v33 v34 v35 v36 FC4 Fi Fp} BC6{ VBC5 vd v37 v38 v39 v40 v41 Fs[6] Fi Fs Fc[6]} VBC7{ v42 v43 v44 Fi} BC8{ VBC5 VBC6 vd v45 v46} vd v19 v20 v21 v22} Fl} VBC9{ v12 v13 v14 Fi} BC10{ v15 v16 v17 v18} v1 v2 v3 v4 v5 Fp[6]}


void  S20304C1 ::v1(){vfunc_called(this, "_ZN8S20304C12v1Ev");}
void  S20304C1 ::v2(){vfunc_called(this, "_ZN8S20304C12v2Ev");}
void  S20304C1 ::v3(){vfunc_called(this, "_ZN8S20304C12v3Ev");}
void  S20304C1 ::v4(){vfunc_called(this, "_ZN8S20304C12v4Ev");}
void  S20304C1 ::v5(){vfunc_called(this, "_ZN8S20304C12v5Ev");}
S20304C1 ::~S20304C1(){ note_dtor("S20304C1", this);} // tgen
S20304C1 ::S20304C1(){ note_ctor("S20304C1", this);} // tgen

static void Test_S20304C1()
{
  extern Class_Descriptor cd_S20304C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,38)];
    init_test(&cd_S20304C1, buf);
    S20304C1 *dp, &lv = *(dp=new (buf) S20304C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,148), "sizeof(S20304C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20304C1)");
    check_base_class_offset(lv, (S20304C2*), ABISELECT(56,28), "S20304C1");
    check_base_class_offset(lv, (S20304C7*), ABISELECT(216,140), "S20304C1");
    check_base_class_offset(lv, (S20304C9*), 0, "S20304C1");
    check_field_offset(lv, s20304c1f0, ABISELECT(8,4), "S20304C1.s20304c1f0");
    test_class_info(&lv, &cd_S20304C1);
    dp->~S20304C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20304C1(Test_S20304C1, "S20304C1", ABISELECT(232,148));

#else // __cplusplus

extern void _ZN8S20304C1C1Ev();
extern void _ZN8S20304C1D1Ev();
Name_Map name_map_S20304C1[] = {
  NSPAIR(_ZN8S20304C1C1Ev),
  NSPAIR(_ZN8S20304C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20304C2;
extern VTBL_ENTRY _ZTI8S20304C2[];
extern  VTBL_ENTRY _ZTV8S20304C2[];
extern Class_Descriptor cd_S20304C7;
extern VTBL_ENTRY _ZTI8S20304C7[];
extern  VTBL_ENTRY _ZTV8S20304C7[];
extern Class_Descriptor cd_S20304C9;
extern VTBL_ENTRY _ZTI8S20304C9[];
extern  VTBL_ENTRY _ZTV8S20304C9[];
static Base_Class bases_S20304C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20304C2,    ABISELECT(56,28), //bcp->offset
    13, //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_S20304C7,    ABISELECT(216,140), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20304C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20304C1[];
extern void _ZN8S20304C93v15Ev();
extern void _ZN8S20304C93v16Ev();
extern void _ZN8S20304C93v17Ev();
extern void _ZN8S20304C93v18Ev();
extern void _ZN8S20304C12v1Ev();
extern void _ZN8S20304C12v2Ev();
extern void _ZN8S20304C12v3Ev();
extern void _ZN8S20304C12v4Ev();
extern void _ZN8S20304C12v5Ev();
extern void _ZN8S20304C22v6Ev();
extern void _ZN8S20304C22v7Ev();
extern void _ZN8S20304C22v8Ev();
extern void _ZN8S20304C22v9Ev();
extern void _ZN8S20304C23v10Ev();
extern void _ZN8S20304C23v11Ev();
extern void _ZN8S20304C73v12Ev();
extern void _ZN8S20304C73v13Ev();
extern void _ZN8S20304C73v14Ev();
static  VTBL_ENTRY vtc_S20304C1[] = {
  ABISELECT(216,140),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20304C1[0]),
  (VTBL_ENTRY)&_ZN8S20304C93v15Ev,
  (VTBL_ENTRY)&_ZN8S20304C93v16Ev,
  (VTBL_ENTRY)&_ZN8S20304C93v17Ev,
  (VTBL_ENTRY)&_ZN8S20304C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20304C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20304C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20304C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20304C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20304C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20304C1[0]),
  (VTBL_ENTRY)&_ZN8S20304C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20304C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20304C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20304C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20304C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20304C23v11Ev,
  0,
  0,
  0,
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI8S20304C1[0]),
  (VTBL_ENTRY)&_ZN8S20304C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20304C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20304C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S20304C1[];
static  VTT_ENTRY vtt_S20304C1[] = {
  {&(_ZTV8S20304C1[4]),  4,35},
  {&(_ZTV8S20304C1[21]),  21,35},
  {&(_ZTV8S20304C1[32]),  32,35},
};
extern VTBL_ENTRY _ZTI8S20304C1[];
extern  VTBL_ENTRY _ZTV8S20304C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20304C1[];
Class_Descriptor cd_S20304C1 = {  "S20304C1", // class name
  bases_S20304C1, 3,
  &(vtc_S20304C1[0]), // expected_vtbl_contents
  &(vtt_S20304C1[0]), // expected_vtt_contents
  ABISELECT(232,148), // object size
  NSPAIRA(_ZTI8S20304C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20304C1),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20304C1),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21081C4  {
  long double s21081c4f0;
  virtual void  v5(); // _ZN8S21081C42v5Ev
  ~S21081C4(); // tgen
  S21081C4(); // tgen
};
//SIG(-1 S21081C4) C1{ v1 FD}


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

static void Test_S21081C4()
{
  extern Class_Descriptor cd_S21081C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S21081C4, buf);
    S21081C4 *dp, &lv = *(dp=new (buf) S21081C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21081C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21081C4)");
    check_field_offset(lv, s21081c4f0, ABISELECT(16,4), "S21081C4.s21081c4f0");
    test_class_info(&lv, &cd_S21081C4);
    dp->~S21081C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21081C4(Test_S21081C4, "S21081C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21081C4C1Ev();
extern void _ZN8S21081C4D1Ev();
Name_Map name_map_S21081C4[] = {
  NSPAIR(_ZN8S21081C4C1Ev),
  NSPAIR(_ZN8S21081C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21081C4[];
extern void _ZN8S21081C42v5Ev();
static  VTBL_ENTRY vtc_S21081C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C4[0]),
  (VTBL_ENTRY)&_ZN8S21081C42v5Ev,
};
extern VTBL_ENTRY _ZTI8S21081C4[];
extern  VTBL_ENTRY _ZTV8S21081C4[];
Class_Descriptor cd_S21081C4 = {  "S21081C4", // class name
  0,0,//no base classes
  &(vtc_S21081C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21081C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21081C4),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  S21081C5  {
  ::S21103C10 s21081c5f0[10];
  virtual  ~S21081C5(); // _ZN8S21081C5D1Ev
  virtual void  v6(); // _ZN8S21081C52v6Ev
  virtual void  v7(); // _ZN8S21081C52v7Ev
  virtual void  v8(); // _ZN8S21081C52v8Ev
  virtual void  v9(); // _ZN8S21081C52v9Ev
  virtual void  v10(); // _ZN8S21081C53v10Ev
  virtual void  v11(); // _ZN8S21081C53v11Ev
  virtual void  v12(); // _ZN8S21081C53v12Ev
  S21081C5(); // tgen
};
//SIG(-1 S21081C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 FU2{ m Fl}[10]}


 S21081C5 ::~S21081C5(){ note_dtor("S21081C5", this);}
void  S21081C5 ::v6(){vfunc_called(this, "_ZN8S21081C52v6Ev");}
void  S21081C5 ::v7(){vfunc_called(this, "_ZN8S21081C52v7Ev");}
void  S21081C5 ::v8(){vfunc_called(this, "_ZN8S21081C52v8Ev");}
void  S21081C5 ::v9(){vfunc_called(this, "_ZN8S21081C52v9Ev");}
void  S21081C5 ::v10(){vfunc_called(this, "_ZN8S21081C53v10Ev");}
void  S21081C5 ::v11(){vfunc_called(this, "_ZN8S21081C53v11Ev");}
void  S21081C5 ::v12(){vfunc_called(this, "_ZN8S21081C53v12Ev");}
S21081C5 ::S21081C5(){ note_ctor("S21081C5", this);} // tgen

static void Test_S21081C5()
{
  extern Class_Descriptor cd_S21081C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S21081C5, buf);
    S21081C5 *dp, &lv = *(dp=new (buf) S21081C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S21081C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21081C5)");
    check_field_offset(lv, s21081c5f0, ABISELECT(8,4), "S21081C5.s21081c5f0");
    test_class_info(&lv, &cd_S21081C5);
    dp->~S21081C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21081C5(Test_S21081C5, "S21081C5", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S21081C5C1Ev();
extern void _ZN8S21081C5D1Ev();
Name_Map name_map_S21081C5[] = {
  NSPAIR(_ZN8S21081C5C1Ev),
  NSPAIR(_ZN8S21081C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21081C5[];
extern void _ZN8S21081C5D1Ev();
extern void _ZN8S21081C5D0Ev();
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
static  VTBL_ENTRY vtc_S21081C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C5[0]),
  (VTBL_ENTRY)&_ZN8S21081C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
};
extern VTBL_ENTRY _ZTI8S21081C5[];
extern  VTBL_ENTRY _ZTV8S21081C5[];
Class_Descriptor cd_S21081C5 = {  "S21081C5", // class name
  0,0,//no base classes
  &(vtc_S21081C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S21081C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21081C5),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  S21081C8  {
  virtual void  v13(); // _ZN8S21081C83v13Ev
  virtual void  v14(); // _ZN8S21081C83v14Ev
  virtual void  v15(); // _ZN8S21081C83v15Ev
  virtual void  v16(); // _ZN8S21081C83v16Ev
  virtual void  v17(); // _ZN8S21081C83v17Ev
  virtual void  v18(); // _ZN8S21081C83v18Ev
  virtual void  v19(); // _ZN8S21081C83v19Ev
  virtual void  v20(); // _ZN8S21081C83v20Ev
  ~S21081C8(); // tgen
  S21081C8(); // tgen
};
//SIG(-1 S21081C8) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S21081C8 ::v13(){vfunc_called(this, "_ZN8S21081C83v13Ev");}
void  S21081C8 ::v14(){vfunc_called(this, "_ZN8S21081C83v14Ev");}
void  S21081C8 ::v15(){vfunc_called(this, "_ZN8S21081C83v15Ev");}
void  S21081C8 ::v16(){vfunc_called(this, "_ZN8S21081C83v16Ev");}
void  S21081C8 ::v17(){vfunc_called(this, "_ZN8S21081C83v17Ev");}
void  S21081C8 ::v18(){vfunc_called(this, "_ZN8S21081C83v18Ev");}
void  S21081C8 ::v19(){vfunc_called(this, "_ZN8S21081C83v19Ev");}
void  S21081C8 ::v20(){vfunc_called(this, "_ZN8S21081C83v20Ev");}
S21081C8 ::~S21081C8(){ note_dtor("S21081C8", this);} // tgen
S21081C8 ::S21081C8(){ note_ctor("S21081C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S21081C8C1Ev();
extern void _ZN8S21081C8D1Ev();
Name_Map name_map_S21081C8[] = {
  NSPAIR(_ZN8S21081C8C1Ev),
  NSPAIR(_ZN8S21081C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21081C8[];
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
static  VTBL_ENTRY vtc_S21081C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C8[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
};
extern VTBL_ENTRY _ZTI8S21081C8[];
extern  VTBL_ENTRY _ZTV8S21081C8[];
Class_Descriptor cd_S21081C8 = {  "S21081C8", // class name
  0,0,//no base classes
  &(vtc_S21081C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21081C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21081C8),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  S21081C7  : virtual S21081C8 {
  int s21081c7f0;
  int s21081c7f1;
  void *s21081c7f2;
  virtual  ~S21081C7(); // _ZN8S21081C7D2Ev
  virtual void  v21(); // _ZN8S21081C73v21Ev
  virtual void  v22(); // _ZN8S21081C73v22Ev
  virtual void  v23(); // _ZN8S21081C73v23Ev
  virtual void  v24(); // _ZN8S21081C73v24Ev
  S21081C7(); // tgen
};
//SIG(-1 S21081C7) C1{ VBC2{ v5 v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 Fi[2] Fp}


 S21081C7 ::~S21081C7(){ note_dtor("S21081C7", this);}
void  S21081C7 ::v21(){vfunc_called(this, "_ZN8S21081C73v21Ev");}
void  S21081C7 ::v22(){vfunc_called(this, "_ZN8S21081C73v22Ev");}
void  S21081C7 ::v23(){vfunc_called(this, "_ZN8S21081C73v23Ev");}
void  S21081C7 ::v24(){vfunc_called(this, "_ZN8S21081C73v24Ev");}
S21081C7 ::S21081C7(){ note_ctor("S21081C7", this);} // tgen

static void Test_S21081C7()
{
  extern Class_Descriptor cd_S21081C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S21081C7, buf);
    S21081C7 *dp, &lv = *(dp=new (buf) S21081C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21081C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21081C7)");
    check_base_class_offset(lv, (S21081C8*), 0, "S21081C7");
    check_field_offset(lv, s21081c7f0, ABISELECT(8,4), "S21081C7.s21081c7f0");
    check_field_offset(lv, s21081c7f1, ABISELECT(12,8), "S21081C7.s21081c7f1");
    check_field_offset(lv, s21081c7f2, ABISELECT(16,12), "S21081C7.s21081c7f2");
    test_class_info(&lv, &cd_S21081C7);
    dp->~S21081C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21081C7(Test_S21081C7, "S21081C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S21081C7C1Ev();
extern void _ZN8S21081C7D2Ev();
Name_Map name_map_S21081C7[] = {
  NSPAIR(_ZN8S21081C7C1Ev),
  NSPAIR(_ZN8S21081C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21081C8;
extern VTBL_ENTRY _ZTI8S21081C8[];
extern  VTBL_ENTRY _ZTV8S21081C8[];
static Base_Class bases_S21081C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21081C8,    0, //bcp->offset
    -1, //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 _ZTI8S21081C7[];
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void _ZN8S21081C7D1Ev();
extern void _ZN8S21081C7D0Ev();
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY vtc_S21081C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C7[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S21081C7[];
static  VTT_ENTRY vtt_S21081C7[] = {
  {&(_ZTV8S21081C7[11]),  11,25},
  {&(_ZTV8S21081C7[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S21081C7[];
extern  VTBL_ENTRY _ZTV8S21081C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C7[];
Class_Descriptor cd_S21081C7 = {  "S21081C7", // class name
  bases_S21081C7, 1,
  &(vtc_S21081C7[0]), // expected_vtbl_contents
  &(vtt_S21081C7[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S21081C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21081C7),25, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21081C7),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  S21081C9  {
  void *s21081c9f0[5];
  virtual void  v25(); // _ZN8S21081C93v25Ev
  virtual void  v26(); // _ZN8S21081C93v26Ev
  virtual void  v27(); // _ZN8S21081C93v27Ev
  virtual void  v28(); // _ZN8S21081C93v28Ev
  virtual void  v29(); // _ZN8S21081C93v29Ev
  virtual void  v30(); // _ZN8S21081C93v30Ev
  virtual void  v31(); // _ZN8S21081C93v31Ev
  virtual void  v32(); // _ZN8S21081C93v32Ev
  virtual void  v33(); // _ZN8S21081C93v33Ev
  ~S21081C9(); // tgen
  S21081C9(); // tgen
};
//SIG(-1 S21081C9) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S21081C9 ::v25(){vfunc_called(this, "_ZN8S21081C93v25Ev");}
void  S21081C9 ::v26(){vfunc_called(this, "_ZN8S21081C93v26Ev");}
void  S21081C9 ::v27(){vfunc_called(this, "_ZN8S21081C93v27Ev");}
void  S21081C9 ::v28(){vfunc_called(this, "_ZN8S21081C93v28Ev");}
void  S21081C9 ::v29(){vfunc_called(this, "_ZN8S21081C93v29Ev");}
void  S21081C9 ::v30(){vfunc_called(this, "_ZN8S21081C93v30Ev");}
void  S21081C9 ::v31(){vfunc_called(this, "_ZN8S21081C93v31Ev");}
void  S21081C9 ::v32(){vfunc_called(this, "_ZN8S21081C93v32Ev");}
void  S21081C9 ::v33(){vfunc_called(this, "_ZN8S21081C93v33Ev");}
S21081C9 ::~S21081C9(){ note_dtor("S21081C9", this);} // tgen
S21081C9 ::S21081C9(){ note_ctor("S21081C9", this);} // tgen

static void Test_S21081C9()
{
  extern Class_Descriptor cd_S21081C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21081C9, buf);
    S21081C9 *dp, &lv = *(dp=new (buf) S21081C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21081C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21081C9)");
    check_field_offset(lv, s21081c9f0, ABISELECT(8,4), "S21081C9.s21081c9f0");
    test_class_info(&lv, &cd_S21081C9);
    dp->~S21081C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21081C9(Test_S21081C9, "S21081C9", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21081C9C1Ev();
extern void _ZN8S21081C9D1Ev();
Name_Map name_map_S21081C9[] = {
  NSPAIR(_ZN8S21081C9C1Ev),
  NSPAIR(_ZN8S21081C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21081C9[];
extern void _ZN8S21081C93v25Ev();
extern void _ZN8S21081C93v26Ev();
extern void _ZN8S21081C93v27Ev();
extern void _ZN8S21081C93v28Ev();
extern void _ZN8S21081C93v29Ev();
extern void _ZN8S21081C93v30Ev();
extern void _ZN8S21081C93v31Ev();
extern void _ZN8S21081C93v32Ev();
extern void _ZN8S21081C93v33Ev();
static  VTBL_ENTRY vtc_S21081C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C9[0]),
  (VTBL_ENTRY)&_ZN8S21081C93v25Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v26Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v27Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v28Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v29Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v30Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v31Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v32Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v33Ev,
};
extern VTBL_ENTRY _ZTI8S21081C9[];
extern  VTBL_ENTRY _ZTV8S21081C9[];
Class_Descriptor cd_S21081C9 = {  "S21081C9", // class name
  0,0,//no base classes
  &(vtc_S21081C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21081C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21081C9),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  S21081C3  : virtual S21081C4 , S21081C5 , virtual S21081C7 , S21081C9 {
  ::S21103C11_nt s21081c3f0;
  virtual void  v34(); // _ZN8S21081C33v34Ev
  virtual void  v35(); // _ZN8S21081C33v35Ev
  virtual void  v36(); // _ZN8S21081C33v36Ev
  virtual void  v37(); // _ZN8S21081C33v37Ev
  virtual void  v38(); // _ZN8S21081C33v38Ev
  virtual void  v39(); // _ZN8S21081C33v39Ev
  ~S21081C3(); // tgen
  S21081C3(); // tgen
};
//SIG(-1 S21081C3) C1{ VBC2{ v7 FD} BC3{ vd v8 v9 v10 v11 v12 v13 v14 FU4{ m Fl}[10]} VBC5{ VBC6{ v15 v16 v17 v18 v19 v20 v21 v22} vd v23 v24 v25 v26 Fi Fi Fp} BC7{ v27 v28 v29 v30 v31 v32 v33 v34 v35 Fp[5]} v1 v2 v3 v4 v5 v6 FU8{ m}}


void  S21081C3 ::v34(){vfunc_called(this, "_ZN8S21081C33v34Ev");}
void  S21081C3 ::v35(){vfunc_called(this, "_ZN8S21081C33v35Ev");}
void  S21081C3 ::v36(){vfunc_called(this, "_ZN8S21081C33v36Ev");}
void  S21081C3 ::v37(){vfunc_called(this, "_ZN8S21081C33v37Ev");}
void  S21081C3 ::v38(){vfunc_called(this, "_ZN8S21081C33v38Ev");}
void  S21081C3 ::v39(){vfunc_called(this, "_ZN8S21081C33v39Ev");}
S21081C3 ::~S21081C3(){ note_dtor("S21081C3", this);} // tgen
S21081C3 ::S21081C3(){ note_ctor("S21081C3", this);} // tgen

static void Test_S21081C3()
{
  extern Class_Descriptor cd_S21081C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,27)];
    init_test(&cd_S21081C3, buf);
    S21081C3 *dp, &lv = *(dp=new (buf) S21081C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,104), "sizeof(S21081C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21081C3)");
    check_base_class_offset(lv, (S21081C4*), ABISELECT(144,72), "S21081C3");
    check_base_class_offset(lv, (S21081C5*), 0, "S21081C3");
    check_base_class_offset(lv, (S21081C8*)(S21081C7*), ABISELECT(176,88), "S21081C3");
    check_base_class_offset(lv, (S21081C7*), ABISELECT(176,88), "S21081C3");
    check_base_class_offset(lv, (S21081C9*), ABISELECT(88,44), "S21081C3");
    check_field_offset(lv, s21081c3f0, ABISELECT(136,68), "S21081C3.s21081c3f0");
    test_class_info(&lv, &cd_S21081C3);
    dp->~S21081C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21081C3(Test_S21081C3, "S21081C3", ABISELECT(208,104));

#else // __cplusplus

extern void _ZN8S21081C3C1Ev();
extern void _ZN8S21081C3D1Ev();
Name_Map name_map_S21081C3[] = {
  NSPAIR(_ZN8S21081C3C1Ev),
  NSPAIR(_ZN8S21081C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21081C4;
extern VTBL_ENTRY _ZTI8S21081C4[];
extern  VTBL_ENTRY _ZTV8S21081C4[];
extern Class_Descriptor cd_S21081C5;
extern VTBL_ENTRY _ZTI8S21081C5[];
extern  VTBL_ENTRY _ZTV8S21081C5[];
extern Class_Descriptor cd_S21081C8;
extern VTBL_ENTRY _ZTI8S21081C8[];
extern  VTBL_ENTRY _ZTV8S21081C8[];
extern Class_Descriptor cd_S21081C7;
extern VTBL_ENTRY _ZTI8S21081C7[];
extern  VTBL_ENTRY _ZTV8S21081C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C7[];
extern Class_Descriptor cd_S21081C9;
extern VTBL_ENTRY _ZTI8S21081C9[];
extern  VTBL_ENTRY _ZTV8S21081C9[];
static Base_Class bases_S21081C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21081C4,    ABISELECT(144,72), //bcp->offset
    31, //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_S21081C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21081C8,    ABISELECT(176,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21081C7,    ABISELECT(176,88), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21081C9,    ABISELECT(88,44), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21081C3[];
extern void _ZN8S21081C3D1Ev();
extern void _ZN8S21081C3D0Ev();
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
extern void _ZN8S21081C33v34Ev();
extern void _ZN8S21081C33v35Ev();
extern void _ZN8S21081C33v36Ev();
extern void _ZN8S21081C33v37Ev();
extern void _ZN8S21081C33v38Ev();
extern void _ZN8S21081C33v39Ev();
extern void _ZN8S21081C93v25Ev();
extern void _ZN8S21081C93v26Ev();
extern void _ZN8S21081C93v27Ev();
extern void _ZN8S21081C93v28Ev();
extern void _ZN8S21081C93v29Ev();
extern void _ZN8S21081C93v30Ev();
extern void _ZN8S21081C93v31Ev();
extern void _ZN8S21081C93v32Ev();
extern void _ZN8S21081C93v33Ev();
extern void _ZN8S21081C42v5Ev();
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev)();
extern void ABISELECT(_ZThn176_N8S21081C3D1Ev,_ZThn88_N8S21081C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev)();
extern void ABISELECT(_ZThn176_N8S21081C3D0Ev,_ZThn88_N8S21081C3D0Ev)() __attribute__((weak));
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY vtc_S21081C3[] = {
  ABISELECT(176,88),
  ABISELECT(176,88),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v39Ev,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C93v25Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v26Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v27Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v28Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v29Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v30Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v31Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v32Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v33Ev,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C42v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S21081C3[];
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void _ZN8S21081C7D1Ev();
extern void _ZN8S21081C7D0Ev();
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C7__8S21081C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C7[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
static  VTT_ENTRY vtt_S21081C3[] = {
  {&(_ZTV8S21081C3[5]),  5,65},
  {&(_ZTV8S21081C3[34]),  34,65},
  {&(_ZTV8S21081C3[51]),  51,65},
  {&(_ZTV8S21081C3[51]),  51,65},
  {&(_tg__ZTV8S21081C7__8S21081C3[11]),  11,25},
  {&(_tg__ZTV8S21081C7__8S21081C3[11]),  11,25},
};
extern VTBL_ENTRY _ZTI8S21081C3[];
extern  VTBL_ENTRY _ZTV8S21081C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C3[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21081C3D0Ev,_ZThn88_N8S21081C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S21081C3D1Ev,_ZThn88_N8S21081C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21081C3 = {  "S21081C3", // class name
  bases_S21081C3, 5,
  &(vtc_S21081C3[0]), // expected_vtbl_contents
  &(vtt_S21081C3[0]), // expected_vtt_contents
  ABISELECT(208,104), // object size
  NSPAIRA(_ZTI8S21081C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21081C3),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21081C3),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21081C2  : virtual S21081C3 {
  void *s21081c2f0;
  int s21081c2f1;
  ::S21103C10 s21081c2f2;
  __tsi64 s21081c2f3:24;
  virtual void  v40(); // _ZN8S21081C23v40Ev
  virtual void  v41(); // _ZN8S21081C23v41Ev
  ~S21081C2(); // tgen
  S21081C2(); // tgen
};
//SIG(-1 S21081C2) C1{ VBC2{ VBC3{ v3 FD} BC4{ vd v4 v5 v6 v7 v8 v9 v10 FU5{ m Fl}[10]} VBC6{ VBC7{ v11 v12 v13 v14 v15 v16 v17 v18} vd v19 v20 v21 v22 Fi Fi Fp} BC8{ v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp[5]} v32 v33 v34 v35 v36 v37 FU9{ m}} v1 v2 Fp Fi FU5 FL:24}


void  S21081C2 ::v40(){vfunc_called(this, "_ZN8S21081C23v40Ev");}
void  S21081C2 ::v41(){vfunc_called(this, "_ZN8S21081C23v41Ev");}
S21081C2 ::~S21081C2(){ note_dtor("S21081C2", this);} // tgen
S21081C2 ::S21081C2(){ note_ctor("S21081C2", this);} // tgen

static void Test_S21081C2()
{
  extern Class_Descriptor cd_S21081C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,32)];
    init_test(&cd_S21081C2, buf);
    S21081C2 *dp, &lv = *(dp=new (buf) S21081C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,124), "sizeof(S21081C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21081C2)");
    check_base_class_offset(lv, (S21081C4*)(S21081C3*), ABISELECT(192,92), "S21081C2");
    check_base_class_offset(lv, (S21081C5*)(S21081C3*), ABISELECT(40,20), "S21081C2");
    check_base_class_offset(lv, (S21081C8*)(S21081C7*), 0, "S21081C2");
    check_base_class_offset(lv, (S21081C7*)(S21081C3*), ABISELECT(224,108), "S21081C2");
    check_base_class_offset(lv, (S21081C9*)(S21081C3*), ABISELECT(128,64), "S21081C2");
    check_base_class_offset(lv, (S21081C3*), ABISELECT(40,20), "S21081C2");
    check_field_offset(lv, s21081c2f0, ABISELECT(8,4), "S21081C2.s21081c2f0");
    check_field_offset(lv, s21081c2f1, ABISELECT(16,8), "S21081C2.s21081c2f1");
    check_field_offset(lv, s21081c2f2, ABISELECT(24,12), "S21081C2.s21081c2f2");
    set_bf_and_test(lv, s21081c2f3, ABISELECT(32,16), 0, 24, 1, "S21081C2");
    set_bf_and_test(lv, s21081c2f3, ABISELECT(32,16), 0, 24, hide_sll(1LL<<23), "S21081C2");
    test_class_info(&lv, &cd_S21081C2);
    dp->~S21081C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21081C2(Test_S21081C2, "S21081C2", ABISELECT(256,124));

#else // __cplusplus

extern void _ZN8S21081C2C1Ev();
extern void _ZN8S21081C2D1Ev();
Name_Map name_map_S21081C2[] = {
  NSPAIR(_ZN8S21081C2C1Ev),
  NSPAIR(_ZN8S21081C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21081C4;
extern VTBL_ENTRY _ZTI8S21081C4[];
extern  VTBL_ENTRY _ZTV8S21081C4[];
extern Class_Descriptor cd_S21081C5;
extern VTBL_ENTRY _ZTI8S21081C5[];
extern  VTBL_ENTRY _ZTV8S21081C5[];
extern Class_Descriptor cd_S21081C8;
extern VTBL_ENTRY _ZTI8S21081C8[];
extern  VTBL_ENTRY _ZTV8S21081C8[];
extern Class_Descriptor cd_S21081C7;
extern VTBL_ENTRY _ZTI8S21081C7[];
extern  VTBL_ENTRY _ZTV8S21081C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C7[];
extern Class_Descriptor cd_S21081C9;
extern VTBL_ENTRY _ZTI8S21081C9[];
extern  VTBL_ENTRY _ZTV8S21081C9[];
extern Class_Descriptor cd_S21081C3;
extern VTBL_ENTRY _ZTI8S21081C3[];
extern  VTBL_ENTRY _ZTV8S21081C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C3[];
static Base_Class bases_S21081C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21081C4,    ABISELECT(192,92), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21081C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21081C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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_S21081C7,    ABISELECT(224,108), //bcp->offset
    84, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21081C9,    ABISELECT(128,64), //bcp->offset
    69, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21081C3,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S21081C2[];
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void _ZN8S21081C23v40Ev();
extern void _ZN8S21081C23v41Ev();
extern void _ZN8S21081C2D1Ev();
extern void _ZN8S21081C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S21081C2D1Ev,_ZTv0_n24_N8S21081C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S21081C2D1Ev,_ZThn20_N8S21081C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21081C2D0Ev,_ZTv0_n24_N8S21081C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S21081C2D0Ev,_ZThn20_N8S21081C2D0Ev)() __attribute__((weak));
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
extern void _ZN8S21081C33v34Ev();
extern void _ZN8S21081C33v35Ev();
extern void _ZN8S21081C33v36Ev();
extern void _ZN8S21081C33v37Ev();
extern void _ZN8S21081C33v38Ev();
extern void _ZN8S21081C33v39Ev();
extern void _ZN8S21081C93v25Ev();
extern void _ZN8S21081C93v26Ev();
extern void _ZN8S21081C93v27Ev();
extern void _ZN8S21081C93v28Ev();
extern void _ZN8S21081C93v29Ev();
extern void _ZN8S21081C93v30Ev();
extern void _ZN8S21081C93v31Ev();
extern void _ZN8S21081C93v32Ev();
extern void _ZN8S21081C93v33Ev();
extern void _ZN8S21081C42v5Ev();
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void ABISELECT(_ZTv0_n96_N8S21081C2D1Ev,_ZTv0_n48_N8S21081C2D1Ev)();
extern void ABISELECT(_ZThn224_N8S21081C2D1Ev,_ZThn108_N8S21081C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21081C2D0Ev,_ZTv0_n48_N8S21081C2D0Ev)();
extern void ABISELECT(_ZThn224_N8S21081C2D0Ev,_ZThn108_N8S21081C2D0Ev)() __attribute__((weak));
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY vtc_S21081C2[] = {
  0,
  ABISELECT(224,108),
  ABISELECT(192,92),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&_ZN8S21081C23v40Ev,
  (VTBL_ENTRY)&_ZN8S21081C23v41Ev,
  (VTBL_ENTRY)&_ZN8S21081C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C2D0Ev,
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21081C2D1Ev,_ZTv0_n24_N8S21081C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21081C2D0Ev,_ZTv0_n24_N8S21081C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v39Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C93v25Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v26Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v27Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v28Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v29Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v30Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v31Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v32Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v33Ev,
  0,
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C42v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C2D1Ev,_ZTv0_n48_N8S21081C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C2D0Ev,_ZTv0_n48_N8S21081C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S21081C2[];
extern void _ZN8S21081C3D1Ev();
extern void _ZN8S21081C3D0Ev();
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
extern void _ZN8S21081C33v34Ev();
extern void _ZN8S21081C33v35Ev();
extern void _ZN8S21081C33v36Ev();
extern void _ZN8S21081C33v37Ev();
extern void _ZN8S21081C33v38Ev();
extern void _ZN8S21081C33v39Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C3__8S21081C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v39Ev,
};
extern void _ZN8S21081C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C4__8S21081C3__8S21081C2[] = {
  0,
  ABISELECT(-152,-72),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C42v5Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev)();
extern void ABISELECT(_ZThn184_N8S21081C3D1Ev,_ZThn88_N8S21081C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev)();
extern void ABISELECT(_ZThn184_N8S21081C3D0Ev,_ZThn88_N8S21081C3D0Ev)() __attribute__((weak));
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C7__8S21081C3__8S21081C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-184,-88),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-184,-88),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C8__8S21081C3__8S21081C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void _ZN8S21081C7D1Ev();
extern void _ZN8S21081C7D0Ev();
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C7__8S21081C2[] = {
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C7[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C8__8S21081C7__8S21081C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,108),
  (VTBL_ENTRY)&(_ZTI8S21081C7[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
};
static  VTT_ENTRY vtt_S21081C2[] = {
  {&(_ZTV8S21081C2[14]),  14,114},
  {&(_ZTV8S21081C2[54]),  54,114},
  {&(_ZTV8S21081C2[83]),  83,114},
  {&(_ZTV8S21081C2[100]),  100,114},
  {&(_ZTV8S21081C2[14]),  14,114},
  {&(_ZTV8S21081C2[71]),  71,114},
  {&(_tg__ZTV8S21081C3__8S21081C2[5]),  5,20},
  {&(_tg__ZTV8S21081C4__8S21081C3__8S21081C2[3]),  3,4},
  {&(_tg__ZTV8S21081C7__8S21081C3__8S21081C2[16]),  16,30},
  {&(_tg__ZTV8S21081C8__8S21081C3__8S21081C2[10]),  10,18},
  {&(_tg__ZTV8S21081C7__8S21081C2[11]),  11,25},
  {&(_tg__ZTV8S21081C8__8S21081C7__8S21081C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S21081C2[];
extern  VTBL_ENTRY _ZTV8S21081C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C2[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S21081C3D0Ev,_ZThn88_N8S21081C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S21081C3D1Ev,_ZThn88_N8S21081C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C2D0Ev,_ZTv0_n48_N8S21081C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21081C2D0Ev,_ZThn108_N8S21081C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C2D1Ev,_ZTv0_n48_N8S21081C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21081C2D1Ev,_ZThn108_N8S21081C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21081C2D0Ev,_ZTv0_n24_N8S21081C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21081C2D0Ev,_ZThn20_N8S21081C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21081C2D1Ev,_ZTv0_n24_N8S21081C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21081C2D1Ev,_ZThn20_N8S21081C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21081C2 = {  "S21081C2", // class name
  bases_S21081C2, 6,
  &(vtc_S21081C2[0]), // expected_vtbl_contents
  &(vtt_S21081C2[0]), // expected_vtt_contents
  ABISELECT(256,124), // object size
  NSPAIRA(_ZTI8S21081C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21081C2),114, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21081C2),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21081C1  : virtual S21081C2 , S21081C5 {
  void *s21081c1f0[3];
  ::S21081C5 s21081c1f1;
  ::S21081C4 s21081c1f2;
  virtual  ~S21081C1(); // _ZN8S21081C1D2Ev
  virtual void  v1(); // _ZN8S21081C12v1Ev
  virtual void  v2(); // _ZN8S21081C12v2Ev
  virtual void  v3(); // _ZN8S21081C12v3Ev
  virtual void  v4(); // _ZN8S21081C12v4Ev
  S21081C1(); // tgen
};
//SIG(1 S21081C1) C1{ VBC2{ VBC3{ VBC4{ v5 FD} BC5{ vd v6 v7 v8 v9 v10 v11 v12 FU6{ m Fl}[10]} VBC7{ VBC8{ v13 v14 v15 v16 v17 v18 v19 v20} vd v21 v22 v23 v24 Fi Fi Fp} BC9{ v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp[5]} v34 v35 v36 v37 v38 v39 FU10{ m}} v40 v41 Fp Fi FU6 FL:24} BC5 vd v1 v2 v3 v4 Fp[3] FC5 FC4}


 S21081C1 ::~S21081C1(){ note_dtor("S21081C1", this);}
void  S21081C1 ::v1(){vfunc_called(this, "_ZN8S21081C12v1Ev");}
void  S21081C1 ::v2(){vfunc_called(this, "_ZN8S21081C12v2Ev");}
void  S21081C1 ::v3(){vfunc_called(this, "_ZN8S21081C12v3Ev");}
void  S21081C1 ::v4(){vfunc_called(this, "_ZN8S21081C12v4Ev");}
S21081C1 ::S21081C1(){ note_ctor("S21081C1", this);} // tgen

static void Test_S21081C1()
{
  extern Class_Descriptor cd_S21081C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,61)];
    init_test(&cd_S21081C1, buf);
    S21081C1 *dp, &lv = *(dp=new (buf) S21081C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,240), "sizeof(S21081C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21081C1)");
    check_base_class_offset(lv, (S21081C4*)(S21081C3*), ABISELECT(432,208), "S21081C1");
    check_base_class_offset(lv, (S21081C5*)(S21081C3*), ABISELECT(280,136), "S21081C1");
    check_base_class_offset(lv, (S21081C8*)(S21081C7*), ABISELECT(240,116), "S21081C1");
    check_base_class_offset(lv, (S21081C7*)(S21081C3*), ABISELECT(464,224), "S21081C1");
    check_base_class_offset(lv, (S21081C9*)(S21081C3*), ABISELECT(368,180), "S21081C1");
    check_base_class_offset(lv, (S21081C3*)(S21081C2*), ABISELECT(280,136), "S21081C1");
    check_base_class_offset(lv, (S21081C2*), ABISELECT(240,116), "S21081C1");
    /*is_ambiguous_... S21081C1::S21081C5 */ AMB_check_base_class_offset(lv, (S21081C5*), 0, "S21081C1");
    check_field_offset(lv, s21081c1f0, ABISELECT(88,44), "S21081C1.s21081c1f0");
    check_field_offset(lv, s21081c1f1, ABISELECT(112,56), "S21081C1.s21081c1f1");
    check_field_offset(lv, s21081c1f2, ABISELECT(208,100), "S21081C1.s21081c1f2");
    test_class_info(&lv, &cd_S21081C1);
    dp->~S21081C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21081C1(Test_S21081C1, "S21081C1", ABISELECT(496,240));

#else // __cplusplus

extern void _ZN8S21081C1C1Ev();
extern void _ZN8S21081C1D2Ev();
Name_Map name_map_S21081C1[] = {
  NSPAIR(_ZN8S21081C1C1Ev),
  NSPAIR(_ZN8S21081C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21081C4;
extern VTBL_ENTRY _ZTI8S21081C4[];
extern  VTBL_ENTRY _ZTV8S21081C4[];
extern Class_Descriptor cd_S21081C5;
extern VTBL_ENTRY _ZTI8S21081C5[];
extern  VTBL_ENTRY _ZTV8S21081C5[];
extern Class_Descriptor cd_S21081C8;
extern VTBL_ENTRY _ZTI8S21081C8[];
extern  VTBL_ENTRY _ZTV8S21081C8[];
extern Class_Descriptor cd_S21081C7;
extern VTBL_ENTRY _ZTI8S21081C7[];
extern  VTBL_ENTRY _ZTV8S21081C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C7[];
extern Class_Descriptor cd_S21081C9;
extern VTBL_ENTRY _ZTI8S21081C9[];
extern  VTBL_ENTRY _ZTV8S21081C9[];
extern Class_Descriptor cd_S21081C3;
extern VTBL_ENTRY _ZTI8S21081C3[];
extern  VTBL_ENTRY _ZTV8S21081C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C3[];
extern Class_Descriptor cd_S21081C2;
extern VTBL_ENTRY _ZTI8S21081C2[];
extern  VTBL_ENTRY _ZTV8S21081C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C2[];
extern Class_Descriptor cd_S21081C5;
extern VTBL_ENTRY _ZTI8S21081C5[];
extern  VTBL_ENTRY _ZTV8S21081C5[];
static Base_Class bases_S21081C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21081C4,    ABISELECT(432,208), //bcp->offset
    103, //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
    5, //immediately_derived
  0, 1},
  {&cd_S21081C5,    ABISELECT(280,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21081C8,    ABISELECT(240,116), //bcp->offset
    -1, //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_S21081C7,    ABISELECT(464,224), //bcp->offset
    107, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21081C9,    ABISELECT(368,180), //bcp->offset
    92, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21081C3,    ABISELECT(280,136), //bcp->offset
    49, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21081C2,    ABISELECT(240,116), //bcp->offset
    20, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21081C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21081C1[];
extern void _ZN8S21081C1D1Ev();
extern void _ZN8S21081C1D0Ev();
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
extern void _ZN8S21081C12v1Ev();
extern void _ZN8S21081C12v2Ev();
extern void _ZN8S21081C12v3Ev();
extern void _ZN8S21081C12v4Ev();
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void _ZN8S21081C23v40Ev();
extern void _ZN8S21081C23v41Ev();
extern void ABISELECT(_ZTv0_n136_N8S21081C1D1Ev,_ZTv0_n68_N8S21081C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S21081C1D1Ev,_ZThn116_N8S21081C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n136_N8S21081C1D0Ev,_ZTv0_n68_N8S21081C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S21081C1D0Ev,_ZThn116_N8S21081C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21081C1D1Ev,_ZTv0_n24_N8S21081C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S21081C1D1Ev,_ZThn136_N8S21081C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21081C1D0Ev,_ZTv0_n24_N8S21081C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S21081C1D0Ev,_ZThn136_N8S21081C1D0Ev)() __attribute__((weak));
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
extern void _ZN8S21081C33v34Ev();
extern void _ZN8S21081C33v35Ev();
extern void _ZN8S21081C33v36Ev();
extern void _ZN8S21081C33v37Ev();
extern void _ZN8S21081C33v38Ev();
extern void _ZN8S21081C33v39Ev();
extern void _ZN8S21081C93v25Ev();
extern void _ZN8S21081C93v26Ev();
extern void _ZN8S21081C93v27Ev();
extern void _ZN8S21081C93v28Ev();
extern void _ZN8S21081C93v29Ev();
extern void _ZN8S21081C93v30Ev();
extern void _ZN8S21081C93v31Ev();
extern void _ZN8S21081C93v32Ev();
extern void _ZN8S21081C93v33Ev();
extern void _ZN8S21081C42v5Ev();
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void ABISELECT(_ZTv0_n96_N8S21081C1D1Ev,_ZTv0_n48_N8S21081C1D1Ev)();
extern void ABISELECT(_ZThn464_N8S21081C1D1Ev,_ZThn224_N8S21081C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21081C1D0Ev,_ZTv0_n48_N8S21081C1D0Ev)();
extern void ABISELECT(_ZThn464_N8S21081C1D0Ev,_ZThn224_N8S21081C1D0Ev)() __attribute__((weak));
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY vtc_S21081C1[] = {
  ABISELECT(240,116),
  ABISELECT(464,224),
  ABISELECT(432,208),
  ABISELECT(280,136),
  ABISELECT(240,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C1[0]),
  (VTBL_ENTRY)&_ZN8S21081C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21081C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21081C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21081C12v3Ev,
  (VTBL_ENTRY)&_ZN8S21081C12v4Ev,
  ABISELECT(-240,-116),
  0,
  0,
  0,
  ABISELECT(224,108),
  ABISELECT(192,92),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S21081C1[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&_ZN8S21081C23v40Ev,
  (VTBL_ENTRY)&_ZN8S21081C23v41Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S21081C1D1Ev,_ZTv0_n68_N8S21081C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n136_N8S21081C1D0Ev,_ZTv0_n68_N8S21081C1D0Ev),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-280,-136),
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  ABISELECT(-280,-136),
  (VTBL_ENTRY)&(_ZTI8S21081C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21081C1D1Ev,_ZTv0_n24_N8S21081C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21081C1D0Ev,_ZTv0_n24_N8S21081C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v39Ev,
  ABISELECT(-368,-180),
  (VTBL_ENTRY)&(_ZTI8S21081C1[0]),
  (VTBL_ENTRY)&_ZN8S21081C93v25Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v26Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v27Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v28Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v29Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v30Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v31Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v32Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v33Ev,
  0,
  ABISELECT(-432,-208),
  (VTBL_ENTRY)&(_ZTI8S21081C1[0]),
  (VTBL_ENTRY)&_ZN8S21081C42v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-224),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-464,-224),
  (VTBL_ENTRY)&(_ZTI8S21081C1[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C1D1Ev,_ZTv0_n48_N8S21081C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C1D0Ev,_ZTv0_n48_N8S21081C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S21081C1[];
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void _ZN8S21081C23v40Ev();
extern void _ZN8S21081C23v41Ev();
extern void _ZN8S21081C2D1Ev();
extern void _ZN8S21081C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C2__8S21081C1[] = {
  0,
  ABISELECT(224,108),
  ABISELECT(192,92),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&_ZN8S21081C23v40Ev,
  (VTBL_ENTRY)&_ZN8S21081C23v41Ev,
  (VTBL_ENTRY)&_ZN8S21081C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S21081C2D1Ev,_ZTv0_n24_N8S21081C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S21081C2D1Ev,_ZThn20_N8S21081C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21081C2D0Ev,_ZTv0_n24_N8S21081C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S21081C2D0Ev,_ZThn20_N8S21081C2D0Ev)() __attribute__((weak));
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
extern void _ZN8S21081C33v34Ev();
extern void _ZN8S21081C33v35Ev();
extern void _ZN8S21081C33v36Ev();
extern void _ZN8S21081C33v37Ev();
extern void _ZN8S21081C33v38Ev();
extern void _ZN8S21081C33v39Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C3__8S21081C2__8S21081C1[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  ABISELECT(88,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21081C2D1Ev,_ZTv0_n24_N8S21081C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21081C2D0Ev,_ZTv0_n24_N8S21081C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v39Ev,
};
extern void _ZN8S21081C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C4__8S21081C2__8S21081C1[] = {
  0,
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C42v5Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void ABISELECT(_ZTv0_n96_N8S21081C2D1Ev,_ZTv0_n48_N8S21081C2D1Ev)();
extern void ABISELECT(_ZThn224_N8S21081C2D1Ev,_ZThn108_N8S21081C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21081C2D0Ev,_ZTv0_n48_N8S21081C2D0Ev)();
extern void ABISELECT(_ZThn224_N8S21081C2D0Ev,_ZThn108_N8S21081C2D0Ev)() __attribute__((weak));
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C7__8S21081C2__8S21081C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C2D1Ev,_ZTv0_n48_N8S21081C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C2D0Ev,_ZTv0_n48_N8S21081C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern void _ZN8S21081C93v25Ev();
extern void _ZN8S21081C93v26Ev();
extern void _ZN8S21081C93v27Ev();
extern void _ZN8S21081C93v28Ev();
extern void _ZN8S21081C93v29Ev();
extern void _ZN8S21081C93v30Ev();
extern void _ZN8S21081C93v31Ev();
extern void _ZN8S21081C93v32Ev();
extern void _ZN8S21081C93v33Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C98S21081C3__8S21081C2__8S21081C1[] = {
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S21081C2[0]),
  (VTBL_ENTRY)&_ZN8S21081C93v25Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v26Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v27Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v28Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v29Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v30Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v31Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v32Ev,
  (VTBL_ENTRY)&_ZN8S21081C93v33Ev,
};
extern void _ZN8S21081C3D1Ev();
extern void _ZN8S21081C3D0Ev();
extern void _ZN8S21081C52v6Ev();
extern void _ZN8S21081C52v7Ev();
extern void _ZN8S21081C52v8Ev();
extern void _ZN8S21081C52v9Ev();
extern void _ZN8S21081C53v10Ev();
extern void _ZN8S21081C53v11Ev();
extern void _ZN8S21081C53v12Ev();
extern void _ZN8S21081C33v34Ev();
extern void _ZN8S21081C33v35Ev();
extern void _ZN8S21081C33v36Ev();
extern void _ZN8S21081C33v37Ev();
extern void _ZN8S21081C33v38Ev();
extern void _ZN8S21081C33v39Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C3__8S21081C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(184,88),
  ABISELECT(152,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21081C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v11Ev,
  (VTBL_ENTRY)&_ZN8S21081C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21081C33v39Ev,
};
extern void _ZN8S21081C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C4__8S21081C3__8S21081C1[] = {
  0,
  ABISELECT(-152,-72),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C42v5Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev)();
extern void ABISELECT(_ZThn184_N8S21081C3D1Ev,_ZThn88_N8S21081C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev)();
extern void ABISELECT(_ZThn184_N8S21081C3D0Ev,_ZThn88_N8S21081C3D0Ev)() __attribute__((weak));
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C7__8S21081C3__8S21081C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-184,-88),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-184,-88),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C8__8S21081C3__8S21081C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21081C3[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
extern void _ZN8S21081C7D1Ev();
extern void _ZN8S21081C7D0Ev();
extern void _ZN8S21081C73v21Ev();
extern void _ZN8S21081C73v22Ev();
extern void _ZN8S21081C73v23Ev();
extern void _ZN8S21081C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C7__8S21081C1[] = {
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S21081C7[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21081C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21081C73v24Ev,
};
extern void _ZN8S21081C83v13Ev();
extern void _ZN8S21081C83v14Ev();
extern void _ZN8S21081C83v15Ev();
extern void _ZN8S21081C83v16Ev();
extern void _ZN8S21081C83v17Ev();
extern void _ZN8S21081C83v18Ev();
extern void _ZN8S21081C83v19Ev();
extern void _ZN8S21081C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21081C8__8S21081C7__8S21081C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,108),
  (VTBL_ENTRY)&(_ZTI8S21081C7[0]),
  (VTBL_ENTRY)&_ZN8S21081C83v13Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v14Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v15Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v16Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v18Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v19Ev,
  (VTBL_ENTRY)&_ZN8S21081C83v20Ev,
};
static  VTT_ENTRY vtt_S21081C1[] = {
  {&(_ZTV8S21081C1[7]),  7,137},
  {&(_ZTV8S21081C1[37]),  37,137},
  {&(_ZTV8S21081C1[77]),  77,137},
  {&(_ZTV8S21081C1[106]),  106,137},
  {&(_ZTV8S21081C1[123]),  123,137},
  {&(_ZTV8S21081C1[37]),  37,137},
  {&(_ZTV8S21081C1[94]),  94,137},
  {&(_tg__ZTV8S21081C2__8S21081C1[14]),  14,26},
  {&(_tg__ZTV8S21081C3__8S21081C2__8S21081C1[28]),  28,43},
  {&(_tg__ZTV8S21081C4__8S21081C2__8S21081C1[3]),  3,4},
  {&(_tg__ZTV8S21081C7__8S21081C2__8S21081C1[16]),  16,30},
  {&(_tg__ZTV8S21081C2__8S21081C1[14]),  14,26},
  {&(_tg__ZTV8S21081C98S21081C3__8S21081C2__8S21081C1[2]),  2,11},
  {&(_tg__ZTV8S21081C3__8S21081C1[5]),  5,20},
  {&(_tg__ZTV8S21081C4__8S21081C3__8S21081C1[3]),  3,4},
  {&(_tg__ZTV8S21081C7__8S21081C3__8S21081C1[16]),  16,30},
  {&(_tg__ZTV8S21081C8__8S21081C3__8S21081C1[10]),  10,18},
  {&(_tg__ZTV8S21081C7__8S21081C1[11]),  11,25},
  {&(_tg__ZTV8S21081C8__8S21081C7__8S21081C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S21081C1[];
extern  VTBL_ENTRY _ZTV8S21081C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21081C1[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C3D0Ev,_ZTv0_n48_N8S21081C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S21081C3D0Ev,_ZThn88_N8S21081C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C3D1Ev,_ZTv0_n48_N8S21081C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S21081C3D1Ev,_ZThn88_N8S21081C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C2D0Ev,_ZTv0_n48_N8S21081C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21081C2D0Ev,_ZThn108_N8S21081C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C2D1Ev,_ZTv0_n48_N8S21081C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21081C2D1Ev,_ZThn108_N8S21081C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21081C2D0Ev,_ZTv0_n24_N8S21081C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21081C2D0Ev,_ZThn20_N8S21081C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21081C2D1Ev,_ZTv0_n24_N8S21081C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21081C2D1Ev,_ZThn20_N8S21081C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C1D0Ev,_ZTv0_n48_N8S21081C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S21081C1D0Ev,_ZThn224_N8S21081C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S21081C1D1Ev,_ZTv0_n48_N8S21081C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S21081C1D1Ev,_ZThn224_N8S21081C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21081C1D0Ev,_ZTv0_n24_N8S21081C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21081C1D0Ev,_ZThn136_N8S21081C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21081C1D1Ev,_ZTv0_n24_N8S21081C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S21081C1D1Ev,_ZThn136_N8S21081C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S21081C1D0Ev,_ZTv0_n68_N8S21081C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21081C1D0Ev,_ZThn116_N8S21081C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n136_N8S21081C1D1Ev,_ZTv0_n68_N8S21081C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21081C1D1Ev,_ZThn116_N8S21081C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21081C1 = {  "S21081C1", // class name
  bases_S21081C1, 8,
  &(vtc_S21081C1[0]), // expected_vtbl_contents
  &(vtt_S21081C1[0]), // expected_vtt_contents
  ABISELECT(496,240), // object size
  NSPAIRA(_ZTI8S21081C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21081C1),137, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21081C1),19, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7806C4  {
  virtual void  v5(); // _ZN7S7806C42v5Ev
  virtual void  v6(); // _ZN7S7806C42v6Ev
  virtual void  v7(); // _ZN7S7806C42v7Ev
  virtual void  v8(); // _ZN7S7806C42v8Ev
  virtual void  v9(); // _ZN7S7806C42v9Ev
  virtual void  v10(); // _ZN7S7806C43v10Ev
  virtual void  v11(); // _ZN7S7806C43v11Ev
  ~S7806C4(); // tgen
  S7806C4(); // tgen
};
//SIG(-1 S7806C4) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S7806C4 ::v5(){vfunc_called(this, "_ZN7S7806C42v5Ev");}
void  S7806C4 ::v6(){vfunc_called(this, "_ZN7S7806C42v6Ev");}
void  S7806C4 ::v7(){vfunc_called(this, "_ZN7S7806C42v7Ev");}
void  S7806C4 ::v8(){vfunc_called(this, "_ZN7S7806C42v8Ev");}
void  S7806C4 ::v9(){vfunc_called(this, "_ZN7S7806C42v9Ev");}
void  S7806C4 ::v10(){vfunc_called(this, "_ZN7S7806C43v10Ev");}
void  S7806C4 ::v11(){vfunc_called(this, "_ZN7S7806C43v11Ev");}
S7806C4 ::~S7806C4(){ note_dtor("S7806C4", this);} // tgen
S7806C4 ::S7806C4(){ note_ctor("S7806C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7806C4C1Ev();
extern void _ZN7S7806C4D1Ev();
Name_Map name_map_S7806C4[] = {
  NSPAIR(_ZN7S7806C4C1Ev),
  NSPAIR(_ZN7S7806C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7806C4[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
static  VTBL_ENTRY vtc_S7806C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C4[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
Class_Descriptor cd_S7806C4 = {  "S7806C4", // class name
  0,0,//no base classes
  &(vtc_S7806C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7806C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7806C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7806C5  : virtual S7806C4 {
  long double s7806c5f0[9];
  virtual void  v12(); // _ZN7S7806C53v12Ev
  virtual void  v13(); // _ZN7S7806C53v13Ev
  virtual void  v14(); // _ZN7S7806C53v14Ev
  ~S7806C5(); // tgen
  S7806C5(); // tgen
};
//SIG(-1 S7806C5) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10} v1 v2 v3 FD[9]}


void  S7806C5 ::v12(){vfunc_called(this, "_ZN7S7806C53v12Ev");}
void  S7806C5 ::v13(){vfunc_called(this, "_ZN7S7806C53v13Ev");}
void  S7806C5 ::v14(){vfunc_called(this, "_ZN7S7806C53v14Ev");}
S7806C5 ::~S7806C5(){ note_dtor("S7806C5", this);} // tgen
S7806C5 ::S7806C5(){ note_ctor("S7806C5", this);} // tgen

static void Test_S7806C5()
{
  extern Class_Descriptor cd_S7806C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S7806C5, buf);
    S7806C5 *dp, &lv = *(dp=new (buf) S7806C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S7806C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7806C5)");
    check_base_class_offset(lv, (S7806C4*), 0, "S7806C5");
    check_field_offset(lv, s7806c5f0, ABISELECT(16,4), "S7806C5.s7806c5f0");
    test_class_info(&lv, &cd_S7806C5);
    dp->~S7806C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7806C5(Test_S7806C5, "S7806C5", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S7806C5C1Ev();
extern void _ZN7S7806C5D1Ev();
Name_Map name_map_S7806C5[] = {
  NSPAIR(_ZN7S7806C5C1Ev),
  NSPAIR(_ZN7S7806C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
static Base_Class bases_S7806C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7806C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7806C5[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY vtc_S7806C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern VTBL_ENTRY _ZTV7S7806C5[];
static  VTT_ENTRY vtt_S7806C5[] = {
  {&(_ZTV7S7806C5[10]),  10,20},
  {&(_ZTV7S7806C5[10]),  10,20},
};
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
Class_Descriptor cd_S7806C5 = {  "S7806C5", // class name
  bases_S7806C5, 1,
  &(vtc_S7806C5[0]), // expected_vtbl_contents
  &(vtt_S7806C5[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S7806C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7806C5),20, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7806C5),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  S7806C6  : S7806C4 {
  virtual void  v15(); // _ZN7S7806C63v15Ev
  ~S7806C6(); // tgen
  S7806C6(); // tgen
};
//SIG(-1 S7806C6) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


void  S7806C6 ::v15(){vfunc_called(this, "_ZN7S7806C63v15Ev");}
S7806C6 ::~S7806C6(){ note_dtor("S7806C6", this);} // tgen
S7806C6 ::S7806C6(){ note_ctor("S7806C6", this);} // tgen

static void Test_S7806C6()
{
  extern Class_Descriptor cd_S7806C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7806C6, buf);
    S7806C6 *dp, &lv = *(dp=new (buf) S7806C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7806C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7806C6)");
    check_base_class_offset(lv, (S7806C4*), 0, "S7806C6");
    test_class_info(&lv, &cd_S7806C6);
    dp->~S7806C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7806C6(Test_S7806C6, "S7806C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7806C6C1Ev();
extern void _ZN7S7806C6D1Ev();
Name_Map name_map_S7806C6[] = {
  NSPAIR(_ZN7S7806C6C1Ev),
  NSPAIR(_ZN7S7806C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
static Base_Class bases_S7806C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7806C6[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY vtc_S7806C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C6[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
Class_Descriptor cd_S7806C6 = {  "S7806C6", // class name
  bases_S7806C6, 1,
  &(vtc_S7806C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7806C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7806C6),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  S7806C3  : virtual S7806C4 , S7806C5 , virtual S7806C6 {
  long double s7806c3f0;
  virtual void  v16(); // _ZN7S7806C33v16Ev
  ~S7806C3(); // tgen
  S7806C3(); // tgen
};
//SIG(-1 S7806C3) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8} BC3{ VBC2 v9 v10 v11 FD[9]} VBC4{ BC2 v12} v1 FD}


void  S7806C3 ::v16(){vfunc_called(this, "_ZN7S7806C33v16Ev");}
S7806C3 ::~S7806C3(){ note_dtor("S7806C3", this);} // tgen
S7806C3 ::S7806C3(){ note_ctor("S7806C3", this);} // tgen

static void Test_S7806C3()
{
  extern Class_Descriptor cd_S7806C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S7806C3, buf);
    S7806C3 *dp, &lv = *(dp=new (buf) S7806C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S7806C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7806C3)");
    /*is_ambiguous_... S7806C3::S7806C4 */ AMB_check_base_class_offset(lv, (S7806C4*), 0, "S7806C3");
    check_base_class_offset(lv, (S7806C4*)(S7806C5*), 0, "S7806C3");
    check_base_class_offset(lv, (S7806C5*), 0, "S7806C3");
    check_base_class_offset(lv, (S7806C4*)(S7806C6*), ABISELECT(176,124), "S7806C3");
    check_base_class_offset(lv, (S7806C6*), ABISELECT(176,124), "S7806C3");
    check_field_offset(lv, s7806c3f0, ABISELECT(160,112), "S7806C3.s7806c3f0");
    test_class_info(&lv, &cd_S7806C3);
    dp->~S7806C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7806C3(Test_S7806C3, "S7806C3", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S7806C3C1Ev();
extern void _ZN7S7806C3D1Ev();
Name_Map name_map_S7806C3[] = {
  NSPAIR(_ZN7S7806C3C1Ev),
  NSPAIR(_ZN7S7806C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C6;
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
static Base_Class bases_S7806C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7806C4,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7806C5,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7806C4,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7806C6,    ABISELECT(176,124), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7806C3[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY vtc_S7806C3[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
extern VTBL_ENTRY _ZTV7S7806C3[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C5__7S7806C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
static  VTT_ENTRY vtt_S7806C3[] = {
  {&(_ZTV7S7806C3[11]),  11,40},
  {&(_tg__ZTV7S7806C5__7S7806C3[10]),  10,20},
  {&(_tg__ZTV7S7806C5__7S7806C3[10]),  10,20},
  {&(_ZTV7S7806C3[11]),  11,40},
  {&(_ZTV7S7806C3[32]),  32,40},
};
extern VTBL_ENTRY _ZTI7S7806C3[];
extern  VTBL_ENTRY _ZTV7S7806C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C3[];
Class_Descriptor cd_S7806C3 = {  "S7806C3", // class name
  bases_S7806C3, 4,
  &(vtc_S7806C3[0]), // expected_vtbl_contents
  &(vtt_S7806C3[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S7806C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7806C3),40, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7806C3),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7806C7  {
  virtual void  v17(); // _ZN7S7806C73v17Ev
  virtual void  v18(); // _ZN7S7806C73v18Ev
  virtual void  v19(); // _ZN7S7806C73v19Ev
  ~S7806C7(); // tgen
  S7806C7(); // tgen
};
//SIG(-1 S7806C7) C1{ v1 v2 v3}


void  S7806C7 ::v17(){vfunc_called(this, "_ZN7S7806C73v17Ev");}
void  S7806C7 ::v18(){vfunc_called(this, "_ZN7S7806C73v18Ev");}
void  S7806C7 ::v19(){vfunc_called(this, "_ZN7S7806C73v19Ev");}
S7806C7 ::~S7806C7(){ note_dtor("S7806C7", this);} // tgen
S7806C7 ::S7806C7(){ note_ctor("S7806C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7806C7C1Ev();
extern void _ZN7S7806C7D1Ev();
Name_Map name_map_S7806C7[] = {
  NSPAIR(_ZN7S7806C7C1Ev),
  NSPAIR(_ZN7S7806C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7806C7[];
extern void _ZN7S7806C73v17Ev();
extern void _ZN7S7806C73v18Ev();
extern void _ZN7S7806C73v19Ev();
static  VTBL_ENTRY vtc_S7806C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C7[0]),
  (VTBL_ENTRY)&_ZN7S7806C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7806C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7806C73v19Ev,
};
extern VTBL_ENTRY _ZTI7S7806C7[];
extern  VTBL_ENTRY _ZTV7S7806C7[];
Class_Descriptor cd_S7806C7 = {  "S7806C7", // class name
  0,0,//no base classes
  &(vtc_S7806C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7806C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7806C7),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  S7806C2  : virtual S7806C3 , S7806C6 , S7806C5 , S7806C7 {
  virtual  ~S7806C2(); // _ZN7S7806C2D2Ev
  virtual void  v20(); // _ZN7S7806C23v20Ev
  virtual void  v21(); // _ZN7S7806C23v21Ev
  virtual void  v22(); // _ZN7S7806C23v22Ev
  virtual void  v23(); // _ZN7S7806C23v23Ev
  virtual void  v24(); // _ZN7S7806C23v24Ev
  virtual void  v25(); // _ZN7S7806C23v25Ev
  virtual void  v26(); // _ZN7S7806C23v26Ev
  virtual void  v27(); // _ZN7S7806C23v27Ev
  S7806C2(); // tgen
};
//SIG(-1 S7806C2) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13 v14 v15} BC4{ VBC3 v16 v17 v18 FD[9]} VBC5{ BC3 v19} v20 FD} BC5 BC4 BC6{ v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S7806C2 ::~S7806C2(){ note_dtor("S7806C2", this);}
void  S7806C2 ::v20(){vfunc_called(this, "_ZN7S7806C23v20Ev");}
void  S7806C2 ::v21(){vfunc_called(this, "_ZN7S7806C23v21Ev");}
void  S7806C2 ::v22(){vfunc_called(this, "_ZN7S7806C23v22Ev");}
void  S7806C2 ::v23(){vfunc_called(this, "_ZN7S7806C23v23Ev");}
void  S7806C2 ::v24(){vfunc_called(this, "_ZN7S7806C23v24Ev");}
void  S7806C2 ::v25(){vfunc_called(this, "_ZN7S7806C23v25Ev");}
void  S7806C2 ::v26(){vfunc_called(this, "_ZN7S7806C23v26Ev");}
void  S7806C2 ::v27(){vfunc_called(this, "_ZN7S7806C23v27Ev");}
S7806C2 ::S7806C2(){ note_ctor("S7806C2", this);} // tgen

static void Test_S7806C2()
{
  extern Class_Descriptor cd_S7806C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S7806C2, buf);
    S7806C2 *dp, &lv = *(dp=new (buf) S7806C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S7806C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7806C2)");
    /*is_ambiguous_... S7806C3::S7806C4 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C3*), ABISELECT(192,120), "S7806C2");
    check_base_class_offset(lv, (S7806C4*)(S7806C5*)(S7806C3*), ABISELECT(192,120), "S7806C2");
    /*is_ambiguous_... S7806C2::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C5*), ABISELECT(192,120), "S7806C2");
    check_base_class_offset(lv, (S7806C5*)(S7806C3*), ABISELECT(192,120), "S7806C2");
    /*is_ambiguous_... S7806C2::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C6*), ABISELECT(368,244), "S7806C2");
    check_base_class_offset(lv, (S7806C6*)(S7806C3*), ABISELECT(368,244), "S7806C2");
    check_base_class_offset(lv, (S7806C3*), ABISELECT(192,120), "S7806C2");
    /*is_ambiguous_... S7806C2::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C6*), 0, "S7806C2");
    /*is_ambiguous_... S7806C2::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C6*), 0, "S7806C2");
    /*is_ambiguous_... S7806C2::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C5*), ABISELECT(16,4), "S7806C2");
    check_base_class_offset(lv, (S7806C7*), ABISELECT(176,116), "S7806C2");
    test_class_info(&lv, &cd_S7806C2);
    dp->~S7806C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7806C2(Test_S7806C2, "S7806C2", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN7S7806C2C1Ev();
extern void _ZN7S7806C2D2Ev();
Name_Map name_map_S7806C2[] = {
  NSPAIR(_ZN7S7806C2C1Ev),
  NSPAIR(_ZN7S7806C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C6;
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
extern Class_Descriptor cd_S7806C3;
extern VTBL_ENTRY _ZTI7S7806C3[];
extern  VTBL_ENTRY _ZTV7S7806C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C3[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C6;
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C7;
extern VTBL_ENTRY _ZTI7S7806C7[];
extern  VTBL_ENTRY _ZTV7S7806C7[];
static Base_Class bases_S7806C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7806C4,    ABISELECT(192,120), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7806C5,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7806C4,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7806C6,    ABISELECT(368,244), //bcp->offset
    74, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7806C3,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7806C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7806C5,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7806C7,    ABISELECT(176,116), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7806C2[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
extern void _ZN7S7806C2D1Ev();
extern void _ZN7S7806C2D0Ev();
extern void _ZN7S7806C23v20Ev();
extern void _ZN7S7806C23v21Ev();
extern void _ZN7S7806C23v22Ev();
extern void _ZN7S7806C23v23Ev();
extern void _ZN7S7806C23v24Ev();
extern void _ZN7S7806C23v25Ev();
extern void _ZN7S7806C23v26Ev();
extern void _ZN7S7806C23v27Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C73v17Ev();
extern void _ZN7S7806C73v18Ev();
extern void _ZN7S7806C73v19Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY vtc_S7806C2[] = {
  ABISELECT(368,244),
  ABISELECT(192,120),
  ABISELECT(192,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7806C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7806C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v27Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7806C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7806C73v19Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
extern VTBL_ENTRY _ZTV7S7806C2[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C5__A1__7S7806C2[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C4__7S7806C5__A1__7S7806C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C3__7S7806C2[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C57S7806C3__7S7806C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C6__7S7806C3__7S7806C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
static  VTT_ENTRY vtt_S7806C2[] = {
  {&(_ZTV7S7806C2[5]),  5,92},
  {&(_tg__ZTV7S7806C5__A1__7S7806C2[10]),  10,20},
  {&(_tg__ZTV7S7806C4__7S7806C5__A1__7S7806C2[9]),  9,16},
  {&(_ZTV7S7806C2[63]),  63,92},
  {&(_ZTV7S7806C2[63]),  63,92},
  {&(_ZTV7S7806C2[84]),  84,92},
  {&(_ZTV7S7806C2[33]),  33,92},
  {&(_tg__ZTV7S7806C3__7S7806C2[11]),  11,22},
  {&(_tg__ZTV7S7806C57S7806C3__7S7806C2[10]),  10,20},
  {&(_tg__ZTV7S7806C57S7806C3__7S7806C2[10]),  10,20},
  {&(_tg__ZTV7S7806C3__7S7806C2[11]),  11,22},
  {&(_tg__ZTV7S7806C6__7S7806C3__7S7806C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7806C2[];
extern  VTBL_ENTRY _ZTV7S7806C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C2[];
Class_Descriptor cd_S7806C2 = {  "S7806C2", // class name
  bases_S7806C2, 9,
  &(vtc_S7806C2[0]), // expected_vtbl_contents
  &(vtt_S7806C2[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI7S7806C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7806C2),92, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7806C2),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7806C8  {
  virtual void  v28(); // _ZN7S7806C83v28Ev
  virtual void  v29(); // _ZN7S7806C83v29Ev
  virtual void  v30(); // _ZN7S7806C83v30Ev
  ~S7806C8(); // tgen
  S7806C8(); // tgen
};
//SIG(-1 S7806C8) C1{ v1 v2 v3}


void  S7806C8 ::v28(){vfunc_called(this, "_ZN7S7806C83v28Ev");}
void  S7806C8 ::v29(){vfunc_called(this, "_ZN7S7806C83v29Ev");}
void  S7806C8 ::v30(){vfunc_called(this, "_ZN7S7806C83v30Ev");}
S7806C8 ::~S7806C8(){ note_dtor("S7806C8", this);} // tgen
S7806C8 ::S7806C8(){ note_ctor("S7806C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7806C8C1Ev();
extern void _ZN7S7806C8D1Ev();
Name_Map name_map_S7806C8[] = {
  NSPAIR(_ZN7S7806C8C1Ev),
  NSPAIR(_ZN7S7806C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7806C8[];
extern void _ZN7S7806C83v28Ev();
extern void _ZN7S7806C83v29Ev();
extern void _ZN7S7806C83v30Ev();
static  VTBL_ENTRY vtc_S7806C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C8[0]),
  (VTBL_ENTRY)&_ZN7S7806C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7806C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7806C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S7806C8[];
extern  VTBL_ENTRY _ZTV7S7806C8[];
Class_Descriptor cd_S7806C8 = {  "S7806C8", // class name
  0,0,//no base classes
  &(vtc_S7806C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7806C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7806C8),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  S7806C10  {
  int s7806c10f0;
  virtual void  v31(); // _ZN8S7806C103v31Ev
  virtual void  v32(); // _ZN8S7806C103v32Ev
  virtual void  v33(); // _ZN8S7806C103v33Ev
  ~S7806C10(); // tgen
  S7806C10(); // tgen
};
//SIG(-1 S7806C10) C1{ v1 v2 v3 Fi}


void  S7806C10 ::v31(){vfunc_called(this, "_ZN8S7806C103v31Ev");}
void  S7806C10 ::v32(){vfunc_called(this, "_ZN8S7806C103v32Ev");}
void  S7806C10 ::v33(){vfunc_called(this, "_ZN8S7806C103v33Ev");}
S7806C10 ::~S7806C10(){ note_dtor("S7806C10", this);} // tgen
S7806C10 ::S7806C10(){ note_ctor("S7806C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7806C10C1Ev();
extern void _ZN8S7806C10D1Ev();
Name_Map name_map_S7806C10[] = {
  NSPAIR(_ZN8S7806C10C1Ev),
  NSPAIR(_ZN8S7806C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7806C10[];
extern void _ZN8S7806C103v31Ev();
extern void _ZN8S7806C103v32Ev();
extern void _ZN8S7806C103v33Ev();
static  VTBL_ENTRY vtc_S7806C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7806C10[0]),
  (VTBL_ENTRY)&_ZN8S7806C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v33Ev,
};
extern VTBL_ENTRY _ZTI8S7806C10[];
extern  VTBL_ENTRY _ZTV8S7806C10[];
Class_Descriptor cd_S7806C10 = {  "S7806C10", // class name
  0,0,//no base classes
  &(vtc_S7806C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7806C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7806C10),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  S7806C9  : virtual S7806C10 , virtual S7806C3 , S7806C5 , S7806C4 {
  void *s7806c9f0;
  int s7806c9f1;
  virtual void  v34(); // _ZN7S7806C93v34Ev
  virtual void  v35(); // _ZN7S7806C93v35Ev
  virtual void  v36(); // _ZN7S7806C93v36Ev
  virtual void  v37(); // _ZN7S7806C93v37Ev
  virtual void  v38(); // _ZN7S7806C93v38Ev
  virtual void  v39(); // _ZN7S7806C93v39Ev
  virtual void  v40(); // _ZN7S7806C93v40Ev
  virtual void  v41(); // _ZN7S7806C93v41Ev
  ~S7806C9(); // tgen
  S7806C9(); // tgen
};
//SIG(-1 S7806C9) C1{ VBC2{ v9 v10 v11 Fi} VBC3{ VBC4{ v12 v13 v14 v15 v16 v17 v18} BC5{ VBC4 v19 v20 v21 FD[9]} VBC6{ BC4 v22} v23 FD} BC5 BC4 v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi}


void  S7806C9 ::v34(){vfunc_called(this, "_ZN7S7806C93v34Ev");}
void  S7806C9 ::v35(){vfunc_called(this, "_ZN7S7806C93v35Ev");}
void  S7806C9 ::v36(){vfunc_called(this, "_ZN7S7806C93v36Ev");}
void  S7806C9 ::v37(){vfunc_called(this, "_ZN7S7806C93v37Ev");}
void  S7806C9 ::v38(){vfunc_called(this, "_ZN7S7806C93v38Ev");}
void  S7806C9 ::v39(){vfunc_called(this, "_ZN7S7806C93v39Ev");}
void  S7806C9 ::v40(){vfunc_called(this, "_ZN7S7806C93v40Ev");}
void  S7806C9 ::v41(){vfunc_called(this, "_ZN7S7806C93v41Ev");}
S7806C9 ::~S7806C9(){ note_dtor("S7806C9", this);} // tgen
S7806C9 ::S7806C9(){ note_ctor("S7806C9", this);} // tgen

static void Test_S7806C9()
{
  extern Class_Descriptor cd_S7806C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,66)];
    init_test(&cd_S7806C9, buf);
    S7806C9 *dp, &lv = *(dp=new (buf) S7806C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,260), "sizeof(S7806C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7806C9)");
    check_base_class_offset(lv, (S7806C10*), ABISELECT(184,124), "S7806C9");
    /*is_ambiguous_... S7806C3::S7806C4 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C3*), ABISELECT(208,132), "S7806C9");
    check_base_class_offset(lv, (S7806C4*)(S7806C5*)(S7806C3*), ABISELECT(208,132), "S7806C9");
    /*is_ambiguous_... S7806C9::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C5*), ABISELECT(208,132), "S7806C9");
    check_base_class_offset(lv, (S7806C5*)(S7806C3*), ABISELECT(208,132), "S7806C9");
    check_base_class_offset(lv, (S7806C4*)(S7806C6*), ABISELECT(384,256), "S7806C9");
    check_base_class_offset(lv, (S7806C6*)(S7806C3*), ABISELECT(384,256), "S7806C9");
    check_base_class_offset(lv, (S7806C3*), ABISELECT(208,132), "S7806C9");
    /*is_ambiguous_... S7806C9::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C5*), 0, "S7806C9");
    /*is_ambiguous_... S7806C9::S7806C4 */ AMB_check_base_class_offset(lv, (S7806C4*), ABISELECT(160,112), "S7806C9");
    check_field_offset(lv, s7806c9f0, ABISELECT(168,116), "S7806C9.s7806c9f0");
    check_field_offset(lv, s7806c9f1, ABISELECT(176,120), "S7806C9.s7806c9f1");
    test_class_info(&lv, &cd_S7806C9);
    dp->~S7806C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7806C9(Test_S7806C9, "S7806C9", ABISELECT(400,260));

#else // __cplusplus

extern void _ZN7S7806C9C1Ev();
extern void _ZN7S7806C9D1Ev();
Name_Map name_map_S7806C9[] = {
  NSPAIR(_ZN7S7806C9C1Ev),
  NSPAIR(_ZN7S7806C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7806C10;
extern VTBL_ENTRY _ZTI8S7806C10[];
extern  VTBL_ENTRY _ZTV8S7806C10[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C6;
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
extern Class_Descriptor cd_S7806C3;
extern VTBL_ENTRY _ZTI7S7806C3[];
extern  VTBL_ENTRY _ZTV7S7806C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C3[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
static Base_Class bases_S7806C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7806C10,    ABISELECT(184,124), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7806C4,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7806C5,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    5, //immediately_derived
  0, 0},
  {&cd_S7806C4,    ABISELECT(384,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7806C6,    ABISELECT(384,256), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7806C3,    ABISELECT(208,132), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7806C5,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7806C4,    ABISELECT(160,112), //bcp->offset
    31, //bcp->virtual_function_table_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 _ZTI7S7806C9[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C93v34Ev();
extern void _ZN7S7806C93v35Ev();
extern void _ZN7S7806C93v36Ev();
extern void _ZN7S7806C93v37Ev();
extern void _ZN7S7806C93v38Ev();
extern void _ZN7S7806C93v39Ev();
extern void _ZN7S7806C93v40Ev();
extern void _ZN7S7806C93v41Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN8S7806C103v31Ev();
extern void _ZN8S7806C103v32Ev();
extern void _ZN8S7806C103v33Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY vtc_S7806C9[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(184,124),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v41Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN8S7806C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v33Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
extern VTBL_ENTRY _ZTV7S7806C9[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C5__A1__7S7806C9[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C4__7S7806C5__A1__7S7806C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C3__7S7806C9[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C57S7806C3__7S7806C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C6__7S7806C3__7S7806C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
static  VTT_ENTRY vtt_S7806C9[] = {
  {&(_ZTV7S7806C9[13]),  13,92},
  {&(_tg__ZTV7S7806C5__A1__7S7806C9[10]),  10,20},
  {&(_tg__ZTV7S7806C4__7S7806C5__A1__7S7806C9[9]),  9,16},
  {&(_ZTV7S7806C9[45]),  45,92},
  {&(_ZTV7S7806C9[63]),  63,92},
  {&(_ZTV7S7806C9[63]),  63,92},
  {&(_ZTV7S7806C9[84]),  84,92},
  {&(_tg__ZTV7S7806C3__7S7806C9[11]),  11,22},
  {&(_tg__ZTV7S7806C57S7806C3__7S7806C9[10]),  10,20},
  {&(_tg__ZTV7S7806C57S7806C3__7S7806C9[10]),  10,20},
  {&(_tg__ZTV7S7806C3__7S7806C9[11]),  11,22},
  {&(_tg__ZTV7S7806C6__7S7806C3__7S7806C9[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7806C9[];
extern  VTBL_ENTRY _ZTV7S7806C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C9[];
Class_Descriptor cd_S7806C9 = {  "S7806C9", // class name
  bases_S7806C9, 8,
  &(vtc_S7806C9[0]), // expected_vtbl_contents
  &(vtt_S7806C9[0]), // expected_vtt_contents
  ABISELECT(400,260), // object size
  NSPAIRA(_ZTI7S7806C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7806C9),92, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7806C9),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7806C1  : S7806C2 , S7806C8 , S7806C6 , virtual S7806C9 , S7806C4 {
  virtual  ~S7806C1(); // _ZN7S7806C1D2Ev
  virtual void  v1(); // _ZN7S7806C12v1Ev
  virtual void  v2(); // _ZN7S7806C12v2Ev
  virtual void  v3(); // _ZN7S7806C12v3Ev
  virtual void  v4(); // _ZN7S7806C12v4Ev
  S7806C1(); // tgen
};
//SIG(1 S7806C1) C1{ BC2{ VBC3{ VBC4{ v5 v6 v7 v8 v9 v10 v11} BC5{ VBC4 v12 v13 v14 FD[9]} VBC6{ BC4 v15} v16 FD} BC6 BC5 BC7{ v17 v18 v19} vd v20 v21 v22 v23 v24 v25 v26 v27} BC8{ v28 v29 v30} BC6 VBC9{ VBC10{ v31 v32 v33 Fi} VBC3 BC5 BC4 v34 v35 v36 v37 v38 v39 v40 v41 Fp Fi} BC4 vd v1 v2 v3 v4}


 S7806C1 ::~S7806C1(){ note_dtor("S7806C1", this);}
void  S7806C1 ::v1(){vfunc_called(this, "_ZN7S7806C12v1Ev");}
void  S7806C1 ::v2(){vfunc_called(this, "_ZN7S7806C12v2Ev");}
void  S7806C1 ::v3(){vfunc_called(this, "_ZN7S7806C12v3Ev");}
void  S7806C1 ::v4(){vfunc_called(this, "_ZN7S7806C12v4Ev");}
S7806C1 ::S7806C1(){ note_ctor("S7806C1", this);} // tgen

static void Test_S7806C1()
{
  extern Class_Descriptor cd_S7806C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,99)];
    init_test(&cd_S7806C1, buf);
    S7806C1 *dp, &lv = *(dp=new (buf) S7806C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,392), "sizeof(S7806C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7806C1)");
    /*is_ambiguous_... S7806C3::S7806C4 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C3*), ABISELECT(208,132), "S7806C1");
    check_base_class_offset(lv, (S7806C4*)(S7806C5*)(S7806C3*), ABISELECT(208,132), "S7806C1");
    /*is_ambiguous_... S7806C2::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C5*)(S7806C2*), ABISELECT(208,132), "S7806C1");
    /*is_ambiguous_... S7806C9::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C5*)(S7806C9*), ABISELECT(208,132), "S7806C1");
    check_base_class_offset(lv, (S7806C5*)(S7806C3*), ABISELECT(208,132), "S7806C1");
    /*is_ambiguous_... S7806C1::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C6*), ABISELECT(384,256), "S7806C1");
    check_base_class_offset(lv, (S7806C6*)(S7806C3*), ABISELECT(384,256), "S7806C1");
    check_base_class_offset(lv, (S7806C3*)(S7806C2*), ABISELECT(208,132), "S7806C1");
    check_base_class_offset(lv, (S7806C3*)(S7806C9*), ABISELECT(208,132), "S7806C1");
    /*is_ambiguous_... S7806C2::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C6*)(S7806C2*), 0, "S7806C1");
    /*is_ambiguous_... S7806C2::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C6*)(S7806C2*), 0, "S7806C1");
    /*is_ambiguous_... S7806C2::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C5*)(S7806C2*), ABISELECT(16,4), "S7806C1");
    check_base_class_offset(lv, (S7806C7*)(S7806C2*), ABISELECT(176,116), "S7806C1");
    check_base_class_offset(lv, (S7806C2*), 0, "S7806C1");
    check_base_class_offset(lv, (S7806C8*), ABISELECT(184,120), "S7806C1");
    /*is_ambiguous_... S7806C1::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C6*), ABISELECT(192,124), "S7806C1");
    /*is_ambiguous_... S7806C1::S7806C6 */ AMB_check_base_class_offset(lv, (S7806C6*), ABISELECT(192,124), "S7806C1");
    check_base_class_offset(lv, (S7806C10*)(S7806C9*), ABISELECT(584,384), "S7806C1");
    /*is_ambiguous_... S7806C9::S7806C5 */ AMB_check_base_class_offset(lv, (S7806C5*)(S7806C9*), ABISELECT(400,260), "S7806C1");
    /*is_ambiguous_... S7806C9::S7806C4 */ AMB_check_base_class_offset(lv, (S7806C4*)(S7806C9*), ABISELECT(560,372), "S7806C1");
    check_base_class_offset(lv, (S7806C9*), ABISELECT(400,260), "S7806C1");
    /*is_ambiguous_... S7806C1::S7806C4 */ AMB_check_base_class_offset(lv, (S7806C4*), ABISELECT(200,128), "S7806C1");
    test_class_info(&lv, &cd_S7806C1);
    dp->~S7806C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7806C1(Test_S7806C1, "S7806C1", ABISELECT(608,392));

#else // __cplusplus

extern void _ZN7S7806C1C1Ev();
extern void _ZN7S7806C1D2Ev();
Name_Map name_map_S7806C1[] = {
  NSPAIR(_ZN7S7806C1C1Ev),
  NSPAIR(_ZN7S7806C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C6;
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
extern Class_Descriptor cd_S7806C3;
extern VTBL_ENTRY _ZTI7S7806C3[];
extern  VTBL_ENTRY _ZTV7S7806C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C3[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C6;
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C7;
extern VTBL_ENTRY _ZTI7S7806C7[];
extern  VTBL_ENTRY _ZTV7S7806C7[];
extern Class_Descriptor cd_S7806C2;
extern VTBL_ENTRY _ZTI7S7806C2[];
extern  VTBL_ENTRY _ZTV7S7806C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C2[];
extern Class_Descriptor cd_S7806C8;
extern VTBL_ENTRY _ZTI7S7806C8[];
extern  VTBL_ENTRY _ZTV7S7806C8[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C6;
extern VTBL_ENTRY _ZTI7S7806C6[];
extern  VTBL_ENTRY _ZTV7S7806C6[];
extern Class_Descriptor cd_S7806C10;
extern VTBL_ENTRY _ZTI8S7806C10[];
extern  VTBL_ENTRY _ZTV8S7806C10[];
extern Class_Descriptor cd_S7806C5;
extern VTBL_ENTRY _ZTI7S7806C5[];
extern  VTBL_ENTRY _ZTV7S7806C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C5[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
extern Class_Descriptor cd_S7806C9;
extern VTBL_ENTRY _ZTI7S7806C9[];
extern  VTBL_ENTRY _ZTV7S7806C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C9[];
extern Class_Descriptor cd_S7806C4;
extern VTBL_ENTRY _ZTI7S7806C4[];
extern  VTBL_ENTRY _ZTV7S7806C4[];
static Base_Class bases_S7806C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7806C4,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7806C5,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7806C4,    ABISELECT(384,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7806C6,    ABISELECT(384,256), //bcp->offset
    104, //bcp->virtual_function_table_offset
    10, //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_S7806C3,    ABISELECT(208,132), //bcp->offset
    78, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7806C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7806C5,    ABISELECT(16,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7806C7,    ABISELECT(176,116), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7806C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7806C8,    ABISELECT(184,120), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7806C4,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7806C6,    ABISELECT(192,124), //bcp->offset
    59, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7806C10,    ABISELECT(584,384), //bcp->offset
    173, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7806C5,    ABISELECT(400,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7806C4,    ABISELECT(560,372), //bcp->offset
    164, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7806C9,    ABISELECT(400,260), //bcp->offset
    122, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7806C4,    ABISELECT(200,128), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7806C1[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
extern void _ZN7S7806C1D1Ev();
extern void _ZN7S7806C1D0Ev();
extern void _ZN7S7806C23v20Ev();
extern void _ZN7S7806C23v21Ev();
extern void _ZN7S7806C23v22Ev();
extern void _ZN7S7806C23v23Ev();
extern void _ZN7S7806C23v24Ev();
extern void _ZN7S7806C23v25Ev();
extern void _ZN7S7806C23v26Ev();
extern void _ZN7S7806C23v27Ev();
extern void _ZN7S7806C12v1Ev();
extern void _ZN7S7806C12v2Ev();
extern void _ZN7S7806C12v3Ev();
extern void _ZN7S7806C12v4Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C73v17Ev();
extern void _ZN7S7806C73v18Ev();
extern void _ZN7S7806C73v19Ev();
extern void _ZN7S7806C83v28Ev();
extern void _ZN7S7806C83v29Ev();
extern void _ZN7S7806C83v30Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C93v34Ev();
extern void _ZN7S7806C93v35Ev();
extern void _ZN7S7806C93v36Ev();
extern void _ZN7S7806C93v37Ev();
extern void _ZN7S7806C93v38Ev();
extern void _ZN7S7806C93v39Ev();
extern void _ZN7S7806C93v40Ev();
extern void _ZN7S7806C93v41Ev();
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN8S7806C103v31Ev();
extern void _ZN8S7806C103v32Ev();
extern void _ZN8S7806C103v33Ev();
static  VTBL_ENTRY vtc_S7806C1[] = {
  ABISELECT(584,384),
  ABISELECT(400,260),
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7806C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7806C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7806C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7806C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7806C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7806C12v4Ev,
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7806C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7806C73v19Ev,
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7806C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7806C83v30Ev,
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
  ABISELECT(-200,-128),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(184,124),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-400,-260),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v41Ev,
  ABISELECT(-560,-372),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  0,
  0,
  0,
  ABISELECT(-584,-384),
  (VTBL_ENTRY)&(_ZTI7S7806C1[0]),
  (VTBL_ENTRY)&_ZN8S7806C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v33Ev,
};
extern VTBL_ENTRY _ZTV7S7806C1[];
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
extern void _ZN7S7806C2D1Ev();
extern void _ZN7S7806C2D0Ev();
extern void _ZN7S7806C23v20Ev();
extern void _ZN7S7806C23v21Ev();
extern void _ZN7S7806C23v22Ev();
extern void _ZN7S7806C23v23Ev();
extern void _ZN7S7806C23v24Ev();
extern void _ZN7S7806C23v25Ev();
extern void _ZN7S7806C23v26Ev();
extern void _ZN7S7806C23v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C2__7S7806C1[] = {
  ABISELECT(384,256),
  ABISELECT(208,132),
  ABISELECT(208,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7806C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7806C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7806C23v27Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C57S7806C2__A1__7S7806C1[] = {
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C4__7S7806C57S7806C2__A1__7S7806C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C3__7S7806C2__7S7806C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C6__7S7806C2__7S7806C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C5__A1__7S7806C2__7S7806C1[] = {
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7806C2[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C3__7S7806C1[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C57S7806C3__7S7806C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C6__7S7806C3__7S7806C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7806C3[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C93v34Ev();
extern void _ZN7S7806C93v35Ev();
extern void _ZN7S7806C93v36Ev();
extern void _ZN7S7806C93v37Ev();
extern void _ZN7S7806C93v38Ev();
extern void _ZN7S7806C93v39Ev();
extern void _ZN7S7806C93v40Ev();
extern void _ZN7S7806C93v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C9__7S7806C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(-192,-128),
  ABISELECT(184,124),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v38Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v39Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v40Ev,
  (VTBL_ENTRY)&_ZN7S7806C93v41Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C57S7806C9__A2__7S7806C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C4__7S7806C57S7806C9__A2__7S7806C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S7806C5[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
};
extern void _ZN8S7806C103v31Ev();
extern void _ZN8S7806C103v32Ev();
extern void _ZN8S7806C103v33Ev();
static  VTBL_ENTRY _tg__ZTV8S7806C10__7S7806C9__7S7806C1[] = {
  0,
  0,
  0,
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN8S7806C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7806C103v33Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C53v12Ev();
extern void _ZN7S7806C53v13Ev();
extern void _ZN7S7806C53v14Ev();
extern void _ZN7S7806C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C3__7S7806C9__7S7806C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7806C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7806C33v16Ev,
};
extern void _ZN7S7806C42v5Ev();
extern void _ZN7S7806C42v6Ev();
extern void _ZN7S7806C42v7Ev();
extern void _ZN7S7806C42v8Ev();
extern void _ZN7S7806C42v9Ev();
extern void _ZN7S7806C43v10Ev();
extern void _ZN7S7806C43v11Ev();
extern void _ZN7S7806C63v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7806C6__7S7806C9__7S7806C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI7S7806C9[0]),
  (VTBL_ENTRY)&_ZN7S7806C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7806C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7806C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7806C63v15Ev,
};
static  VTT_ENTRY vtt_S7806C1[] = {
  {&(_ZTV7S7806C1[7]),  7,181},
  {&(_tg__ZTV7S7806C2__7S7806C1[5]),  5,23},
  {&(_tg__ZTV7S7806C57S7806C2__A1__7S7806C1[10]),  10,20},
  {&(_tg__ZTV7S7806C4__7S7806C57S7806C2__A1__7S7806C1[9]),  9,16},
  {&(_tg__ZTV7S7806C3__7S7806C2__7S7806C1[15]),  15,26},
  {&(_tg__ZTV7S7806C3__7S7806C2__7S7806C1[15]),  15,26},
  {&(_tg__ZTV7S7806C6__7S7806C2__7S7806C1[10]),  10,18},
  {&(_tg__ZTV7S7806C5__A1__7S7806C2__7S7806C1[10]),  10,20},
  {&(_ZTV7S7806C1[93]),  93,181},
  {&(_ZTV7S7806C1[93]),  93,181},
  {&(_ZTV7S7806C1[114]),  114,181},
  {&(_ZTV7S7806C1[39]),  39,181},
  {&(_ZTV7S7806C1[146]),  146,181},
  {&(_ZTV7S7806C1[178]),  178,181},
  {&(_ZTV7S7806C1[166]),  166,181},
  {&(_tg__ZTV7S7806C3__7S7806C1[11]),  11,22},
  {&(_tg__ZTV7S7806C57S7806C3__7S7806C1[10]),  10,20},
  {&(_tg__ZTV7S7806C57S7806C3__7S7806C1[10]),  10,20},
  {&(_tg__ZTV7S7806C3__7S7806C1[11]),  11,22},
  {&(_tg__ZTV7S7806C6__7S7806C3__7S7806C1[10]),  10,18},
  {&(_tg__ZTV7S7806C9__7S7806C1[13]),  13,31},
  {&(_tg__ZTV7S7806C57S7806C9__A2__7S7806C1[10]),  10,20},
  {&(_tg__ZTV7S7806C4__7S7806C57S7806C9__A2__7S7806C1[9]),  9,16},
  {&(_tg__ZTV8S7806C10__7S7806C9__7S7806C1[5]),  5,8},
  {&(_tg__ZTV7S7806C3__7S7806C9__7S7806C1[15]),  15,26},
  {&(_tg__ZTV7S7806C3__7S7806C9__7S7806C1[15]),  15,26},
  {&(_tg__ZTV7S7806C6__7S7806C9__7S7806C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7806C1[];
extern  VTBL_ENTRY _ZTV7S7806C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7806C1[];
Class_Descriptor cd_S7806C1 = {  "S7806C1", // class name
  bases_S7806C1, 18,
  &(vtc_S7806C1[0]), // expected_vtbl_contents
  &(vtt_S7806C1[0]), // expected_vtt_contents
  ABISELECT(608,392), // object size
  NSPAIRA(_ZTI7S7806C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7806C1),181, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7806C1),27, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21052C4  {
  int s21052c4f0;
  virtual void  v10(); // _ZN8S21052C43v10Ev
  virtual void  v11(); // _ZN8S21052C43v11Ev
  virtual void  v12(); // _ZN8S21052C43v12Ev
  ~S21052C4(); // tgen
  S21052C4(); // tgen
};
//SIG(-1 S21052C4) C1{ v1 v2 v3 Fi}


void  S21052C4 ::v10(){vfunc_called(this, "_ZN8S21052C43v10Ev");}
void  S21052C4 ::v11(){vfunc_called(this, "_ZN8S21052C43v11Ev");}
void  S21052C4 ::v12(){vfunc_called(this, "_ZN8S21052C43v12Ev");}
S21052C4 ::~S21052C4(){ note_dtor("S21052C4", this);} // tgen
S21052C4 ::S21052C4(){ note_ctor("S21052C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S21052C4C1Ev();
extern void _ZN8S21052C4D1Ev();
Name_Map name_map_S21052C4[] = {
  NSPAIR(_ZN8S21052C4C1Ev),
  NSPAIR(_ZN8S21052C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21052C4[];
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
static  VTBL_ENTRY vtc_S21052C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C4[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
};
extern VTBL_ENTRY _ZTI8S21052C4[];
extern  VTBL_ENTRY _ZTV8S21052C4[];
Class_Descriptor cd_S21052C4 = {  "S21052C4", // class name
  0,0,//no base classes
  &(vtc_S21052C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21052C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21052C4),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  S21052C5  {
  __tsi64 s21052c5f0;
  virtual void  v13(); // _ZN8S21052C53v13Ev
  virtual void  v14(); // _ZN8S21052C53v14Ev
  virtual void  v15(); // _ZN8S21052C53v15Ev
  virtual void  v16(); // _ZN8S21052C53v16Ev
  virtual void  v17(); // _ZN8S21052C53v17Ev
  virtual void  v18(); // _ZN8S21052C53v18Ev
  virtual void  v19(); // _ZN8S21052C53v19Ev
  virtual void  v20(); // _ZN8S21052C53v20Ev
  ~S21052C5(); // tgen
  S21052C5(); // tgen
};
//SIG(-1 S21052C5) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S21052C5 ::v13(){vfunc_called(this, "_ZN8S21052C53v13Ev");}
void  S21052C5 ::v14(){vfunc_called(this, "_ZN8S21052C53v14Ev");}
void  S21052C5 ::v15(){vfunc_called(this, "_ZN8S21052C53v15Ev");}
void  S21052C5 ::v16(){vfunc_called(this, "_ZN8S21052C53v16Ev");}
void  S21052C5 ::v17(){vfunc_called(this, "_ZN8S21052C53v17Ev");}
void  S21052C5 ::v18(){vfunc_called(this, "_ZN8S21052C53v18Ev");}
void  S21052C5 ::v19(){vfunc_called(this, "_ZN8S21052C53v19Ev");}
void  S21052C5 ::v20(){vfunc_called(this, "_ZN8S21052C53v20Ev");}
S21052C5 ::~S21052C5(){ note_dtor("S21052C5", this);} // tgen
S21052C5 ::S21052C5(){ note_ctor("S21052C5", this);} // tgen

static void Test_S21052C5()
{
  extern Class_Descriptor cd_S21052C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S21052C5, buf);
    S21052C5 *dp, &lv = *(dp=new (buf) S21052C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21052C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21052C5)");
    check_field_offset(lv, s21052c5f0, ABISELECT(8,4), "S21052C5.s21052c5f0");
    test_class_info(&lv, &cd_S21052C5);
    dp->~S21052C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21052C5(Test_S21052C5, "S21052C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S21052C5C1Ev();
extern void _ZN8S21052C5D1Ev();
Name_Map name_map_S21052C5[] = {
  NSPAIR(_ZN8S21052C5C1Ev),
  NSPAIR(_ZN8S21052C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21052C5[];
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY vtc_S21052C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C5[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
Class_Descriptor cd_S21052C5 = {  "S21052C5", // class name
  0,0,//no base classes
  &(vtc_S21052C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S21052C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21052C5),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  S21052C7  : virtual S21052C5 {
  ::S21052C5 s21052c7f0;
  int s21052c7f1;
  void *s21052c7f2;
  virtual void  v21(); // _ZN8S21052C73v21Ev
  virtual void  v22(); // _ZN8S21052C73v22Ev
  virtual void  v23(); // _ZN8S21052C73v23Ev
  virtual void  v24(); // _ZN8S21052C73v24Ev
  virtual void  v25(); // _ZN8S21052C73v25Ev
  virtual void  v26(); // _ZN8S21052C73v26Ev
  ~S21052C7(); // tgen
  S21052C7(); // tgen
};
//SIG(-1 S21052C7) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S21052C7 ::v21(){vfunc_called(this, "_ZN8S21052C73v21Ev");}
void  S21052C7 ::v22(){vfunc_called(this, "_ZN8S21052C73v22Ev");}
void  S21052C7 ::v23(){vfunc_called(this, "_ZN8S21052C73v23Ev");}
void  S21052C7 ::v24(){vfunc_called(this, "_ZN8S21052C73v24Ev");}
void  S21052C7 ::v25(){vfunc_called(this, "_ZN8S21052C73v25Ev");}
void  S21052C7 ::v26(){vfunc_called(this, "_ZN8S21052C73v26Ev");}
S21052C7 ::~S21052C7(){ note_dtor("S21052C7", this);} // tgen
S21052C7 ::S21052C7(){ note_ctor("S21052C7", this);} // tgen

static void Test_S21052C7()
{
  extern Class_Descriptor cd_S21052C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S21052C7, buf);
    S21052C7 *dp, &lv = *(dp=new (buf) S21052C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S21052C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21052C7)");
    check_base_class_offset(lv, (S21052C5*), ABISELECT(40,24), "S21052C7");
    check_field_offset(lv, s21052c7f0, ABISELECT(8,4), "S21052C7.s21052c7f0");
    check_field_offset(lv, s21052c7f1, ABISELECT(24,16), "S21052C7.s21052c7f1");
    check_field_offset(lv, s21052c7f2, ABISELECT(32,20), "S21052C7.s21052c7f2");
    test_class_info(&lv, &cd_S21052C7);
    dp->~S21052C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21052C7(Test_S21052C7, "S21052C7", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S21052C7C1Ev();
extern void _ZN8S21052C7D1Ev();
Name_Map name_map_S21052C7[] = {
  NSPAIR(_ZN8S21052C7C1Ev),
  NSPAIR(_ZN8S21052C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
static Base_Class bases_S21052C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21052C5,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI8S21052C7[];
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY vtc_S21052C7[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern VTBL_ENTRY _ZTV8S21052C7[];
static  VTT_ENTRY vtt_S21052C7[] = {
  {&(_ZTV8S21052C7[3]),  3,27},
  {&(_ZTV8S21052C7[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S21052C7[];
extern  VTBL_ENTRY _ZTV8S21052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C7[];
Class_Descriptor cd_S21052C7 = {  "S21052C7", // class name
  bases_S21052C7, 1,
  &(vtc_S21052C7[0]), // expected_vtbl_contents
  &(vtt_S21052C7[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S21052C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21052C7),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21052C7),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  S21052C8  : virtual S21052C7 {
  short s21052c8f0[6];
  int s21052c8f1;
  short s21052c8f2;
  char s21052c8f3[6];
  virtual  ~S21052C8(); // _ZN8S21052C8D2Ev
  virtual void  v27(); // _ZN8S21052C83v27Ev
  virtual void  v28(); // _ZN8S21052C83v28Ev
  virtual void  v29(); // _ZN8S21052C83v29Ev
  virtual void  v30(); // _ZN8S21052C83v30Ev
  virtual void  v31(); // _ZN8S21052C83v31Ev
  S21052C8(); // tgen
};
//SIG(-1 S21052C8) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 v12 v13 FL} v14 v15 v16 v17 v18 v19 FC3 Fi Fp} vd v1 v2 v3 v4 v5 Fs[6] Fi Fs Fc[6]}


 S21052C8 ::~S21052C8(){ note_dtor("S21052C8", this);}
void  S21052C8 ::v27(){vfunc_called(this, "_ZN8S21052C83v27Ev");}
void  S21052C8 ::v28(){vfunc_called(this, "_ZN8S21052C83v28Ev");}
void  S21052C8 ::v29(){vfunc_called(this, "_ZN8S21052C83v29Ev");}
void  S21052C8 ::v30(){vfunc_called(this, "_ZN8S21052C83v30Ev");}
void  S21052C8 ::v31(){vfunc_called(this, "_ZN8S21052C83v31Ev");}
S21052C8 ::S21052C8(){ note_ctor("S21052C8", this);} // tgen

static void Test_S21052C8()
{
  extern Class_Descriptor cd_S21052C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S21052C8, buf);
    S21052C8 *dp, &lv = *(dp=new (buf) S21052C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S21052C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21052C8)");
    check_base_class_offset(lv, (S21052C5*)(S21052C7*), ABISELECT(72,52), "S21052C8");
    check_base_class_offset(lv, (S21052C7*), ABISELECT(32,28), "S21052C8");
    check_field_offset(lv, s21052c8f0, ABISELECT(8,4), "S21052C8.s21052c8f0");
    check_field_offset(lv, s21052c8f1, ABISELECT(20,16), "S21052C8.s21052c8f1");
    check_field_offset(lv, s21052c8f2, ABISELECT(24,20), "S21052C8.s21052c8f2");
    check_field_offset(lv, s21052c8f3, ABISELECT(26,22), "S21052C8.s21052c8f3");
    test_class_info(&lv, &cd_S21052C8);
    dp->~S21052C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21052C8(Test_S21052C8, "S21052C8", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN8S21052C8C1Ev();
extern void _ZN8S21052C8D2Ev();
Name_Map name_map_S21052C8[] = {
  NSPAIR(_ZN8S21052C8C1Ev),
  NSPAIR(_ZN8S21052C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C7;
extern VTBL_ENTRY _ZTI8S21052C7[];
extern  VTBL_ENTRY _ZTV8S21052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C7[];
static Base_Class bases_S21052C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21052C5,    ABISELECT(72,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //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_S21052C7,    ABISELECT(32,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S21052C8[];
extern void _ZN8S21052C8D1Ev();
extern void _ZN8S21052C8D0Ev();
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY vtc_S21052C8[] = {
  ABISELECT(72,52),
  ABISELECT(32,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-28),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern VTBL_ENTRY _ZTV8S21052C8[];
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C8[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C7__8S21052C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
static  VTT_ENTRY vtt_S21052C8[] = {
  {&(_ZTV8S21052C8[4]),  4,44},
  {&(_ZTV8S21052C8[20]),  20,44},
  {&(_ZTV8S21052C8[36]),  36,44},
  {&(_tg__ZTV8S21052C7__8S21052C8[3]),  3,9},
  {&(_tg__ZTV8S21052C5__8S21052C7__8S21052C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S21052C8[];
extern  VTBL_ENTRY _ZTV8S21052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C8[];
Class_Descriptor cd_S21052C8 = {  "S21052C8", // class name
  bases_S21052C8, 2,
  &(vtc_S21052C8[0]), // expected_vtbl_contents
  &(vtt_S21052C8[0]), // expected_vtt_contents
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI8S21052C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21052C8),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21052C8),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  S21052C6  : virtual S21052C7 , virtual S21052C8 {
  virtual  ~S21052C6(); // _ZN8S21052C6D2Ev
  virtual void  v32(); // _ZN8S21052C63v32Ev
  virtual void  v33(); // _ZN8S21052C63v33Ev
  S21052C6(); // tgen
};
//SIG(-1 S21052C6) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 v10 FL} v11 v12 v13 v14 v15 v16 FC3 Fi Fp} VBC4{ VBC2 vd v17 v18 v19 v20 v21 Fs[6] Fi Fs Fc[6]} vd v1 v2}


 S21052C6 ::~S21052C6(){ note_dtor("S21052C6", this);}
void  S21052C6 ::v32(){vfunc_called(this, "_ZN8S21052C63v32Ev");}
void  S21052C6 ::v33(){vfunc_called(this, "_ZN8S21052C63v33Ev");}
S21052C6 ::S21052C6(){ note_ctor("S21052C6", this);} // tgen

static void Test_S21052C6()
{
  extern Class_Descriptor cd_S21052C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S21052C6, buf);
    S21052C6 *dp, &lv = *(dp=new (buf) S21052C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S21052C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21052C6)");
    check_base_class_offset(lv, (S21052C5*)(S21052C7*), ABISELECT(48,28), "S21052C6");
    check_base_class_offset(lv, (S21052C7*), ABISELECT(8,4), "S21052C6");
    check_base_class_offset(lv, (S21052C7*)(S21052C8*), ABISELECT(8,4), "S21052C6");
    check_base_class_offset(lv, (S21052C8*), ABISELECT(64,40), "S21052C6");
    test_class_info(&lv, &cd_S21052C6);
    dp->~S21052C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21052C6(Test_S21052C6, "S21052C6", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN8S21052C6C1Ev();
extern void _ZN8S21052C6D2Ev();
Name_Map name_map_S21052C6[] = {
  NSPAIR(_ZN8S21052C6C1Ev),
  NSPAIR(_ZN8S21052C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C7;
extern VTBL_ENTRY _ZTI8S21052C7[];
extern  VTBL_ENTRY _ZTV8S21052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C7[];
extern Class_Descriptor cd_S21052C8;
extern VTBL_ENTRY _ZTI8S21052C8[];
extern  VTBL_ENTRY _ZTV8S21052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C8[];
static Base_Class bases_S21052C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21052C5,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S21052C7,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //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_S21052C8,    ABISELECT(64,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI8S21052C6[];
extern void _ZN8S21052C6D1Ev();
extern void _ZN8S21052C6D0Ev();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21052C6D1Ev,_ZThn40_N8S21052C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S21052C6D0Ev,_ZThn40_N8S21052C6D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY vtc_S21052C6[] = {
  ABISELECT(64,40),
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S21052C6[];
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C6[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C7__8S21052C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void _ZN8S21052C8D1Ev();
extern void _ZN8S21052C8D0Ev();
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C6[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C8__8S21052C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C8__8S21052C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
static  VTT_ENTRY vtt_S21052C6[] = {
  {&(_ZTV8S21052C6[5]),  5,59},
  {&(_ZTV8S21052C6[18]),  18,59},
  {&(_ZTV8S21052C6[34]),  34,59},
  {&(_ZTV8S21052C6[52]),  52,59},
  {&(_tg__ZTV8S21052C7__8S21052C6[3]),  3,9},
  {&(_tg__ZTV8S21052C5__8S21052C7__8S21052C6[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C6[4]),  4,11},
  {&(_tg__ZTV8S21052C7__8S21052C8__8S21052C6[9]),  9,15},
  {&(_tg__ZTV8S21052C5__8S21052C8__8S21052C6[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S21052C6[];
extern  VTBL_ENTRY _ZTV8S21052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C6[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21052C6D0Ev,_ZThn40_N8S21052C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21052C6D1Ev,_ZThn40_N8S21052C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21052C6 = {  "S21052C6", // class name
  bases_S21052C6, 3,
  &(vtc_S21052C6[0]), // expected_vtbl_contents
  &(vtt_S21052C6[0]), // expected_vtt_contents
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI8S21052C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21052C6),59, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21052C6),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21052C3  : virtual S21052C4 , S21052C5 , S21052C6 {
  char s21052c3f0[8];
  virtual  ~S21052C3(); // _ZN8S21052C3D2Ev
  virtual void  v34(); // _ZN8S21052C33v34Ev
  virtual void  v35(); // _ZN8S21052C33v35Ev
  virtual void  v36(); // _ZN8S21052C33v36Ev
  virtual void  v37(); // _ZN8S21052C33v37Ev
  virtual void  v38(); // _ZN8S21052C33v38Ev
  virtual void  v39(); // _ZN8S21052C33v39Ev
  S21052C3(); // tgen
};
//SIG(-1 S21052C3) C1{ VBC2{ v7 v8 v9 Fi} BC3{ v10 v11 v12 v13 v14 v15 v16 v17 FL} BC4{ VBC5{ VBC3 v18 v19 v20 v21 v22 v23 FC3 Fi Fp} VBC6{ VBC5 vd v24 v25 v26 v27 v28 Fs[6] Fi Fs Fc[6]} vd v29 v30} vd v1 v2 v3 v4 v5 v6 Fc[8]}


 S21052C3 ::~S21052C3(){ note_dtor("S21052C3", this);}
void  S21052C3 ::v34(){vfunc_called(this, "_ZN8S21052C33v34Ev");}
void  S21052C3 ::v35(){vfunc_called(this, "_ZN8S21052C33v35Ev");}
void  S21052C3 ::v36(){vfunc_called(this, "_ZN8S21052C33v36Ev");}
void  S21052C3 ::v37(){vfunc_called(this, "_ZN8S21052C33v37Ev");}
void  S21052C3 ::v38(){vfunc_called(this, "_ZN8S21052C33v38Ev");}
void  S21052C3 ::v39(){vfunc_called(this, "_ZN8S21052C33v39Ev");}
S21052C3 ::S21052C3(){ note_ctor("S21052C3", this);} // tgen

static void Test_S21052C3()
{
  extern Class_Descriptor cd_S21052C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S21052C3, buf);
    S21052C3 *dp, &lv = *(dp=new (buf) S21052C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S21052C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21052C3)");
    check_base_class_offset(lv, (S21052C4*), ABISELECT(32,24), "S21052C3");
    /*is_ambiguous_... S21052C3::S21052C5 */ AMB_check_base_class_offset(lv, (S21052C5*), 0, "S21052C3");
    check_base_class_offset(lv, (S21052C5*)(S21052C7*), ABISELECT(88,56), "S21052C3");
    check_base_class_offset(lv, (S21052C7*)(S21052C6*), ABISELECT(48,32), "S21052C3");
    check_base_class_offset(lv, (S21052C7*)(S21052C8*), ABISELECT(48,32), "S21052C3");
    check_base_class_offset(lv, (S21052C8*)(S21052C6*), ABISELECT(104,68), "S21052C3");
    check_base_class_offset(lv, (S21052C6*), ABISELECT(16,12), "S21052C3");
    check_field_offset(lv, s21052c3f0, ABISELECT(24,16), "S21052C3.s21052c3f0");
    test_class_info(&lv, &cd_S21052C3);
    dp->~S21052C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21052C3(Test_S21052C3, "S21052C3", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN8S21052C3C1Ev();
extern void _ZN8S21052C3D2Ev();
Name_Map name_map_S21052C3[] = {
  NSPAIR(_ZN8S21052C3C1Ev),
  NSPAIR(_ZN8S21052C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21052C4;
extern VTBL_ENTRY _ZTI8S21052C4[];
extern  VTBL_ENTRY _ZTV8S21052C4[];
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C7;
extern VTBL_ENTRY _ZTI8S21052C7[];
extern  VTBL_ENTRY _ZTV8S21052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C7[];
extern Class_Descriptor cd_S21052C8;
extern VTBL_ENTRY _ZTI8S21052C8[];
extern  VTBL_ENTRY _ZTV8S21052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C8[];
extern Class_Descriptor cd_S21052C6;
extern VTBL_ENTRY _ZTI8S21052C6[];
extern  VTBL_ENTRY _ZTV8S21052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C6[];
static Base_Class bases_S21052C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21052C4,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21052C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21052C5,    ABISELECT(88,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21052C7,    ABISELECT(48,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21052C8,    ABISELECT(104,68), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21052C6,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21052C3[];
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void _ZN8S21052C3D1Ev();
extern void _ZN8S21052C3D0Ev();
extern void _ZN8S21052C33v34Ev();
extern void _ZN8S21052C33v35Ev();
extern void _ZN8S21052C33v36Ev();
extern void _ZN8S21052C33v37Ev();
extern void _ZN8S21052C33v38Ev();
extern void _ZN8S21052C33v39Ev();
extern void ABISELECT(_ZThn16_N8S21052C3D1Ev,_ZThn12_N8S21052C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21052C3D0Ev,_ZThn12_N8S21052C3D0Ev)();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S21052C3D1Ev,_ZThn68_N8S21052C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S21052C3D0Ev,_ZThn68_N8S21052C3D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY vtc_S21052C3[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  (VTBL_ENTRY)&_ZN8S21052C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v39Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21052C3D1Ev,_ZThn12_N8S21052C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21052C3D0Ev,_ZThn12_N8S21052C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S21052C3[];
extern void _ZN8S21052C6D1Ev();
extern void _ZN8S21052C6D0Ev();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C6__8S21052C3[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C6__8S21052C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C6__8S21052C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev)();
extern void ABISELECT(_ZThn88_N8S21052C6D1Ev,_ZThn56_N8S21052C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev)();
extern void ABISELECT(_ZThn88_N8S21052C6D0Ev,_ZThn56_N8S21052C6D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C6__8S21052C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C3[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C7__8S21052C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void _ZN8S21052C8D1Ev();
extern void _ZN8S21052C8D0Ev();
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C8__8S21052C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C8__8S21052C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
static  VTT_ENTRY vtt_S21052C3[] = {
  {&(_ZTV8S21052C3[6]),  6,89},
  {&(_tg__ZTV8S21052C6__8S21052C3[5]),  5,9},
  {&(_tg__ZTV8S21052C7__8S21052C6__8S21052C3[9]),  9,15},
  {&(_tg__ZTV8S21052C5__8S21052C6__8S21052C3[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C6__8S21052C3[10]),  10,17},
  {&(_ZTV8S21052C3[36]),  36,89},
  {&(_ZTV8S21052C3[27]),  27,89},
  {&(_ZTV8S21052C3[48]),  48,89},
  {&(_ZTV8S21052C3[64]),  64,89},
  {&(_ZTV8S21052C3[82]),  82,89},
  {&(_tg__ZTV8S21052C7__8S21052C3[3]),  3,9},
  {&(_tg__ZTV8S21052C5__8S21052C7__8S21052C3[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C3[4]),  4,11},
  {&(_tg__ZTV8S21052C7__8S21052C8__8S21052C3[9]),  9,15},
  {&(_tg__ZTV8S21052C5__8S21052C8__8S21052C3[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S21052C3[];
extern  VTBL_ENTRY _ZTV8S21052C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C3[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21052C6D0Ev,_ZThn56_N8S21052C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21052C6D1Ev,_ZThn56_N8S21052C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21052C3D0Ev,_ZThn68_N8S21052C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21052C3D1Ev,_ZThn68_N8S21052C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21052C3 = {  "S21052C3", // class name
  bases_S21052C3, 6,
  &(vtc_S21052C3[0]), // expected_vtbl_contents
  &(vtt_S21052C3[0]), // expected_vtt_contents
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI8S21052C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21052C3),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21052C3),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21052C2  : virtual S21052C3 , S21052C4 {
  virtual void  v40(); // _ZN8S21052C23v40Ev
  virtual void  v41(); // _ZN8S21052C23v41Ev
  ~S21052C2(); // tgen
  S21052C2(); // tgen
};
//SIG(-1 S21052C2) C1{ VBC2{ VBC3{ v3 v4 v5 Fi} BC4{ v6 v7 v8 v9 v10 v11 v12 v13 FL} BC5{ VBC6{ VBC4 v14 v15 v16 v17 v18 v19 FC4 Fi Fp} VBC7{ VBC6 vd v20 v21 v22 v23 v24 Fs[6] Fi Fs Fc[6]} vd v25 v26} vd v27 v28 v29 v30 v31 v32 Fc[8]} BC3 v1 v2}


void  S21052C2 ::v40(){vfunc_called(this, "_ZN8S21052C23v40Ev");}
void  S21052C2 ::v41(){vfunc_called(this, "_ZN8S21052C23v41Ev");}
S21052C2 ::~S21052C2(){ note_dtor("S21052C2", this);} // tgen
S21052C2 ::S21052C2(){ note_ctor("S21052C2", this);} // tgen

static void Test_S21052C2()
{
  extern Class_Descriptor cd_S21052C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S21052C2, buf);
    S21052C2 *dp, &lv = *(dp=new (buf) S21052C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S21052C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21052C2)");
    check_base_class_offset(lv, (S21052C4*)(S21052C3*), ABISELECT(48,32), "S21052C2");
    /*is_ambiguous_... S21052C3::S21052C5 */ AMB_check_base_class_offset(lv, (S21052C5*)(S21052C3*), ABISELECT(16,8), "S21052C2");
    check_base_class_offset(lv, (S21052C5*)(S21052C7*), ABISELECT(104,64), "S21052C2");
    check_base_class_offset(lv, (S21052C7*)(S21052C6*)(S21052C3*), ABISELECT(64,40), "S21052C2");
    check_base_class_offset(lv, (S21052C7*)(S21052C8*), ABISELECT(64,40), "S21052C2");
    check_base_class_offset(lv, (S21052C8*)(S21052C6*)(S21052C3*), ABISELECT(120,76), "S21052C2");
    check_base_class_offset(lv, (S21052C6*)(S21052C3*), ABISELECT(32,20), "S21052C2");
    check_base_class_offset(lv, (S21052C3*), ABISELECT(16,8), "S21052C2");
    /*is_ambiguous_... S21052C2::S21052C4 */ AMB_check_base_class_offset(lv, (S21052C4*), 0, "S21052C2");
    test_class_info(&lv, &cd_S21052C2);
    dp->~S21052C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21052C2(Test_S21052C2, "S21052C2", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN8S21052C2C1Ev();
extern void _ZN8S21052C2D1Ev();
Name_Map name_map_S21052C2[] = {
  NSPAIR(_ZN8S21052C2C1Ev),
  NSPAIR(_ZN8S21052C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21052C4;
extern VTBL_ENTRY _ZTI8S21052C4[];
extern  VTBL_ENTRY _ZTV8S21052C4[];
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C7;
extern VTBL_ENTRY _ZTI8S21052C7[];
extern  VTBL_ENTRY _ZTV8S21052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C7[];
extern Class_Descriptor cd_S21052C8;
extern VTBL_ENTRY _ZTI8S21052C8[];
extern  VTBL_ENTRY _ZTV8S21052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C8[];
extern Class_Descriptor cd_S21052C6;
extern VTBL_ENTRY _ZTI8S21052C6[];
extern  VTBL_ENTRY _ZTV8S21052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C6[];
extern Class_Descriptor cd_S21052C3;
extern VTBL_ENTRY _ZTI8S21052C3[];
extern  VTBL_ENTRY _ZTV8S21052C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C3[];
extern Class_Descriptor cd_S21052C4;
extern VTBL_ENTRY _ZTI8S21052C4[];
extern  VTBL_ENTRY _ZTV8S21052C4[];
static Base_Class bases_S21052C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21052C4,    ABISELECT(48,32), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21052C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21052C5,    ABISELECT(104,64), //bcp->offset
    85, //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_S21052C7,    ABISELECT(64,40), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21052C8,    ABISELECT(120,76), //bcp->offset
    103, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21052C6,    ABISELECT(32,20), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21052C3,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21052C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21052C2[];
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
extern void _ZN8S21052C23v40Ev();
extern void _ZN8S21052C23v41Ev();
extern void _ZN8S21052C2D1Ev();
extern void _ZN8S21052C2D0Ev();
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void ABISELECT(_ZTv0_n120_N8S21052C2D1Ev,_ZTv0_n60_N8S21052C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21052C2D1Ev,_ZThn8_N8S21052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S21052C2D0Ev,_ZTv0_n60_N8S21052C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21052C2D0Ev,_ZThn8_N8S21052C2D0Ev)() __attribute__((weak));
extern void _ZN8S21052C33v34Ev();
extern void _ZN8S21052C33v35Ev();
extern void _ZN8S21052C33v36Ev();
extern void _ZN8S21052C33v37Ev();
extern void _ZN8S21052C33v38Ev();
extern void _ZN8S21052C33v39Ev();
extern void ABISELECT(_ZTvn16_n120_N8S21052C2D1Ev,_ZTvn12_n60_N8S21052C2D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S21052C2D0Ev,_ZTvn12_n60_N8S21052C2D0Ev)();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void ABISELECT(_ZTv0_n40_N8S21052C2D1Ev,_ZTv0_n20_N8S21052C2D1Ev)();
extern void ABISELECT(_ZThn120_N8S21052C2D1Ev,_ZThn76_N8S21052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C2D0Ev,_ZTv0_n20_N8S21052C2D0Ev)();
extern void ABISELECT(_ZThn120_N8S21052C2D0Ev,_ZThn76_N8S21052C2D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY vtc_S21052C2[] = {
  ABISELECT(120,76),
  ABISELECT(104,64),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21052C23v40Ev,
  (VTBL_ENTRY)&_ZN8S21052C23v41Ev,
  (VTBL_ENTRY)&_ZN8S21052C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C2D0Ev,
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21052C2D1Ev,_ZTv0_n60_N8S21052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21052C2D0Ev,_ZTv0_n60_N8S21052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v39Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S21052C2D1Ev,_ZTvn12_n60_N8S21052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S21052C2D0Ev,_ZTvn12_n60_N8S21052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C2D1Ev,_ZTv0_n20_N8S21052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C2D0Ev,_ZTv0_n20_N8S21052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S21052C2[];
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void _ZN8S21052C3D1Ev();
extern void _ZN8S21052C3D0Ev();
extern void _ZN8S21052C33v34Ev();
extern void _ZN8S21052C33v35Ev();
extern void _ZN8S21052C33v36Ev();
extern void _ZN8S21052C33v37Ev();
extern void _ZN8S21052C33v38Ev();
extern void _ZN8S21052C33v39Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C3__8S21052C2[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  (VTBL_ENTRY)&_ZN8S21052C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v39Ev,
};
extern void _ZN8S21052C6D1Ev();
extern void _ZN8S21052C6D0Ev();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C68S21052C3__8S21052C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C68S21052C3__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C68S21052C3__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev)();
extern void ABISELECT(_ZThn88_N8S21052C6D1Ev,_ZThn56_N8S21052C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev)();
extern void ABISELECT(_ZThn88_N8S21052C6D0Ev,_ZThn56_N8S21052C6D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C68S21052C3__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C4__8S21052C3__8S21052C2[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
};
extern void ABISELECT(_ZThn16_N8S21052C3D1Ev,_ZThn12_N8S21052C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21052C3D0Ev,_ZThn12_N8S21052C3D0Ev)();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C6__8S21052C3__8S21052C2[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21052C3D1Ev,_ZThn12_N8S21052C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21052C3D0Ev,_ZThn12_N8S21052C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C3__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__A1__8S21052C3__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S21052C3D1Ev,_ZThn68_N8S21052C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S21052C3D0Ev,_ZThn68_N8S21052C3D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C3__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C7__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void _ZN8S21052C8D1Ev();
extern void _ZN8S21052C8D0Ev();
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C8__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C8__8S21052C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
static  VTT_ENTRY vtt_S21052C2[] = {
  {&(_ZTV8S21052C2[7]),  7,120},
  {&(_ZTV8S21052C2[37]),  37,120},
  {&(_ZTV8S21052C2[67]),  67,120},
  {&(_ZTV8S21052C2[58]),  58,120},
  {&(_ZTV8S21052C2[79]),  79,120},
  {&(_ZTV8S21052C2[95]),  95,120},
  {&(_ZTV8S21052C2[113]),  113,120},
  {&(_tg__ZTV8S21052C3__8S21052C2[6]),  6,22},
  {&(_tg__ZTV8S21052C68S21052C3__8S21052C2[5]),  5,9},
  {&(_tg__ZTV8S21052C7__8S21052C68S21052C3__8S21052C2[9]),  9,15},
  {&(_tg__ZTV8S21052C5__8S21052C68S21052C3__8S21052C2[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C68S21052C3__8S21052C2[10]),  10,17},
  {&(_tg__ZTV8S21052C4__8S21052C3__8S21052C2[5]),  5,8},
  {&(_tg__ZTV8S21052C6__8S21052C3__8S21052C2[5]),  5,9},
  {&(_tg__ZTV8S21052C7__8S21052C3__8S21052C2[9]),  9,15},
  {&(_tg__ZTV8S21052C5__A1__8S21052C3__8S21052C2[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C3__8S21052C2[10]),  10,17},
  {&(_tg__ZTV8S21052C7__8S21052C2[3]),  3,9},
  {&(_tg__ZTV8S21052C5__8S21052C7__8S21052C2[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C2[4]),  4,11},
  {&(_tg__ZTV8S21052C7__8S21052C8__8S21052C2[9]),  9,15},
  {&(_tg__ZTV8S21052C5__8S21052C8__8S21052C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S21052C2[];
extern  VTBL_ENTRY _ZTV8S21052C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C2[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21052C3D0Ev,_ZThn68_N8S21052C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21052C3D1Ev,_ZThn68_N8S21052C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21052C6D0Ev,_ZThn56_N8S21052C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21052C6D1Ev,_ZThn56_N8S21052C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C2D0Ev,_ZTv0_n20_N8S21052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21052C2D0Ev,_ZThn76_N8S21052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C2D1Ev,_ZTv0_n20_N8S21052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21052C2D1Ev,_ZThn76_N8S21052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21052C2D0Ev,_ZTv0_n60_N8S21052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21052C2D0Ev,_ZThn8_N8S21052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21052C2D1Ev,_ZTv0_n60_N8S21052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21052C2D1Ev,_ZThn8_N8S21052C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21052C2 = {  "S21052C2", // class name
  bases_S21052C2, 8,
  &(vtc_S21052C2[0]), // expected_vtbl_contents
  &(vtt_S21052C2[0]), // expected_vtt_contents
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI8S21052C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21052C2),120, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21052C2),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21052C1  : virtual S21052C2 {
  char s21052c1f0;
  virtual  ~S21052C1(); // _ZN8S21052C1D2Ev
  virtual void  v1(); // _ZN8S21052C12v1Ev
  virtual void  v2(); // _ZN8S21052C12v2Ev
  virtual void  v3(); // _ZN8S21052C12v3Ev
  virtual void  v4(); // _ZN8S21052C12v4Ev
  virtual void  v5(); // _ZN8S21052C12v5Ev
  virtual void  v6(); // _ZN8S21052C12v6Ev
  virtual void  v7(); // _ZN8S21052C12v7Ev
  virtual void  v8(); // _ZN8S21052C12v8Ev
  virtual void  v9(); // _ZN8S21052C12v9Ev
  S21052C1(); // tgen
};
//SIG(1 S21052C1) C1{ VBC2{ VBC3{ VBC4{ v10 v11 v12 Fi} BC5{ v13 v14 v15 v16 v17 v18 v19 v20 FL} BC6{ VBC7{ VBC5 v21 v22 v23 v24 v25 v26 FC5 Fi Fp} VBC8{ VBC7 vd v27 v28 v29 v30 v31 Fs[6] Fi Fs Fc[6]} vd v32 v33} vd v34 v35 v36 v37 v38 v39 Fc[8]} BC4 v40 v41} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc}


 S21052C1 ::~S21052C1(){ note_dtor("S21052C1", this);}
void  S21052C1 ::v1(){vfunc_called(this, "_ZN8S21052C12v1Ev");}
void  S21052C1 ::v2(){vfunc_called(this, "_ZN8S21052C12v2Ev");}
void  S21052C1 ::v3(){vfunc_called(this, "_ZN8S21052C12v3Ev");}
void  S21052C1 ::v4(){vfunc_called(this, "_ZN8S21052C12v4Ev");}
void  S21052C1 ::v5(){vfunc_called(this, "_ZN8S21052C12v5Ev");}
void  S21052C1 ::v6(){vfunc_called(this, "_ZN8S21052C12v6Ev");}
void  S21052C1 ::v7(){vfunc_called(this, "_ZN8S21052C12v7Ev");}
void  S21052C1 ::v8(){vfunc_called(this, "_ZN8S21052C12v8Ev");}
void  S21052C1 ::v9(){vfunc_called(this, "_ZN8S21052C12v9Ev");}
S21052C1 ::S21052C1(){ note_ctor("S21052C1", this);} // tgen

static void Test_S21052C1()
{
  extern Class_Descriptor cd_S21052C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S21052C1, buf);
    S21052C1 *dp, &lv = *(dp=new (buf) S21052C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S21052C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21052C1)");
    check_base_class_offset(lv, (S21052C4*)(S21052C3*), ABISELECT(64,40), "S21052C1");
    /*is_ambiguous_... S21052C3::S21052C5 */ AMB_check_base_class_offset(lv, (S21052C5*)(S21052C3*), ABISELECT(32,16), "S21052C1");
    check_base_class_offset(lv, (S21052C5*)(S21052C7*), ABISELECT(120,72), "S21052C1");
    check_base_class_offset(lv, (S21052C7*)(S21052C6*)(S21052C3*), ABISELECT(80,48), "S21052C1");
    check_base_class_offset(lv, (S21052C7*)(S21052C8*), ABISELECT(80,48), "S21052C1");
    check_base_class_offset(lv, (S21052C8*)(S21052C6*)(S21052C3*), ABISELECT(136,84), "S21052C1");
    check_base_class_offset(lv, (S21052C6*)(S21052C3*), ABISELECT(48,28), "S21052C1");
    check_base_class_offset(lv, (S21052C3*)(S21052C2*), ABISELECT(32,16), "S21052C1");
    /*is_ambiguous_... S21052C2::S21052C4 */ AMB_check_base_class_offset(lv, (S21052C4*)(S21052C2*), ABISELECT(16,8), "S21052C1");
    check_base_class_offset(lv, (S21052C2*), ABISELECT(16,8), "S21052C1");
    check_field_offset(lv, s21052c1f0, ABISELECT(8,4), "S21052C1.s21052c1f0");
    test_class_info(&lv, &cd_S21052C1);
    dp->~S21052C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21052C1(Test_S21052C1, "S21052C1", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN8S21052C1C1Ev();
extern void _ZN8S21052C1D2Ev();
Name_Map name_map_S21052C1[] = {
  NSPAIR(_ZN8S21052C1C1Ev),
  NSPAIR(_ZN8S21052C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21052C4;
extern VTBL_ENTRY _ZTI8S21052C4[];
extern  VTBL_ENTRY _ZTV8S21052C4[];
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C5;
extern VTBL_ENTRY _ZTI8S21052C5[];
extern  VTBL_ENTRY _ZTV8S21052C5[];
extern Class_Descriptor cd_S21052C7;
extern VTBL_ENTRY _ZTI8S21052C7[];
extern  VTBL_ENTRY _ZTV8S21052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C7[];
extern Class_Descriptor cd_S21052C8;
extern VTBL_ENTRY _ZTI8S21052C8[];
extern  VTBL_ENTRY _ZTV8S21052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C8[];
extern Class_Descriptor cd_S21052C6;
extern VTBL_ENTRY _ZTI8S21052C6[];
extern  VTBL_ENTRY _ZTV8S21052C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C6[];
extern Class_Descriptor cd_S21052C3;
extern VTBL_ENTRY _ZTI8S21052C3[];
extern  VTBL_ENTRY _ZTV8S21052C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C3[];
extern Class_Descriptor cd_S21052C4;
extern VTBL_ENTRY _ZTI8S21052C4[];
extern  VTBL_ENTRY _ZTV8S21052C4[];
extern Class_Descriptor cd_S21052C2;
extern VTBL_ENTRY _ZTI8S21052C2[];
extern  VTBL_ENTRY _ZTV8S21052C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C2[];
static Base_Class bases_S21052C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21052C4,    ABISELECT(64,40), //bcp->offset
    87, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21052C5,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21052C5,    ABISELECT(120,72), //bcp->offset
    110, //bcp->virtual_function_table_offset
    10, //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
    3, //immediately_derived
  0, 1},
  {&cd_S21052C7,    ABISELECT(80,48), //bcp->offset
    95, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21052C8,    ABISELECT(136,84), //bcp->offset
    128, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21052C6,    ABISELECT(48,28), //bcp->offset
    78, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21052C3,    ABISELECT(32,16), //bcp->offset
    39, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21052C4,    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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21052C2,    ABISELECT(16,8), //bcp->offset
    19, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21052C1[];
extern void _ZN8S21052C1D1Ev();
extern void _ZN8S21052C1D0Ev();
extern void _ZN8S21052C12v1Ev();
extern void _ZN8S21052C12v2Ev();
extern void _ZN8S21052C12v3Ev();
extern void _ZN8S21052C12v4Ev();
extern void _ZN8S21052C12v5Ev();
extern void _ZN8S21052C12v6Ev();
extern void _ZN8S21052C12v7Ev();
extern void _ZN8S21052C12v8Ev();
extern void _ZN8S21052C12v9Ev();
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
extern void _ZN8S21052C23v40Ev();
extern void _ZN8S21052C23v41Ev();
extern void ABISELECT(_ZTv0_n104_N8S21052C1D1Ev,_ZTv0_n52_N8S21052C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21052C1D1Ev,_ZThn8_N8S21052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S21052C1D0Ev,_ZTv0_n52_N8S21052C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21052C1D0Ev,_ZThn8_N8S21052C1D0Ev)() __attribute__((weak));
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void ABISELECT(_ZTv0_n120_N8S21052C1D1Ev,_ZTv0_n60_N8S21052C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21052C1D1Ev,_ZThn16_N8S21052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S21052C1D0Ev,_ZTv0_n60_N8S21052C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21052C1D0Ev,_ZThn16_N8S21052C1D0Ev)() __attribute__((weak));
extern void _ZN8S21052C33v34Ev();
extern void _ZN8S21052C33v35Ev();
extern void _ZN8S21052C33v36Ev();
extern void _ZN8S21052C33v37Ev();
extern void _ZN8S21052C33v38Ev();
extern void _ZN8S21052C33v39Ev();
extern void ABISELECT(_ZTvn16_n120_N8S21052C1D1Ev,_ZTvn12_n60_N8S21052C1D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S21052C1D0Ev,_ZTvn12_n60_N8S21052C1D0Ev)();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void ABISELECT(_ZTv0_n40_N8S21052C1D1Ev,_ZTv0_n20_N8S21052C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S21052C1D1Ev,_ZThn84_N8S21052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C1D0Ev,_ZTv0_n20_N8S21052C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S21052C1D0Ev,_ZThn84_N8S21052C1D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY vtc_S21052C1[] = {
  ABISELECT(136,84),
  ABISELECT(120,72),
  ABISELECT(80,48),
  ABISELECT(64,40),
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&_ZN8S21052C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v3Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v4Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v5Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v6Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v7Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v8Ev,
  (VTBL_ENTRY)&_ZN8S21052C12v9Ev,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,76),
  ABISELECT(104,64),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21052C23v40Ev,
  (VTBL_ENTRY)&_ZN8S21052C23v41Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21052C1D1Ev,_ZTv0_n52_N8S21052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S21052C1D0Ev,_ZTv0_n52_N8S21052C1D0Ev),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21052C1D1Ev,_ZTv0_n60_N8S21052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21052C1D0Ev,_ZTv0_n60_N8S21052C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v39Ev,
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S21052C1D1Ev,_ZTvn12_n60_N8S21052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S21052C1D0Ev,_ZTvn12_n60_N8S21052C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-84),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI8S21052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C1D1Ev,_ZTv0_n20_N8S21052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C1D0Ev,_ZTv0_n20_N8S21052C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S21052C1[];
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
extern void _ZN8S21052C23v40Ev();
extern void _ZN8S21052C23v41Ev();
extern void _ZN8S21052C2D1Ev();
extern void _ZN8S21052C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C2__8S21052C1[] = {
  ABISELECT(120,76),
  ABISELECT(104,64),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21052C23v40Ev,
  (VTBL_ENTRY)&_ZN8S21052C23v41Ev,
  (VTBL_ENTRY)&_ZN8S21052C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C2D0Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void ABISELECT(_ZTv0_n120_N8S21052C2D1Ev,_ZTv0_n60_N8S21052C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21052C2D1Ev,_ZThn8_N8S21052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S21052C2D0Ev,_ZTv0_n60_N8S21052C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21052C2D0Ev,_ZThn8_N8S21052C2D0Ev)() __attribute__((weak));
extern void _ZN8S21052C33v34Ev();
extern void _ZN8S21052C33v35Ev();
extern void _ZN8S21052C33v36Ev();
extern void _ZN8S21052C33v37Ev();
extern void _ZN8S21052C33v38Ev();
extern void _ZN8S21052C33v39Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C3__8S21052C2__8S21052C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21052C2D1Ev,_ZTv0_n60_N8S21052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21052C2D0Ev,_ZTv0_n60_N8S21052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v39Ev,
};
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C4__8S21052C2__8S21052C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
};
extern void ABISELECT(_ZTvn16_n120_N8S21052C2D1Ev,_ZTvn12_n60_N8S21052C2D1Ev)();
extern void ABISELECT(_ZTvn16_n120_N8S21052C2D0Ev,_ZTvn12_n60_N8S21052C2D0Ev)();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C68S21052C3__8S21052C2__8S21052C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S21052C2D1Ev,_ZTvn12_n60_N8S21052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n120_N8S21052C2D0Ev,_ZTvn12_n60_N8S21052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C2__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__A1__8S21052C2__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21052C2D1Ev,_ZTv0_n20_N8S21052C2D1Ev)();
extern void ABISELECT(_ZThn120_N8S21052C2D1Ev,_ZThn76_N8S21052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C2D0Ev,_ZTv0_n20_N8S21052C2D0Ev)();
extern void ABISELECT(_ZThn120_N8S21052C2D0Ev,_ZThn76_N8S21052C2D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C2__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-76),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S21052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C2D1Ev,_ZTv0_n20_N8S21052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C2D0Ev,_ZTv0_n20_N8S21052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
extern void _ZN8S21052C3D1Ev();
extern void _ZN8S21052C3D0Ev();
extern void _ZN8S21052C33v34Ev();
extern void _ZN8S21052C33v35Ev();
extern void _ZN8S21052C33v36Ev();
extern void _ZN8S21052C33v37Ev();
extern void _ZN8S21052C33v38Ev();
extern void _ZN8S21052C33v39Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C3__8S21052C1[] = {
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(48,32),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
  (VTBL_ENTRY)&_ZN8S21052C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v34Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v35Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v36Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v37Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v38Ev,
  (VTBL_ENTRY)&_ZN8S21052C33v39Ev,
};
extern void _ZN8S21052C6D1Ev();
extern void _ZN8S21052C6D0Ev();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C68S21052C3__8S21052C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C68S21052C3__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C68S21052C3__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev)();
extern void ABISELECT(_ZThn88_N8S21052C6D1Ev,_ZThn56_N8S21052C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev)();
extern void ABISELECT(_ZThn88_N8S21052C6D0Ev,_ZThn56_N8S21052C6D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C68S21052C3__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S21052C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C43v10Ev();
extern void _ZN8S21052C43v11Ev();
extern void _ZN8S21052C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C4__8S21052C3__8S21052C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21052C43v12Ev,
};
extern void ABISELECT(_ZThn16_N8S21052C3D1Ev,_ZThn12_N8S21052C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21052C3D0Ev,_ZThn12_N8S21052C3D0Ev)();
extern void _ZN8S21052C63v32Ev();
extern void _ZN8S21052C63v33Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C6__8S21052C3__8S21052C1[] = {
  ABISELECT(88,56),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21052C3D1Ev,_ZThn12_N8S21052C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21052C3D0Ev,_ZThn12_N8S21052C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C63v32Ev,
  (VTBL_ENTRY)&_ZN8S21052C63v33Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C3__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__A1__8S21052C3__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S21052C3D1Ev,_ZThn68_N8S21052C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S21052C3D0Ev,_ZThn68_N8S21052C3D0Ev)() __attribute__((weak));
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C3__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S21052C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C7__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21052C7[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
extern void _ZN8S21052C8D1Ev();
extern void _ZN8S21052C8D0Ev();
extern void _ZN8S21052C83v27Ev();
extern void _ZN8S21052C83v28Ev();
extern void _ZN8S21052C83v29Ev();
extern void _ZN8S21052C83v30Ev();
extern void _ZN8S21052C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C8__8S21052C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21052C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v27Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v28Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v29Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v30Ev,
  (VTBL_ENTRY)&_ZN8S21052C83v31Ev,
};
extern void _ZN8S21052C73v21Ev();
extern void _ZN8S21052C73v22Ev();
extern void _ZN8S21052C73v23Ev();
extern void _ZN8S21052C73v24Ev();
extern void _ZN8S21052C73v25Ev();
extern void _ZN8S21052C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C7__8S21052C8__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21052C73v26Ev,
};
extern void _ZN8S21052C53v13Ev();
extern void _ZN8S21052C53v14Ev();
extern void _ZN8S21052C53v15Ev();
extern void _ZN8S21052C53v16Ev();
extern void _ZN8S21052C53v17Ev();
extern void _ZN8S21052C53v18Ev();
extern void _ZN8S21052C53v19Ev();
extern void _ZN8S21052C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S21052C5__8S21052C8__8S21052C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21052C8[0]),
  (VTBL_ENTRY)&_ZN8S21052C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v15Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v16Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v17Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v18Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v19Ev,
  (VTBL_ENTRY)&_ZN8S21052C53v20Ev,
};
static  VTT_ENTRY vtt_S21052C1[] = {
  {&(_ZTV8S21052C1[8]),  8,145},
  {&(_ZTV8S21052C1[32]),  32,145},
  {&(_ZTV8S21052C1[62]),  62,145},
  {&(_ZTV8S21052C1[92]),  92,145},
  {&(_ZTV8S21052C1[83]),  83,145},
  {&(_ZTV8S21052C1[104]),  104,145},
  {&(_ZTV8S21052C1[120]),  120,145},
  {&(_ZTV8S21052C1[138]),  138,145},
  {&(_tg__ZTV8S21052C2__8S21052C1[7]),  7,14},
  {&(_tg__ZTV8S21052C3__8S21052C2__8S21052C1[23]),  23,39},
  {&(_tg__ZTV8S21052C4__8S21052C2__8S21052C1[5]),  5,8},
  {&(_tg__ZTV8S21052C68S21052C3__8S21052C2__8S21052C1[5]),  5,9},
  {&(_tg__ZTV8S21052C7__8S21052C2__8S21052C1[9]),  9,15},
  {&(_tg__ZTV8S21052C5__A1__8S21052C2__8S21052C1[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C2__8S21052C1[10]),  10,17},
  {&(_tg__ZTV8S21052C3__8S21052C1[6]),  6,22},
  {&(_tg__ZTV8S21052C68S21052C3__8S21052C1[5]),  5,9},
  {&(_tg__ZTV8S21052C7__8S21052C68S21052C3__8S21052C1[9]),  9,15},
  {&(_tg__ZTV8S21052C5__8S21052C68S21052C3__8S21052C1[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C68S21052C3__8S21052C1[10]),  10,17},
  {&(_tg__ZTV8S21052C4__8S21052C3__8S21052C1[5]),  5,8},
  {&(_tg__ZTV8S21052C6__8S21052C3__8S21052C1[5]),  5,9},
  {&(_tg__ZTV8S21052C7__8S21052C3__8S21052C1[9]),  9,15},
  {&(_tg__ZTV8S21052C5__A1__8S21052C3__8S21052C1[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C3__8S21052C1[10]),  10,17},
  {&(_tg__ZTV8S21052C7__8S21052C1[3]),  3,9},
  {&(_tg__ZTV8S21052C5__8S21052C7__8S21052C1[10]),  10,18},
  {&(_tg__ZTV8S21052C8__8S21052C1[4]),  4,11},
  {&(_tg__ZTV8S21052C7__8S21052C8__8S21052C1[9]),  9,15},
  {&(_tg__ZTV8S21052C5__8S21052C8__8S21052C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S21052C1[];
extern  VTBL_ENTRY _ZTV8S21052C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21052C1[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C3D0Ev,_ZTv0_n20_N8S21052C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21052C3D0Ev,_ZThn68_N8S21052C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C3D1Ev,_ZTv0_n20_N8S21052C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21052C3D1Ev,_ZThn68_N8S21052C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D0Ev,_ZTv0_n20_N8S21052C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21052C6D0Ev,_ZThn56_N8S21052C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C6D1Ev,_ZTv0_n20_N8S21052C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21052C6D1Ev,_ZThn56_N8S21052C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C2D0Ev,_ZTv0_n20_N8S21052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21052C2D0Ev,_ZThn76_N8S21052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C2D1Ev,_ZTv0_n20_N8S21052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21052C2D1Ev,_ZThn76_N8S21052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21052C2D0Ev,_ZTv0_n60_N8S21052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21052C2D0Ev,_ZThn8_N8S21052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21052C2D1Ev,_ZTv0_n60_N8S21052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21052C2D1Ev,_ZThn8_N8S21052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C1D0Ev,_ZTv0_n20_N8S21052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21052C1D0Ev,_ZThn84_N8S21052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21052C1D1Ev,_ZTv0_n20_N8S21052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21052C1D1Ev,_ZThn84_N8S21052C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21052C1D0Ev,_ZTv0_n60_N8S21052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21052C1D0Ev,_ZThn16_N8S21052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21052C1D1Ev,_ZTv0_n60_N8S21052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21052C1D1Ev,_ZThn16_N8S21052C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21052C1D0Ev,_ZTv0_n52_N8S21052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21052C1D0Ev,_ZThn8_N8S21052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S21052C1D1Ev,_ZTv0_n52_N8S21052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21052C1D1Ev,_ZThn8_N8S21052C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21052C1 = {  "S21052C1", // class name
  bases_S21052C1, 9,
  &(vtc_S21052C1[0]), // expected_vtbl_contents
  &(vtt_S21052C1[0]), // expected_vtt_contents
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI8S21052C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21052C1),145, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21052C1),30, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2177C4  {
  ::S2382C20_nt s2177c4f0;
  int s2177c4f1[2];
  char s2177c4f2;
  virtual  ~S2177C4(); // _ZN7S2177C4D1Ev
  virtual void  v3(); // _ZN7S2177C42v3Ev
  virtual void  v4(); // _ZN7S2177C42v4Ev
  virtual void  v5(); // _ZN7S2177C42v5Ev
  S2177C4(); // tgen
};
//SIG(-1 S2177C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2177C4 ::~S2177C4(){ note_dtor("S2177C4", this);}
void  S2177C4 ::v3(){vfunc_called(this, "_ZN7S2177C42v3Ev");}
void  S2177C4 ::v4(){vfunc_called(this, "_ZN7S2177C42v4Ev");}
void  S2177C4 ::v5(){vfunc_called(this, "_ZN7S2177C42v5Ev");}
S2177C4 ::S2177C4(){ note_ctor("S2177C4", this);} // tgen

static void Test_S2177C4()
{
  extern Class_Descriptor cd_S2177C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2177C4, buf);
    S2177C4 *dp, &lv = *(dp=new (buf) S2177C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2177C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2177C4)");
    check_field_offset(lv, s2177c4f0, ABISELECT(8,4), "S2177C4.s2177c4f0");
    check_field_offset(lv, s2177c4f1, ABISELECT(24,16), "S2177C4.s2177c4f1");
    check_field_offset(lv, s2177c4f2, ABISELECT(32,24), "S2177C4.s2177c4f2");
    test_class_info(&lv, &cd_S2177C4);
    dp->~S2177C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2177C4(Test_S2177C4, "S2177C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2177C4C1Ev();
extern void _ZN7S2177C4D1Ev();
Name_Map name_map_S2177C4[] = {
  NSPAIR(_ZN7S2177C4C1Ev),
  NSPAIR(_ZN7S2177C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2177C4[];
extern void _ZN7S2177C4D1Ev();
extern void _ZN7S2177C4D0Ev();
extern void _ZN7S2177C42v3Ev();
extern void _ZN7S2177C42v4Ev();
extern void _ZN7S2177C42v5Ev();
static  VTBL_ENTRY vtc_S2177C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2177C4[0]),
  (VTBL_ENTRY)&_ZN7S2177C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2177C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2177C4[];
extern  VTBL_ENTRY _ZTV7S2177C4[];
Class_Descriptor cd_S2177C4 = {  "S2177C4", // class name
  0,0,//no base classes
  &(vtc_S2177C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2177C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2177C4),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  S2177C3_nt  : S2177C4 {
  void *s2177c3f0;
  virtual void  v6(); // _ZN10S2177C3_nt2v6Ev
  virtual void  v7(); // _ZN10S2177C3_nt2v7Ev
  ~S2177C3_nt(); // tgen
  S2177C3_nt(); // tgen
};
//SIG(-1 S2177C3_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2177C3_nt ::v6(){vfunc_called(this, "_ZN10S2177C3_nt2v6Ev");}
void  S2177C3_nt ::v7(){vfunc_called(this, "_ZN10S2177C3_nt2v7Ev");}
S2177C3_nt ::~S2177C3_nt(){ note_dtor("S2177C3_nt", this);} // tgen
S2177C3_nt ::S2177C3_nt(){ note_ctor("S2177C3_nt", this);} // tgen

//skip512 S2177C3_nt

#else // __cplusplus

extern void _ZN10S2177C3_ntC1Ev();
extern void _ZN10S2177C3_ntD1Ev();
Name_Map name_map_S2177C3_nt[] = {
  NSPAIR(_ZN10S2177C3_ntC1Ev),
  NSPAIR(_ZN10S2177C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2177C4;
extern VTBL_ENTRY _ZTI7S2177C4[];
extern  VTBL_ENTRY _ZTV7S2177C4[];
static Base_Class bases_S2177C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2177C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2177C3_nt[];
extern void _ZN10S2177C3_ntD1Ev();
extern void _ZN10S2177C3_ntD0Ev();
extern void _ZN7S2177C42v3Ev();
extern void _ZN7S2177C42v4Ev();
extern void _ZN7S2177C42v5Ev();
extern void _ZN10S2177C3_nt2v6Ev();
extern void _ZN10S2177C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S2177C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2177C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2177C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2177C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v5Ev,
  (VTBL_ENTRY)&_ZN10S2177C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2177C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2177C3_nt[];
VTBL_ENTRY *P__ZTI10S2177C3_nt = _ZTI10S2177C3_nt; 
extern  VTBL_ENTRY _ZTV10S2177C3_nt[];
Class_Descriptor cd_S2177C3_nt = {  "S2177C3_nt", // class name
  bases_S2177C3_nt, 1,
  &(vtc_S2177C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S2177C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2177C3_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  S2177C9_nt  {
  void *s2177c9f0;
  void  mf2177c9(); // _ZN10S2177C9_nt8mf2177c9Ev
};
//SIG(-1 S2177C9_nt) C1{ m Fp}


void  S2177C9_nt ::mf2177c9(){}

//skip512 S2177C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2177C16  {
  void *s2177c16f0;
  void  mf2177c16(); // _ZN8S2177C169mf2177c16Ev
};
//SIG(-1 S2177C16) C1{ m Fp}


void  S2177C16 ::mf2177c16(){}

static void Test_S2177C16()
{
  {
    init_simple_test("S2177C16");
    S2177C16 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2177C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2177C16)");
    check_field_offset(lv, s2177c16f0, 0, "S2177C16.s2177c16f0");
  }
}
static Arrange_To_Call_Me vS2177C16(Test_S2177C16, "S2177C16", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2177C2  : S2177C3_nt {
  void *s2177c2f0;
  int s2177c2f1;
  ::S4247C19_nt s2177c2f2;
  ::S2382C20_nt s2177c2f3;
  void *s2177c2f4;
  int s2177c2f5;
  void *s2177c2f6;
  int s2177c2f7;
  ::S2177C9_nt s2177c2f8;
  ::S2403C17_nt s2177c2f9;
  ::S2382C37 s2177c2f10;
  ::S2382C29_nt s2177c2f11;
  ::S2177C9_nt s2177c2f12;
  ::S2177C16 s2177c2f13;
  virtual  ~S2177C2(); // _ZN7S2177C2D1Ev
  virtual void  v8(); // _ZN7S2177C22v8Ev
  virtual void  v9(); // _ZN7S2177C22v9Ev
  virtual void  v10(); // _ZN7S2177C23v10Ev
  virtual void  v11(); // _ZN7S2177C23v11Ev
  virtual void  v12(); // _ZN7S2177C23v12Ev
  virtual void  v13(); // _ZN7S2177C23v13Ev
  S2177C2(); // tgen
};
//SIG(-1 S2177C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FL[4]} FC10{ m Fp Fi[2] FC7} FC11{ m Fp Fi[2] FC7} FC8 FC12{ m Fp}}


 S2177C2 ::~S2177C2(){ note_dtor("S2177C2", this);}
void  S2177C2 ::v8(){vfunc_called(this, "_ZN7S2177C22v8Ev");}
void  S2177C2 ::v9(){vfunc_called(this, "_ZN7S2177C22v9Ev");}
void  S2177C2 ::v10(){vfunc_called(this, "_ZN7S2177C23v10Ev");}
void  S2177C2 ::v11(){vfunc_called(this, "_ZN7S2177C23v11Ev");}
void  S2177C2 ::v12(){vfunc_called(this, "_ZN7S2177C23v12Ev");}
void  S2177C2 ::v13(){vfunc_called(this, "_ZN7S2177C23v13Ev");}
S2177C2 ::S2177C2(){ note_ctor("S2177C2", this);} // tgen

static void Test_S2177C2()
{
  extern Class_Descriptor cd_S2177C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2177C2, buf);
    S2177C2 *dp, &lv = *(dp=new (buf) S2177C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2177C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2177C2)");
    check_base_class_offset(lv, (S2177C4*)(S2177C3_nt*), 0, "S2177C2");
    check_base_class_offset(lv, (S2177C3_nt*), 0, "S2177C2");
    check_field_offset(lv, s2177c2f0, ABISELECT(48,32), "S2177C2.s2177c2f0");
    check_field_offset(lv, s2177c2f1, ABISELECT(56,36), "S2177C2.s2177c2f1");
    check_field_offset(lv, s2177c2f2, ABISELECT(64,40), "S2177C2.s2177c2f2");
    check_field_offset(lv, s2177c2f3, ABISELECT(88,56), "S2177C2.s2177c2f3");
    check_field_offset(lv, s2177c2f4, ABISELECT(104,68), "S2177C2.s2177c2f4");
    check_field_offset(lv, s2177c2f5, ABISELECT(112,72), "S2177C2.s2177c2f5");
    check_field_offset(lv, s2177c2f6, ABISELECT(120,76), "S2177C2.s2177c2f6");
    check_field_offset(lv, s2177c2f7, ABISELECT(128,80), "S2177C2.s2177c2f7");
    check_field_offset(lv, s2177c2f8, ABISELECT(136,84), "S2177C2.s2177c2f8");
    check_field_offset(lv, s2177c2f9, ABISELECT(144,88), "S2177C2.s2177c2f9");
    check_field_offset(lv, s2177c2f10, ABISELECT(176,120), "S2177C2.s2177c2f10");
    check_field_offset(lv, s2177c2f11, ABISELECT(200,136), "S2177C2.s2177c2f11");
    check_field_offset(lv, s2177c2f12, ABISELECT(224,152), "S2177C2.s2177c2f12");
    check_field_offset(lv, s2177c2f13, ABISELECT(232,156), "S2177C2.s2177c2f13");
    test_class_info(&lv, &cd_S2177C2);
    dp->~S2177C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2177C2(Test_S2177C2, "S2177C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2177C2C1Ev();
extern void _ZN7S2177C2D1Ev();
Name_Map name_map_S2177C2[] = {
  NSPAIR(_ZN7S2177C2C1Ev),
  NSPAIR(_ZN7S2177C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2177C4;
extern VTBL_ENTRY _ZTI7S2177C4[];
extern  VTBL_ENTRY _ZTV7S2177C4[];
extern Class_Descriptor cd_S2177C3_nt;
extern VTBL_ENTRY _ZTI10S2177C3_nt[];
extern  VTBL_ENTRY _ZTV10S2177C3_nt[];
static Base_Class bases_S2177C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2177C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2177C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2177C2[];
extern void _ZN7S2177C2D1Ev();
extern void _ZN7S2177C2D0Ev();
extern void _ZN7S2177C42v3Ev();
extern void _ZN7S2177C42v4Ev();
extern void _ZN7S2177C42v5Ev();
extern void _ZN10S2177C3_nt2v6Ev();
extern void _ZN10S2177C3_nt2v7Ev();
extern void _ZN7S2177C22v8Ev();
extern void _ZN7S2177C22v9Ev();
extern void _ZN7S2177C23v10Ev();
extern void _ZN7S2177C23v11Ev();
extern void _ZN7S2177C23v12Ev();
extern void _ZN7S2177C23v13Ev();
static  VTBL_ENTRY vtc_S2177C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2177C2[0]),
  (VTBL_ENTRY)&_ZN7S2177C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2177C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v5Ev,
  (VTBL_ENTRY)&_ZN10S2177C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2177C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S2177C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2177C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2177C2[];
extern  VTBL_ENTRY _ZTV7S2177C2[];
Class_Descriptor cd_S2177C2 = {  "S2177C2", // class name
  bases_S2177C2, 2,
  &(vtc_S2177C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2177C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2177C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2177C1  : S2177C2 {
  int s2177c1f0;
  virtual  ~S2177C1(); // _ZN7S2177C1D1Ev
  virtual void  v1(); // _ZN7S2177C12v1Ev
  virtual void  v2(); // _ZN7S2177C12v2Ev
  S2177C1(); // tgen
};
//SIG(1 S2177C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FL[4]} FC11{ m Fp Fi[2] FC8} FC12{ m Fp Fi[2] FC8} FC9 FC13{ m Fp}} vd v1 v2 Fi}


 S2177C1 ::~S2177C1(){ note_dtor("S2177C1", this);}
void  S2177C1 ::v1(){vfunc_called(this, "_ZN7S2177C12v1Ev");}
void  S2177C1 ::v2(){vfunc_called(this, "_ZN7S2177C12v2Ev");}
S2177C1 ::S2177C1(){ note_ctor("S2177C1", this);} // tgen

static void Test_S2177C1()
{
  extern Class_Descriptor cd_S2177C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S2177C1, buf);
    S2177C1 *dp, &lv = *(dp=new (buf) S2177C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S2177C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2177C1)");
    check_base_class_offset(lv, (S2177C4*)(S2177C3_nt*)(S2177C2*), 0, "S2177C1");
    check_base_class_offset(lv, (S2177C3_nt*)(S2177C2*), 0, "S2177C1");
    check_base_class_offset(lv, (S2177C2*), 0, "S2177C1");
    check_field_offset(lv, s2177c1f0, ABISELECT(240,160), "S2177C1.s2177c1f0");
    test_class_info(&lv, &cd_S2177C1);
    dp->~S2177C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2177C1(Test_S2177C1, "S2177C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S2177C1C1Ev();
extern void _ZN7S2177C1D1Ev();
Name_Map name_map_S2177C1[] = {
  NSPAIR(_ZN7S2177C1C1Ev),
  NSPAIR(_ZN7S2177C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2177C4;
extern VTBL_ENTRY _ZTI7S2177C4[];
extern  VTBL_ENTRY _ZTV7S2177C4[];
extern Class_Descriptor cd_S2177C3_nt;
extern VTBL_ENTRY _ZTI10S2177C3_nt[];
extern  VTBL_ENTRY _ZTV10S2177C3_nt[];
extern Class_Descriptor cd_S2177C2;
extern VTBL_ENTRY _ZTI7S2177C2[];
extern  VTBL_ENTRY _ZTV7S2177C2[];
static Base_Class bases_S2177C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2177C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2177C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2177C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2177C1[];
extern void _ZN7S2177C1D1Ev();
extern void _ZN7S2177C1D0Ev();
extern void _ZN7S2177C42v3Ev();
extern void _ZN7S2177C42v4Ev();
extern void _ZN7S2177C42v5Ev();
extern void _ZN10S2177C3_nt2v6Ev();
extern void _ZN10S2177C3_nt2v7Ev();
extern void _ZN7S2177C22v8Ev();
extern void _ZN7S2177C22v9Ev();
extern void _ZN7S2177C23v10Ev();
extern void _ZN7S2177C23v11Ev();
extern void _ZN7S2177C23v12Ev();
extern void _ZN7S2177C23v13Ev();
extern void _ZN7S2177C12v1Ev();
extern void _ZN7S2177C12v2Ev();
static  VTBL_ENTRY vtc_S2177C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2177C1[0]),
  (VTBL_ENTRY)&_ZN7S2177C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2177C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2177C42v5Ev,
  (VTBL_ENTRY)&_ZN10S2177C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2177C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S2177C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2177C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2177C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2177C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2177C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2177C1[];
extern  VTBL_ENTRY _ZTV7S2177C1[];
Class_Descriptor cd_S2177C1 = {  "S2177C1", // class name
  bases_S2177C1, 3,
  &(vtc_S2177C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S2177C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2177C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2176C4  {
  ::S2382C20_nt s2176c4f0;
  int s2176c4f1[2];
  char s2176c4f2;
  virtual  ~S2176C4(); // _ZN7S2176C4D1Ev
  virtual void  v3(); // _ZN7S2176C42v3Ev
  virtual void  v4(); // _ZN7S2176C42v4Ev
  virtual void  v5(); // _ZN7S2176C42v5Ev
  S2176C4(); // tgen
};
//SIG(-1 S2176C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2176C4 ::~S2176C4(){ note_dtor("S2176C4", this);}
void  S2176C4 ::v3(){vfunc_called(this, "_ZN7S2176C42v3Ev");}
void  S2176C4 ::v4(){vfunc_called(this, "_ZN7S2176C42v4Ev");}
void  S2176C4 ::v5(){vfunc_called(this, "_ZN7S2176C42v5Ev");}
S2176C4 ::S2176C4(){ note_ctor("S2176C4", this);} // tgen

static void Test_S2176C4()
{
  extern Class_Descriptor cd_S2176C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2176C4, buf);
    S2176C4 *dp, &lv = *(dp=new (buf) S2176C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2176C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2176C4)");
    check_field_offset(lv, s2176c4f0, ABISELECT(8,4), "S2176C4.s2176c4f0");
    check_field_offset(lv, s2176c4f1, ABISELECT(24,16), "S2176C4.s2176c4f1");
    check_field_offset(lv, s2176c4f2, ABISELECT(32,24), "S2176C4.s2176c4f2");
    test_class_info(&lv, &cd_S2176C4);
    dp->~S2176C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2176C4(Test_S2176C4, "S2176C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2176C4C1Ev();
extern void _ZN7S2176C4D1Ev();
Name_Map name_map_S2176C4[] = {
  NSPAIR(_ZN7S2176C4C1Ev),
  NSPAIR(_ZN7S2176C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2176C4[];
extern void _ZN7S2176C4D1Ev();
extern void _ZN7S2176C4D0Ev();
extern void _ZN7S2176C42v3Ev();
extern void _ZN7S2176C42v4Ev();
extern void _ZN7S2176C42v5Ev();
static  VTBL_ENTRY vtc_S2176C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2176C4[0]),
  (VTBL_ENTRY)&_ZN7S2176C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2176C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2176C4[];
extern  VTBL_ENTRY _ZTV7S2176C4[];
Class_Descriptor cd_S2176C4 = {  "S2176C4", // class name
  0,0,//no base classes
  &(vtc_S2176C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2176C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2176C4),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  S2176C3  : S2176C4 {
  void *s2176c3f0;
  virtual void  v6(); // _ZN7S2176C32v6Ev
  virtual void  v7(); // _ZN7S2176C32v7Ev
  ~S2176C3(); // tgen
  S2176C3(); // tgen
};
//SIG(-1 S2176C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2176C3 ::v6(){vfunc_called(this, "_ZN7S2176C32v6Ev");}
void  S2176C3 ::v7(){vfunc_called(this, "_ZN7S2176C32v7Ev");}
S2176C3 ::~S2176C3(){ note_dtor("S2176C3", this);} // tgen
S2176C3 ::S2176C3(){ note_ctor("S2176C3", this);} // tgen

static void Test_S2176C3()
{
  extern Class_Descriptor cd_S2176C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2176C3, buf);
    S2176C3 *dp, &lv = *(dp=new (buf) S2176C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2176C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2176C3)");
    check_base_class_offset(lv, (S2176C4*), 0, "S2176C3");
    check_field_offset(lv, s2176c3f0, ABISELECT(40,28), "S2176C3.s2176c3f0");
    test_class_info(&lv, &cd_S2176C3);
    dp->~S2176C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2176C3(Test_S2176C3, "S2176C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2176C3C1Ev();
extern void _ZN7S2176C3D1Ev();
Name_Map name_map_S2176C3[] = {
  NSPAIR(_ZN7S2176C3C1Ev),
  NSPAIR(_ZN7S2176C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2176C4;
extern VTBL_ENTRY _ZTI7S2176C4[];
extern  VTBL_ENTRY _ZTV7S2176C4[];
static Base_Class bases_S2176C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2176C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2176C3[];
extern void _ZN7S2176C3D1Ev();
extern void _ZN7S2176C3D0Ev();
extern void _ZN7S2176C42v3Ev();
extern void _ZN7S2176C42v4Ev();
extern void _ZN7S2176C42v5Ev();
extern void _ZN7S2176C32v6Ev();
extern void _ZN7S2176C32v7Ev();
static  VTBL_ENTRY vtc_S2176C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2176C3[0]),
  (VTBL_ENTRY)&_ZN7S2176C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2176C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2176C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2176C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2176C3[];
extern  VTBL_ENTRY _ZTV7S2176C3[];
Class_Descriptor cd_S2176C3 = {  "S2176C3", // class name
  bases_S2176C3, 1,
  &(vtc_S2176C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2176C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2176C3),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  S2176C16  {
  void *s2176c16f0;
  void  mf2176c16(); // _ZN8S2176C169mf2176c16Ev
};
//SIG(-1 S2176C16) C1{ m Fp}


void  S2176C16 ::mf2176c16(){}

static void Test_S2176C16()
{
  {
    init_simple_test("S2176C16");
    S2176C16 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2176C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2176C16)");
    check_field_offset(lv, s2176c16f0, 0, "S2176C16.s2176c16f0");
  }
}
static Arrange_To_Call_Me vS2176C16(Test_S2176C16, "S2176C16", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2176C2  : S2176C3 {
  void *s2176c2f0;
  int s2176c2f1;
  ::S4247C19_nt s2176c2f2;
  ::S2382C20_nt s2176c2f3;
  void *s2176c2f4;
  int s2176c2f5;
  void *s2176c2f6;
  int s2176c2f7;
  ::S2177C16 s2176c2f8;
  ::S2403C17_nt s2176c2f9;
  ::S2382C37 s2176c2f10;
  ::S2382C29_nt s2176c2f11;
  ::S2177C9_nt s2176c2f12;
  ::S2176C16 s2176c2f13;
  virtual  ~S2176C2(); // _ZN7S2176C2D1Ev
  virtual void  v8(); // _ZN7S2176C22v8Ev
  virtual void  v9(); // _ZN7S2176C22v9Ev
  virtual void  v10(); // _ZN7S2176C23v10Ev
  virtual void  v11(); // _ZN7S2176C23v11Ev
  virtual void  v12(); // _ZN7S2176C23v12Ev
  virtual void  v13(); // _ZN7S2176C23v13Ev
  S2176C2(); // tgen
};
//SIG(-1 S2176C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FL[4]} FC10{ m Fp Fi[2] FC7} FC11{ m Fp Fi[2] FC7} FC12{ m Fp} FC13{ m Fp}}


 S2176C2 ::~S2176C2(){ note_dtor("S2176C2", this);}
void  S2176C2 ::v8(){vfunc_called(this, "_ZN7S2176C22v8Ev");}
void  S2176C2 ::v9(){vfunc_called(this, "_ZN7S2176C22v9Ev");}
void  S2176C2 ::v10(){vfunc_called(this, "_ZN7S2176C23v10Ev");}
void  S2176C2 ::v11(){vfunc_called(this, "_ZN7S2176C23v11Ev");}
void  S2176C2 ::v12(){vfunc_called(this, "_ZN7S2176C23v12Ev");}
void  S2176C2 ::v13(){vfunc_called(this, "_ZN7S2176C23v13Ev");}
S2176C2 ::S2176C2(){ note_ctor("S2176C2", this);} // tgen

static void Test_S2176C2()
{
  extern Class_Descriptor cd_S2176C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2176C2, buf);
    S2176C2 *dp, &lv = *(dp=new (buf) S2176C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2176C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2176C2)");
    check_base_class_offset(lv, (S2176C4*)(S2176C3*), 0, "S2176C2");
    check_base_class_offset(lv, (S2176C3*), 0, "S2176C2");
    check_field_offset(lv, s2176c2f0, ABISELECT(48,32), "S2176C2.s2176c2f0");
    check_field_offset(lv, s2176c2f1, ABISELECT(56,36), "S2176C2.s2176c2f1");
    check_field_offset(lv, s2176c2f2, ABISELECT(64,40), "S2176C2.s2176c2f2");
    check_field_offset(lv, s2176c2f3, ABISELECT(88,56), "S2176C2.s2176c2f3");
    check_field_offset(lv, s2176c2f4, ABISELECT(104,68), "S2176C2.s2176c2f4");
    check_field_offset(lv, s2176c2f5, ABISELECT(112,72), "S2176C2.s2176c2f5");
    check_field_offset(lv, s2176c2f6, ABISELECT(120,76), "S2176C2.s2176c2f6");
    check_field_offset(lv, s2176c2f7, ABISELECT(128,80), "S2176C2.s2176c2f7");
    check_field_offset(lv, s2176c2f8, ABISELECT(136,84), "S2176C2.s2176c2f8");
    check_field_offset(lv, s2176c2f9, ABISELECT(144,88), "S2176C2.s2176c2f9");
    check_field_offset(lv, s2176c2f10, ABISELECT(176,120), "S2176C2.s2176c2f10");
    check_field_offset(lv, s2176c2f11, ABISELECT(200,136), "S2176C2.s2176c2f11");
    check_field_offset(lv, s2176c2f12, ABISELECT(224,152), "S2176C2.s2176c2f12");
    check_field_offset(lv, s2176c2f13, ABISELECT(232,156), "S2176C2.s2176c2f13");
    test_class_info(&lv, &cd_S2176C2);
    dp->~S2176C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2176C2(Test_S2176C2, "S2176C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2176C2C1Ev();
extern void _ZN7S2176C2D1Ev();
Name_Map name_map_S2176C2[] = {
  NSPAIR(_ZN7S2176C2C1Ev),
  NSPAIR(_ZN7S2176C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2176C4;
extern VTBL_ENTRY _ZTI7S2176C4[];
extern  VTBL_ENTRY _ZTV7S2176C4[];
extern Class_Descriptor cd_S2176C3;
extern VTBL_ENTRY _ZTI7S2176C3[];
extern  VTBL_ENTRY _ZTV7S2176C3[];
static Base_Class bases_S2176C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2176C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2176C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2176C2[];
extern void _ZN7S2176C2D1Ev();
extern void _ZN7S2176C2D0Ev();
extern void _ZN7S2176C42v3Ev();
extern void _ZN7S2176C42v4Ev();
extern void _ZN7S2176C42v5Ev();
extern void _ZN7S2176C32v6Ev();
extern void _ZN7S2176C32v7Ev();
extern void _ZN7S2176C22v8Ev();
extern void _ZN7S2176C22v9Ev();
extern void _ZN7S2176C23v10Ev();
extern void _ZN7S2176C23v11Ev();
extern void _ZN7S2176C23v12Ev();
extern void _ZN7S2176C23v13Ev();
static  VTBL_ENTRY vtc_S2176C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2176C2[0]),
  (VTBL_ENTRY)&_ZN7S2176C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2176C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2176C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2176C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2176C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2176C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2176C2[];
extern  VTBL_ENTRY _ZTV7S2176C2[];
Class_Descriptor cd_S2176C2 = {  "S2176C2", // class name
  bases_S2176C2, 2,
  &(vtc_S2176C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2176C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2176C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2176C1  : S2176C2 {
  char s2176c1f0;
  virtual  ~S2176C1(); // _ZN7S2176C1D1Ev
  virtual void  v1(); // _ZN7S2176C12v1Ev
  virtual void  v2(); // _ZN7S2176C12v2Ev
  S2176C1(); // tgen
};
//SIG(1 S2176C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FL[4]} FC11{ m Fp Fi[2] FC8} FC12{ m Fp Fi[2] FC8} FC13{ m Fp} FC14{ m Fp}} vd v1 v2 Fc}


 S2176C1 ::~S2176C1(){ note_dtor("S2176C1", this);}
void  S2176C1 ::v1(){vfunc_called(this, "_ZN7S2176C12v1Ev");}
void  S2176C1 ::v2(){vfunc_called(this, "_ZN7S2176C12v2Ev");}
S2176C1 ::S2176C1(){ note_ctor("S2176C1", this);} // tgen

static void Test_S2176C1()
{
  extern Class_Descriptor cd_S2176C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S2176C1, buf);
    S2176C1 *dp, &lv = *(dp=new (buf) S2176C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S2176C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2176C1)");
    check_base_class_offset(lv, (S2176C4*)(S2176C3*)(S2176C2*), 0, "S2176C1");
    check_base_class_offset(lv, (S2176C3*)(S2176C2*), 0, "S2176C1");
    check_base_class_offset(lv, (S2176C2*), 0, "S2176C1");
    check_field_offset(lv, s2176c1f0, ABISELECT(240,160), "S2176C1.s2176c1f0");
    test_class_info(&lv, &cd_S2176C1);
    dp->~S2176C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2176C1(Test_S2176C1, "S2176C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S2176C1C1Ev();
extern void _ZN7S2176C1D1Ev();
Name_Map name_map_S2176C1[] = {
  NSPAIR(_ZN7S2176C1C1Ev),
  NSPAIR(_ZN7S2176C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2176C4;
extern VTBL_ENTRY _ZTI7S2176C4[];
extern  VTBL_ENTRY _ZTV7S2176C4[];
extern Class_Descriptor cd_S2176C3;
extern VTBL_ENTRY _ZTI7S2176C3[];
extern  VTBL_ENTRY _ZTV7S2176C3[];
extern Class_Descriptor cd_S2176C2;
extern VTBL_ENTRY _ZTI7S2176C2[];
extern  VTBL_ENTRY _ZTV7S2176C2[];
static Base_Class bases_S2176C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2176C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2176C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2176C1[];
extern void _ZN7S2176C1D1Ev();
extern void _ZN7S2176C1D0Ev();
extern void _ZN7S2176C42v3Ev();
extern void _ZN7S2176C42v4Ev();
extern void _ZN7S2176C42v5Ev();
extern void _ZN7S2176C32v6Ev();
extern void _ZN7S2176C32v7Ev();
extern void _ZN7S2176C22v8Ev();
extern void _ZN7S2176C22v9Ev();
extern void _ZN7S2176C23v10Ev();
extern void _ZN7S2176C23v11Ev();
extern void _ZN7S2176C23v12Ev();
extern void _ZN7S2176C23v13Ev();
extern void _ZN7S2176C12v1Ev();
extern void _ZN7S2176C12v2Ev();
static  VTBL_ENTRY vtc_S2176C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2176C1[0]),
  (VTBL_ENTRY)&_ZN7S2176C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2176C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2176C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2176C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2176C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2176C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2176C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2176C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2176C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2176C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2176C1[];
extern  VTBL_ENTRY _ZTV7S2176C1[];
Class_Descriptor cd_S2176C1 = {  "S2176C1", // class name
  bases_S2176C1, 3,
  &(vtc_S2176C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S2176C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2176C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2178C4  {
  ::S2382C20_nt s2178c4f0;
  int s2178c4f1[2];
  char s2178c4f2;
  virtual  ~S2178C4(); // _ZN7S2178C4D1Ev
  virtual void  v3(); // _ZN7S2178C42v3Ev
  virtual void  v4(); // _ZN7S2178C42v4Ev
  virtual void  v5(); // _ZN7S2178C42v5Ev
  S2178C4(); // tgen
};
//SIG(-1 S2178C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2178C4 ::~S2178C4(){ note_dtor("S2178C4", this);}
void  S2178C4 ::v3(){vfunc_called(this, "_ZN7S2178C42v3Ev");}
void  S2178C4 ::v4(){vfunc_called(this, "_ZN7S2178C42v4Ev");}
void  S2178C4 ::v5(){vfunc_called(this, "_ZN7S2178C42v5Ev");}
S2178C4 ::S2178C4(){ note_ctor("S2178C4", this);} // tgen

static void Test_S2178C4()
{
  extern Class_Descriptor cd_S2178C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2178C4, buf);
    S2178C4 *dp, &lv = *(dp=new (buf) S2178C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2178C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2178C4)");
    check_field_offset(lv, s2178c4f0, ABISELECT(8,4), "S2178C4.s2178c4f0");
    check_field_offset(lv, s2178c4f1, ABISELECT(24,16), "S2178C4.s2178c4f1");
    check_field_offset(lv, s2178c4f2, ABISELECT(32,24), "S2178C4.s2178c4f2");
    test_class_info(&lv, &cd_S2178C4);
    dp->~S2178C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2178C4(Test_S2178C4, "S2178C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2178C4C1Ev();
extern void _ZN7S2178C4D1Ev();
Name_Map name_map_S2178C4[] = {
  NSPAIR(_ZN7S2178C4C1Ev),
  NSPAIR(_ZN7S2178C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2178C4[];
extern void _ZN7S2178C4D1Ev();
extern void _ZN7S2178C4D0Ev();
extern void _ZN7S2178C42v3Ev();
extern void _ZN7S2178C42v4Ev();
extern void _ZN7S2178C42v5Ev();
static  VTBL_ENTRY vtc_S2178C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2178C4[0]),
  (VTBL_ENTRY)&_ZN7S2178C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2178C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2178C4[];
extern  VTBL_ENTRY _ZTV7S2178C4[];
Class_Descriptor cd_S2178C4 = {  "S2178C4", // class name
  0,0,//no base classes
  &(vtc_S2178C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2178C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2178C4),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  S2178C3  : S2178C4 {
  void *s2178c3f0;
  virtual void  v6(); // _ZN7S2178C32v6Ev
  virtual void  v7(); // _ZN7S2178C32v7Ev
  ~S2178C3(); // tgen
  S2178C3(); // tgen
};
//SIG(-1 S2178C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2178C3 ::v6(){vfunc_called(this, "_ZN7S2178C32v6Ev");}
void  S2178C3 ::v7(){vfunc_called(this, "_ZN7S2178C32v7Ev");}
S2178C3 ::~S2178C3(){ note_dtor("S2178C3", this);} // tgen
S2178C3 ::S2178C3(){ note_ctor("S2178C3", this);} // tgen

static void Test_S2178C3()
{
  extern Class_Descriptor cd_S2178C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2178C3, buf);
    S2178C3 *dp, &lv = *(dp=new (buf) S2178C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2178C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2178C3)");
    check_base_class_offset(lv, (S2178C4*), 0, "S2178C3");
    check_field_offset(lv, s2178c3f0, ABISELECT(40,28), "S2178C3.s2178c3f0");
    test_class_info(&lv, &cd_S2178C3);
    dp->~S2178C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2178C3(Test_S2178C3, "S2178C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2178C3C1Ev();
extern void _ZN7S2178C3D1Ev();
Name_Map name_map_S2178C3[] = {
  NSPAIR(_ZN7S2178C3C1Ev),
  NSPAIR(_ZN7S2178C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2178C4;
extern VTBL_ENTRY _ZTI7S2178C4[];
extern  VTBL_ENTRY _ZTV7S2178C4[];
static Base_Class bases_S2178C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2178C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2178C3[];
extern void _ZN7S2178C3D1Ev();
extern void _ZN7S2178C3D0Ev();
extern void _ZN7S2178C42v3Ev();
extern void _ZN7S2178C42v4Ev();
extern void _ZN7S2178C42v5Ev();
extern void _ZN7S2178C32v6Ev();
extern void _ZN7S2178C32v7Ev();
static  VTBL_ENTRY vtc_S2178C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2178C3[0]),
  (VTBL_ENTRY)&_ZN7S2178C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2178C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2178C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2178C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2178C3[];
extern  VTBL_ENTRY _ZTV7S2178C3[];
Class_Descriptor cd_S2178C3 = {  "S2178C3", // class name
  bases_S2178C3, 1,
  &(vtc_S2178C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2178C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2178C3),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  S2178C2  : S2178C3 {
  void *s2178c2f0;
  int s2178c2f1;
  ::S4247C19_nt s2178c2f2;
  ::S2382C20_nt s2178c2f3;
  void *s2178c2f4;
  int s2178c2f5;
  void *s2178c2f6;
  int s2178c2f7;
  ::S2177C16 s2178c2f8;
  ::S2403C17_nt s2178c2f9;
  ::S2382C37 s2178c2f10;
  ::S2382C29_nt s2178c2f11;
  ::S2177C9_nt s2178c2f12;
  ::S2176C16 s2178c2f13;
  virtual  ~S2178C2(); // _ZN7S2178C2D1Ev
  virtual void  v8(); // _ZN7S2178C22v8Ev
  virtual void  v9(); // _ZN7S2178C22v9Ev
  virtual void  v10(); // _ZN7S2178C23v10Ev
  virtual void  v11(); // _ZN7S2178C23v11Ev
  virtual void  v12(); // _ZN7S2178C23v12Ev
  virtual void  v13(); // _ZN7S2178C23v13Ev
  S2178C2(); // tgen
};
//SIG(-1 S2178C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FL[4]} FC10{ m Fp Fi[2] FC7} FC11{ m Fp Fi[2] FC7} FC12{ m Fp} FC13{ m Fp}}


 S2178C2 ::~S2178C2(){ note_dtor("S2178C2", this);}
void  S2178C2 ::v8(){vfunc_called(this, "_ZN7S2178C22v8Ev");}
void  S2178C2 ::v9(){vfunc_called(this, "_ZN7S2178C22v9Ev");}
void  S2178C2 ::v10(){vfunc_called(this, "_ZN7S2178C23v10Ev");}
void  S2178C2 ::v11(){vfunc_called(this, "_ZN7S2178C23v11Ev");}
void  S2178C2 ::v12(){vfunc_called(this, "_ZN7S2178C23v12Ev");}
void  S2178C2 ::v13(){vfunc_called(this, "_ZN7S2178C23v13Ev");}
S2178C2 ::S2178C2(){ note_ctor("S2178C2", this);} // tgen

static void Test_S2178C2()
{
  extern Class_Descriptor cd_S2178C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2178C2, buf);
    S2178C2 *dp, &lv = *(dp=new (buf) S2178C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2178C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2178C2)");
    check_base_class_offset(lv, (S2178C4*)(S2178C3*), 0, "S2178C2");
    check_base_class_offset(lv, (S2178C3*), 0, "S2178C2");
    check_field_offset(lv, s2178c2f0, ABISELECT(48,32), "S2178C2.s2178c2f0");
    check_field_offset(lv, s2178c2f1, ABISELECT(56,36), "S2178C2.s2178c2f1");
    check_field_offset(lv, s2178c2f2, ABISELECT(64,40), "S2178C2.s2178c2f2");
    check_field_offset(lv, s2178c2f3, ABISELECT(88,56), "S2178C2.s2178c2f3");
    check_field_offset(lv, s2178c2f4, ABISELECT(104,68), "S2178C2.s2178c2f4");
    check_field_offset(lv, s2178c2f5, ABISELECT(112,72), "S2178C2.s2178c2f5");
    check_field_offset(lv, s2178c2f6, ABISELECT(120,76), "S2178C2.s2178c2f6");
    check_field_offset(lv, s2178c2f7, ABISELECT(128,80), "S2178C2.s2178c2f7");
    check_field_offset(lv, s2178c2f8, ABISELECT(136,84), "S2178C2.s2178c2f8");
    check_field_offset(lv, s2178c2f9, ABISELECT(144,88), "S2178C2.s2178c2f9");
    check_field_offset(lv, s2178c2f10, ABISELECT(176,120), "S2178C2.s2178c2f10");
    check_field_offset(lv, s2178c2f11, ABISELECT(200,136), "S2178C2.s2178c2f11");
    check_field_offset(lv, s2178c2f12, ABISELECT(224,152), "S2178C2.s2178c2f12");
    check_field_offset(lv, s2178c2f13, ABISELECT(232,156), "S2178C2.s2178c2f13");
    test_class_info(&lv, &cd_S2178C2);
    dp->~S2178C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2178C2(Test_S2178C2, "S2178C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2178C2C1Ev();
extern void _ZN7S2178C2D1Ev();
Name_Map name_map_S2178C2[] = {
  NSPAIR(_ZN7S2178C2C1Ev),
  NSPAIR(_ZN7S2178C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2178C4;
extern VTBL_ENTRY _ZTI7S2178C4[];
extern  VTBL_ENTRY _ZTV7S2178C4[];
extern Class_Descriptor cd_S2178C3;
extern VTBL_ENTRY _ZTI7S2178C3[];
extern  VTBL_ENTRY _ZTV7S2178C3[];
static Base_Class bases_S2178C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2178C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2178C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2178C2[];
extern void _ZN7S2178C2D1Ev();
extern void _ZN7S2178C2D0Ev();
extern void _ZN7S2178C42v3Ev();
extern void _ZN7S2178C42v4Ev();
extern void _ZN7S2178C42v5Ev();
extern void _ZN7S2178C32v6Ev();
extern void _ZN7S2178C32v7Ev();
extern void _ZN7S2178C22v8Ev();
extern void _ZN7S2178C22v9Ev();
extern void _ZN7S2178C23v10Ev();
extern void _ZN7S2178C23v11Ev();
extern void _ZN7S2178C23v12Ev();
extern void _ZN7S2178C23v13Ev();
static  VTBL_ENTRY vtc_S2178C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2178C2[0]),
  (VTBL_ENTRY)&_ZN7S2178C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2178C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2178C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2178C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2178C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2178C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2178C2[];
extern  VTBL_ENTRY _ZTV7S2178C2[];
Class_Descriptor cd_S2178C2 = {  "S2178C2", // class name
  bases_S2178C2, 2,
  &(vtc_S2178C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2178C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2178C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2178C1  : S2178C2 {
  virtual  ~S2178C1(); // _ZN7S2178C1D1Ev
  virtual void  v1(); // _ZN7S2178C12v1Ev
  virtual void  v2(); // _ZN7S2178C12v2Ev
  S2178C1(); // tgen
};
//SIG(1 S2178C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FL[4]} FC11{ m Fp Fi[2] FC8} FC12{ m Fp Fi[2] FC8} FC13{ m Fp} FC14{ m Fp}} vd v1 v2}


 S2178C1 ::~S2178C1(){ note_dtor("S2178C1", this);}
void  S2178C1 ::v1(){vfunc_called(this, "_ZN7S2178C12v1Ev");}
void  S2178C1 ::v2(){vfunc_called(this, "_ZN7S2178C12v2Ev");}
S2178C1 ::S2178C1(){ note_ctor("S2178C1", this);} // tgen

static void Test_S2178C1()
{
  extern Class_Descriptor cd_S2178C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2178C1, buf);
    S2178C1 *dp, &lv = *(dp=new (buf) S2178C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2178C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2178C1)");
    check_base_class_offset(lv, (S2178C4*)(S2178C3*)(S2178C2*), 0, "S2178C1");
    check_base_class_offset(lv, (S2178C3*)(S2178C2*), 0, "S2178C1");
    check_base_class_offset(lv, (S2178C2*), 0, "S2178C1");
    test_class_info(&lv, &cd_S2178C1);
    dp->~S2178C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2178C1(Test_S2178C1, "S2178C1", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2178C1C1Ev();
extern void _ZN7S2178C1D1Ev();
Name_Map name_map_S2178C1[] = {
  NSPAIR(_ZN7S2178C1C1Ev),
  NSPAIR(_ZN7S2178C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2178C4;
extern VTBL_ENTRY _ZTI7S2178C4[];
extern  VTBL_ENTRY _ZTV7S2178C4[];
extern Class_Descriptor cd_S2178C3;
extern VTBL_ENTRY _ZTI7S2178C3[];
extern  VTBL_ENTRY _ZTV7S2178C3[];
extern Class_Descriptor cd_S2178C2;
extern VTBL_ENTRY _ZTI7S2178C2[];
extern  VTBL_ENTRY _ZTV7S2178C2[];
static Base_Class bases_S2178C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2178C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2178C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2178C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2178C1[];
extern void _ZN7S2178C1D1Ev();
extern void _ZN7S2178C1D0Ev();
extern void _ZN7S2178C42v3Ev();
extern void _ZN7S2178C42v4Ev();
extern void _ZN7S2178C42v5Ev();
extern void _ZN7S2178C32v6Ev();
extern void _ZN7S2178C32v7Ev();
extern void _ZN7S2178C22v8Ev();
extern void _ZN7S2178C22v9Ev();
extern void _ZN7S2178C23v10Ev();
extern void _ZN7S2178C23v11Ev();
extern void _ZN7S2178C23v12Ev();
extern void _ZN7S2178C23v13Ev();
extern void _ZN7S2178C12v1Ev();
extern void _ZN7S2178C12v2Ev();
static  VTBL_ENTRY vtc_S2178C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2178C1[0]),
  (VTBL_ENTRY)&_ZN7S2178C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2178C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2178C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2178C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2178C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2178C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2178C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2178C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2178C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2178C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2178C1[];
extern  VTBL_ENTRY _ZTV7S2178C1[];
Class_Descriptor cd_S2178C1 = {  "S2178C1", // class name
  bases_S2178C1, 3,
  &(vtc_S2178C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2178C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2178C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6560C2  {
  ::S7817C7 s6560c2f0;
  __tsi64 s6560c2f1;
  virtual void  v2(); // _ZN7S6560C22v2Ev
  virtual void  v3(); // _ZN7S6560C22v3Ev
  virtual void  v4(); // _ZN7S6560C22v4Ev
  virtual void  v5(); // _ZN7S6560C22v5Ev
  virtual void  v6(); // _ZN7S6560C22v6Ev
  virtual void  v7(); // _ZN7S6560C22v7Ev
  ~S6560C2(); // tgen
  S6560C2(); // tgen
};
//SIG(-1 S6560C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} FL}


void  S6560C2 ::v2(){vfunc_called(this, "_ZN7S6560C22v2Ev");}
void  S6560C2 ::v3(){vfunc_called(this, "_ZN7S6560C22v3Ev");}
void  S6560C2 ::v4(){vfunc_called(this, "_ZN7S6560C22v4Ev");}
void  S6560C2 ::v5(){vfunc_called(this, "_ZN7S6560C22v5Ev");}
void  S6560C2 ::v6(){vfunc_called(this, "_ZN7S6560C22v6Ev");}
void  S6560C2 ::v7(){vfunc_called(this, "_ZN7S6560C22v7Ev");}
S6560C2 ::~S6560C2(){ note_dtor("S6560C2", this);} // tgen
S6560C2 ::S6560C2(){ note_ctor("S6560C2", this);} // tgen

static void Test_S6560C2()
{
  extern Class_Descriptor cd_S6560C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,30)];
    init_test(&cd_S6560C2, buf);
    S6560C2 *dp, &lv = *(dp=new (buf) S6560C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S6560C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6560C2)");
    check_field_offset(lv, s6560c2f0, ABISELECT(8,4), "S6560C2.s6560c2f0");
    check_field_offset(lv, s6560c2f1, ABISELECT(152,108), "S6560C2.s6560c2f1");
    test_class_info(&lv, &cd_S6560C2);
    dp->~S6560C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6560C2(Test_S6560C2, "S6560C2", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN7S6560C2C1Ev();
extern void _ZN7S6560C2D1Ev();
Name_Map name_map_S6560C2[] = {
  NSPAIR(_ZN7S6560C2C1Ev),
  NSPAIR(_ZN7S6560C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6560C2[];
extern void _ZN7S6560C22v2Ev();
extern void _ZN7S6560C22v3Ev();
extern void _ZN7S6560C22v4Ev();
extern void _ZN7S6560C22v5Ev();
extern void _ZN7S6560C22v6Ev();
extern void _ZN7S6560C22v7Ev();
static  VTBL_ENTRY vtc_S6560C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6560C2[0]),
  (VTBL_ENTRY)&_ZN7S6560C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S6560C2[];
extern  VTBL_ENTRY _ZTV7S6560C2[];
Class_Descriptor cd_S6560C2 = {  "S6560C2", // class name
  0,0,//no base classes
  &(vtc_S6560C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI7S6560C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6560C2),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  S6560C1  : S6560C2 {
  virtual void  v1(); // _ZN7S6560C12v1Ev
  ~S6560C1(); // tgen
  S6560C1(); // tgen
};
//SIG(1 S6560C1) C1{ BC2{ v2 v3 v4 v5 v6 v7 FC3{ VBC4{ v12 v13 v14 v15 v16 v17 v18 v19 FL} VBC5{ VBC4 v20 v21 v22 v23 v24 v25 FC4 Fi Fp} BC6{ VBC5 vd v26 v27 v28 v29 v30 Fs[6] Fi Fs Fc[6]} VBC7{ v31 v32 v33 Fi} BC8{ VBC5 VBC6 vd v34 v35} vd v8 v9 v10 v11} FL} v1}


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

static void Test_S6560C1()
{
  extern Class_Descriptor cd_S6560C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,30)];
    init_test(&cd_S6560C1, buf);
    S6560C1 *dp, &lv = *(dp=new (buf) S6560C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,116), "sizeof(S6560C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6560C1)");
    check_base_class_offset(lv, (S6560C2*), 0, "S6560C1");
    test_class_info(&lv, &cd_S6560C1);
    dp->~S6560C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6560C1(Test_S6560C1, "S6560C1", ABISELECT(160,116));

#else // __cplusplus

extern void _ZN7S6560C1C1Ev();
extern void _ZN7S6560C1D1Ev();
Name_Map name_map_S6560C1[] = {
  NSPAIR(_ZN7S6560C1C1Ev),
  NSPAIR(_ZN7S6560C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6560C2;
extern VTBL_ENTRY _ZTI7S6560C2[];
extern  VTBL_ENTRY _ZTV7S6560C2[];
static Base_Class bases_S6560C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6560C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6560C1[];
extern void _ZN7S6560C22v2Ev();
extern void _ZN7S6560C22v3Ev();
extern void _ZN7S6560C22v4Ev();
extern void _ZN7S6560C22v5Ev();
extern void _ZN7S6560C22v6Ev();
extern void _ZN7S6560C22v7Ev();
extern void _ZN7S6560C12v1Ev();
static  VTBL_ENTRY vtc_S6560C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6560C1[0]),
  (VTBL_ENTRY)&_ZN7S6560C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6560C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6560C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6560C1[];
extern  VTBL_ENTRY _ZTV7S6560C1[];
Class_Descriptor cd_S6560C1 = {  "S6560C1", // class name
  bases_S6560C1, 1,
  &(vtc_S6560C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,116), // object size
  NSPAIRA(_ZTI7S6560C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6560C1),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  S6559C2  {
  ::S7817C7 s6559c2f0;
  long s6559c2f1;
  virtual void  v2(); // _ZN7S6559C22v2Ev
  virtual void  v3(); // _ZN7S6559C22v3Ev
  virtual void  v4(); // _ZN7S6559C22v4Ev
  virtual void  v5(); // _ZN7S6559C22v5Ev
  virtual void  v6(); // _ZN7S6559C22v6Ev
  virtual void  v7(); // _ZN7S6559C22v7Ev
  ~S6559C2(); // tgen
  S6559C2(); // tgen
};
//SIG(-1 S6559C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ VBC3{ v11 v12 v13 v14 v15 v16 v17 v18 FL} VBC4{ VBC3 v19 v20 v21 v22 v23 v24 FC3 Fi Fp} BC5{ VBC4 vd v25 v26 v27 v28 v29 Fs[6] Fi Fs Fc[6]} VBC6{ v30 v31 v32 Fi} BC7{ VBC4 VBC5 vd v33 v34} vd v7 v8 v9 v10} Fl}


void  S6559C2 ::v2(){vfunc_called(this, "_ZN7S6559C22v2Ev");}
void  S6559C2 ::v3(){vfunc_called(this, "_ZN7S6559C22v3Ev");}
void  S6559C2 ::v4(){vfunc_called(this, "_ZN7S6559C22v4Ev");}
void  S6559C2 ::v5(){vfunc_called(this, "_ZN7S6559C22v5Ev");}
void  S6559C2 ::v6(){vfunc_called(this, "_ZN7S6559C22v6Ev");}
void  S6559C2 ::v7(){vfunc_called(this, "_ZN7S6559C22v7Ev");}
S6559C2 ::~S6559C2(){ note_dtor("S6559C2", this);} // tgen
S6559C2 ::S6559C2(){ note_ctor("S6559C2", this);} // tgen

static void Test_S6559C2()
{
  extern Class_Descriptor cd_S6559C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S6559C2, buf);
    S6559C2 *dp, &lv = *(dp=new (buf) S6559C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S6559C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6559C2)");
    check_field_offset(lv, s6559c2f0, ABISELECT(8,4), "S6559C2.s6559c2f0");
    check_field_offset(lv, s6559c2f1, ABISELECT(152,108), "S6559C2.s6559c2f1");
    test_class_info(&lv, &cd_S6559C2);
    dp->~S6559C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6559C2(Test_S6559C2, "S6559C2", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S6559C2C1Ev();
extern void _ZN7S6559C2D1Ev();
Name_Map name_map_S6559C2[] = {
  NSPAIR(_ZN7S6559C2C1Ev),
  NSPAIR(_ZN7S6559C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6559C2[];
extern void _ZN7S6559C22v2Ev();
extern void _ZN7S6559C22v3Ev();
extern void _ZN7S6559C22v4Ev();
extern void _ZN7S6559C22v5Ev();
extern void _ZN7S6559C22v6Ev();
extern void _ZN7S6559C22v7Ev();
static  VTBL_ENTRY vtc_S6559C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6559C2[0]),
  (VTBL_ENTRY)&_ZN7S6559C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S6559C2[];
extern  VTBL_ENTRY _ZTV7S6559C2[];
Class_Descriptor cd_S6559C2 = {  "S6559C2", // class name
  0,0,//no base classes
  &(vtc_S6559C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S6559C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6559C2),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  S6559C1  : S6559C2 {
  virtual void  v1(); // _ZN7S6559C12v1Ev
  ~S6559C1(); // tgen
  S6559C1(); // tgen
};
//SIG(1 S6559C1) C1{ BC2{ v2 v3 v4 v5 v6 v7 FC3{ VBC4{ v12 v13 v14 v15 v16 v17 v18 v19 FL} VBC5{ VBC4 v20 v21 v22 v23 v24 v25 FC4 Fi Fp} BC6{ VBC5 vd v26 v27 v28 v29 v30 Fs[6] Fi Fs Fc[6]} VBC7{ v31 v32 v33 Fi} BC8{ VBC5 VBC6 vd v34 v35} vd v8 v9 v10 v11} Fl} v1}


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

static void Test_S6559C1()
{
  extern Class_Descriptor cd_S6559C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S6559C1, buf);
    S6559C1 *dp, &lv = *(dp=new (buf) S6559C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S6559C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6559C1)");
    check_base_class_offset(lv, (S6559C2*), 0, "S6559C1");
    test_class_info(&lv, &cd_S6559C1);
    dp->~S6559C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6559C1(Test_S6559C1, "S6559C1", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S6559C1C1Ev();
extern void _ZN7S6559C1D1Ev();
Name_Map name_map_S6559C1[] = {
  NSPAIR(_ZN7S6559C1C1Ev),
  NSPAIR(_ZN7S6559C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6559C2;
extern VTBL_ENTRY _ZTI7S6559C2[];
extern  VTBL_ENTRY _ZTV7S6559C2[];
static Base_Class bases_S6559C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6559C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6559C1[];
extern void _ZN7S6559C22v2Ev();
extern void _ZN7S6559C22v3Ev();
extern void _ZN7S6559C22v4Ev();
extern void _ZN7S6559C22v5Ev();
extern void _ZN7S6559C22v6Ev();
extern void _ZN7S6559C22v7Ev();
extern void _ZN7S6559C12v1Ev();
static  VTBL_ENTRY vtc_S6559C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6559C1[0]),
  (VTBL_ENTRY)&_ZN7S6559C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6559C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6559C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6559C1[];
extern  VTBL_ENTRY _ZTV7S6559C1[];
Class_Descriptor cd_S6559C1 = {  "S6559C1", // class name
  bases_S6559C1, 1,
  &(vtc_S6559C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S6559C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6559C1),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  S6805C2  {
  int s6805c2f0;
  virtual void  v4(); // _ZN7S6805C22v4Ev
  virtual void  v5(); // _ZN7S6805C22v5Ev
  virtual void  v6(); // _ZN7S6805C22v6Ev
  ~S6805C2(); // tgen
  S6805C2(); // tgen
};
//SIG(-1 S6805C2) C1{ v1 v2 v3 Fi}


void  S6805C2 ::v4(){vfunc_called(this, "_ZN7S6805C22v4Ev");}
void  S6805C2 ::v5(){vfunc_called(this, "_ZN7S6805C22v5Ev");}
void  S6805C2 ::v6(){vfunc_called(this, "_ZN7S6805C22v6Ev");}
S6805C2 ::~S6805C2(){ note_dtor("S6805C2", this);} // tgen
S6805C2 ::S6805C2(){ note_ctor("S6805C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6805C2C1Ev();
extern void _ZN7S6805C2D1Ev();
Name_Map name_map_S6805C2[] = {
  NSPAIR(_ZN7S6805C2C1Ev),
  NSPAIR(_ZN7S6805C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6805C2[];
extern void _ZN7S6805C22v4Ev();
extern void _ZN7S6805C22v5Ev();
extern void _ZN7S6805C22v6Ev();
static  VTBL_ENTRY vtc_S6805C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C2[0]),
  (VTBL_ENTRY)&_ZN7S6805C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S6805C2[];
extern  VTBL_ENTRY _ZTV7S6805C2[];
Class_Descriptor cd_S6805C2 = {  "S6805C2", // class name
  0,0,//no base classes
  &(vtc_S6805C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6805C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6805C2),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  S6805C3  {
  int s6805c3f0;
  virtual void  v7(); // _ZN7S6805C32v7Ev
  virtual void  v8(); // _ZN7S6805C32v8Ev
  virtual void  v9(); // _ZN7S6805C32v9Ev
  virtual void  v10(); // _ZN7S6805C33v10Ev
  virtual void  v11(); // _ZN7S6805C33v11Ev
  ~S6805C3(); // tgen
  S6805C3(); // tgen
};
//SIG(-1 S6805C3) C1{ v1 v2 v3 v4 v5 Fi}


void  S6805C3 ::v7(){vfunc_called(this, "_ZN7S6805C32v7Ev");}
void  S6805C3 ::v8(){vfunc_called(this, "_ZN7S6805C32v8Ev");}
void  S6805C3 ::v9(){vfunc_called(this, "_ZN7S6805C32v9Ev");}
void  S6805C3 ::v10(){vfunc_called(this, "_ZN7S6805C33v10Ev");}
void  S6805C3 ::v11(){vfunc_called(this, "_ZN7S6805C33v11Ev");}
S6805C3 ::~S6805C3(){ note_dtor("S6805C3", this);} // tgen
S6805C3 ::S6805C3(){ note_ctor("S6805C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6805C3C1Ev();
extern void _ZN7S6805C3D1Ev();
Name_Map name_map_S6805C3[] = {
  NSPAIR(_ZN7S6805C3C1Ev),
  NSPAIR(_ZN7S6805C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6805C3[];
extern void _ZN7S6805C32v7Ev();
extern void _ZN7S6805C32v8Ev();
extern void _ZN7S6805C32v9Ev();
extern void _ZN7S6805C33v10Ev();
extern void _ZN7S6805C33v11Ev();
static  VTBL_ENTRY vtc_S6805C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C3[0]),
  (VTBL_ENTRY)&_ZN7S6805C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6805C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6805C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6805C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6805C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S6805C3[];
extern  VTBL_ENTRY _ZTV7S6805C3[];
Class_Descriptor cd_S6805C3 = {  "S6805C3", // class name
  0,0,//no base classes
  &(vtc_S6805C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6805C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6805C3),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  S6805C4  : S6805C2 {
  virtual void  v12(); // _ZN7S6805C43v12Ev
  virtual void  v13(); // _ZN7S6805C43v13Ev
  virtual void  v14(); // _ZN7S6805C43v14Ev
  virtual void  v15(); // _ZN7S6805C43v15Ev
  virtual void  v16(); // _ZN7S6805C43v16Ev
  ~S6805C4(); // tgen
  S6805C4(); // tgen
};
//SIG(-1 S6805C4) C1{ BC2{ v6 v7 v8 Fi} v1 v2 v3 v4 v5}


void  S6805C4 ::v12(){vfunc_called(this, "_ZN7S6805C43v12Ev");}
void  S6805C4 ::v13(){vfunc_called(this, "_ZN7S6805C43v13Ev");}
void  S6805C4 ::v14(){vfunc_called(this, "_ZN7S6805C43v14Ev");}
void  S6805C4 ::v15(){vfunc_called(this, "_ZN7S6805C43v15Ev");}
void  S6805C4 ::v16(){vfunc_called(this, "_ZN7S6805C43v16Ev");}
S6805C4 ::~S6805C4(){ note_dtor("S6805C4", this);} // tgen
S6805C4 ::S6805C4(){ note_ctor("S6805C4", this);} // tgen

static void Test_S6805C4()
{
  extern Class_Descriptor cd_S6805C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6805C4, buf);
    S6805C4 *dp, &lv = *(dp=new (buf) S6805C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6805C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6805C4)");
    check_base_class_offset(lv, (S6805C2*), 0, "S6805C4");
    test_class_info(&lv, &cd_S6805C4);
    dp->~S6805C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6805C4(Test_S6805C4, "S6805C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6805C4C1Ev();
extern void _ZN7S6805C4D1Ev();
Name_Map name_map_S6805C4[] = {
  NSPAIR(_ZN7S6805C4C1Ev),
  NSPAIR(_ZN7S6805C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6805C2;
extern VTBL_ENTRY _ZTI7S6805C2[];
extern  VTBL_ENTRY _ZTV7S6805C2[];
static Base_Class bases_S6805C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6805C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6805C4[];
extern void _ZN7S6805C22v4Ev();
extern void _ZN7S6805C22v5Ev();
extern void _ZN7S6805C22v6Ev();
extern void _ZN7S6805C43v12Ev();
extern void _ZN7S6805C43v13Ev();
extern void _ZN7S6805C43v14Ev();
extern void _ZN7S6805C43v15Ev();
extern void _ZN7S6805C43v16Ev();
static  VTBL_ENTRY vtc_S6805C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C4[0]),
  (VTBL_ENTRY)&_ZN7S6805C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v16Ev,
};
extern VTBL_ENTRY _ZTI7S6805C4[];
extern  VTBL_ENTRY _ZTV7S6805C4[];
Class_Descriptor cd_S6805C4 = {  "S6805C4", // class name
  bases_S6805C4, 1,
  &(vtc_S6805C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6805C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6805C4),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  S6805C6  {
  virtual void  v17(); // _ZN7S6805C63v17Ev
  virtual void  v18(); // _ZN7S6805C63v18Ev
  virtual void  v19(); // _ZN7S6805C63v19Ev
  virtual void  v20(); // _ZN7S6805C63v20Ev
  virtual void  v21(); // _ZN7S6805C63v21Ev
  virtual void  v22(); // _ZN7S6805C63v22Ev
  virtual void  v23(); // _ZN7S6805C63v23Ev
  ~S6805C6(); // tgen
  S6805C6(); // tgen
};
//SIG(-1 S6805C6) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S6805C6 ::v17(){vfunc_called(this, "_ZN7S6805C63v17Ev");}
void  S6805C6 ::v18(){vfunc_called(this, "_ZN7S6805C63v18Ev");}
void  S6805C6 ::v19(){vfunc_called(this, "_ZN7S6805C63v19Ev");}
void  S6805C6 ::v20(){vfunc_called(this, "_ZN7S6805C63v20Ev");}
void  S6805C6 ::v21(){vfunc_called(this, "_ZN7S6805C63v21Ev");}
void  S6805C6 ::v22(){vfunc_called(this, "_ZN7S6805C63v22Ev");}
void  S6805C6 ::v23(){vfunc_called(this, "_ZN7S6805C63v23Ev");}
S6805C6 ::~S6805C6(){ note_dtor("S6805C6", this);} // tgen
S6805C6 ::S6805C6(){ note_ctor("S6805C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6805C6C1Ev();
extern void _ZN7S6805C6D1Ev();
Name_Map name_map_S6805C6[] = {
  NSPAIR(_ZN7S6805C6C1Ev),
  NSPAIR(_ZN7S6805C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6805C6[];
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
static  VTBL_ENTRY vtc_S6805C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C6[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
};
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
Class_Descriptor cd_S6805C6 = {  "S6805C6", // class name
  0,0,//no base classes
  &(vtc_S6805C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6805C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6805C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6805C5  : S6805C6 {
  virtual void  v24(); // _ZN7S6805C53v24Ev
  ~S6805C5(); // tgen
  S6805C5(); // tgen
};
//SIG(-1 S6805C5) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


void  S6805C5 ::v24(){vfunc_called(this, "_ZN7S6805C53v24Ev");}
S6805C5 ::~S6805C5(){ note_dtor("S6805C5", this);} // tgen
S6805C5 ::S6805C5(){ note_ctor("S6805C5", this);} // tgen

static void Test_S6805C5()
{
  extern Class_Descriptor cd_S6805C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6805C5, buf);
    S6805C5 *dp, &lv = *(dp=new (buf) S6805C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6805C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6805C5)");
    check_base_class_offset(lv, (S6805C6*), 0, "S6805C5");
    test_class_info(&lv, &cd_S6805C5);
    dp->~S6805C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6805C5(Test_S6805C5, "S6805C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6805C5C1Ev();
extern void _ZN7S6805C5D1Ev();
Name_Map name_map_S6805C5[] = {
  NSPAIR(_ZN7S6805C5C1Ev),
  NSPAIR(_ZN7S6805C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6805C6;
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
static Base_Class bases_S6805C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6805C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6805C5[];
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C53v24Ev();
static  VTBL_ENTRY vtc_S6805C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C5[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C53v24Ev,
};
extern VTBL_ENTRY _ZTI7S6805C5[];
extern  VTBL_ENTRY _ZTV7S6805C5[];
Class_Descriptor cd_S6805C5 = {  "S6805C5", // class name
  bases_S6805C5, 1,
  &(vtc_S6805C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6805C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6805C5),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  S6805C8  {
  virtual  ~S6805C8(); // _ZN7S6805C8D1Ev
  virtual void  v25(); // _ZN7S6805C83v25Ev
  virtual void  v26(); // _ZN7S6805C83v26Ev
  virtual void  v27(); // _ZN7S6805C83v27Ev
  virtual void  v28(); // _ZN7S6805C83v28Ev
  virtual void  v29(); // _ZN7S6805C83v29Ev
  S6805C8(); // tgen
};
//SIG(-1 S6805C8) C1{ vd v1 v2 v3 v4 v5}


 S6805C8 ::~S6805C8(){ note_dtor("S6805C8", this);}
void  S6805C8 ::v25(){vfunc_called(this, "_ZN7S6805C83v25Ev");}
void  S6805C8 ::v26(){vfunc_called(this, "_ZN7S6805C83v26Ev");}
void  S6805C8 ::v27(){vfunc_called(this, "_ZN7S6805C83v27Ev");}
void  S6805C8 ::v28(){vfunc_called(this, "_ZN7S6805C83v28Ev");}
void  S6805C8 ::v29(){vfunc_called(this, "_ZN7S6805C83v29Ev");}
S6805C8 ::S6805C8(){ note_ctor("S6805C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6805C8C1Ev();
extern void _ZN7S6805C8D1Ev();
Name_Map name_map_S6805C8[] = {
  NSPAIR(_ZN7S6805C8C1Ev),
  NSPAIR(_ZN7S6805C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6805C8[];
extern void _ZN7S6805C8D1Ev();
extern void _ZN7S6805C8D0Ev();
extern void _ZN7S6805C83v25Ev();
extern void _ZN7S6805C83v26Ev();
extern void _ZN7S6805C83v27Ev();
extern void _ZN7S6805C83v28Ev();
extern void _ZN7S6805C83v29Ev();
static  VTBL_ENTRY vtc_S6805C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C8[0]),
  (VTBL_ENTRY)&_ZN7S6805C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6805C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v25Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v26Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v27Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v28Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v29Ev,
};
extern VTBL_ENTRY _ZTI7S6805C8[];
extern  VTBL_ENTRY _ZTV7S6805C8[];
Class_Descriptor cd_S6805C8 = {  "S6805C8", // class name
  0,0,//no base classes
  &(vtc_S6805C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6805C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6805C8),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6805C9  : virtual S6805C6 {
  long double s6805c9f0[9];
  virtual void  v30(); // _ZN7S6805C93v30Ev
  virtual void  v31(); // _ZN7S6805C93v31Ev
  virtual void  v32(); // _ZN7S6805C93v32Ev
  ~S6805C9(); // tgen
  S6805C9(); // tgen
};
//SIG(-1 S6805C9) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10} v1 v2 v3 FD[9]}


void  S6805C9 ::v30(){vfunc_called(this, "_ZN7S6805C93v30Ev");}
void  S6805C9 ::v31(){vfunc_called(this, "_ZN7S6805C93v31Ev");}
void  S6805C9 ::v32(){vfunc_called(this, "_ZN7S6805C93v32Ev");}
S6805C9 ::~S6805C9(){ note_dtor("S6805C9", this);} // tgen
S6805C9 ::S6805C9(){ note_ctor("S6805C9", this);} // tgen

static void Test_S6805C9()
{
  extern Class_Descriptor cd_S6805C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S6805C9, buf);
    S6805C9 *dp, &lv = *(dp=new (buf) S6805C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S6805C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6805C9)");
    check_base_class_offset(lv, (S6805C6*), 0, "S6805C9");
    check_field_offset(lv, s6805c9f0, ABISELECT(16,4), "S6805C9.s6805c9f0");
    test_class_info(&lv, &cd_S6805C9);
    dp->~S6805C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6805C9(Test_S6805C9, "S6805C9", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S6805C9C1Ev();
extern void _ZN7S6805C9D1Ev();
Name_Map name_map_S6805C9[] = {
  NSPAIR(_ZN7S6805C9C1Ev),
  NSPAIR(_ZN7S6805C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6805C6;
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
static Base_Class bases_S6805C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6805C6,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6805C9[];
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C93v30Ev();
extern void _ZN7S6805C93v31Ev();
extern void _ZN7S6805C93v32Ev();
static  VTBL_ENTRY vtc_S6805C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C9[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v30Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v31Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v32Ev,
};
extern VTBL_ENTRY _ZTV7S6805C9[];
static  VTT_ENTRY vtt_S6805C9[] = {
  {&(_ZTV7S6805C9[10]),  10,20},
  {&(_ZTV7S6805C9[10]),  10,20},
};
extern VTBL_ENTRY _ZTI7S6805C9[];
extern  VTBL_ENTRY _ZTV7S6805C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6805C9[];
Class_Descriptor cd_S6805C9 = {  "S6805C9", // class name
  bases_S6805C9, 1,
  &(vtc_S6805C9[0]), // expected_vtbl_contents
  &(vtt_S6805C9[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S6805C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6805C9),20, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6805C9),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  S6805C10  {
  virtual void  v33(); // _ZN8S6805C103v33Ev
  virtual void  v34(); // _ZN8S6805C103v34Ev
  virtual void  v35(); // _ZN8S6805C103v35Ev
  ~S6805C10(); // tgen
  S6805C10(); // tgen
};
//SIG(-1 S6805C10) C1{ v1 v2 v3}


void  S6805C10 ::v33(){vfunc_called(this, "_ZN8S6805C103v33Ev");}
void  S6805C10 ::v34(){vfunc_called(this, "_ZN8S6805C103v34Ev");}
void  S6805C10 ::v35(){vfunc_called(this, "_ZN8S6805C103v35Ev");}
S6805C10 ::~S6805C10(){ note_dtor("S6805C10", this);} // tgen
S6805C10 ::S6805C10(){ note_ctor("S6805C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S6805C10C1Ev();
extern void _ZN8S6805C10D1Ev();
Name_Map name_map_S6805C10[] = {
  NSPAIR(_ZN8S6805C10C1Ev),
  NSPAIR(_ZN8S6805C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6805C10[];
extern void _ZN8S6805C103v33Ev();
extern void _ZN8S6805C103v34Ev();
extern void _ZN8S6805C103v35Ev();
static  VTBL_ENTRY vtc_S6805C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6805C10[0]),
  (VTBL_ENTRY)&_ZN8S6805C103v33Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v34Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v35Ev,
};
extern VTBL_ENTRY _ZTI8S6805C10[];
extern  VTBL_ENTRY _ZTV8S6805C10[];
Class_Descriptor cd_S6805C10 = {  "S6805C10", // class name
  0,0,//no base classes
  &(vtc_S6805C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6805C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6805C10),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  S6805C7  : virtual S6805C5 , virtual S6805C8 , S6805C9 , virtual S6805C10 {
  virtual  ~S6805C7(); // _ZN7S6805C7D2Ev
  virtual void  v36(); // _ZN7S6805C73v36Ev
  S6805C7(); // tgen
};
//SIG(-1 S6805C7) C1{ VBC2{ BC3{ v2 v3 v4 v5 v6 v7 v8} v9} VBC4{ vd v10 v11 v12 v13 v14} BC5{ VBC3 v15 v16 v17 FD[9]} VBC6{ v18 v19 v20} vd v1}


 S6805C7 ::~S6805C7(){ note_dtor("S6805C7", this);}
void  S6805C7 ::v36(){vfunc_called(this, "_ZN7S6805C73v36Ev");}
S6805C7 ::S6805C7(){ note_ctor("S6805C7", this);} // tgen

static void Test_S6805C7()
{
  extern Class_Descriptor cd_S6805C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S6805C7, buf);
    S6805C7 *dp, &lv = *(dp=new (buf) S6805C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S6805C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6805C7)");
    check_base_class_offset(lv, (S6805C6*)(S6805C5*), ABISELECT(160,112), "S6805C7");
    check_base_class_offset(lv, (S6805C5*), ABISELECT(160,112), "S6805C7");
    check_base_class_offset(lv, (S6805C8*), ABISELECT(168,116), "S6805C7");
    check_base_class_offset(lv, (S6805C6*)(S6805C9*), 0, "S6805C7");
    check_base_class_offset(lv, (S6805C9*), 0, "S6805C7");
    check_base_class_offset(lv, (S6805C10*), ABISELECT(176,120), "S6805C7");
    test_class_info(&lv, &cd_S6805C7);
    dp->~S6805C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6805C7(Test_S6805C7, "S6805C7", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN7S6805C7C1Ev();
extern void _ZN7S6805C7D2Ev();
Name_Map name_map_S6805C7[] = {
  NSPAIR(_ZN7S6805C7C1Ev),
  NSPAIR(_ZN7S6805C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6805C6;
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
extern Class_Descriptor cd_S6805C5;
extern VTBL_ENTRY _ZTI7S6805C5[];
extern  VTBL_ENTRY _ZTV7S6805C5[];
extern Class_Descriptor cd_S6805C8;
extern VTBL_ENTRY _ZTI7S6805C8[];
extern  VTBL_ENTRY _ZTV7S6805C8[];
extern Class_Descriptor cd_S6805C6;
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
extern Class_Descriptor cd_S6805C9;
extern VTBL_ENTRY _ZTI7S6805C9[];
extern  VTBL_ENTRY _ZTV7S6805C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6805C9[];
extern Class_Descriptor cd_S6805C10;
extern VTBL_ENTRY _ZTI8S6805C10[];
extern  VTBL_ENTRY _ZTV8S6805C10[];
static Base_Class bases_S6805C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6805C6,    ABISELECT(160,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S6805C5,    ABISELECT(160,112), //bcp->offset
    26, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6805C8,    ABISELECT(168,116), //bcp->offset
    44, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6805C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6805C9,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6805C10,    ABISELECT(176,120), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6805C7[];
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C93v30Ev();
extern void _ZN7S6805C93v31Ev();
extern void _ZN7S6805C93v32Ev();
extern void _ZN7S6805C7D1Ev();
extern void _ZN7S6805C7D0Ev();
extern void _ZN7S6805C73v36Ev();
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C53v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6805C7D1Ev,_ZTv0_n12_N7S6805C7D1Ev)();
extern void ABISELECT(_ZThn168_N7S6805C7D1Ev,_ZThn116_N7S6805C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6805C7D0Ev,_ZTv0_n12_N7S6805C7D0Ev)();
extern void ABISELECT(_ZThn168_N7S6805C7D0Ev,_ZThn116_N7S6805C7D0Ev)() __attribute__((weak));
extern void _ZN7S6805C83v25Ev();
extern void _ZN7S6805C83v26Ev();
extern void _ZN7S6805C83v27Ev();
extern void _ZN7S6805C83v28Ev();
extern void _ZN7S6805C83v29Ev();
extern void _ZN8S6805C103v33Ev();
extern void _ZN8S6805C103v34Ev();
extern void _ZN8S6805C103v35Ev();
static  VTBL_ENTRY vtc_S6805C7[] = {
  ABISELECT(176,120),
  ABISELECT(168,116),
  ABISELECT(160,112),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v30Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v31Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v32Ev,
  (VTBL_ENTRY)&_ZN7S6805C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6805C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6805C73v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C53v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6805C7D1Ev,_ZTv0_n12_N7S6805C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6805C7D0Ev,_ZTv0_n12_N7S6805C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6805C83v25Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v26Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v27Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v28Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v29Ev,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&_ZN8S6805C103v33Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v34Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v35Ev,
};
extern VTBL_ENTRY _ZTV7S6805C7[];
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C93v30Ev();
extern void _ZN7S6805C93v31Ev();
extern void _ZN7S6805C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6805C9__7S6805C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C9[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v30Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v31Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v32Ev,
};
static  VTT_ENTRY vtt_S6805C7[] = {
  {&(_ZTV7S6805C7[13]),  13,67},
  {&(_tg__ZTV7S6805C9__7S6805C7[10]),  10,20},
  {&(_tg__ZTV7S6805C9__7S6805C7[10]),  10,20},
  {&(_ZTV7S6805C7[36]),  36,67},
  {&(_ZTV7S6805C7[52]),  52,67},
  {&(_ZTV7S6805C7[13]),  13,67},
  {&(_ZTV7S6805C7[64]),  64,67},
};
extern VTBL_ENTRY _ZTI7S6805C7[];
extern  VTBL_ENTRY _ZTV7S6805C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6805C7[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6805C7D0Ev,_ZTv0_n12_N7S6805C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S6805C7D0Ev,_ZThn116_N7S6805C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6805C7D1Ev,_ZTv0_n12_N7S6805C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S6805C7D1Ev,_ZThn116_N7S6805C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6805C7 = {  "S6805C7", // class name
  bases_S6805C7, 6,
  &(vtc_S6805C7[0]), // expected_vtbl_contents
  &(vtt_S6805C7[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI7S6805C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6805C7),67, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6805C7),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6805C1  : S6805C2 , S6805C3 , virtual S6805C4 , S6805C5 , S6805C7 {
  ::S6805C7 s6805c1f0[2];
  virtual void  v1(); // _ZN7S6805C12v1Ev
  virtual void  v2(); // _ZN7S6805C12v2Ev
  virtual void  v3(); // _ZN7S6805C12v3Ev
  ~S6805C1(); // tgen
  S6805C1(); // tgen
};
//SIG(1 S6805C1) C1{ BC2{ v4 v5 v6 Fi} BC3{ v7 v8 v9 v10 v11 Fi} VBC4{ BC2 v12 v13 v14 v15 v16} BC5{ BC6{ v17 v18 v19 v20 v21 v22 v23} v24} BC7{ VBC5 VBC8{ vd v25 v26 v27 v28 v29} BC9{ VBC6 v30 v31 v32 FD[9]} VBC10{ v33 v34 v35} vd v36} v1 v2 v3 FC7[2]}


void  S6805C1 ::v1(){vfunc_called(this, "_ZN7S6805C12v1Ev");}
void  S6805C1 ::v2(){vfunc_called(this, "_ZN7S6805C12v2Ev");}
void  S6805C1 ::v3(){vfunc_called(this, "_ZN7S6805C12v3Ev");}
S6805C1 ::~S6805C1(){ note_dtor("S6805C1", this);} // tgen
S6805C1 ::S6805C1(){ note_ctor("S6805C1", this);} // tgen

static void Test_S6805C1()
{
  extern Class_Descriptor cd_S6805C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,101)];
    init_test(&cd_S6805C1, buf);
    S6805C1 *dp, &lv = *(dp=new (buf) S6805C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,400), "sizeof(S6805C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6805C1)");
    /*is_ambiguous_... S6805C1::S6805C2 */ AMB_check_base_class_offset(lv, (S6805C2*), 0, "S6805C1");
    check_base_class_offset(lv, (S6805C3*), ABISELECT(16,8), "S6805C1");
    check_base_class_offset(lv, (S6805C2*)(S6805C4*), ABISELECT(592,380), "S6805C1");
    check_base_class_offset(lv, (S6805C4*), ABISELECT(592,380), "S6805C1");
    /*is_ambiguous_... S6805C1::S6805C5 */ AMB_check_base_class_offset(lv, (S6805C6*)(S6805C5*), ABISELECT(32,16), "S6805C1");
    /*is_ambiguous_... S6805C1::S6805C5 */ AMB_check_base_class_offset(lv, (S6805C5*), ABISELECT(32,16), "S6805C1");
    /*is_ambiguous_... S6805C1::S6805C5 */ AMB_check_base_class_offset(lv, (S6805C6*)(S6805C5*), ABISELECT(608,388), "S6805C1");
    check_base_class_offset(lv, (S6805C5*)(S6805C7*), ABISELECT(608,388), "S6805C1");
    check_base_class_offset(lv, (S6805C8*)(S6805C7*), ABISELECT(616,392), "S6805C1");
    check_base_class_offset(lv, (S6805C6*)(S6805C9*)(S6805C7*), ABISELECT(48,20), "S6805C1");
    check_base_class_offset(lv, (S6805C9*)(S6805C7*), ABISELECT(48,20), "S6805C1");
    check_base_class_offset(lv, (S6805C10*)(S6805C7*), ABISELECT(624,396), "S6805C1");
    check_base_class_offset(lv, (S6805C7*), ABISELECT(48,20), "S6805C1");
    check_field_offset(lv, s6805c1f0, ABISELECT(208,132), "S6805C1.s6805c1f0");
    test_class_info(&lv, &cd_S6805C1);
    dp->~S6805C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6805C1(Test_S6805C1, "S6805C1", ABISELECT(640,400));

#else // __cplusplus

extern void _ZN7S6805C1C1Ev();
extern void _ZN7S6805C1D1Ev();
Name_Map name_map_S6805C1[] = {
  NSPAIR(_ZN7S6805C1C1Ev),
  NSPAIR(_ZN7S6805C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6805C2;
extern VTBL_ENTRY _ZTI7S6805C2[];
extern  VTBL_ENTRY _ZTV7S6805C2[];
extern Class_Descriptor cd_S6805C3;
extern VTBL_ENTRY _ZTI7S6805C3[];
extern  VTBL_ENTRY _ZTV7S6805C3[];
extern Class_Descriptor cd_S6805C2;
extern VTBL_ENTRY _ZTI7S6805C2[];
extern  VTBL_ENTRY _ZTV7S6805C2[];
extern Class_Descriptor cd_S6805C4;
extern VTBL_ENTRY _ZTI7S6805C4[];
extern  VTBL_ENTRY _ZTV7S6805C4[];
extern Class_Descriptor cd_S6805C6;
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
extern Class_Descriptor cd_S6805C5;
extern VTBL_ENTRY _ZTI7S6805C5[];
extern  VTBL_ENTRY _ZTV7S6805C5[];
extern Class_Descriptor cd_S6805C6;
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
extern Class_Descriptor cd_S6805C5;
extern VTBL_ENTRY _ZTI7S6805C5[];
extern  VTBL_ENTRY _ZTV7S6805C5[];
extern Class_Descriptor cd_S6805C8;
extern VTBL_ENTRY _ZTI7S6805C8[];
extern  VTBL_ENTRY _ZTV7S6805C8[];
extern Class_Descriptor cd_S6805C6;
extern VTBL_ENTRY _ZTI7S6805C6[];
extern  VTBL_ENTRY _ZTV7S6805C6[];
extern Class_Descriptor cd_S6805C9;
extern VTBL_ENTRY _ZTI7S6805C9[];
extern  VTBL_ENTRY _ZTV7S6805C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6805C9[];
extern Class_Descriptor cd_S6805C10;
extern VTBL_ENTRY _ZTI8S6805C10[];
extern  VTBL_ENTRY _ZTV8S6805C10[];
extern Class_Descriptor cd_S6805C7;
extern VTBL_ENTRY _ZTI7S6805C7[];
extern  VTBL_ENTRY _ZTV7S6805C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6805C7[];
static Base_Class bases_S6805C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6805C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6805C3,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6805C2,    ABISELECT(592,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6805C4,    ABISELECT(592,380), //bcp->offset
    58, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6805C6,    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
    10, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6805C5,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6805C6,    ABISELECT(608,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6805C5,    ABISELECT(608,388), //bcp->offset
    76, //bcp->virtual_function_table_offset
    10, //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
    12, //immediately_derived
  0, 1},
  {&cd_S6805C8,    ABISELECT(616,392), //bcp->offset
    94, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6805C6,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    10, //immediately_derived
  0, 1},
  {&cd_S6805C9,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6805C10,    ABISELECT(624,396), //bcp->offset
    109, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6805C7,    ABISELECT(48,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6805C1[];
extern void _ZN7S6805C22v4Ev();
extern void _ZN7S6805C22v5Ev();
extern void _ZN7S6805C22v6Ev();
extern void _ZN7S6805C12v1Ev();
extern void _ZN7S6805C12v2Ev();
extern void _ZN7S6805C12v3Ev();
extern void _ZN7S6805C1D1Ev();
extern void _ZN7S6805C1D0Ev();
extern void _ZN7S6805C32v7Ev();
extern void _ZN7S6805C32v8Ev();
extern void _ZN7S6805C32v9Ev();
extern void _ZN7S6805C33v10Ev();
extern void _ZN7S6805C33v11Ev();
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C53v24Ev();
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C93v30Ev();
extern void _ZN7S6805C93v31Ev();
extern void _ZN7S6805C93v32Ev();
extern void ABISELECT(_ZThn48_N7S6805C1D1Ev,_ZThn20_N7S6805C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S6805C1D0Ev,_ZThn20_N7S6805C1D0Ev)();
extern void _ZN7S6805C73v36Ev();
extern void _ZN7S6805C22v4Ev();
extern void _ZN7S6805C22v5Ev();
extern void _ZN7S6805C22v6Ev();
extern void _ZN7S6805C43v12Ev();
extern void _ZN7S6805C43v13Ev();
extern void _ZN7S6805C43v14Ev();
extern void _ZN7S6805C43v15Ev();
extern void _ZN7S6805C43v16Ev();
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C53v24Ev();
extern void ABISELECT(_ZTv0_n24_N7S6805C1D1Ev,_ZTv0_n12_N7S6805C1D1Ev)();
extern void ABISELECT(_ZThn616_N7S6805C1D1Ev,_ZThn392_N7S6805C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6805C1D0Ev,_ZTv0_n12_N7S6805C1D0Ev)();
extern void ABISELECT(_ZThn616_N7S6805C1D0Ev,_ZThn392_N7S6805C1D0Ev)() __attribute__((weak));
extern void _ZN7S6805C83v25Ev();
extern void _ZN7S6805C83v26Ev();
extern void _ZN7S6805C83v27Ev();
extern void _ZN7S6805C83v28Ev();
extern void _ZN7S6805C83v29Ev();
extern void _ZN8S6805C103v33Ev();
extern void _ZN8S6805C103v34Ev();
extern void _ZN8S6805C103v35Ev();
static  VTBL_ENTRY vtc_S6805C1[] = {
  ABISELECT(624,396),
  ABISELECT(48,20),
  ABISELECT(616,392),
  ABISELECT(608,388),
  ABISELECT(592,380),
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&_ZN7S6805C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6805C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6805C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6805C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6805C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6805C1D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&_ZN7S6805C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6805C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6805C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6805C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6805C33v11Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C53v24Ev,
  ABISELECT(576,376),
  ABISELECT(568,372),
  ABISELECT(560,368),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v30Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v31Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S6805C1D1Ev,_ZThn20_N7S6805C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S6805C1D0Ev,_ZThn20_N7S6805C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6805C73v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-592,-380),
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&_ZN7S6805C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6805C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6805C43v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-608,-388),
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C53v24Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-616,-392),
  ABISELECT(-616,-392),
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6805C1D1Ev,_ZTv0_n12_N7S6805C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6805C1D0Ev,_ZTv0_n12_N7S6805C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6805C83v25Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v26Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v27Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v28Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v29Ev,
  0,
  0,
  0,
  ABISELECT(-624,-396),
  (VTBL_ENTRY)&(_ZTI7S6805C1[0]),
  (VTBL_ENTRY)&_ZN8S6805C103v33Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v34Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v35Ev,
};
extern VTBL_ENTRY _ZTV7S6805C1[];
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C93v30Ev();
extern void _ZN7S6805C93v31Ev();
extern void _ZN7S6805C93v32Ev();
extern void _ZN7S6805C7D1Ev();
extern void _ZN7S6805C7D0Ev();
extern void _ZN7S6805C73v36Ev();
static  VTBL_ENTRY _tg__ZTV7S6805C7__7S6805C1[] = {
  ABISELECT(576,376),
  ABISELECT(568,372),
  ABISELECT(560,368),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v30Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v31Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v32Ev,
  (VTBL_ENTRY)&_ZN7S6805C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6805C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6805C73v36Ev,
};
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C93v30Ev();
extern void _ZN7S6805C93v31Ev();
extern void _ZN7S6805C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S6805C97S6805C7__7S6805C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6805C9[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v30Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v31Ev,
  (VTBL_ENTRY)&_ZN7S6805C93v32Ev,
};
extern void _ZN7S6805C63v17Ev();
extern void _ZN7S6805C63v18Ev();
extern void _ZN7S6805C63v19Ev();
extern void _ZN7S6805C63v20Ev();
extern void _ZN7S6805C63v21Ev();
extern void _ZN7S6805C63v22Ev();
extern void _ZN7S6805C63v23Ev();
extern void _ZN7S6805C53v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6805C5__7S6805C7__7S6805C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-560,-368),
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&_ZN7S6805C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6805C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6805C53v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6805C7D1Ev,_ZTv0_n12_N7S6805C7D1Ev)();
extern void ABISELECT(_ZThn568_N7S6805C7D1Ev,_ZThn372_N7S6805C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6805C7D0Ev,_ZTv0_n12_N7S6805C7D0Ev)();
extern void ABISELECT(_ZThn568_N7S6805C7D0Ev,_ZThn372_N7S6805C7D0Ev)() __attribute__((weak));
extern void _ZN7S6805C83v25Ev();
extern void _ZN7S6805C83v26Ev();
extern void _ZN7S6805C83v27Ev();
extern void _ZN7S6805C83v28Ev();
extern void _ZN7S6805C83v29Ev();
static  VTBL_ENTRY _tg__ZTV7S6805C8__7S6805C7__7S6805C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-568,-372),
  ABISELECT(-568,-372),
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6805C7D1Ev,_ZTv0_n12_N7S6805C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6805C7D0Ev,_ZTv0_n12_N7S6805C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6805C83v25Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v26Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v27Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v28Ev,
  (VTBL_ENTRY)&_ZN7S6805C83v29Ev,
};
extern void _ZN8S6805C103v33Ev();
extern void _ZN8S6805C103v34Ev();
extern void _ZN8S6805C103v35Ev();
static  VTBL_ENTRY _tg__ZTV8S6805C10__7S6805C7__7S6805C1[] = {
  0,
  0,
  0,
  ABISELECT(-576,-376),
  (VTBL_ENTRY)&(_ZTI7S6805C7[0]),
  (VTBL_ENTRY)&_ZN8S6805C103v33Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v34Ev,
  (VTBL_ENTRY)&_ZN8S6805C103v35Ev,
};
static  VTT_ENTRY vtt_S6805C1[] = {
  {&(_ZTV7S6805C1[7]),  7,117},
  {&(_tg__ZTV7S6805C7__7S6805C1[13]),  13,26},
  {&(_tg__ZTV7S6805C97S6805C7__7S6805C1[10]),  10,20},
  {&(_tg__ZTV7S6805C97S6805C7__7S6805C1[10]),  10,20},
  {&(_tg__ZTV7S6805C5__7S6805C7__7S6805C1[10]),  10,18},
  {&(_tg__ZTV7S6805C8__7S6805C7__7S6805C1[8]),  8,15},
  {&(_tg__ZTV7S6805C7__7S6805C1[13]),  13,26},
  {&(_tg__ZTV8S6805C10__7S6805C7__7S6805C1[5]),  5,8},
  {&(_ZTV7S6805C1[68]),  68,117},
  {&(_ZTV7S6805C1[45]),  45,117},
  {&(_ZTV7S6805C1[86]),  86,117},
  {&(_ZTV7S6805C1[102]),  102,117},
  {&(_ZTV7S6805C1[45]),  45,117},
  {&(_ZTV7S6805C1[114]),  114,117},
};
extern VTBL_ENTRY _ZTI7S6805C1[];
extern  VTBL_ENTRY _ZTV7S6805C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6805C1[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6805C7D0Ev,_ZTv0_n12_N7S6805C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S6805C7D0Ev,_ZThn372_N7S6805C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6805C7D1Ev,_ZTv0_n12_N7S6805C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S6805C7D1Ev,_ZThn372_N7S6805C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6805C1D0Ev,_ZTv0_n12_N7S6805C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn616_N7S6805C1D0Ev,_ZThn392_N7S6805C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6805C1D1Ev,_ZTv0_n12_N7S6805C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn616_N7S6805C1D1Ev,_ZThn392_N7S6805C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6805C1 = {  "S6805C1", // class name
  bases_S6805C1, 13,
  &(vtc_S6805C1[0]), // expected_vtbl_contents
  &(vtt_S6805C1[0]), // expected_vtt_contents
  ABISELECT(640,400), // object size
  NSPAIRA(_ZTI7S6805C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6805C1),117, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6805C1),14, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20077C2  {
  virtual void  v2(); // _ZN8S20077C22v2Ev
  virtual void  v3(); // _ZN8S20077C22v3Ev
  virtual void  v4(); // _ZN8S20077C22v4Ev
  ~S20077C2(); // tgen
  S20077C2(); // tgen
};
//SIG(-1 S20077C2) C1{ v1 v2 v3}


void  S20077C2 ::v2(){vfunc_called(this, "_ZN8S20077C22v2Ev");}
void  S20077C2 ::v3(){vfunc_called(this, "_ZN8S20077C22v3Ev");}
void  S20077C2 ::v4(){vfunc_called(this, "_ZN8S20077C22v4Ev");}
S20077C2 ::~S20077C2(){ note_dtor("S20077C2", this);} // tgen
S20077C2 ::S20077C2(){ note_ctor("S20077C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20077C2C1Ev();
extern void _ZN8S20077C2D1Ev();
Name_Map name_map_S20077C2[] = {
  NSPAIR(_ZN8S20077C2C1Ev),
  NSPAIR(_ZN8S20077C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20077C2[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY vtc_S20077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C2[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
Class_Descriptor cd_S20077C2 = {  "S20077C2", // class name
  0,0,//no base classes
  &(vtc_S20077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20077C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20077C2),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  S20077C3  {
  void *s20077c3f0[5];
  virtual void  v6(); // _ZN8S20077C32v6Ev
  virtual void  v7(); // _ZN8S20077C32v7Ev
  virtual void  v8(); // _ZN8S20077C32v8Ev
  virtual void  v9(); // _ZN8S20077C32v9Ev
  virtual void  v10(); // _ZN8S20077C33v10Ev
  virtual void  v11(); // _ZN8S20077C33v11Ev
  virtual void  v12(); // _ZN8S20077C33v12Ev
  virtual void  v13(); // _ZN8S20077C33v13Ev
  virtual void  v14(); // _ZN8S20077C33v14Ev
  ~S20077C3(); // tgen
  S20077C3(); // tgen
};
//SIG(-1 S20077C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S20077C3 ::v6(){vfunc_called(this, "_ZN8S20077C32v6Ev");}
void  S20077C3 ::v7(){vfunc_called(this, "_ZN8S20077C32v7Ev");}
void  S20077C3 ::v8(){vfunc_called(this, "_ZN8S20077C32v8Ev");}
void  S20077C3 ::v9(){vfunc_called(this, "_ZN8S20077C32v9Ev");}
void  S20077C3 ::v10(){vfunc_called(this, "_ZN8S20077C33v10Ev");}
void  S20077C3 ::v11(){vfunc_called(this, "_ZN8S20077C33v11Ev");}
void  S20077C3 ::v12(){vfunc_called(this, "_ZN8S20077C33v12Ev");}
void  S20077C3 ::v13(){vfunc_called(this, "_ZN8S20077C33v13Ev");}
void  S20077C3 ::v14(){vfunc_called(this, "_ZN8S20077C33v14Ev");}
S20077C3 ::~S20077C3(){ note_dtor("S20077C3", this);} // tgen
S20077C3 ::S20077C3(){ note_ctor("S20077C3", this);} // tgen

static void Test_S20077C3()
{
  extern Class_Descriptor cd_S20077C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20077C3, buf);
    S20077C3 *dp, &lv = *(dp=new (buf) S20077C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20077C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20077C3)");
    check_field_offset(lv, s20077c3f0, ABISELECT(8,4), "S20077C3.s20077c3f0");
    test_class_info(&lv, &cd_S20077C3);
    dp->~S20077C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20077C3(Test_S20077C3, "S20077C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20077C3C1Ev();
extern void _ZN8S20077C3D1Ev();
Name_Map name_map_S20077C3[] = {
  NSPAIR(_ZN8S20077C3C1Ev),
  NSPAIR(_ZN8S20077C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20077C3[];
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
static  VTBL_ENTRY vtc_S20077C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C3[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
};
extern VTBL_ENTRY _ZTI8S20077C3[];
extern  VTBL_ENTRY _ZTV8S20077C3[];
Class_Descriptor cd_S20077C3 = {  "S20077C3", // class name
  0,0,//no base classes
  &(vtc_S20077C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20077C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20077C3),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  S20077C6  : S20077C2 {
  virtual void  v5(); // _ZN8S20077C62v5Ev
  ~S20077C6(); // tgen
  S20077C6(); // tgen
};
//SIG(-1 S20077C6) C1{ BC2{ v2 v3 v4} v1}


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

static void Test_S20077C6()
{
  extern Class_Descriptor cd_S20077C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20077C6, buf);
    S20077C6 *dp, &lv = *(dp=new (buf) S20077C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20077C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20077C6)");
    check_base_class_offset(lv, (S20077C2*), 0, "S20077C6");
    test_class_info(&lv, &cd_S20077C6);
    dp->~S20077C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20077C6(Test_S20077C6, "S20077C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20077C6C1Ev();
extern void _ZN8S20077C6D1Ev();
Name_Map name_map_S20077C6[] = {
  NSPAIR(_ZN8S20077C6C1Ev),
  NSPAIR(_ZN8S20077C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
static Base_Class bases_S20077C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20077C6[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY vtc_S20077C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C6[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
Class_Descriptor cd_S20077C6 = {  "S20077C6", // class name
  bases_S20077C6, 1,
  &(vtc_S20077C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20077C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20077C6),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  S20077C7  : virtual S20077C2 , virtual S20077C6 {
  void *s20077c7f0;
  short s20077c7f1;
  int s20077c7f2;
  ~S20077C7(); // tgen
  S20077C7(); // tgen
};
//SIG(-1 S20077C7) C1{ VBC2{ v1 v2 v3} VBC3{ BC2 v4} Fp Fs Fi}


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

static void Test_S20077C7()
{
  extern Class_Descriptor cd_S20077C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20077C7, buf);
    S20077C7 *dp, &lv = *(dp=new (buf) S20077C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20077C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20077C7)");
    /*is_ambiguous_... S20077C7::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*), 0, "S20077C7");
    check_base_class_offset(lv, (S20077C2*)(S20077C6*), ABISELECT(24,16), "S20077C7");
    check_base_class_offset(lv, (S20077C6*), ABISELECT(24,16), "S20077C7");
    check_field_offset(lv, s20077c7f0, ABISELECT(8,4), "S20077C7.s20077c7f0");
    check_field_offset(lv, s20077c7f1, ABISELECT(16,8), "S20077C7.s20077c7f1");
    check_field_offset(lv, s20077c7f2, ABISELECT(20,12), "S20077C7.s20077c7f2");
    test_class_info(&lv, &cd_S20077C7);
    dp->~S20077C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20077C7(Test_S20077C7, "S20077C7", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20077C7C1Ev();
extern void _ZN8S20077C7D1Ev();
Name_Map name_map_S20077C7[] = {
  NSPAIR(_ZN8S20077C7C1Ev),
  NSPAIR(_ZN8S20077C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
static Base_Class bases_S20077C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C2,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20077C6,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20077C7[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY vtc_S20077C7[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern VTBL_ENTRY _ZTV8S20077C7[];
static  VTT_ENTRY vtt_S20077C7[] = {
  {&(_ZTV8S20077C7[7]),  7,20},
  {&(_ZTV8S20077C7[7]),  7,20},
  {&(_ZTV8S20077C7[16]),  16,20},
};
extern VTBL_ENTRY _ZTI8S20077C7[];
extern  VTBL_ENTRY _ZTV8S20077C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C7[];
Class_Descriptor cd_S20077C7 = {  "S20077C7", // class name
  bases_S20077C7, 3,
  &(vtc_S20077C7[0]), // expected_vtbl_contents
  &(vtt_S20077C7[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20077C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20077C7),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20077C7),3, //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  S20077C5  : virtual S20077C6 , S20077C3 , S20077C7 {
  void *s20077c5f0;
  virtual void  v15(); // _ZN8S20077C53v15Ev
  virtual void  v16(); // _ZN8S20077C53v16Ev
  ~S20077C5(); // tgen
  S20077C5(); // tgen
};
//SIG(-1 S20077C5) C1{ VBC2{ BC3{ v3 v4 v5} v6} BC4{ v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[5]} BC5{ VBC3 VBC2 Fp Fs Fi} v1 v2 Fp}


void  S20077C5 ::v15(){vfunc_called(this, "_ZN8S20077C53v15Ev");}
void  S20077C5 ::v16(){vfunc_called(this, "_ZN8S20077C53v16Ev");}
S20077C5 ::~S20077C5(){ note_dtor("S20077C5", this);} // tgen
S20077C5 ::S20077C5(){ note_ctor("S20077C5", this);} // tgen

static void Test_S20077C5()
{
  extern Class_Descriptor cd_S20077C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20077C5, buf);
    S20077C5 *dp, &lv = *(dp=new (buf) S20077C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20077C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20077C5)");
    check_base_class_offset(lv, (S20077C2*)(S20077C6*), ABISELECT(80,44), "S20077C5");
    check_base_class_offset(lv, (S20077C6*), ABISELECT(80,44), "S20077C5");
    check_base_class_offset(lv, (S20077C6*)(S20077C7*), ABISELECT(80,44), "S20077C5");
    check_base_class_offset(lv, (S20077C3*), 0, "S20077C5");
    /*is_ambiguous_... S20077C7::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C7*), ABISELECT(48,24), "S20077C5");
    check_base_class_offset(lv, (S20077C7*), ABISELECT(48,24), "S20077C5");
    check_field_offset(lv, s20077c5f0, ABISELECT(72,40), "S20077C5.s20077c5f0");
    test_class_info(&lv, &cd_S20077C5);
    dp->~S20077C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20077C5(Test_S20077C5, "S20077C5", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20077C5C1Ev();
extern void _ZN8S20077C5D1Ev();
Name_Map name_map_S20077C5[] = {
  NSPAIR(_ZN8S20077C5C1Ev),
  NSPAIR(_ZN8S20077C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C3;
extern VTBL_ENTRY _ZTI8S20077C3[];
extern  VTBL_ENTRY _ZTV8S20077C3[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C7;
extern VTBL_ENTRY _ZTI8S20077C7[];
extern  VTBL_ENTRY _ZTV8S20077C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C7[];
static Base_Class bases_S20077C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20077C2,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20077C6,    ABISELECT(80,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20077C2,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20077C7,    ABISELECT(48,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S20077C5[];
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
extern void _ZN8S20077C53v15Ev();
extern void _ZN8S20077C53v16Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY vtc_S20077C5[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v16Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern VTBL_ENTRY _ZTV8S20077C5[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__8S20077C5[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C7__8S20077C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
static  VTT_ENTRY vtt_S20077C5[] = {
  {&(_ZTV8S20077C5[4]),  4,35},
  {&(_tg__ZTV8S20077C7__8S20077C5[7]),  7,10},
  {&(_tg__ZTV8S20077C7__8S20077C5[7]),  7,10},
  {&(_tg__ZTV8S20077C6__8S20077C7__8S20077C5[6]),  6,10},
  {&(_ZTV8S20077C5[31]),  31,35},
  {&(_ZTV8S20077C5[22]),  22,35},
  {&(_ZTV8S20077C5[22]),  22,35},
};
extern VTBL_ENTRY _ZTI8S20077C5[];
extern  VTBL_ENTRY _ZTV8S20077C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C5[];
Class_Descriptor cd_S20077C5 = {  "S20077C5", // class name
  bases_S20077C5, 5,
  &(vtc_S20077C5[0]), // expected_vtbl_contents
  &(vtt_S20077C5[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20077C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20077C5),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20077C5),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20077C8  : virtual S20077C2 , virtual S20077C7 , S20077C6 {
  short s20077c8f0;
  long double s20077c8f1;
  virtual void  v17(); // _ZN8S20077C83v17Ev
  virtual void  v18(); // _ZN8S20077C83v18Ev
  virtual void  v19(); // _ZN8S20077C83v19Ev
  virtual void  v20(); // _ZN8S20077C83v20Ev
  ~S20077C8(); // tgen
  S20077C8(); // tgen
};
//SIG(-1 S20077C8) C1{ VBC2{ v5 v6 v7} VBC3{ VBC2 VBC4{ BC2 v8} Fp Fs Fi} BC4 v1 v2 v3 v4 Fs FD}


void  S20077C8 ::v17(){vfunc_called(this, "_ZN8S20077C83v17Ev");}
void  S20077C8 ::v18(){vfunc_called(this, "_ZN8S20077C83v18Ev");}
void  S20077C8 ::v19(){vfunc_called(this, "_ZN8S20077C83v19Ev");}
void  S20077C8 ::v20(){vfunc_called(this, "_ZN8S20077C83v20Ev");}
S20077C8 ::~S20077C8(){ note_dtor("S20077C8", this);} // tgen
S20077C8 ::S20077C8(){ note_ctor("S20077C8", this);} // tgen

static void Test_S20077C8()
{
  extern Class_Descriptor cd_S20077C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S20077C8, buf);
    S20077C8 *dp, &lv = *(dp=new (buf) S20077C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20077C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20077C8)");
    /*is_ambiguous_... S20077C8::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*), ABISELECT(32,20), "S20077C8");
    /*is_ambiguous_... S20077C7::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C7*), ABISELECT(32,20), "S20077C8");
    /*is_ambiguous_... S20077C8::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*), ABISELECT(56,36), "S20077C8");
    check_base_class_offset(lv, (S20077C6*)(S20077C7*), ABISELECT(56,36), "S20077C8");
    check_base_class_offset(lv, (S20077C7*), ABISELECT(32,20), "S20077C8");
    /*is_ambiguous_... S20077C8::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*), 0, "S20077C8");
    /*is_ambiguous_... S20077C8::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C6*), 0, "S20077C8");
    check_field_offset(lv, s20077c8f0, ABISELECT(8,4), "S20077C8.s20077c8f0");
    check_field_offset(lv, s20077c8f1, ABISELECT(16,8), "S20077C8.s20077c8f1");
    test_class_info(&lv, &cd_S20077C8);
    dp->~S20077C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20077C8(Test_S20077C8, "S20077C8", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20077C8C1Ev();
extern void _ZN8S20077C8D1Ev();
Name_Map name_map_S20077C8[] = {
  NSPAIR(_ZN8S20077C8C1Ev),
  NSPAIR(_ZN8S20077C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C7;
extern VTBL_ENTRY _ZTI8S20077C7[];
extern  VTBL_ENTRY _ZTV8S20077C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C7[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
static Base_Class bases_S20077C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20077C2,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C2,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20077C6,    ABISELECT(56,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20077C7,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20077C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20077C8[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C83v17Ev();
extern void _ZN8S20077C83v18Ev();
extern void _ZN8S20077C83v19Ev();
extern void _ZN8S20077C83v20Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY vtc_S20077C8[] = {
  ABISELECT(56,36),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v20Ev,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern VTBL_ENTRY _ZTV8S20077C8[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__8S20077C8[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C7__8S20077C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
static  VTT_ENTRY vtt_S20077C8[] = {
  {&(_ZTV8S20077C8[5]),  5,33},
  {&(_ZTV8S20077C8[20]),  20,33},
  {&(_ZTV8S20077C8[20]),  20,33},
  {&(_ZTV8S20077C8[29]),  29,33},
  {&(_tg__ZTV8S20077C7__8S20077C8[7]),  7,10},
  {&(_tg__ZTV8S20077C7__8S20077C8[7]),  7,10},
  {&(_tg__ZTV8S20077C6__8S20077C7__8S20077C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20077C8[];
extern  VTBL_ENTRY _ZTV8S20077C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C8[];
Class_Descriptor cd_S20077C8 = {  "S20077C8", // class name
  bases_S20077C8, 6,
  &(vtc_S20077C8[0]), // expected_vtbl_contents
  &(vtt_S20077C8[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20077C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20077C8),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20077C8),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20077C4  : virtual S20077C2 , virtual S20077C5 , S20077C6 , S20077C8 , virtual S20077C3 {
  __tsi64 s20077c4f0[10];
  int s20077c4f1;
  __tsi64 s20077c4f2;
  virtual void  v21(); // _ZN8S20077C43v21Ev
  virtual void  v22(); // _ZN8S20077C43v22Ev
  ~S20077C4(); // tgen
  S20077C4(); // tgen
};
//SIG(-1 S20077C4) C1{ VBC2{ v3 v4 v5} VBC3{ VBC4{ BC2 v6} BC5{ v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[5]} BC6{ VBC2 VBC4 Fp Fs Fi} v16 v17 Fp} BC4 BC7{ VBC2 VBC6 BC4 v18 v19 v20 v21 Fs FD} VBC5 v1 v2 FL[10] Fi FL}


void  S20077C4 ::v21(){vfunc_called(this, "_ZN8S20077C43v21Ev");}
void  S20077C4 ::v22(){vfunc_called(this, "_ZN8S20077C43v22Ev");}
S20077C4 ::~S20077C4(){ note_dtor("S20077C4", this);} // tgen
S20077C4 ::S20077C4(){ note_ctor("S20077C4", this);} // tgen

static void Test_S20077C4()
{
  extern Class_Descriptor cd_S20077C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,52)];
    init_test(&cd_S20077C4, buf);
    S20077C4 *dp, &lv = *(dp=new (buf) S20077C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,204), "sizeof(S20077C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20077C4)");
    /*is_ambiguous_... S20077C4::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*), ABISELECT(192,140), "S20077C4");
    /*is_ambiguous_... S20077C7::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C7*)(S20077C5*), ABISELECT(192,140), "S20077C4");
    /*is_ambiguous_... S20077C8::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C8*), ABISELECT(192,140), "S20077C4");
    /*is_ambiguous_... S20077C4::S20077C7 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C7*), ABISELECT(192,140), "S20077C4");
    /*is_ambiguous_... S20077C4::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*), ABISELECT(224,160), "S20077C4");
    check_base_class_offset(lv, (S20077C6*)(S20077C5*), ABISELECT(224,160), "S20077C4");
    check_base_class_offset(lv, (S20077C6*)(S20077C7*)(S20077C5*), ABISELECT(224,160), "S20077C4");
    /*is_ambiguous_... S20077C4::S20077C7 */ AMB_check_base_class_offset(lv, (S20077C6*)(S20077C7*), ABISELECT(224,160), "S20077C4");
    check_base_class_offset(lv, (S20077C3*)(S20077C5*), ABISELECT(144,116), "S20077C4");
    check_base_class_offset(lv, (S20077C7*)(S20077C5*), ABISELECT(192,140), "S20077C4");
    check_base_class_offset(lv, (S20077C5*), ABISELECT(144,116), "S20077C4");
    /*is_ambiguous_... S20077C4::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*), 0, "S20077C4");
    /*is_ambiguous_... S20077C4::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C6*), 0, "S20077C4");
    check_base_class_offset(lv, (S20077C7*)(S20077C8*), ABISELECT(232,164), "S20077C4");
    /*is_ambiguous_... S20077C8::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*)(S20077C8*), ABISELECT(16,4), "S20077C4");
    /*is_ambiguous_... S20077C8::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C6*)(S20077C8*), ABISELECT(16,4), "S20077C4");
    check_base_class_offset(lv, (S20077C8*), ABISELECT(16,4), "S20077C4");
    /*is_ambiguous_... S20077C4::S20077C3 */ AMB_check_base_class_offset(lv, (S20077C3*), ABISELECT(256,180), "S20077C4");
    check_field_offset(lv, s20077c4f0, ABISELECT(48,24), "S20077C4.s20077c4f0");
    check_field_offset(lv, s20077c4f1, ABISELECT(128,104), "S20077C4.s20077c4f1");
    check_field_offset(lv, s20077c4f2, ABISELECT(136,108), "S20077C4.s20077c4f2");
    test_class_info(&lv, &cd_S20077C4);
    dp->~S20077C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20077C4(Test_S20077C4, "S20077C4", ABISELECT(304,204));

#else // __cplusplus

extern void _ZN8S20077C4C1Ev();
extern void _ZN8S20077C4D1Ev();
Name_Map name_map_S20077C4[] = {
  NSPAIR(_ZN8S20077C4C1Ev),
  NSPAIR(_ZN8S20077C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C3;
extern VTBL_ENTRY _ZTI8S20077C3[];
extern  VTBL_ENTRY _ZTV8S20077C3[];
extern Class_Descriptor cd_S20077C7;
extern VTBL_ENTRY _ZTI8S20077C7[];
extern  VTBL_ENTRY _ZTV8S20077C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C7[];
extern Class_Descriptor cd_S20077C5;
extern VTBL_ENTRY _ZTI8S20077C5[];
extern  VTBL_ENTRY _ZTV8S20077C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C5[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C7;
extern VTBL_ENTRY _ZTI8S20077C7[];
extern  VTBL_ENTRY _ZTV8S20077C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C7[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C8;
extern VTBL_ENTRY _ZTI8S20077C8[];
extern  VTBL_ENTRY _ZTV8S20077C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C8[];
extern Class_Descriptor cd_S20077C3;
extern VTBL_ENTRY _ZTI8S20077C3[];
extern  VTBL_ENTRY _ZTV8S20077C3[];
static Base_Class bases_S20077C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20077C2,    ABISELECT(192,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C2,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20077C6,    ABISELECT(224,160), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //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_S20077C3,    ABISELECT(144,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20077C7,    ABISELECT(192,140), //bcp->offset
    52, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20077C5,    ABISELECT(144,116), //bcp->offset
    26, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S20077C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20077C7,    ABISELECT(232,164), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20077C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20077C6,    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
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20077C8,    ABISELECT(16,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20077C3,    ABISELECT(256,180), //bcp->offset
    82, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20077C4[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C43v21Ev();
extern void _ZN8S20077C43v22Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C83v17Ev();
extern void _ZN8S20077C83v18Ev();
extern void _ZN8S20077C83v19Ev();
extern void _ZN8S20077C83v20Ev();
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
extern void _ZN8S20077C53v15Ev();
extern void _ZN8S20077C53v16Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
static  VTBL_ENTRY vtc_S20077C4[] = {
  ABISELECT(256,180),
  ABISELECT(232,164),
  ABISELECT(224,160),
  ABISELECT(144,116),
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20077C43v22Ev,
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v16Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-180),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
};
extern VTBL_ENTRY _ZTV8S20077C4[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C83v17Ev();
extern void _ZN8S20077C83v18Ev();
extern void _ZN8S20077C83v19Ev();
extern void _ZN8S20077C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C8__8S20077C4[] = {
  ABISELECT(208,156),
  ABISELECT(216,160),
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v20Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C2__8S20077C8__8S20077C4[] = {
  0,
  0,
  0,
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__8S20077C8__8S20077C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C8__8S20077C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-208,-156),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
extern void _ZN8S20077C53v15Ev();
extern void _ZN8S20077C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C5__8S20077C4[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v16Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C78S20077C5__8S20077C4[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C78S20077C5__8S20077C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C5__8S20077C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__8S20077C5__8S20077C4[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__A1__8S20077C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C2__8S20077C7__A1__8S20077C4[] = {
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C7__A1__8S20077C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
static  VTT_ENTRY vtt_S20077C4[] = {
  {&(_ZTV8S20077C4[7]),  7,102},
  {&(_tg__ZTV8S20077C8__8S20077C4[5]),  5,13},
  {&(_tg__ZTV8S20077C2__8S20077C8__8S20077C4[5]),  5,8},
  {&(_tg__ZTV8S20077C7__8S20077C8__8S20077C4[7]),  7,10},
  {&(_tg__ZTV8S20077C6__8S20077C8__8S20077C4[6]),  6,10},
  {&(_ZTV8S20077C4[59]),  59,102},
  {&(_ZTV8S20077C4[41]),  41,102},
  {&(_ZTV8S20077C4[68]),  68,102},
  {&(_ZTV8S20077C4[59]),  59,102},
  {&(_ZTV8S20077C4[18]),  18,102},
  {&(_ZTV8S20077C4[79]),  79,102},
  {&(_ZTV8S20077C4[93]),  93,102},
  {&(_tg__ZTV8S20077C5__8S20077C4[4]),  4,15},
  {&(_tg__ZTV8S20077C78S20077C5__8S20077C4[7]),  7,10},
  {&(_tg__ZTV8S20077C78S20077C5__8S20077C4[7]),  7,10},
  {&(_tg__ZTV8S20077C6__8S20077C78S20077C5__8S20077C4[6]),  6,10},
  {&(_tg__ZTV8S20077C6__8S20077C5__8S20077C4[6]),  6,10},
  {&(_tg__ZTV8S20077C7__8S20077C5__8S20077C4[7]),  7,10},
  {&(_tg__ZTV8S20077C7__8S20077C5__8S20077C4[7]),  7,10},
  {&(_tg__ZTV8S20077C7__A1__8S20077C4[7]),  7,10},
  {&(_tg__ZTV8S20077C2__8S20077C7__A1__8S20077C4[5]),  5,8},
  {&(_tg__ZTV8S20077C6__8S20077C7__A1__8S20077C4[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20077C4[];
extern  VTBL_ENTRY _ZTV8S20077C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C4[];
Class_Descriptor cd_S20077C4 = {  "S20077C4", // class name
  bases_S20077C4, 13,
  &(vtc_S20077C4[0]), // expected_vtbl_contents
  &(vtt_S20077C4[0]), // expected_vtt_contents
  ABISELECT(304,204), // object size
  NSPAIRA(_ZTI8S20077C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20077C4),102, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20077C4),22, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20077C9_nt  {
  virtual void  v23(); // _ZN11S20077C9_nt3v23Ev
  virtual void  v24(); // _ZN11S20077C9_nt3v24Ev
  ~S20077C9_nt(); // tgen
  S20077C9_nt(); // tgen
};
//SIG(-1 S20077C9_nt) C1{ v1 v2}


void  S20077C9_nt ::v23(){vfunc_called(this, "_ZN11S20077C9_nt3v23Ev");}
void  S20077C9_nt ::v24(){vfunc_called(this, "_ZN11S20077C9_nt3v24Ev");}
S20077C9_nt ::~S20077C9_nt(){ note_dtor("S20077C9_nt", this);} // tgen
S20077C9_nt ::S20077C9_nt(){ note_ctor("S20077C9_nt", this);} // tgen

//skip512 S20077C9_nt

#else // __cplusplus

extern void _ZN11S20077C9_ntC1Ev();
extern void _ZN11S20077C9_ntD1Ev();
Name_Map name_map_S20077C9_nt[] = {
  NSPAIR(_ZN11S20077C9_ntC1Ev),
  NSPAIR(_ZN11S20077C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20077C9_nt[];
extern void _ZN11S20077C9_nt3v23Ev();
extern void _ZN11S20077C9_nt3v24Ev();
static  VTBL_ENTRY vtc_S20077C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20077C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20077C9_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20077C9_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI11S20077C9_nt[];
VTBL_ENTRY *P__ZTI11S20077C9_nt = _ZTI11S20077C9_nt; 
extern  VTBL_ENTRY _ZTV11S20077C9_nt[];
Class_Descriptor cd_S20077C9_nt = {  "S20077C9_nt", // class name
  0,0,//no base classes
  &(vtc_S20077C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20077C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20077C9_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  S20077C1  : virtual S20077C2 , virtual S20077C3 , S20077C4 , virtual S20077C9_nt {
  virtual void  v1(); // _ZN8S20077C12v1Ev
  ~S20077C1(); // tgen
  S20077C1(); // tgen
};
//SIG(1 S20077C1) C1{ VBC2{ v2 v3 v4} VBC3{ v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[5]} BC4{ VBC2 VBC5{ VBC6{ BC2 v14} BC3 BC7{ VBC2 VBC6 Fp Fs Fi} v15 v16 Fp} BC6 BC8{ VBC2 VBC7 BC6 v17 v18 v19 v20 Fs FD} VBC3 v21 v22 FL[10] Fi FL} VBC9{ v23 v24} v1}


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

static void Test_S20077C1()
{
  extern Class_Descriptor cd_S20077C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,53)];
    init_test(&cd_S20077C1, buf);
    S20077C1 *dp, &lv = *(dp=new (buf) S20077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S20077C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20077C1)");
    /*is_ambiguous_... S20077C1::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*), ABISELECT(240,164), "S20077C1");
    /*is_ambiguous_... S20077C4::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C4*), ABISELECT(240,164), "S20077C1");
    /*is_ambiguous_... S20077C7::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C7*)(S20077C5*), ABISELECT(240,164), "S20077C1");
    /*is_ambiguous_... S20077C8::S20077C2 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C8*)(S20077C4*), ABISELECT(240,164), "S20077C1");
    /*is_ambiguous_... S20077C1::S20077C7 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C7*), ABISELECT(240,164), "S20077C1");
    /*is_ambiguous_... S20077C1::S20077C3 */ AMB_check_base_class_offset(lv, (S20077C3*), ABISELECT(144,116), "S20077C1");
    /*is_ambiguous_... S20077C4::S20077C3 */ AMB_check_base_class_offset(lv, (S20077C3*)(S20077C4*), ABISELECT(144,116), "S20077C1");
    /*is_ambiguous_... S20077C1::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*), ABISELECT(272,184), "S20077C1");
    check_base_class_offset(lv, (S20077C6*)(S20077C5*), ABISELECT(272,184), "S20077C1");
    check_base_class_offset(lv, (S20077C6*)(S20077C7*)(S20077C5*), ABISELECT(272,184), "S20077C1");
    /*is_ambiguous_... S20077C1::S20077C7 */ AMB_check_base_class_offset(lv, (S20077C6*)(S20077C7*), ABISELECT(272,184), "S20077C1");
    check_base_class_offset(lv, (S20077C3*)(S20077C5*), ABISELECT(192,140), "S20077C1");
    check_base_class_offset(lv, (S20077C7*)(S20077C5*), ABISELECT(240,164), "S20077C1");
    check_base_class_offset(lv, (S20077C5*)(S20077C4*), ABISELECT(192,140), "S20077C1");
    /*is_ambiguous_... S20077C4::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*)(S20077C4*), 0, "S20077C1");
    /*is_ambiguous_... S20077C4::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C6*)(S20077C4*), 0, "S20077C1");
    check_base_class_offset(lv, (S20077C7*)(S20077C8*)(S20077C4*), ABISELECT(280,188), "S20077C1");
    /*is_ambiguous_... S20077C8::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C2*)(S20077C6*)(S20077C8*)(S20077C4*), ABISELECT(16,4), "S20077C1");
    /*is_ambiguous_... S20077C8::S20077C6 */ AMB_check_base_class_offset(lv, (S20077C6*)(S20077C8*)(S20077C4*), ABISELECT(16,4), "S20077C1");
    check_base_class_offset(lv, (S20077C8*)(S20077C4*), ABISELECT(16,4), "S20077C1");
    check_base_class_offset(lv, (S20077C4*), 0, "S20077C1");
    check_base_class_offset(lv, (S20077C9_nt*), ABISELECT(304,204), "S20077C1");
    test_class_info(&lv, &cd_S20077C1);
    dp->~S20077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20077C1(Test_S20077C1, "S20077C1", ABISELECT(320,208));

#else // __cplusplus

extern void _ZN8S20077C1C1Ev();
extern void _ZN8S20077C1D1Ev();
Name_Map name_map_S20077C1[] = {
  NSPAIR(_ZN8S20077C1C1Ev),
  NSPAIR(_ZN8S20077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C3;
extern VTBL_ENTRY _ZTI8S20077C3[];
extern  VTBL_ENTRY _ZTV8S20077C3[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C3;
extern VTBL_ENTRY _ZTI8S20077C3[];
extern  VTBL_ENTRY _ZTV8S20077C3[];
extern Class_Descriptor cd_S20077C7;
extern VTBL_ENTRY _ZTI8S20077C7[];
extern  VTBL_ENTRY _ZTV8S20077C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C7[];
extern Class_Descriptor cd_S20077C5;
extern VTBL_ENTRY _ZTI8S20077C5[];
extern  VTBL_ENTRY _ZTV8S20077C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C5[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C7;
extern VTBL_ENTRY _ZTI8S20077C7[];
extern  VTBL_ENTRY _ZTV8S20077C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C7[];
extern Class_Descriptor cd_S20077C2;
extern VTBL_ENTRY _ZTI8S20077C2[];
extern  VTBL_ENTRY _ZTV8S20077C2[];
extern Class_Descriptor cd_S20077C6;
extern VTBL_ENTRY _ZTI8S20077C6[];
extern  VTBL_ENTRY _ZTV8S20077C6[];
extern Class_Descriptor cd_S20077C8;
extern VTBL_ENTRY _ZTI8S20077C8[];
extern  VTBL_ENTRY _ZTV8S20077C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C8[];
extern Class_Descriptor cd_S20077C4;
extern VTBL_ENTRY _ZTI8S20077C4[];
extern  VTBL_ENTRY _ZTV8S20077C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C4[];
extern Class_Descriptor cd_S20077C9_nt;
extern VTBL_ENTRY _ZTI11S20077C9_nt[];
extern  VTBL_ENTRY _ZTV11S20077C9_nt[];
static Base_Class bases_S20077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20077C2,    ABISELECT(240,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C3,    ABISELECT(144,116), //bcp->offset
    28, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20077C2,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20077C6,    ABISELECT(272,184), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20077C3,    ABISELECT(192,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20077C7,    ABISELECT(240,164), //bcp->offset
    74, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20077C5,    ABISELECT(192,140), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20077C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S20077C7,    ABISELECT(280,188), //bcp->offset
    94, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20077C2,    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
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20077C6,    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
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20077C8,    ABISELECT(16,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20077C4,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20077C9_nt,    ABISELECT(304,204), //bcp->offset
    104, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20077C1[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C43v21Ev();
extern void _ZN8S20077C43v22Ev();
extern void _ZN8S20077C12v1Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C83v17Ev();
extern void _ZN8S20077C83v18Ev();
extern void _ZN8S20077C83v19Ev();
extern void _ZN8S20077C83v20Ev();
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
extern void _ZN8S20077C53v15Ev();
extern void _ZN8S20077C53v16Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN11S20077C9_nt3v23Ev();
extern void _ZN11S20077C9_nt3v24Ev();
static  VTBL_ENTRY vtc_S20077C1[] = {
  ABISELECT(304,204),
  ABISELECT(144,116),
  ABISELECT(280,188),
  ABISELECT(272,184),
  ABISELECT(192,140),
  ABISELECT(240,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20077C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20077C12v1Ev,
  ABISELECT(256,180),
  ABISELECT(264,184),
  ABISELECT(224,160),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v16Ev,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  0,
  0,
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S20077C1[0]),
  (VTBL_ENTRY)&_ZN11S20077C9_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20077C9_nt3v24Ev,
};
extern VTBL_ENTRY _ZTV8S20077C1[];
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C43v21Ev();
extern void _ZN8S20077C43v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C4__8S20077C1[] = {
  ABISELECT(144,116),
  ABISELECT(280,188),
  ABISELECT(272,184),
  ABISELECT(192,140),
  ABISELECT(240,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20077C43v22Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C83v17Ev();
extern void _ZN8S20077C83v18Ev();
extern void _ZN8S20077C83v19Ev();
extern void _ZN8S20077C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C88S20077C4__8S20077C1[] = {
  ABISELECT(256,180),
  ABISELECT(264,184),
  ABISELECT(224,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v20Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C2__8S20077C88S20077C4__8S20077C1[] = {
  0,
  0,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__8S20077C88S20077C4__8S20077C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-264,-184),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C88S20077C4__8S20077C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-180),
  (VTBL_ENTRY)&(_ZTI8S20077C8[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C78S20077C5__8S20077C4__8S20077C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
extern void _ZN8S20077C53v15Ev();
extern void _ZN8S20077C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C5__8S20077C4__8S20077C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(80,44),
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v16Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C4__8S20077C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
extern void _ZN8S20077C83v17Ev();
extern void _ZN8S20077C83v18Ev();
extern void _ZN8S20077C83v19Ev();
extern void _ZN8S20077C83v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C8__8S20077C4__8S20077C1[] = {
  ABISELECT(256,180),
  ABISELECT(264,184),
  ABISELECT(224,160),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v19Ev,
  (VTBL_ENTRY)&_ZN8S20077C83v20Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__A1__8S20077C4__8S20077C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C3__A1__8S20077C4__8S20077C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S20077C4[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
};
extern void _ZN8S20077C32v6Ev();
extern void _ZN8S20077C32v7Ev();
extern void _ZN8S20077C32v8Ev();
extern void _ZN8S20077C32v9Ev();
extern void _ZN8S20077C33v10Ev();
extern void _ZN8S20077C33v11Ev();
extern void _ZN8S20077C33v12Ev();
extern void _ZN8S20077C33v13Ev();
extern void _ZN8S20077C33v14Ev();
extern void _ZN8S20077C53v15Ev();
extern void _ZN8S20077C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C5__8S20077C1[] = {
  ABISELECT(48,24),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20077C53v16Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C78S20077C5__8S20077C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C78S20077C5__8S20077C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C5__8S20077C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__8S20077C5__8S20077C1[] = {
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20077C5[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C7__A1__8S20077C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C2__8S20077C7__A1__8S20077C1[] = {
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
};
extern void _ZN8S20077C22v2Ev();
extern void _ZN8S20077C22v3Ev();
extern void _ZN8S20077C22v4Ev();
extern void _ZN8S20077C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20077C6__8S20077C7__A1__8S20077C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20077C7[0]),
  (VTBL_ENTRY)&_ZN8S20077C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20077C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20077C62v5Ev,
};
static  VTT_ENTRY vtt_S20077C1[] = {
  {&(_ZTV8S20077C1[8]),  8,110},
  {&(_tg__ZTV8S20077C4__8S20077C1[7]),  7,13},
  {&(_tg__ZTV8S20077C88S20077C4__8S20077C1[5]),  5,13},
  {&(_tg__ZTV8S20077C2__8S20077C88S20077C4__8S20077C1[5]),  5,8},
  {&(_tg__ZTV8S20077C7__8S20077C88S20077C4__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C6__8S20077C88S20077C4__8S20077C1[6]),  6,10},
  {&(_tg__ZTV8S20077C78S20077C5__8S20077C4__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C5__8S20077C4__8S20077C1[15]),  15,26},
  {&(_tg__ZTV8S20077C6__8S20077C4__8S20077C1[6]),  6,10},
  {&(_tg__ZTV8S20077C78S20077C5__8S20077C4__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C8__8S20077C4__8S20077C1[5]),  5,13},
  {&(_tg__ZTV8S20077C7__A1__8S20077C4__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C3__A1__8S20077C4__8S20077C1[11]),  11,20},
  {&(_ZTV8S20077C1[81]),  81,110},
  {&(_ZTV8S20077C1[39]),  39,110},
  {&(_ZTV8S20077C1[63]),  63,110},
  {&(_ZTV8S20077C1[90]),  90,110},
  {&(_ZTV8S20077C1[81]),  81,110},
  {&(_ZTV8S20077C1[20]),  20,110},
  {&(_ZTV8S20077C1[101]),  101,110},
  {&(_ZTV8S20077C1[108]),  108,110},
  {&(_tg__ZTV8S20077C5__8S20077C1[4]),  4,15},
  {&(_tg__ZTV8S20077C78S20077C5__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C78S20077C5__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C6__8S20077C78S20077C5__8S20077C1[6]),  6,10},
  {&(_tg__ZTV8S20077C6__8S20077C5__8S20077C1[6]),  6,10},
  {&(_tg__ZTV8S20077C7__8S20077C5__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C7__8S20077C5__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C7__A1__8S20077C1[7]),  7,10},
  {&(_tg__ZTV8S20077C2__8S20077C7__A1__8S20077C1[5]),  5,8},
  {&(_tg__ZTV8S20077C6__8S20077C7__A1__8S20077C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20077C1[];
extern  VTBL_ENTRY _ZTV8S20077C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20077C1[];
Class_Descriptor cd_S20077C1 = {  "S20077C1", // class name
  bases_S20077C1, 15,
  &(vtc_S20077C1[0]), // expected_vtbl_contents
  &(vtt_S20077C1[0]), // expected_vtt_contents
  ABISELECT(320,208), // object size
  NSPAIRA(_ZTI8S20077C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20077C1),110, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20077C1),31, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7090C2  {
  int s7090c2f0;
  virtual void  v7(); // _ZN7S7090C22v7Ev
  virtual void  v8(); // _ZN7S7090C22v8Ev
  virtual void  v9(); // _ZN7S7090C22v9Ev
  virtual void  v10(); // _ZN7S7090C23v10Ev
  virtual void  v11(); // _ZN7S7090C23v11Ev
  ~S7090C2(); // tgen
  S7090C2(); // tgen
};
//SIG(-1 S7090C2) C1{ v1 v2 v3 v4 v5 Fi}


void  S7090C2 ::v7(){vfunc_called(this, "_ZN7S7090C22v7Ev");}
void  S7090C2 ::v8(){vfunc_called(this, "_ZN7S7090C22v8Ev");}
void  S7090C2 ::v9(){vfunc_called(this, "_ZN7S7090C22v9Ev");}
void  S7090C2 ::v10(){vfunc_called(this, "_ZN7S7090C23v10Ev");}
void  S7090C2 ::v11(){vfunc_called(this, "_ZN7S7090C23v11Ev");}
S7090C2 ::~S7090C2(){ note_dtor("S7090C2", this);} // tgen
S7090C2 ::S7090C2(){ note_ctor("S7090C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7090C2C1Ev();
extern void _ZN7S7090C2D1Ev();
Name_Map name_map_S7090C2[] = {
  NSPAIR(_ZN7S7090C2C1Ev),
  NSPAIR(_ZN7S7090C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7090C2[];
extern void _ZN7S7090C22v7Ev();
extern void _ZN7S7090C22v8Ev();
extern void _ZN7S7090C22v9Ev();
extern void _ZN7S7090C23v10Ev();
extern void _ZN7S7090C23v11Ev();
static  VTBL_ENTRY vtc_S7090C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C2[0]),
  (VTBL_ENTRY)&_ZN7S7090C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7090C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7090C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7090C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7090C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S7090C2[];
extern  VTBL_ENTRY _ZTV7S7090C2[];
Class_Descriptor cd_S7090C2 = {  "S7090C2", // class name
  0,0,//no base classes
  &(vtc_S7090C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7090C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7090C2),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  S7090C5  {
  virtual void  v12(); // _ZN7S7090C53v12Ev
  virtual void  v13(); // _ZN7S7090C53v13Ev
  virtual void  v14(); // _ZN7S7090C53v14Ev
  virtual void  v15(); // _ZN7S7090C53v15Ev
  virtual void  v16(); // _ZN7S7090C53v16Ev
  virtual void  v17(); // _ZN7S7090C53v17Ev
  virtual void  v18(); // _ZN7S7090C53v18Ev
  ~S7090C5(); // tgen
  S7090C5(); // tgen
};
//SIG(-1 S7090C5) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S7090C5 ::v12(){vfunc_called(this, "_ZN7S7090C53v12Ev");}
void  S7090C5 ::v13(){vfunc_called(this, "_ZN7S7090C53v13Ev");}
void  S7090C5 ::v14(){vfunc_called(this, "_ZN7S7090C53v14Ev");}
void  S7090C5 ::v15(){vfunc_called(this, "_ZN7S7090C53v15Ev");}
void  S7090C5 ::v16(){vfunc_called(this, "_ZN7S7090C53v16Ev");}
void  S7090C5 ::v17(){vfunc_called(this, "_ZN7S7090C53v17Ev");}
void  S7090C5 ::v18(){vfunc_called(this, "_ZN7S7090C53v18Ev");}
S7090C5 ::~S7090C5(){ note_dtor("S7090C5", this);} // tgen
S7090C5 ::S7090C5(){ note_ctor("S7090C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7090C5C1Ev();
extern void _ZN7S7090C5D1Ev();
Name_Map name_map_S7090C5[] = {
  NSPAIR(_ZN7S7090C5C1Ev),
  NSPAIR(_ZN7S7090C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7090C5[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
static  VTBL_ENTRY vtc_S7090C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C5[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
};
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
Class_Descriptor cd_S7090C5 = {  "S7090C5", // class name
  0,0,//no base classes
  &(vtc_S7090C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7090C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7090C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7090C6  : virtual S7090C5 {
  long double s7090c6f0[9];
  virtual void  v19(); // _ZN7S7090C63v19Ev
  virtual void  v20(); // _ZN7S7090C63v20Ev
  virtual void  v21(); // _ZN7S7090C63v21Ev
  ~S7090C6(); // tgen
  S7090C6(); // tgen
};
//SIG(-1 S7090C6) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10} v1 v2 v3 FD[9]}


void  S7090C6 ::v19(){vfunc_called(this, "_ZN7S7090C63v19Ev");}
void  S7090C6 ::v20(){vfunc_called(this, "_ZN7S7090C63v20Ev");}
void  S7090C6 ::v21(){vfunc_called(this, "_ZN7S7090C63v21Ev");}
S7090C6 ::~S7090C6(){ note_dtor("S7090C6", this);} // tgen
S7090C6 ::S7090C6(){ note_ctor("S7090C6", this);} // tgen

static void Test_S7090C6()
{
  extern Class_Descriptor cd_S7090C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S7090C6, buf);
    S7090C6 *dp, &lv = *(dp=new (buf) S7090C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S7090C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7090C6)");
    check_base_class_offset(lv, (S7090C5*), 0, "S7090C6");
    check_field_offset(lv, s7090c6f0, ABISELECT(16,4), "S7090C6.s7090c6f0");
    test_class_info(&lv, &cd_S7090C6);
    dp->~S7090C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7090C6(Test_S7090C6, "S7090C6", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S7090C6C1Ev();
extern void _ZN7S7090C6D1Ev();
Name_Map name_map_S7090C6[] = {
  NSPAIR(_ZN7S7090C6C1Ev),
  NSPAIR(_ZN7S7090C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
static Base_Class bases_S7090C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7090C5,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7090C6[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
static  VTBL_ENTRY vtc_S7090C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
};
extern VTBL_ENTRY _ZTV7S7090C6[];
static  VTT_ENTRY vtt_S7090C6[] = {
  {&(_ZTV7S7090C6[10]),  10,20},
  {&(_ZTV7S7090C6[10]),  10,20},
};
extern VTBL_ENTRY _ZTI7S7090C6[];
extern  VTBL_ENTRY _ZTV7S7090C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C6[];
Class_Descriptor cd_S7090C6 = {  "S7090C6", // class name
  bases_S7090C6, 1,
  &(vtc_S7090C6[0]), // expected_vtbl_contents
  &(vtt_S7090C6[0]), // expected_vtt_contents
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S7090C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7090C6),20, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7090C6),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  S7090C7  : S7090C5 {
  virtual void  v22(); // _ZN7S7090C73v22Ev
  ~S7090C7(); // tgen
  S7090C7(); // tgen
};
//SIG(-1 S7090C7) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


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

static void Test_S7090C7()
{
  extern Class_Descriptor cd_S7090C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7090C7, buf);
    S7090C7 *dp, &lv = *(dp=new (buf) S7090C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7090C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7090C7)");
    check_base_class_offset(lv, (S7090C5*), 0, "S7090C7");
    test_class_info(&lv, &cd_S7090C7);
    dp->~S7090C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7090C7(Test_S7090C7, "S7090C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7090C7C1Ev();
extern void _ZN7S7090C7D1Ev();
Name_Map name_map_S7090C7[] = {
  NSPAIR(_ZN7S7090C7C1Ev),
  NSPAIR(_ZN7S7090C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
static Base_Class bases_S7090C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7090C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7090C7[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
static  VTBL_ENTRY vtc_S7090C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C7[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
};
extern VTBL_ENTRY _ZTI7S7090C7[];
extern  VTBL_ENTRY _ZTV7S7090C7[];
Class_Descriptor cd_S7090C7 = {  "S7090C7", // class name
  bases_S7090C7, 1,
  &(vtc_S7090C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7090C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7090C7),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  S7090C4  : virtual S7090C5 , S7090C6 , virtual S7090C7 {
  long double s7090c4f0;
  virtual void  v23(); // _ZN7S7090C43v23Ev
  ~S7090C4(); // tgen
  S7090C4(); // tgen
};
//SIG(-1 S7090C4) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8} BC3{ VBC2 v9 v10 v11 FD[9]} VBC4{ BC2 v12} v1 FD}


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

static void Test_S7090C4()
{
  extern Class_Descriptor cd_S7090C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S7090C4, buf);
    S7090C4 *dp, &lv = *(dp=new (buf) S7090C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S7090C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7090C4)");
    /*is_ambiguous_... S7090C4::S7090C5 */ AMB_check_base_class_offset(lv, (S7090C5*), 0, "S7090C4");
    check_base_class_offset(lv, (S7090C5*)(S7090C6*), 0, "S7090C4");
    check_base_class_offset(lv, (S7090C6*), 0, "S7090C4");
    check_base_class_offset(lv, (S7090C5*)(S7090C7*), ABISELECT(176,124), "S7090C4");
    check_base_class_offset(lv, (S7090C7*), ABISELECT(176,124), "S7090C4");
    check_field_offset(lv, s7090c4f0, ABISELECT(160,112), "S7090C4.s7090c4f0");
    test_class_info(&lv, &cd_S7090C4);
    dp->~S7090C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7090C4(Test_S7090C4, "S7090C4", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S7090C4C1Ev();
extern void _ZN7S7090C4D1Ev();
Name_Map name_map_S7090C4[] = {
  NSPAIR(_ZN7S7090C4C1Ev),
  NSPAIR(_ZN7S7090C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C6;
extern VTBL_ENTRY _ZTI7S7090C6[];
extern  VTBL_ENTRY _ZTV7S7090C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C6[];
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C7;
extern VTBL_ENTRY _ZTI7S7090C7[];
extern  VTBL_ENTRY _ZTV7S7090C7[];
static Base_Class bases_S7090C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7090C5,    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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7090C6,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7090C5,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7090C7,    ABISELECT(176,124), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7090C4[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C43v23Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
static  VTBL_ENTRY vtc_S7090C4[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C4[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7090C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7090C4[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7090C4[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C6__7S7090C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
};
static  VTT_ENTRY vtt_S7090C4[] = {
  {&(_ZTV7S7090C4[11]),  11,40},
  {&(_tg__ZTV7S7090C6__7S7090C4[10]),  10,20},
  {&(_tg__ZTV7S7090C6__7S7090C4[10]),  10,20},
  {&(_ZTV7S7090C4[11]),  11,40},
  {&(_ZTV7S7090C4[32]),  32,40},
};
extern VTBL_ENTRY _ZTI7S7090C4[];
extern  VTBL_ENTRY _ZTV7S7090C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C4[];
Class_Descriptor cd_S7090C4 = {  "S7090C4", // class name
  bases_S7090C4, 4,
  &(vtc_S7090C4[0]), // expected_vtbl_contents
  &(vtt_S7090C4[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S7090C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7090C4),40, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7090C4),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7090C8  {
  virtual void  v24(); // _ZN7S7090C83v24Ev
  virtual void  v25(); // _ZN7S7090C83v25Ev
  virtual void  v26(); // _ZN7S7090C83v26Ev
  ~S7090C8(); // tgen
  S7090C8(); // tgen
};
//SIG(-1 S7090C8) C1{ v1 v2 v3}


void  S7090C8 ::v24(){vfunc_called(this, "_ZN7S7090C83v24Ev");}
void  S7090C8 ::v25(){vfunc_called(this, "_ZN7S7090C83v25Ev");}
void  S7090C8 ::v26(){vfunc_called(this, "_ZN7S7090C83v26Ev");}
S7090C8 ::~S7090C8(){ note_dtor("S7090C8", this);} // tgen
S7090C8 ::S7090C8(){ note_ctor("S7090C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7090C8C1Ev();
extern void _ZN7S7090C8D1Ev();
Name_Map name_map_S7090C8[] = {
  NSPAIR(_ZN7S7090C8C1Ev),
  NSPAIR(_ZN7S7090C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7090C8[];
extern void _ZN7S7090C83v24Ev();
extern void _ZN7S7090C83v25Ev();
extern void _ZN7S7090C83v26Ev();
static  VTBL_ENTRY vtc_S7090C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C8[0]),
  (VTBL_ENTRY)&_ZN7S7090C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7090C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7090C83v26Ev,
};
extern VTBL_ENTRY _ZTI7S7090C8[];
extern  VTBL_ENTRY _ZTV7S7090C8[];
Class_Descriptor cd_S7090C8 = {  "S7090C8", // class name
  0,0,//no base classes
  &(vtc_S7090C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7090C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7090C8),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  S7090C3  : virtual S7090C4 , S7090C7 , S7090C6 , S7090C8 {
  virtual  ~S7090C3(); // _ZN7S7090C3D2Ev
  virtual void  v27(); // _ZN7S7090C33v27Ev
  virtual void  v28(); // _ZN7S7090C33v28Ev
  virtual void  v29(); // _ZN7S7090C33v29Ev
  virtual void  v30(); // _ZN7S7090C33v30Ev
  virtual void  v31(); // _ZN7S7090C33v31Ev
  virtual void  v32(); // _ZN7S7090C33v32Ev
  virtual void  v33(); // _ZN7S7090C33v33Ev
  virtual void  v34(); // _ZN7S7090C33v34Ev
  S7090C3(); // tgen
};
//SIG(-1 S7090C3) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13 v14 v15} BC4{ VBC3 v16 v17 v18 FD[9]} VBC5{ BC3 v19} v20 FD} BC5 BC4 BC6{ v21 v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S7090C3 ::~S7090C3(){ note_dtor("S7090C3", this);}
void  S7090C3 ::v27(){vfunc_called(this, "_ZN7S7090C33v27Ev");}
void  S7090C3 ::v28(){vfunc_called(this, "_ZN7S7090C33v28Ev");}
void  S7090C3 ::v29(){vfunc_called(this, "_ZN7S7090C33v29Ev");}
void  S7090C3 ::v30(){vfunc_called(this, "_ZN7S7090C33v30Ev");}
void  S7090C3 ::v31(){vfunc_called(this, "_ZN7S7090C33v31Ev");}
void  S7090C3 ::v32(){vfunc_called(this, "_ZN7S7090C33v32Ev");}
void  S7090C3 ::v33(){vfunc_called(this, "_ZN7S7090C33v33Ev");}
void  S7090C3 ::v34(){vfunc_called(this, "_ZN7S7090C33v34Ev");}
S7090C3 ::S7090C3(){ note_ctor("S7090C3", this);} // tgen

static void Test_S7090C3()
{
  extern Class_Descriptor cd_S7090C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,63)];
    init_test(&cd_S7090C3, buf);
    S7090C3 *dp, &lv = *(dp=new (buf) S7090C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S7090C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7090C3)");
    /*is_ambiguous_... S7090C4::S7090C5 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C4*), ABISELECT(192,120), "S7090C3");
    check_base_class_offset(lv, (S7090C5*)(S7090C6*)(S7090C4*), ABISELECT(192,120), "S7090C3");
    /*is_ambiguous_... S7090C3::S7090C6 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C6*), ABISELECT(192,120), "S7090C3");
    check_base_class_offset(lv, (S7090C6*)(S7090C4*), ABISELECT(192,120), "S7090C3");
    /*is_ambiguous_... S7090C3::S7090C7 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C7*), ABISELECT(368,244), "S7090C3");
    check_base_class_offset(lv, (S7090C7*)(S7090C4*), ABISELECT(368,244), "S7090C3");
    check_base_class_offset(lv, (S7090C4*), ABISELECT(192,120), "S7090C3");
    /*is_ambiguous_... S7090C3::S7090C7 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C7*), 0, "S7090C3");
    /*is_ambiguous_... S7090C3::S7090C7 */ AMB_check_base_class_offset(lv, (S7090C7*), 0, "S7090C3");
    /*is_ambiguous_... S7090C3::S7090C6 */ AMB_check_base_class_offset(lv, (S7090C6*), ABISELECT(16,4), "S7090C3");
    check_base_class_offset(lv, (S7090C8*), ABISELECT(176,116), "S7090C3");
    test_class_info(&lv, &cd_S7090C3);
    dp->~S7090C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7090C3(Test_S7090C3, "S7090C3", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN7S7090C3C1Ev();
extern void _ZN7S7090C3D2Ev();
Name_Map name_map_S7090C3[] = {
  NSPAIR(_ZN7S7090C3C1Ev),
  NSPAIR(_ZN7S7090C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C6;
extern VTBL_ENTRY _ZTI7S7090C6[];
extern  VTBL_ENTRY _ZTV7S7090C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C6[];
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C7;
extern VTBL_ENTRY _ZTI7S7090C7[];
extern  VTBL_ENTRY _ZTV7S7090C7[];
extern Class_Descriptor cd_S7090C4;
extern VTBL_ENTRY _ZTI7S7090C4[];
extern  VTBL_ENTRY _ZTV7S7090C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C4[];
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C7;
extern VTBL_ENTRY _ZTI7S7090C7[];
extern  VTBL_ENTRY _ZTV7S7090C7[];
extern Class_Descriptor cd_S7090C6;
extern VTBL_ENTRY _ZTI7S7090C6[];
extern  VTBL_ENTRY _ZTV7S7090C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C6[];
extern Class_Descriptor cd_S7090C8;
extern VTBL_ENTRY _ZTI7S7090C8[];
extern  VTBL_ENTRY _ZTV7S7090C8[];
static Base_Class bases_S7090C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7090C5,    ABISELECT(192,120), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7090C6,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7090C5,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7090C7,    ABISELECT(368,244), //bcp->offset
    74, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7090C4,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7090C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7090C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7090C6,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7090C8,    ABISELECT(176,116), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7090C3[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
extern void _ZN7S7090C3D1Ev();
extern void _ZN7S7090C3D0Ev();
extern void _ZN7S7090C33v27Ev();
extern void _ZN7S7090C33v28Ev();
extern void _ZN7S7090C33v29Ev();
extern void _ZN7S7090C33v30Ev();
extern void _ZN7S7090C33v31Ev();
extern void _ZN7S7090C33v32Ev();
extern void _ZN7S7090C33v33Ev();
extern void _ZN7S7090C33v34Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C83v24Ev();
extern void _ZN7S7090C83v25Ev();
extern void _ZN7S7090C83v26Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C43v23Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
static  VTBL_ENTRY vtc_S7090C3[] = {
  ABISELECT(368,244),
  ABISELECT(192,120),
  ABISELECT(192,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7090C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7090C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v33Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v34Ev,
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7090C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7090C83v26Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7090C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7090C3[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C6__A1__7S7090C3[] = {
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  ABISELECT(176,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C5__7S7090C6__A1__7S7090C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C4__7S7090C3[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C4[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7090C43v23Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C67S7090C4__7S7090C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C7__7S7090C4__7S7090C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7090C4[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
};
static  VTT_ENTRY vtt_S7090C3[] = {
  {&(_ZTV7S7090C3[5]),  5,92},
  {&(_tg__ZTV7S7090C6__A1__7S7090C3[10]),  10,20},
  {&(_tg__ZTV7S7090C5__7S7090C6__A1__7S7090C3[9]),  9,16},
  {&(_ZTV7S7090C3[63]),  63,92},
  {&(_ZTV7S7090C3[63]),  63,92},
  {&(_ZTV7S7090C3[84]),  84,92},
  {&(_ZTV7S7090C3[33]),  33,92},
  {&(_tg__ZTV7S7090C4__7S7090C3[11]),  11,22},
  {&(_tg__ZTV7S7090C67S7090C4__7S7090C3[10]),  10,20},
  {&(_tg__ZTV7S7090C67S7090C4__7S7090C3[10]),  10,20},
  {&(_tg__ZTV7S7090C4__7S7090C3[11]),  11,22},
  {&(_tg__ZTV7S7090C7__7S7090C4__7S7090C3[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7090C3[];
extern  VTBL_ENTRY _ZTV7S7090C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C3[];
Class_Descriptor cd_S7090C3 = {  "S7090C3", // class name
  bases_S7090C3, 9,
  &(vtc_S7090C3[0]), // expected_vtbl_contents
  &(vtt_S7090C3[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI7S7090C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7090C3),92, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7090C3),12, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7090C1  : S7090C2 , S7090C3 {
  short s7090c1f0[2];
  int s7090c1f1;
  virtual  ~S7090C1(); // _ZN7S7090C1D2Ev
  virtual void  v1(); // _ZN7S7090C12v1Ev
  virtual void  v2(); // _ZN7S7090C12v2Ev
  virtual void  v3(); // _ZN7S7090C12v3Ev
  virtual void  v4(); // _ZN7S7090C12v4Ev
  virtual void  v5(); // _ZN7S7090C12v5Ev
  virtual void  v6(); // _ZN7S7090C12v6Ev
  S7090C1(); // tgen
};
//SIG(1 S7090C1) C1{ BC2{ v7 v8 v9 v10 v11 Fi} BC3{ VBC4{ VBC5{ v12 v13 v14 v15 v16 v17 v18} BC6{ VBC5 v19 v20 v21 FD[9]} VBC7{ BC5 v22} v23 FD} BC7 BC6 BC8{ v24 v25 v26} vd v27 v28 v29 v30 v31 v32 v33 v34} vd v1 v2 v3 v4 v5 v6 Fs[2] Fi}


 S7090C1 ::~S7090C1(){ note_dtor("S7090C1", this);}
void  S7090C1 ::v1(){vfunc_called(this, "_ZN7S7090C12v1Ev");}
void  S7090C1 ::v2(){vfunc_called(this, "_ZN7S7090C12v2Ev");}
void  S7090C1 ::v3(){vfunc_called(this, "_ZN7S7090C12v3Ev");}
void  S7090C1 ::v4(){vfunc_called(this, "_ZN7S7090C12v4Ev");}
void  S7090C1 ::v5(){vfunc_called(this, "_ZN7S7090C12v5Ev");}
void  S7090C1 ::v6(){vfunc_called(this, "_ZN7S7090C12v6Ev");}
S7090C1 ::S7090C1(){ note_ctor("S7090C1", this);} // tgen

static void Test_S7090C1()
{
  extern Class_Descriptor cd_S7090C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,67)];
    init_test(&cd_S7090C1, buf);
    S7090C1 *dp, &lv = *(dp=new (buf) S7090C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,264), "sizeof(S7090C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7090C1)");
    check_base_class_offset(lv, (S7090C2*), 0, "S7090C1");
    /*is_ambiguous_... S7090C4::S7090C5 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C4*), ABISELECT(208,136), "S7090C1");
    check_base_class_offset(lv, (S7090C5*)(S7090C6*)(S7090C4*), ABISELECT(208,136), "S7090C1");
    /*is_ambiguous_... S7090C3::S7090C6 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C6*)(S7090C3*), ABISELECT(208,136), "S7090C1");
    check_base_class_offset(lv, (S7090C6*)(S7090C4*), ABISELECT(208,136), "S7090C1");
    /*is_ambiguous_... S7090C1::S7090C7 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C7*), ABISELECT(384,260), "S7090C1");
    check_base_class_offset(lv, (S7090C7*)(S7090C4*), ABISELECT(384,260), "S7090C1");
    check_base_class_offset(lv, (S7090C4*)(S7090C3*), ABISELECT(208,136), "S7090C1");
    /*is_ambiguous_... S7090C3::S7090C7 */ AMB_check_base_class_offset(lv, (S7090C5*)(S7090C7*)(S7090C3*), ABISELECT(16,8), "S7090C1");
    /*is_ambiguous_... S7090C3::S7090C7 */ AMB_check_base_class_offset(lv, (S7090C7*)(S7090C3*), ABISELECT(16,8), "S7090C1");
    /*is_ambiguous_... S7090C3::S7090C6 */ AMB_check_base_class_offset(lv, (S7090C6*)(S7090C3*), ABISELECT(32,12), "S7090C1");
    check_base_class_offset(lv, (S7090C8*)(S7090C3*), ABISELECT(192,124), "S7090C1");
    check_base_class_offset(lv, (S7090C3*), ABISELECT(16,8), "S7090C1");
    check_field_offset(lv, s7090c1f0, ABISELECT(200,128), "S7090C1.s7090c1f0");
    check_field_offset(lv, s7090c1f1, ABISELECT(204,132), "S7090C1.s7090c1f1");
    test_class_info(&lv, &cd_S7090C1);
    dp->~S7090C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7090C1(Test_S7090C1, "S7090C1", ABISELECT(400,264));

#else // __cplusplus

extern void _ZN7S7090C1C1Ev();
extern void _ZN7S7090C1D2Ev();
Name_Map name_map_S7090C1[] = {
  NSPAIR(_ZN7S7090C1C1Ev),
  NSPAIR(_ZN7S7090C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7090C2;
extern VTBL_ENTRY _ZTI7S7090C2[];
extern  VTBL_ENTRY _ZTV7S7090C2[];
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C6;
extern VTBL_ENTRY _ZTI7S7090C6[];
extern  VTBL_ENTRY _ZTV7S7090C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C6[];
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C7;
extern VTBL_ENTRY _ZTI7S7090C7[];
extern  VTBL_ENTRY _ZTV7S7090C7[];
extern Class_Descriptor cd_S7090C4;
extern VTBL_ENTRY _ZTI7S7090C4[];
extern  VTBL_ENTRY _ZTV7S7090C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C4[];
extern Class_Descriptor cd_S7090C5;
extern VTBL_ENTRY _ZTI7S7090C5[];
extern  VTBL_ENTRY _ZTV7S7090C5[];
extern Class_Descriptor cd_S7090C7;
extern VTBL_ENTRY _ZTI7S7090C7[];
extern  VTBL_ENTRY _ZTV7S7090C7[];
extern Class_Descriptor cd_S7090C6;
extern VTBL_ENTRY _ZTI7S7090C6[];
extern  VTBL_ENTRY _ZTV7S7090C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C6[];
extern Class_Descriptor cd_S7090C8;
extern VTBL_ENTRY _ZTI7S7090C8[];
extern  VTBL_ENTRY _ZTV7S7090C8[];
extern Class_Descriptor cd_S7090C3;
extern VTBL_ENTRY _ZTI7S7090C3[];
extern  VTBL_ENTRY _ZTV7S7090C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C3[];
static Base_Class bases_S7090C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7090C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7090C5,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7090C6,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7090C5,    ABISELECT(384,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7090C7,    ABISELECT(384,260), //bcp->offset
    92, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7090C4,    ABISELECT(208,136), //bcp->offset
    66, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7090C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7090C7,    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
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7090C6,    ABISELECT(32,12), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7090C8,    ABISELECT(192,124), //bcp->offset
    61, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S7090C3,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //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 _ZTI7S7090C1[];
extern void _ZN7S7090C22v7Ev();
extern void _ZN7S7090C22v8Ev();
extern void _ZN7S7090C22v9Ev();
extern void _ZN7S7090C23v10Ev();
extern void _ZN7S7090C23v11Ev();
extern void _ZN7S7090C1D1Ev();
extern void _ZN7S7090C1D0Ev();
extern void _ZN7S7090C12v1Ev();
extern void _ZN7S7090C12v2Ev();
extern void _ZN7S7090C12v3Ev();
extern void _ZN7S7090C12v4Ev();
extern void _ZN7S7090C12v5Ev();
extern void _ZN7S7090C12v6Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
extern void ABISELECT(_ZThn16_N7S7090C1D1Ev,_ZThn8_N7S7090C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7090C1D0Ev,_ZThn8_N7S7090C1D0Ev)();
extern void _ZN7S7090C33v27Ev();
extern void _ZN7S7090C33v28Ev();
extern void _ZN7S7090C33v29Ev();
extern void _ZN7S7090C33v30Ev();
extern void _ZN7S7090C33v31Ev();
extern void _ZN7S7090C33v32Ev();
extern void _ZN7S7090C33v33Ev();
extern void _ZN7S7090C33v34Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C83v24Ev();
extern void _ZN7S7090C83v25Ev();
extern void _ZN7S7090C83v26Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C43v23Ev();
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
static  VTBL_ENTRY vtc_S7090C1[] = {
  ABISELECT(384,260),
  ABISELECT(208,136),
  ABISELECT(208,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C1[0]),
  (VTBL_ENTRY)&_ZN7S7090C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7090C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7090C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7090C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7090C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7090C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7090C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7090C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7090C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7090C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7090C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7090C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7090C12v6Ev,
  ABISELECT(368,252),
  ABISELECT(192,128),
  ABISELECT(192,128),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7090C1[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7090C1D1Ev,_ZThn8_N7S7090C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7090C1D0Ev,_ZThn8_N7S7090C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7090C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v33Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v34Ev,
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7090C1[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI7S7090C1[0]),
  (VTBL_ENTRY)&_ZN7S7090C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7090C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7090C83v26Ev,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S7090C1[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7090C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-260),
  (VTBL_ENTRY)&(_ZTI7S7090C1[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7090C1[];
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
extern void _ZN7S7090C3D1Ev();
extern void _ZN7S7090C3D0Ev();
extern void _ZN7S7090C33v27Ev();
extern void _ZN7S7090C33v28Ev();
extern void _ZN7S7090C33v29Ev();
extern void _ZN7S7090C33v30Ev();
extern void _ZN7S7090C33v31Ev();
extern void _ZN7S7090C33v32Ev();
extern void _ZN7S7090C33v33Ev();
extern void _ZN7S7090C33v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C3__7S7090C1[] = {
  ABISELECT(368,252),
  ABISELECT(192,128),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7090C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7090C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v31Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v32Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v33Ev,
  (VTBL_ENTRY)&_ZN7S7090C33v34Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C67S7090C3__A1__7S7090C1[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C5__7S7090C67S7090C3__A1__7S7090C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C4__7S7090C3__7S7090C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7090C43v23Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C7__7S7090C3__7S7090C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-252),
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C6__A1__7S7090C3__7S7090C1[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7090C3[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
extern void _ZN7S7090C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C4__7S7090C1[] = {
  ABISELECT(176,124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C4[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7090C43v23Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C63v19Ev();
extern void _ZN7S7090C63v20Ev();
extern void _ZN7S7090C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C67S7090C4__7S7090C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7090C6[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7090C63v21Ev,
};
extern void _ZN7S7090C53v12Ev();
extern void _ZN7S7090C53v13Ev();
extern void _ZN7S7090C53v14Ev();
extern void _ZN7S7090C53v15Ev();
extern void _ZN7S7090C53v16Ev();
extern void _ZN7S7090C53v17Ev();
extern void _ZN7S7090C53v18Ev();
extern void _ZN7S7090C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7090C7__7S7090C4__7S7090C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S7090C4[0]),
  (VTBL_ENTRY)&_ZN7S7090C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7090C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7090C73v22Ev,
};
static  VTT_ENTRY vtt_S7090C1[] = {
  {&(_ZTV7S7090C1[5]),  5,110},
  {&(_tg__ZTV7S7090C3__7S7090C1[5]),  5,23},
  {&(_tg__ZTV7S7090C67S7090C3__A1__7S7090C1[10]),  10,20},
  {&(_tg__ZTV7S7090C5__7S7090C67S7090C3__A1__7S7090C1[9]),  9,16},
  {&(_tg__ZTV7S7090C4__7S7090C3__7S7090C1[15]),  15,26},
  {&(_tg__ZTV7S7090C4__7S7090C3__7S7090C1[15]),  15,26},
  {&(_tg__ZTV7S7090C7__7S7090C3__7S7090C1[10]),  10,18},
  {&(_tg__ZTV7S7090C6__A1__7S7090C3__7S7090C1[10]),  10,20},
  {&(_ZTV7S7090C1[23]),  23,110},
  {&(_ZTV7S7090C1[81]),  81,110},
  {&(_ZTV7S7090C1[81]),  81,110},
  {&(_ZTV7S7090C1[102]),  102,110},
  {&(_ZTV7S7090C1[51]),  51,110},
  {&(_tg__ZTV7S7090C4__7S7090C1[11]),  11,22},
  {&(_tg__ZTV7S7090C67S7090C4__7S7090C1[10]),  10,20},
  {&(_tg__ZTV7S7090C67S7090C4__7S7090C1[10]),  10,20},
  {&(_tg__ZTV7S7090C4__7S7090C1[11]),  11,22},
  {&(_tg__ZTV7S7090C7__7S7090C4__7S7090C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7090C1[];
extern  VTBL_ENTRY _ZTV7S7090C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7090C1[];
Class_Descriptor cd_S7090C1 = {  "S7090C1", // class name
  bases_S7090C1, 11,
  &(vtc_S7090C1[0]), // expected_vtbl_contents
  &(vtt_S7090C1[0]), // expected_vtt_contents
  ABISELECT(400,264), // object size
  NSPAIRA(_ZTI7S7090C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7090C1),110, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7090C1),18, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2432C4  {
  char s2432c4f0;
  int s2432c4f1;
  virtual  ~S2432C4(); // _ZN7S2432C4D1Ev
  virtual void  v9(); // _ZN7S2432C42v9Ev
  S2432C4(); // tgen
};
//SIG(-1 S2432C4) C1{ vd v1 Fc Fi}


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

static void Test_S2432C4()
{
  extern Class_Descriptor cd_S2432C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2432C4, buf);
    S2432C4 *dp, &lv = *(dp=new (buf) S2432C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2432C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2432C4)");
    check_field_offset(lv, s2432c4f0, ABISELECT(8,4), "S2432C4.s2432c4f0");
    check_field_offset(lv, s2432c4f1, ABISELECT(12,8), "S2432C4.s2432c4f1");
    test_class_info(&lv, &cd_S2432C4);
    dp->~S2432C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2432C4(Test_S2432C4, "S2432C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2432C4C1Ev();
extern void _ZN7S2432C4D1Ev();
Name_Map name_map_S2432C4[] = {
  NSPAIR(_ZN7S2432C4C1Ev),
  NSPAIR(_ZN7S2432C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2432C4[];
extern void _ZN7S2432C4D1Ev();
extern void _ZN7S2432C4D0Ev();
extern void _ZN7S2432C42v9Ev();
static  VTBL_ENTRY vtc_S2432C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2432C4[0]),
  (VTBL_ENTRY)&_ZN7S2432C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2432C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2432C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S2432C4[];
extern  VTBL_ENTRY _ZTV7S2432C4[];
Class_Descriptor cd_S2432C4 = {  "S2432C4", // class name
  0,0,//no base classes
  &(vtc_S2432C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2432C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2432C4),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  S2432C5_nt  {
  void *s2432c5f0;
};
//SIG(-1 S2432C5_nt) C1{ Fp}



//skip512 S2432C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2432C7_nt  {
  __tsi64 s2432c7f0[4];
};
//SIG(-1 S2432C7_nt) C1{ FL[4]}



//skip512 S2432C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2432C6  : S2432C4 {
  ::S2432C7_nt s2432c6f0;
  virtual  ~S2432C6(); // _ZN7S2432C6D1Ev
  virtual void  v20(); // _ZN7S2432C63v20Ev
  virtual void  v21(); // _ZN7S2432C63v21Ev
  S2432C6(); // tgen
};
//SIG(-1 S2432C6) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 FC3{ FL[4]}}


 S2432C6 ::~S2432C6(){ note_dtor("S2432C6", this);}
void  S2432C6 ::v20(){vfunc_called(this, "_ZN7S2432C63v20Ev");}
void  S2432C6 ::v21(){vfunc_called(this, "_ZN7S2432C63v21Ev");}
S2432C6 ::S2432C6(){ note_ctor("S2432C6", this);} // tgen

static void Test_S2432C6()
{
  extern Class_Descriptor cd_S2432C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S2432C6, buf);
    S2432C6 *dp, &lv = *(dp=new (buf) S2432C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S2432C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2432C6)");
    check_base_class_offset(lv, (S2432C4*), 0, "S2432C6");
    check_field_offset(lv, s2432c6f0, ABISELECT(16,12), "S2432C6.s2432c6f0");
    test_class_info(&lv, &cd_S2432C6);
    dp->~S2432C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2432C6(Test_S2432C6, "S2432C6", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S2432C6C1Ev();
extern void _ZN7S2432C6D1Ev();
Name_Map name_map_S2432C6[] = {
  NSPAIR(_ZN7S2432C6C1Ev),
  NSPAIR(_ZN7S2432C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2432C4;
extern VTBL_ENTRY _ZTI7S2432C4[];
extern  VTBL_ENTRY _ZTV7S2432C4[];
static Base_Class bases_S2432C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2432C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2432C6[];
extern void _ZN7S2432C6D1Ev();
extern void _ZN7S2432C6D0Ev();
extern void _ZN7S2432C42v9Ev();
extern void _ZN7S2432C63v20Ev();
extern void _ZN7S2432C63v21Ev();
static  VTBL_ENTRY vtc_S2432C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2432C6[0]),
  (VTBL_ENTRY)&_ZN7S2432C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2432C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2432C63v20Ev,
  (VTBL_ENTRY)&_ZN7S2432C63v21Ev,
};
extern VTBL_ENTRY _ZTI7S2432C6[];
extern  VTBL_ENTRY _ZTV7S2432C6[];
Class_Descriptor cd_S2432C6 = {  "S2432C6", // class name
  bases_S2432C6, 1,
  &(vtc_S2432C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S2432C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2432C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2432C3  : S2432C4 {
  int s2432c3f0[2];
  char s2432c3f1;
  ::S2432C5_nt s2432c3f2;
  ::S2432C6 s2432c3f3;
  virtual  ~S2432C3(); // _ZN7S2432C3D1Ev
  virtual void  v10(); // _ZN7S2432C33v10Ev
  S2432C3(); // tgen
};
//SIG(-1 S2432C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC2 vd v3 v4 FC5{ FL[4]}}}


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

static void Test_S2432C3()
{
  extern Class_Descriptor cd_S2432C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S2432C3, buf);
    S2432C3 *dp, &lv = *(dp=new (buf) S2432C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S2432C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2432C3)");
    check_base_class_offset(lv, (S2432C4*), 0, "S2432C3");
    check_field_offset(lv, s2432c3f0, ABISELECT(16,12), "S2432C3.s2432c3f0");
    check_field_offset(lv, s2432c3f1, ABISELECT(24,20), "S2432C3.s2432c3f1");
    check_field_offset(lv, s2432c3f2, ABISELECT(32,24), "S2432C3.s2432c3f2");
    check_field_offset(lv, s2432c3f3, ABISELECT(40,28), "S2432C3.s2432c3f3");
    test_class_info(&lv, &cd_S2432C3);
    dp->~S2432C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2432C3(Test_S2432C3, "S2432C3", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S2432C3C1Ev();
extern void _ZN7S2432C3D1Ev();
Name_Map name_map_S2432C3[] = {
  NSPAIR(_ZN7S2432C3C1Ev),
  NSPAIR(_ZN7S2432C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2432C4;
extern VTBL_ENTRY _ZTI7S2432C4[];
extern  VTBL_ENTRY _ZTV7S2432C4[];
static Base_Class bases_S2432C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2432C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2432C3[];
extern void _ZN7S2432C3D1Ev();
extern void _ZN7S2432C3D0Ev();
extern void _ZN7S2432C42v9Ev();
extern void _ZN7S2432C33v10Ev();
static  VTBL_ENTRY vtc_S2432C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2432C3[0]),
  (VTBL_ENTRY)&_ZN7S2432C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2432C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2432C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2432C3[];
extern  VTBL_ENTRY _ZTV7S2432C3[];
Class_Descriptor cd_S2432C3 = {  "S2432C3", // class name
  bases_S2432C3, 1,
  &(vtc_S2432C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S2432C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2432C3),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  S2432C2  : S2432C3 {
  void *s2432c2f0[3];
  int s2432c2f1;
  void *s2432c2f2[2];
  int s2432c2f3[3];
  char s2432c2f4[2];
  void *s2432c2f5;
  char s2432c2f6;
  void *s2432c2f7;
  __tsi64 s2432c2f8[2];
  virtual  ~S2432C2(); // _ZN7S2432C2D1Ev
  virtual void  v11(); // _ZN7S2432C23v11Ev
  virtual void  v12(); // _ZN7S2432C23v12Ev
  virtual void  v13(); // _ZN7S2432C23v13Ev
  virtual void  v14(); // _ZN7S2432C23v14Ev
  virtual void  v15(); // _ZN7S2432C23v15Ev
  virtual void  v16(); // _ZN7S2432C23v16Ev
  virtual void  v17(); // _ZN7S2432C23v17Ev
  virtual void  v18(); // _ZN7S2432C23v18Ev
  virtual void  v19(); // _ZN7S2432C23v19Ev
  S2432C2(); // tgen
};
//SIG(-1 S2432C2) C1{ BC2{ BC3{ vd v10 Fc Fi} vd v11 Fi[2] Fc FC4{ Fp} FC5{ BC3 vd v12 v13 FC6{ FL[4]}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]}


 S2432C2 ::~S2432C2(){ note_dtor("S2432C2", this);}
void  S2432C2 ::v11(){vfunc_called(this, "_ZN7S2432C23v11Ev");}
void  S2432C2 ::v12(){vfunc_called(this, "_ZN7S2432C23v12Ev");}
void  S2432C2 ::v13(){vfunc_called(this, "_ZN7S2432C23v13Ev");}
void  S2432C2 ::v14(){vfunc_called(this, "_ZN7S2432C23v14Ev");}
void  S2432C2 ::v15(){vfunc_called(this, "_ZN7S2432C23v15Ev");}
void  S2432C2 ::v16(){vfunc_called(this, "_ZN7S2432C23v16Ev");}
void  S2432C2 ::v17(){vfunc_called(this, "_ZN7S2432C23v17Ev");}
void  S2432C2 ::v18(){vfunc_called(this, "_ZN7S2432C23v18Ev");}
void  S2432C2 ::v19(){vfunc_called(this, "_ZN7S2432C23v19Ev");}
S2432C2 ::S2432C2(){ note_ctor("S2432C2", this);} // tgen

static void Test_S2432C2()
{
  extern Class_Descriptor cd_S2432C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,36)];
    init_test(&cd_S2432C2, buf);
    S2432C2 *dp, &lv = *(dp=new (buf) S2432C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S2432C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2432C2)");
    check_base_class_offset(lv, (S2432C4*)(S2432C3*), 0, "S2432C2");
    check_base_class_offset(lv, (S2432C3*), 0, "S2432C2");
    check_field_offset(lv, s2432c2f0, ABISELECT(88,72), "S2432C2.s2432c2f0");
    check_field_offset(lv, s2432c2f1, ABISELECT(112,84), "S2432C2.s2432c2f1");
    check_field_offset(lv, s2432c2f2, ABISELECT(120,88), "S2432C2.s2432c2f2");
    check_field_offset(lv, s2432c2f3, ABISELECT(136,96), "S2432C2.s2432c2f3");
    check_field_offset(lv, s2432c2f4, ABISELECT(148,108), "S2432C2.s2432c2f4");
    check_field_offset(lv, s2432c2f5, ABISELECT(152,112), "S2432C2.s2432c2f5");
    check_field_offset(lv, s2432c2f6, ABISELECT(160,116), "S2432C2.s2432c2f6");
    check_field_offset(lv, s2432c2f7, ABISELECT(168,120), "S2432C2.s2432c2f7");
    check_field_offset(lv, s2432c2f8, ABISELECT(176,124), "S2432C2.s2432c2f8");
    test_class_info(&lv, &cd_S2432C2);
    dp->~S2432C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2432C2(Test_S2432C2, "S2432C2", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN7S2432C2C1Ev();
extern void _ZN7S2432C2D1Ev();
Name_Map name_map_S2432C2[] = {
  NSPAIR(_ZN7S2432C2C1Ev),
  NSPAIR(_ZN7S2432C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2432C4;
extern VTBL_ENTRY _ZTI7S2432C4[];
extern  VTBL_ENTRY _ZTV7S2432C4[];
extern Class_Descriptor cd_S2432C3;
extern VTBL_ENTRY _ZTI7S2432C3[];
extern  VTBL_ENTRY _ZTV7S2432C3[];
static Base_Class bases_S2432C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2432C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2432C2[];
extern void _ZN7S2432C2D1Ev();
extern void _ZN7S2432C2D0Ev();
extern void _ZN7S2432C42v9Ev();
extern void _ZN7S2432C33v10Ev();
extern void _ZN7S2432C23v11Ev();
extern void _ZN7S2432C23v12Ev();
extern void _ZN7S2432C23v13Ev();
extern void _ZN7S2432C23v14Ev();
extern void _ZN7S2432C23v15Ev();
extern void _ZN7S2432C23v16Ev();
extern void _ZN7S2432C23v17Ev();
extern void _ZN7S2432C23v18Ev();
extern void _ZN7S2432C23v19Ev();
static  VTBL_ENTRY vtc_S2432C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2432C2[0]),
  (VTBL_ENTRY)&_ZN7S2432C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2432C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S2432C2[];
extern  VTBL_ENTRY _ZTV7S2432C2[];
Class_Descriptor cd_S2432C2 = {  "S2432C2", // class name
  bases_S2432C2, 2,
  &(vtc_S2432C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI7S2432C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2432C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2432C1  : S2432C2 {
  int s2432c1f0;
  void *s2432c1f1[2];
  virtual  ~S2432C1(); // _ZN7S2432C1D1Ev
  virtual void  v1(); // _ZN7S2432C12v1Ev
  virtual void  v2(); // _ZN7S2432C12v2Ev
  virtual void  v3(); // _ZN7S2432C12v3Ev
  virtual void  v4(); // _ZN7S2432C12v4Ev
  virtual void  v5(); // _ZN7S2432C12v5Ev
  virtual void  v6(); // _ZN7S2432C12v6Ev
  virtual void  v7(); // _ZN7S2432C12v7Ev
  virtual void  v8(); // _ZN7S2432C12v8Ev
  S2432C1(); // tgen
};
//SIG(1 S2432C1) C1{ BC2{ BC3{ BC4{ vd v9 Fc Fi} vd v10 Fi[2] Fc FC5{ Fp} FC6{ BC4 vd v20 v21 FC7{ FL[4]}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[2]}


 S2432C1 ::~S2432C1(){ note_dtor("S2432C1", this);}
void  S2432C1 ::v1(){vfunc_called(this, "_ZN7S2432C12v1Ev");}
void  S2432C1 ::v2(){vfunc_called(this, "_ZN7S2432C12v2Ev");}
void  S2432C1 ::v3(){vfunc_called(this, "_ZN7S2432C12v3Ev");}
void  S2432C1 ::v4(){vfunc_called(this, "_ZN7S2432C12v4Ev");}
void  S2432C1 ::v5(){vfunc_called(this, "_ZN7S2432C12v5Ev");}
void  S2432C1 ::v6(){vfunc_called(this, "_ZN7S2432C12v6Ev");}
void  S2432C1 ::v7(){vfunc_called(this, "_ZN7S2432C12v7Ev");}
void  S2432C1 ::v8(){vfunc_called(this, "_ZN7S2432C12v8Ev");}
S2432C1 ::S2432C1(){ note_ctor("S2432C1", this);} // tgen

static void Test_S2432C1()
{
  extern Class_Descriptor cd_S2432C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,39)];
    init_test(&cd_S2432C1, buf);
    S2432C1 *dp, &lv = *(dp=new (buf) S2432C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,152), "sizeof(S2432C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2432C1)");
    check_base_class_offset(lv, (S2432C4*)(S2432C3*)(S2432C2*), 0, "S2432C1");
    check_base_class_offset(lv, (S2432C3*)(S2432C2*), 0, "S2432C1");
    check_base_class_offset(lv, (S2432C2*), 0, "S2432C1");
    check_field_offset(lv, s2432c1f0, ABISELECT(192,140), "S2432C1.s2432c1f0");
    check_field_offset(lv, s2432c1f1, ABISELECT(200,144), "S2432C1.s2432c1f1");
    test_class_info(&lv, &cd_S2432C1);
    dp->~S2432C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2432C1(Test_S2432C1, "S2432C1", ABISELECT(216,152));

#else // __cplusplus

extern void _ZN7S2432C1C1Ev();
extern void _ZN7S2432C1D1Ev();
Name_Map name_map_S2432C1[] = {
  NSPAIR(_ZN7S2432C1C1Ev),
  NSPAIR(_ZN7S2432C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2432C4;
extern VTBL_ENTRY _ZTI7S2432C4[];
extern  VTBL_ENTRY _ZTV7S2432C4[];
extern Class_Descriptor cd_S2432C3;
extern VTBL_ENTRY _ZTI7S2432C3[];
extern  VTBL_ENTRY _ZTV7S2432C3[];
extern Class_Descriptor cd_S2432C2;
extern VTBL_ENTRY _ZTI7S2432C2[];
extern  VTBL_ENTRY _ZTV7S2432C2[];
static Base_Class bases_S2432C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2432C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2432C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2432C1[];
extern void _ZN7S2432C1D1Ev();
extern void _ZN7S2432C1D0Ev();
extern void _ZN7S2432C42v9Ev();
extern void _ZN7S2432C33v10Ev();
extern void _ZN7S2432C23v11Ev();
extern void _ZN7S2432C23v12Ev();
extern void _ZN7S2432C23v13Ev();
extern void _ZN7S2432C23v14Ev();
extern void _ZN7S2432C23v15Ev();
extern void _ZN7S2432C23v16Ev();
extern void _ZN7S2432C23v17Ev();
extern void _ZN7S2432C23v18Ev();
extern void _ZN7S2432C23v19Ev();
extern void _ZN7S2432C12v1Ev();
extern void _ZN7S2432C12v2Ev();
extern void _ZN7S2432C12v3Ev();
extern void _ZN7S2432C12v4Ev();
extern void _ZN7S2432C12v5Ev();
extern void _ZN7S2432C12v6Ev();
extern void _ZN7S2432C12v7Ev();
extern void _ZN7S2432C12v8Ev();
static  VTBL_ENTRY vtc_S2432C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2432C1[0]),
  (VTBL_ENTRY)&_ZN7S2432C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2432C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2432C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2432C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S2432C1[];
extern  VTBL_ENTRY _ZTV7S2432C1[];
Class_Descriptor cd_S2432C1 = {  "S2432C1", // class name
  bases_S2432C1, 3,
  &(vtc_S2432C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,152), // object size
  NSPAIRA(_ZTI7S2432C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2432C1),23, //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  S2431C4  {
  char s2431c4f0;
  int s2431c4f1;
  virtual  ~S2431C4(); // _ZN7S2431C4D1Ev
  virtual void  v9(); // _ZN7S2431C42v9Ev
  S2431C4(); // tgen
};
//SIG(-1 S2431C4) C1{ vd v1 Fc Fi}


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

static void Test_S2431C4()
{
  extern Class_Descriptor cd_S2431C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2431C4, buf);
    S2431C4 *dp, &lv = *(dp=new (buf) S2431C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2431C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2431C4)");
    check_field_offset(lv, s2431c4f0, ABISELECT(8,4), "S2431C4.s2431c4f0");
    check_field_offset(lv, s2431c4f1, ABISELECT(12,8), "S2431C4.s2431c4f1");
    test_class_info(&lv, &cd_S2431C4);
    dp->~S2431C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2431C4(Test_S2431C4, "S2431C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2431C4C1Ev();
extern void _ZN7S2431C4D1Ev();
Name_Map name_map_S2431C4[] = {
  NSPAIR(_ZN7S2431C4C1Ev),
  NSPAIR(_ZN7S2431C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2431C4[];
extern void _ZN7S2431C4D1Ev();
extern void _ZN7S2431C4D0Ev();
extern void _ZN7S2431C42v9Ev();
static  VTBL_ENTRY vtc_S2431C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2431C4[0]),
  (VTBL_ENTRY)&_ZN7S2431C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2431C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2431C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S2431C4[];
extern  VTBL_ENTRY _ZTV7S2431C4[];
Class_Descriptor cd_S2431C4 = {  "S2431C4", // class name
  0,0,//no base classes
  &(vtc_S2431C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2431C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2431C4),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  S2431C6  : S2431C4 {
  ::S2338C14_nt s2431c6f0;
  virtual  ~S2431C6(); // _ZN7S2431C6D1Ev
  virtual void  v20(); // _ZN7S2431C63v20Ev
  virtual void  v21(); // _ZN7S2431C63v21Ev
  S2431C6(); // tgen
};
//SIG(-1 S2431C6) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 FC3{ Fl[4]}}


 S2431C6 ::~S2431C6(){ note_dtor("S2431C6", this);}
void  S2431C6 ::v20(){vfunc_called(this, "_ZN7S2431C63v20Ev");}
void  S2431C6 ::v21(){vfunc_called(this, "_ZN7S2431C63v21Ev");}
S2431C6 ::S2431C6(){ note_ctor("S2431C6", this);} // tgen

static void Test_S2431C6()
{
  extern Class_Descriptor cd_S2431C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2431C6, buf);
    S2431C6 *dp, &lv = *(dp=new (buf) S2431C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2431C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2431C6)");
    check_base_class_offset(lv, (S2431C4*), 0, "S2431C6");
    check_field_offset(lv, s2431c6f0, ABISELECT(16,12), "S2431C6.s2431c6f0");
    test_class_info(&lv, &cd_S2431C6);
    dp->~S2431C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2431C6(Test_S2431C6, "S2431C6", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2431C6C1Ev();
extern void _ZN7S2431C6D1Ev();
Name_Map name_map_S2431C6[] = {
  NSPAIR(_ZN7S2431C6C1Ev),
  NSPAIR(_ZN7S2431C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2431C4;
extern VTBL_ENTRY _ZTI7S2431C4[];
extern  VTBL_ENTRY _ZTV7S2431C4[];
static Base_Class bases_S2431C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2431C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2431C6[];
extern void _ZN7S2431C6D1Ev();
extern void _ZN7S2431C6D0Ev();
extern void _ZN7S2431C42v9Ev();
extern void _ZN7S2431C63v20Ev();
extern void _ZN7S2431C63v21Ev();
static  VTBL_ENTRY vtc_S2431C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2431C6[0]),
  (VTBL_ENTRY)&_ZN7S2431C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2431C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2431C63v20Ev,
  (VTBL_ENTRY)&_ZN7S2431C63v21Ev,
};
extern VTBL_ENTRY _ZTI7S2431C6[];
extern  VTBL_ENTRY _ZTV7S2431C6[];
Class_Descriptor cd_S2431C6 = {  "S2431C6", // class name
  bases_S2431C6, 1,
  &(vtc_S2431C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2431C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2431C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2431C3  : S2431C4 {
  int s2431c3f0[2];
  char s2431c3f1;
  ::S2432C5_nt s2431c3f2;
  ::S2431C6 s2431c3f3;
  virtual  ~S2431C3(); // _ZN7S2431C3D1Ev
  virtual void  v10(); // _ZN7S2431C33v10Ev
  S2431C3(); // tgen
};
//SIG(-1 S2431C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC2 vd v3 v4 FC5{ Fl[4]}}}


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

static void Test_S2431C3()
{
  extern Class_Descriptor cd_S2431C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2431C3, buf);
    S2431C3 *dp, &lv = *(dp=new (buf) S2431C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2431C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2431C3)");
    check_base_class_offset(lv, (S2431C4*), 0, "S2431C3");
    check_field_offset(lv, s2431c3f0, ABISELECT(16,12), "S2431C3.s2431c3f0");
    check_field_offset(lv, s2431c3f1, ABISELECT(24,20), "S2431C3.s2431c3f1");
    check_field_offset(lv, s2431c3f2, ABISELECT(32,24), "S2431C3.s2431c3f2");
    check_field_offset(lv, s2431c3f3, ABISELECT(40,28), "S2431C3.s2431c3f3");
    test_class_info(&lv, &cd_S2431C3);
    dp->~S2431C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2431C3(Test_S2431C3, "S2431C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2431C3C1Ev();
extern void _ZN7S2431C3D1Ev();
Name_Map name_map_S2431C3[] = {
  NSPAIR(_ZN7S2431C3C1Ev),
  NSPAIR(_ZN7S2431C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2431C4;
extern VTBL_ENTRY _ZTI7S2431C4[];
extern  VTBL_ENTRY _ZTV7S2431C4[];
static Base_Class bases_S2431C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2431C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2431C3[];
extern void _ZN7S2431C3D1Ev();
extern void _ZN7S2431C3D0Ev();
extern void _ZN7S2431C42v9Ev();
extern void _ZN7S2431C33v10Ev();
static  VTBL_ENTRY vtc_S2431C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2431C3[0]),
  (VTBL_ENTRY)&_ZN7S2431C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2431C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2431C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2431C3[];
extern  VTBL_ENTRY _ZTV7S2431C3[];
Class_Descriptor cd_S2431C3 = {  "S2431C3", // class name
  bases_S2431C3, 1,
  &(vtc_S2431C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2431C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2431C3),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  S2431C2  : S2431C3 {
  void *s2431c2f0[3];
  int s2431c2f1;
  void *s2431c2f2[2];
  int s2431c2f3[3];
  char s2431c2f4[2];
  void *s2431c2f5;
  char s2431c2f6;
  void *s2431c2f7;
  __tsi64 s2431c2f8[2];
  virtual  ~S2431C2(); // _ZN7S2431C2D1Ev
  virtual void  v11(); // _ZN7S2431C23v11Ev
  virtual void  v12(); // _ZN7S2431C23v12Ev
  virtual void  v13(); // _ZN7S2431C23v13Ev
  virtual void  v14(); // _ZN7S2431C23v14Ev
  virtual void  v15(); // _ZN7S2431C23v15Ev
  virtual void  v16(); // _ZN7S2431C23v16Ev
  virtual void  v17(); // _ZN7S2431C23v17Ev
  virtual void  v18(); // _ZN7S2431C23v18Ev
  virtual void  v19(); // _ZN7S2431C23v19Ev
  S2431C2(); // tgen
};
//SIG(-1 S2431C2) C1{ BC2{ BC3{ vd v10 Fc Fi} vd v11 Fi[2] Fc FC4{ Fp} FC5{ BC3 vd v12 v13 FC6{ Fl[4]}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]}


 S2431C2 ::~S2431C2(){ note_dtor("S2431C2", this);}
void  S2431C2 ::v11(){vfunc_called(this, "_ZN7S2431C23v11Ev");}
void  S2431C2 ::v12(){vfunc_called(this, "_ZN7S2431C23v12Ev");}
void  S2431C2 ::v13(){vfunc_called(this, "_ZN7S2431C23v13Ev");}
void  S2431C2 ::v14(){vfunc_called(this, "_ZN7S2431C23v14Ev");}
void  S2431C2 ::v15(){vfunc_called(this, "_ZN7S2431C23v15Ev");}
void  S2431C2 ::v16(){vfunc_called(this, "_ZN7S2431C23v16Ev");}
void  S2431C2 ::v17(){vfunc_called(this, "_ZN7S2431C23v17Ev");}
void  S2431C2 ::v18(){vfunc_called(this, "_ZN7S2431C23v18Ev");}
void  S2431C2 ::v19(){vfunc_called(this, "_ZN7S2431C23v19Ev");}
S2431C2 ::S2431C2(){ note_ctor("S2431C2", this);} // tgen

static void Test_S2431C2()
{
  extern Class_Descriptor cd_S2431C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,32)];
    init_test(&cd_S2431C2, buf);
    S2431C2 *dp, &lv = *(dp=new (buf) S2431C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S2431C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2431C2)");
    check_base_class_offset(lv, (S2431C4*)(S2431C3*), 0, "S2431C2");
    check_base_class_offset(lv, (S2431C3*), 0, "S2431C2");
    check_field_offset(lv, s2431c2f0, ABISELECT(88,56), "S2431C2.s2431c2f0");
    check_field_offset(lv, s2431c2f1, ABISELECT(112,68), "S2431C2.s2431c2f1");
    check_field_offset(lv, s2431c2f2, ABISELECT(120,72), "S2431C2.s2431c2f2");
    check_field_offset(lv, s2431c2f3, ABISELECT(136,80), "S2431C2.s2431c2f3");
    check_field_offset(lv, s2431c2f4, ABISELECT(148,92), "S2431C2.s2431c2f4");
    check_field_offset(lv, s2431c2f5, ABISELECT(152,96), "S2431C2.s2431c2f5");
    check_field_offset(lv, s2431c2f6, ABISELECT(160,100), "S2431C2.s2431c2f6");
    check_field_offset(lv, s2431c2f7, ABISELECT(168,104), "S2431C2.s2431c2f7");
    check_field_offset(lv, s2431c2f8, ABISELECT(176,108), "S2431C2.s2431c2f8");
    test_class_info(&lv, &cd_S2431C2);
    dp->~S2431C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2431C2(Test_S2431C2, "S2431C2", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN7S2431C2C1Ev();
extern void _ZN7S2431C2D1Ev();
Name_Map name_map_S2431C2[] = {
  NSPAIR(_ZN7S2431C2C1Ev),
  NSPAIR(_ZN7S2431C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2431C4;
extern VTBL_ENTRY _ZTI7S2431C4[];
extern  VTBL_ENTRY _ZTV7S2431C4[];
extern Class_Descriptor cd_S2431C3;
extern VTBL_ENTRY _ZTI7S2431C3[];
extern  VTBL_ENTRY _ZTV7S2431C3[];
static Base_Class bases_S2431C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2431C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2431C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2431C2[];
extern void _ZN7S2431C2D1Ev();
extern void _ZN7S2431C2D0Ev();
extern void _ZN7S2431C42v9Ev();
extern void _ZN7S2431C33v10Ev();
extern void _ZN7S2431C23v11Ev();
extern void _ZN7S2431C23v12Ev();
extern void _ZN7S2431C23v13Ev();
extern void _ZN7S2431C23v14Ev();
extern void _ZN7S2431C23v15Ev();
extern void _ZN7S2431C23v16Ev();
extern void _ZN7S2431C23v17Ev();
extern void _ZN7S2431C23v18Ev();
extern void _ZN7S2431C23v19Ev();
static  VTBL_ENTRY vtc_S2431C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2431C2[0]),
  (VTBL_ENTRY)&_ZN7S2431C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2431C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2431C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S2431C2[];
extern  VTBL_ENTRY _ZTV7S2431C2[];
Class_Descriptor cd_S2431C2 = {  "S2431C2", // class name
  bases_S2431C2, 2,
  &(vtc_S2431C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI7S2431C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2431C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2431C1  : S2431C2 {
  int s2431c1f0;
  void *s2431c1f1[2];
  virtual  ~S2431C1(); // _ZN7S2431C1D1Ev
  virtual void  v1(); // _ZN7S2431C12v1Ev
  virtual void  v2(); // _ZN7S2431C12v2Ev
  virtual void  v3(); // _ZN7S2431C12v3Ev
  virtual void  v4(); // _ZN7S2431C12v4Ev
  virtual void  v5(); // _ZN7S2431C12v5Ev
  virtual void  v6(); // _ZN7S2431C12v6Ev
  virtual void  v7(); // _ZN7S2431C12v7Ev
  virtual void  v8(); // _ZN7S2431C12v8Ev
  S2431C1(); // tgen
};
//SIG(1 S2431C1) C1{ BC2{ BC3{ BC4{ vd v9 Fc Fi} vd v10 Fi[2] Fc FC5{ Fp} FC6{ BC4 vd v20 v21 FC7{ Fl[4]}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[2]}


 S2431C1 ::~S2431C1(){ note_dtor("S2431C1", this);}
void  S2431C1 ::v1(){vfunc_called(this, "_ZN7S2431C12v1Ev");}
void  S2431C1 ::v2(){vfunc_called(this, "_ZN7S2431C12v2Ev");}
void  S2431C1 ::v3(){vfunc_called(this, "_ZN7S2431C12v3Ev");}
void  S2431C1 ::v4(){vfunc_called(this, "_ZN7S2431C12v4Ev");}
void  S2431C1 ::v5(){vfunc_called(this, "_ZN7S2431C12v5Ev");}
void  S2431C1 ::v6(){vfunc_called(this, "_ZN7S2431C12v6Ev");}
void  S2431C1 ::v7(){vfunc_called(this, "_ZN7S2431C12v7Ev");}
void  S2431C1 ::v8(){vfunc_called(this, "_ZN7S2431C12v8Ev");}
S2431C1 ::S2431C1(){ note_ctor("S2431C1", this);} // tgen

static void Test_S2431C1()
{
  extern Class_Descriptor cd_S2431C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,35)];
    init_test(&cd_S2431C1, buf);
    S2431C1 *dp, &lv = *(dp=new (buf) S2431C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,136), "sizeof(S2431C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2431C1)");
    check_base_class_offset(lv, (S2431C4*)(S2431C3*)(S2431C2*), 0, "S2431C1");
    check_base_class_offset(lv, (S2431C3*)(S2431C2*), 0, "S2431C1");
    check_base_class_offset(lv, (S2431C2*), 0, "S2431C1");
    check_field_offset(lv, s2431c1f0, ABISELECT(192,124), "S2431C1.s2431c1f0");
    check_field_offset(lv, s2431c1f1, ABISELECT(200,128), "S2431C1.s2431c1f1");
    test_class_info(&lv, &cd_S2431C1);
    dp->~S2431C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2431C1(Test_S2431C1, "S2431C1", ABISELECT(216,136));

#else // __cplusplus

extern void _ZN7S2431C1C1Ev();
extern void _ZN7S2431C1D1Ev();
Name_Map name_map_S2431C1[] = {
  NSPAIR(_ZN7S2431C1C1Ev),
  NSPAIR(_ZN7S2431C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2431C4;
extern VTBL_ENTRY _ZTI7S2431C4[];
extern  VTBL_ENTRY _ZTV7S2431C4[];
extern Class_Descriptor cd_S2431C3;
extern VTBL_ENTRY _ZTI7S2431C3[];
extern  VTBL_ENTRY _ZTV7S2431C3[];
extern Class_Descriptor cd_S2431C2;
extern VTBL_ENTRY _ZTI7S2431C2[];
extern  VTBL_ENTRY _ZTV7S2431C2[];
static Base_Class bases_S2431C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2431C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2431C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2431C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2431C1[];
extern void _ZN7S2431C1D1Ev();
extern void _ZN7S2431C1D0Ev();
extern void _ZN7S2431C42v9Ev();
extern void _ZN7S2431C33v10Ev();
extern void _ZN7S2431C23v11Ev();
extern void _ZN7S2431C23v12Ev();
extern void _ZN7S2431C23v13Ev();
extern void _ZN7S2431C23v14Ev();
extern void _ZN7S2431C23v15Ev();
extern void _ZN7S2431C23v16Ev();
extern void _ZN7S2431C23v17Ev();
extern void _ZN7S2431C23v18Ev();
extern void _ZN7S2431C23v19Ev();
extern void _ZN7S2431C12v1Ev();
extern void _ZN7S2431C12v2Ev();
extern void _ZN7S2431C12v3Ev();
extern void _ZN7S2431C12v4Ev();
extern void _ZN7S2431C12v5Ev();
extern void _ZN7S2431C12v6Ev();
extern void _ZN7S2431C12v7Ev();
extern void _ZN7S2431C12v8Ev();
static  VTBL_ENTRY vtc_S2431C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2431C1[0]),
  (VTBL_ENTRY)&_ZN7S2431C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2431C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2431C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2431C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2431C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S2431C1[];
extern  VTBL_ENTRY _ZTV7S2431C1[];
Class_Descriptor cd_S2431C1 = {  "S2431C1", // class name
  bases_S2431C1, 3,
  &(vtc_S2431C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,136), // object size
  NSPAIRA(_ZTI7S2431C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2431C1),23, //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  S2430C4  {
  char s2430c4f0;
  int s2430c4f1;
  virtual  ~S2430C4(); // _ZN7S2430C4D1Ev
  virtual void  v9(); // _ZN7S2430C42v9Ev
  S2430C4(); // tgen
};
//SIG(-1 S2430C4) C1{ vd v1 Fc Fi}


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

static void Test_S2430C4()
{
  extern Class_Descriptor cd_S2430C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2430C4, buf);
    S2430C4 *dp, &lv = *(dp=new (buf) S2430C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2430C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2430C4)");
    check_field_offset(lv, s2430c4f0, ABISELECT(8,4), "S2430C4.s2430c4f0");
    check_field_offset(lv, s2430c4f1, ABISELECT(12,8), "S2430C4.s2430c4f1");
    test_class_info(&lv, &cd_S2430C4);
    dp->~S2430C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2430C4(Test_S2430C4, "S2430C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2430C4C1Ev();
extern void _ZN7S2430C4D1Ev();
Name_Map name_map_S2430C4[] = {
  NSPAIR(_ZN7S2430C4C1Ev),
  NSPAIR(_ZN7S2430C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2430C4[];
extern void _ZN7S2430C4D1Ev();
extern void _ZN7S2430C4D0Ev();
extern void _ZN7S2430C42v9Ev();
static  VTBL_ENTRY vtc_S2430C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2430C4[0]),
  (VTBL_ENTRY)&_ZN7S2430C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2430C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2430C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S2430C4[];
extern  VTBL_ENTRY _ZTV7S2430C4[];
Class_Descriptor cd_S2430C4 = {  "S2430C4", // class name
  0,0,//no base classes
  &(vtc_S2430C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2430C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2430C4),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  S2430C3  : S2430C4 {
  int s2430c3f0[2];
  char s2430c3f1;
  ::S2432C5_nt s2430c3f2;
  ::S2432C6 s2430c3f3;
  virtual  ~S2430C3(); // _ZN7S2430C3D1Ev
  virtual void  v10(); // _ZN7S2430C33v10Ev
  S2430C3(); // tgen
};
//SIG(-1 S2430C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ FL[4]}}}


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

static void Test_S2430C3()
{
  extern Class_Descriptor cd_S2430C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S2430C3, buf);
    S2430C3 *dp, &lv = *(dp=new (buf) S2430C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S2430C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2430C3)");
    check_base_class_offset(lv, (S2430C4*), 0, "S2430C3");
    check_field_offset(lv, s2430c3f0, ABISELECT(16,12), "S2430C3.s2430c3f0");
    check_field_offset(lv, s2430c3f1, ABISELECT(24,20), "S2430C3.s2430c3f1");
    check_field_offset(lv, s2430c3f2, ABISELECT(32,24), "S2430C3.s2430c3f2");
    check_field_offset(lv, s2430c3f3, ABISELECT(40,28), "S2430C3.s2430c3f3");
    test_class_info(&lv, &cd_S2430C3);
    dp->~S2430C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2430C3(Test_S2430C3, "S2430C3", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S2430C3C1Ev();
extern void _ZN7S2430C3D1Ev();
Name_Map name_map_S2430C3[] = {
  NSPAIR(_ZN7S2430C3C1Ev),
  NSPAIR(_ZN7S2430C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2430C4;
extern VTBL_ENTRY _ZTI7S2430C4[];
extern  VTBL_ENTRY _ZTV7S2430C4[];
static Base_Class bases_S2430C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2430C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2430C3[];
extern void _ZN7S2430C3D1Ev();
extern void _ZN7S2430C3D0Ev();
extern void _ZN7S2430C42v9Ev();
extern void _ZN7S2430C33v10Ev();
static  VTBL_ENTRY vtc_S2430C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2430C3[0]),
  (VTBL_ENTRY)&_ZN7S2430C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2430C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2430C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2430C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2430C3[];
extern  VTBL_ENTRY _ZTV7S2430C3[];
Class_Descriptor cd_S2430C3 = {  "S2430C3", // class name
  bases_S2430C3, 1,
  &(vtc_S2430C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S2430C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2430C3),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  S2430C2  : S2430C3 {
  void *s2430c2f0[3];
  int s2430c2f1;
  void *s2430c2f2[2];
  int s2430c2f3[3];
  char s2430c2f4[2];
  void *s2430c2f5;
  char s2430c2f6;
  void *s2430c2f7;
  __tsi64 s2430c2f8[2];
  virtual  ~S2430C2(); // _ZN7S2430C2D1Ev
  virtual void  v11(); // _ZN7S2430C23v11Ev
  virtual void  v12(); // _ZN7S2430C23v12Ev
  virtual void  v13(); // _ZN7S2430C23v13Ev
  virtual void  v14(); // _ZN7S2430C23v14Ev
  virtual void  v15(); // _ZN7S2430C23v15Ev
  virtual void  v16(); // _ZN7S2430C23v16Ev
  virtual void  v17(); // _ZN7S2430C23v17Ev
  virtual void  v18(); // _ZN7S2430C23v18Ev
  virtual void  v19(); // _ZN7S2430C23v19Ev
  S2430C2(); // tgen
};
//SIG(-1 S2430C2) C1{ BC2{ BC3{ vd v10 Fc Fi} vd v11 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v14 Fc Fi} vd v12 v13 FC7{ FL[4]}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]}


 S2430C2 ::~S2430C2(){ note_dtor("S2430C2", this);}
void  S2430C2 ::v11(){vfunc_called(this, "_ZN7S2430C23v11Ev");}
void  S2430C2 ::v12(){vfunc_called(this, "_ZN7S2430C23v12Ev");}
void  S2430C2 ::v13(){vfunc_called(this, "_ZN7S2430C23v13Ev");}
void  S2430C2 ::v14(){vfunc_called(this, "_ZN7S2430C23v14Ev");}
void  S2430C2 ::v15(){vfunc_called(this, "_ZN7S2430C23v15Ev");}
void  S2430C2 ::v16(){vfunc_called(this, "_ZN7S2430C23v16Ev");}
void  S2430C2 ::v17(){vfunc_called(this, "_ZN7S2430C23v17Ev");}
void  S2430C2 ::v18(){vfunc_called(this, "_ZN7S2430C23v18Ev");}
void  S2430C2 ::v19(){vfunc_called(this, "_ZN7S2430C23v19Ev");}
S2430C2 ::S2430C2(){ note_ctor("S2430C2", this);} // tgen

static void Test_S2430C2()
{
  extern Class_Descriptor cd_S2430C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,36)];
    init_test(&cd_S2430C2, buf);
    S2430C2 *dp, &lv = *(dp=new (buf) S2430C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S2430C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2430C2)");
    check_base_class_offset(lv, (S2430C4*)(S2430C3*), 0, "S2430C2");
    check_base_class_offset(lv, (S2430C3*), 0, "S2430C2");
    check_field_offset(lv, s2430c2f0, ABISELECT(88,72), "S2430C2.s2430c2f0");
    check_field_offset(lv, s2430c2f1, ABISELECT(112,84), "S2430C2.s2430c2f1");
    check_field_offset(lv, s2430c2f2, ABISELECT(120,88), "S2430C2.s2430c2f2");
    check_field_offset(lv, s2430c2f3, ABISELECT(136,96), "S2430C2.s2430c2f3");
    check_field_offset(lv, s2430c2f4, ABISELECT(148,108), "S2430C2.s2430c2f4");
    check_field_offset(lv, s2430c2f5, ABISELECT(152,112), "S2430C2.s2430c2f5");
    check_field_offset(lv, s2430c2f6, ABISELECT(160,116), "S2430C2.s2430c2f6");
    check_field_offset(lv, s2430c2f7, ABISELECT(168,120), "S2430C2.s2430c2f7");
    check_field_offset(lv, s2430c2f8, ABISELECT(176,124), "S2430C2.s2430c2f8");
    test_class_info(&lv, &cd_S2430C2);
    dp->~S2430C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2430C2(Test_S2430C2, "S2430C2", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN7S2430C2C1Ev();
extern void _ZN7S2430C2D1Ev();
Name_Map name_map_S2430C2[] = {
  NSPAIR(_ZN7S2430C2C1Ev),
  NSPAIR(_ZN7S2430C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2430C4;
extern VTBL_ENTRY _ZTI7S2430C4[];
extern  VTBL_ENTRY _ZTV7S2430C4[];
extern Class_Descriptor cd_S2430C3;
extern VTBL_ENTRY _ZTI7S2430C3[];
extern  VTBL_ENTRY _ZTV7S2430C3[];
static Base_Class bases_S2430C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2430C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2430C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2430C2[];
extern void _ZN7S2430C2D1Ev();
extern void _ZN7S2430C2D0Ev();
extern void _ZN7S2430C42v9Ev();
extern void _ZN7S2430C33v10Ev();
extern void _ZN7S2430C23v11Ev();
extern void _ZN7S2430C23v12Ev();
extern void _ZN7S2430C23v13Ev();
extern void _ZN7S2430C23v14Ev();
extern void _ZN7S2430C23v15Ev();
extern void _ZN7S2430C23v16Ev();
extern void _ZN7S2430C23v17Ev();
extern void _ZN7S2430C23v18Ev();
extern void _ZN7S2430C23v19Ev();
static  VTBL_ENTRY vtc_S2430C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2430C2[0]),
  (VTBL_ENTRY)&_ZN7S2430C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2430C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2430C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2430C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S2430C2[];
extern  VTBL_ENTRY _ZTV7S2430C2[];
Class_Descriptor cd_S2430C2 = {  "S2430C2", // class name
  bases_S2430C2, 2,
  &(vtc_S2430C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI7S2430C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2430C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2430C1  : S2430C2 {
  char s2430c1f0[4];
  virtual  ~S2430C1(); // _ZN7S2430C1D1Ev
  virtual void  v1(); // _ZN7S2430C12v1Ev
  virtual void  v2(); // _ZN7S2430C12v2Ev
  virtual void  v3(); // _ZN7S2430C12v3Ev
  virtual void  v4(); // _ZN7S2430C12v4Ev
  virtual void  v5(); // _ZN7S2430C12v5Ev
  virtual void  v6(); // _ZN7S2430C12v6Ev
  virtual void  v7(); // _ZN7S2430C12v7Ev
  virtual void  v8(); // _ZN7S2430C12v8Ev
  S2430C1(); // tgen
};
//SIG(1 S2430C1) C1{ BC2{ BC3{ BC4{ vd v9 Fc Fi} vd v10 Fi[2] Fc FC5{ Fp} FC6{ BC7{ vd v22 Fc Fi} vd v20 v21 FC8{ FL[4]}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc[4]}


 S2430C1 ::~S2430C1(){ note_dtor("S2430C1", this);}
void  S2430C1 ::v1(){vfunc_called(this, "_ZN7S2430C12v1Ev");}
void  S2430C1 ::v2(){vfunc_called(this, "_ZN7S2430C12v2Ev");}
void  S2430C1 ::v3(){vfunc_called(this, "_ZN7S2430C12v3Ev");}
void  S2430C1 ::v4(){vfunc_called(this, "_ZN7S2430C12v4Ev");}
void  S2430C1 ::v5(){vfunc_called(this, "_ZN7S2430C12v5Ev");}
void  S2430C1 ::v6(){vfunc_called(this, "_ZN7S2430C12v6Ev");}
void  S2430C1 ::v7(){vfunc_called(this, "_ZN7S2430C12v7Ev");}
void  S2430C1 ::v8(){vfunc_called(this, "_ZN7S2430C12v8Ev");}
S2430C1 ::S2430C1(){ note_ctor("S2430C1", this);} // tgen

static void Test_S2430C1()
{
  extern Class_Descriptor cd_S2430C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S2430C1, buf);
    S2430C1 *dp, &lv = *(dp=new (buf) S2430C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S2430C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2430C1)");
    check_base_class_offset(lv, (S2430C4*)(S2430C3*)(S2430C2*), 0, "S2430C1");
    check_base_class_offset(lv, (S2430C3*)(S2430C2*), 0, "S2430C1");
    check_base_class_offset(lv, (S2430C2*), 0, "S2430C1");
    check_field_offset(lv, s2430c1f0, ABISELECT(192,140), "S2430C1.s2430c1f0");
    test_class_info(&lv, &cd_S2430C1);
    dp->~S2430C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2430C1(Test_S2430C1, "S2430C1", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S2430C1C1Ev();
extern void _ZN7S2430C1D1Ev();
Name_Map name_map_S2430C1[] = {
  NSPAIR(_ZN7S2430C1C1Ev),
  NSPAIR(_ZN7S2430C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2430C4;
extern VTBL_ENTRY _ZTI7S2430C4[];
extern  VTBL_ENTRY _ZTV7S2430C4[];
extern Class_Descriptor cd_S2430C3;
extern VTBL_ENTRY _ZTI7S2430C3[];
extern  VTBL_ENTRY _ZTV7S2430C3[];
extern Class_Descriptor cd_S2430C2;
extern VTBL_ENTRY _ZTI7S2430C2[];
extern  VTBL_ENTRY _ZTV7S2430C2[];
static Base_Class bases_S2430C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2430C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2430C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2430C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2430C1[];
extern void _ZN7S2430C1D1Ev();
extern void _ZN7S2430C1D0Ev();
extern void _ZN7S2430C42v9Ev();
extern void _ZN7S2430C33v10Ev();
extern void _ZN7S2430C23v11Ev();
extern void _ZN7S2430C23v12Ev();
extern void _ZN7S2430C23v13Ev();
extern void _ZN7S2430C23v14Ev();
extern void _ZN7S2430C23v15Ev();
extern void _ZN7S2430C23v16Ev();
extern void _ZN7S2430C23v17Ev();
extern void _ZN7S2430C23v18Ev();
extern void _ZN7S2430C23v19Ev();
extern void _ZN7S2430C12v1Ev();
extern void _ZN7S2430C12v2Ev();
extern void _ZN7S2430C12v3Ev();
extern void _ZN7S2430C12v4Ev();
extern void _ZN7S2430C12v5Ev();
extern void _ZN7S2430C12v6Ev();
extern void _ZN7S2430C12v7Ev();
extern void _ZN7S2430C12v8Ev();
static  VTBL_ENTRY vtc_S2430C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2430C1[0]),
  (VTBL_ENTRY)&_ZN7S2430C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2430C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2430C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2430C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2430C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2430C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S2430C1[];
extern  VTBL_ENTRY _ZTV7S2430C1[];
Class_Descriptor cd_S2430C1 = {  "S2430C1", // class name
  bases_S2430C1, 3,
  &(vtc_S2430C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S2430C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2430C1),23, //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  S2429C4  {
  char s2429c4f0;
  int s2429c4f1;
  virtual  ~S2429C4(); // _ZN7S2429C4D1Ev
  virtual void  v9(); // _ZN7S2429C42v9Ev
  S2429C4(); // tgen
};
//SIG(-1 S2429C4) C1{ vd v1 Fc Fi}


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

static void Test_S2429C4()
{
  extern Class_Descriptor cd_S2429C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2429C4, buf);
    S2429C4 *dp, &lv = *(dp=new (buf) S2429C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2429C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2429C4)");
    check_field_offset(lv, s2429c4f0, ABISELECT(8,4), "S2429C4.s2429c4f0");
    check_field_offset(lv, s2429c4f1, ABISELECT(12,8), "S2429C4.s2429c4f1");
    test_class_info(&lv, &cd_S2429C4);
    dp->~S2429C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2429C4(Test_S2429C4, "S2429C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2429C4C1Ev();
extern void _ZN7S2429C4D1Ev();
Name_Map name_map_S2429C4[] = {
  NSPAIR(_ZN7S2429C4C1Ev),
  NSPAIR(_ZN7S2429C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2429C4[];
extern void _ZN7S2429C4D1Ev();
extern void _ZN7S2429C4D0Ev();
extern void _ZN7S2429C42v9Ev();
static  VTBL_ENTRY vtc_S2429C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2429C4[0]),
  (VTBL_ENTRY)&_ZN7S2429C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2429C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2429C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S2429C4[];
extern  VTBL_ENTRY _ZTV7S2429C4[];
Class_Descriptor cd_S2429C4 = {  "S2429C4", // class name
  0,0,//no base classes
  &(vtc_S2429C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2429C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2429C4),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  S2429C3  : S2429C4 {
  int s2429c3f0[2];
  char s2429c3f1;
  ::S2432C5_nt s2429c3f2;
  ::S2431C6 s2429c3f3;
  virtual  ~S2429C3(); // _ZN7S2429C3D1Ev
  virtual void  v10(); // _ZN7S2429C33v10Ev
  S2429C3(); // tgen
};
//SIG(-1 S2429C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ Fl[4]}}}


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

static void Test_S2429C3()
{
  extern Class_Descriptor cd_S2429C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2429C3, buf);
    S2429C3 *dp, &lv = *(dp=new (buf) S2429C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2429C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2429C3)");
    check_base_class_offset(lv, (S2429C4*), 0, "S2429C3");
    check_field_offset(lv, s2429c3f0, ABISELECT(16,12), "S2429C3.s2429c3f0");
    check_field_offset(lv, s2429c3f1, ABISELECT(24,20), "S2429C3.s2429c3f1");
    check_field_offset(lv, s2429c3f2, ABISELECT(32,24), "S2429C3.s2429c3f2");
    check_field_offset(lv, s2429c3f3, ABISELECT(40,28), "S2429C3.s2429c3f3");
    test_class_info(&lv, &cd_S2429C3);
    dp->~S2429C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2429C3(Test_S2429C3, "S2429C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2429C3C1Ev();
extern void _ZN7S2429C3D1Ev();
Name_Map name_map_S2429C3[] = {
  NSPAIR(_ZN7S2429C3C1Ev),
  NSPAIR(_ZN7S2429C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2429C4;
extern VTBL_ENTRY _ZTI7S2429C4[];
extern  VTBL_ENTRY _ZTV7S2429C4[];
static Base_Class bases_S2429C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2429C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2429C3[];
extern void _ZN7S2429C3D1Ev();
extern void _ZN7S2429C3D0Ev();
extern void _ZN7S2429C42v9Ev();
extern void _ZN7S2429C33v10Ev();
static  VTBL_ENTRY vtc_S2429C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2429C3[0]),
  (VTBL_ENTRY)&_ZN7S2429C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2429C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2429C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2429C3[];
extern  VTBL_ENTRY _ZTV7S2429C3[];
Class_Descriptor cd_S2429C3 = {  "S2429C3", // class name
  bases_S2429C3, 1,
  &(vtc_S2429C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2429C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2429C3),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  S2429C2  : S2429C3 {
  void *s2429c2f0[3];
  int s2429c2f1;
  void *s2429c2f2[2];
  int s2429c2f3[3];
  char s2429c2f4[2];
  void *s2429c2f5;
  char s2429c2f6;
  void *s2429c2f7;
  __tsi64 s2429c2f8[2];
  virtual  ~S2429C2(); // _ZN7S2429C2D1Ev
  virtual void  v11(); // _ZN7S2429C23v11Ev
  virtual void  v12(); // _ZN7S2429C23v12Ev
  virtual void  v13(); // _ZN7S2429C23v13Ev
  virtual void  v14(); // _ZN7S2429C23v14Ev
  virtual void  v15(); // _ZN7S2429C23v15Ev
  virtual void  v16(); // _ZN7S2429C23v16Ev
  virtual void  v17(); // _ZN7S2429C23v17Ev
  virtual void  v18(); // _ZN7S2429C23v18Ev
  virtual void  v19(); // _ZN7S2429C23v19Ev
  S2429C2(); // tgen
};
//SIG(-1 S2429C2) C1{ BC2{ BC3{ vd v10 Fc Fi} vd v11 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v14 Fc Fi} vd v12 v13 FC7{ Fl[4]}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]}


 S2429C2 ::~S2429C2(){ note_dtor("S2429C2", this);}
void  S2429C2 ::v11(){vfunc_called(this, "_ZN7S2429C23v11Ev");}
void  S2429C2 ::v12(){vfunc_called(this, "_ZN7S2429C23v12Ev");}
void  S2429C2 ::v13(){vfunc_called(this, "_ZN7S2429C23v13Ev");}
void  S2429C2 ::v14(){vfunc_called(this, "_ZN7S2429C23v14Ev");}
void  S2429C2 ::v15(){vfunc_called(this, "_ZN7S2429C23v15Ev");}
void  S2429C2 ::v16(){vfunc_called(this, "_ZN7S2429C23v16Ev");}
void  S2429C2 ::v17(){vfunc_called(this, "_ZN7S2429C23v17Ev");}
void  S2429C2 ::v18(){vfunc_called(this, "_ZN7S2429C23v18Ev");}
void  S2429C2 ::v19(){vfunc_called(this, "_ZN7S2429C23v19Ev");}
S2429C2 ::S2429C2(){ note_ctor("S2429C2", this);} // tgen

static void Test_S2429C2()
{
  extern Class_Descriptor cd_S2429C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,32)];
    init_test(&cd_S2429C2, buf);
    S2429C2 *dp, &lv = *(dp=new (buf) S2429C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S2429C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2429C2)");
    check_base_class_offset(lv, (S2429C4*)(S2429C3*), 0, "S2429C2");
    check_base_class_offset(lv, (S2429C3*), 0, "S2429C2");
    check_field_offset(lv, s2429c2f0, ABISELECT(88,56), "S2429C2.s2429c2f0");
    check_field_offset(lv, s2429c2f1, ABISELECT(112,68), "S2429C2.s2429c2f1");
    check_field_offset(lv, s2429c2f2, ABISELECT(120,72), "S2429C2.s2429c2f2");
    check_field_offset(lv, s2429c2f3, ABISELECT(136,80), "S2429C2.s2429c2f3");
    check_field_offset(lv, s2429c2f4, ABISELECT(148,92), "S2429C2.s2429c2f4");
    check_field_offset(lv, s2429c2f5, ABISELECT(152,96), "S2429C2.s2429c2f5");
    check_field_offset(lv, s2429c2f6, ABISELECT(160,100), "S2429C2.s2429c2f6");
    check_field_offset(lv, s2429c2f7, ABISELECT(168,104), "S2429C2.s2429c2f7");
    check_field_offset(lv, s2429c2f8, ABISELECT(176,108), "S2429C2.s2429c2f8");
    test_class_info(&lv, &cd_S2429C2);
    dp->~S2429C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2429C2(Test_S2429C2, "S2429C2", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN7S2429C2C1Ev();
extern void _ZN7S2429C2D1Ev();
Name_Map name_map_S2429C2[] = {
  NSPAIR(_ZN7S2429C2C1Ev),
  NSPAIR(_ZN7S2429C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2429C4;
extern VTBL_ENTRY _ZTI7S2429C4[];
extern  VTBL_ENTRY _ZTV7S2429C4[];
extern Class_Descriptor cd_S2429C3;
extern VTBL_ENTRY _ZTI7S2429C3[];
extern  VTBL_ENTRY _ZTV7S2429C3[];
static Base_Class bases_S2429C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2429C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2429C2[];
extern void _ZN7S2429C2D1Ev();
extern void _ZN7S2429C2D0Ev();
extern void _ZN7S2429C42v9Ev();
extern void _ZN7S2429C33v10Ev();
extern void _ZN7S2429C23v11Ev();
extern void _ZN7S2429C23v12Ev();
extern void _ZN7S2429C23v13Ev();
extern void _ZN7S2429C23v14Ev();
extern void _ZN7S2429C23v15Ev();
extern void _ZN7S2429C23v16Ev();
extern void _ZN7S2429C23v17Ev();
extern void _ZN7S2429C23v18Ev();
extern void _ZN7S2429C23v19Ev();
static  VTBL_ENTRY vtc_S2429C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2429C2[0]),
  (VTBL_ENTRY)&_ZN7S2429C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2429C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2429C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S2429C2[];
extern  VTBL_ENTRY _ZTV7S2429C2[];
Class_Descriptor cd_S2429C2 = {  "S2429C2", // class name
  bases_S2429C2, 2,
  &(vtc_S2429C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI7S2429C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2429C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2429C1  : S2429C2 {
  char s2429c1f0[4];
  virtual  ~S2429C1(); // _ZN7S2429C1D1Ev
  virtual void  v1(); // _ZN7S2429C12v1Ev
  virtual void  v2(); // _ZN7S2429C12v2Ev
  virtual void  v3(); // _ZN7S2429C12v3Ev
  virtual void  v4(); // _ZN7S2429C12v4Ev
  virtual void  v5(); // _ZN7S2429C12v5Ev
  virtual void  v6(); // _ZN7S2429C12v6Ev
  virtual void  v7(); // _ZN7S2429C12v7Ev
  virtual void  v8(); // _ZN7S2429C12v8Ev
  S2429C1(); // tgen
};
//SIG(1 S2429C1) C1{ BC2{ BC3{ BC4{ vd v9 Fc Fi} vd v10 Fi[2] Fc FC5{ Fp} FC6{ BC7{ vd v22 Fc Fi} vd v20 v21 FC8{ Fl[4]}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc[4]}


 S2429C1 ::~S2429C1(){ note_dtor("S2429C1", this);}
void  S2429C1 ::v1(){vfunc_called(this, "_ZN7S2429C12v1Ev");}
void  S2429C1 ::v2(){vfunc_called(this, "_ZN7S2429C12v2Ev");}
void  S2429C1 ::v3(){vfunc_called(this, "_ZN7S2429C12v3Ev");}
void  S2429C1 ::v4(){vfunc_called(this, "_ZN7S2429C12v4Ev");}
void  S2429C1 ::v5(){vfunc_called(this, "_ZN7S2429C12v5Ev");}
void  S2429C1 ::v6(){vfunc_called(this, "_ZN7S2429C12v6Ev");}
void  S2429C1 ::v7(){vfunc_called(this, "_ZN7S2429C12v7Ev");}
void  S2429C1 ::v8(){vfunc_called(this, "_ZN7S2429C12v8Ev");}
S2429C1 ::S2429C1(){ note_ctor("S2429C1", this);} // tgen

static void Test_S2429C1()
{
  extern Class_Descriptor cd_S2429C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,33)];
    init_test(&cd_S2429C1, buf);
    S2429C1 *dp, &lv = *(dp=new (buf) S2429C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,128), "sizeof(S2429C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2429C1)");
    check_base_class_offset(lv, (S2429C4*)(S2429C3*)(S2429C2*), 0, "S2429C1");
    check_base_class_offset(lv, (S2429C3*)(S2429C2*), 0, "S2429C1");
    check_base_class_offset(lv, (S2429C2*), 0, "S2429C1");
    check_field_offset(lv, s2429c1f0, ABISELECT(192,124), "S2429C1.s2429c1f0");
    test_class_info(&lv, &cd_S2429C1);
    dp->~S2429C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2429C1(Test_S2429C1, "S2429C1", ABISELECT(200,128));

#else // __cplusplus

extern void _ZN7S2429C1C1Ev();
extern void _ZN7S2429C1D1Ev();
Name_Map name_map_S2429C1[] = {
  NSPAIR(_ZN7S2429C1C1Ev),
  NSPAIR(_ZN7S2429C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2429C4;
extern VTBL_ENTRY _ZTI7S2429C4[];
extern  VTBL_ENTRY _ZTV7S2429C4[];
extern Class_Descriptor cd_S2429C3;
extern VTBL_ENTRY _ZTI7S2429C3[];
extern  VTBL_ENTRY _ZTV7S2429C3[];
extern Class_Descriptor cd_S2429C2;
extern VTBL_ENTRY _ZTI7S2429C2[];
extern  VTBL_ENTRY _ZTV7S2429C2[];
static Base_Class bases_S2429C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2429C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2429C1[];
extern void _ZN7S2429C1D1Ev();
extern void _ZN7S2429C1D0Ev();
extern void _ZN7S2429C42v9Ev();
extern void _ZN7S2429C33v10Ev();
extern void _ZN7S2429C23v11Ev();
extern void _ZN7S2429C23v12Ev();
extern void _ZN7S2429C23v13Ev();
extern void _ZN7S2429C23v14Ev();
extern void _ZN7S2429C23v15Ev();
extern void _ZN7S2429C23v16Ev();
extern void _ZN7S2429C23v17Ev();
extern void _ZN7S2429C23v18Ev();
extern void _ZN7S2429C23v19Ev();
extern void _ZN7S2429C12v1Ev();
extern void _ZN7S2429C12v2Ev();
extern void _ZN7S2429C12v3Ev();
extern void _ZN7S2429C12v4Ev();
extern void _ZN7S2429C12v5Ev();
extern void _ZN7S2429C12v6Ev();
extern void _ZN7S2429C12v7Ev();
extern void _ZN7S2429C12v8Ev();
static  VTBL_ENTRY vtc_S2429C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2429C1[0]),
  (VTBL_ENTRY)&_ZN7S2429C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2429C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2429C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2429C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2429C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S2429C1[];
extern  VTBL_ENTRY _ZTV7S2429C1[];
Class_Descriptor cd_S2429C1 = {  "S2429C1", // class name
  bases_S2429C1, 3,
  &(vtc_S2429C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,128), // object size
  NSPAIRA(_ZTI7S2429C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2429C1),23, //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  S2434C4  {
  char s2434c4f0;
  int s2434c4f1;
  virtual  ~S2434C4(); // _ZN7S2434C4D1Ev
  virtual void  v9(); // _ZN7S2434C42v9Ev
  S2434C4(); // tgen
};
//SIG(-1 S2434C4) C1{ vd v1 Fc Fi}


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

static void Test_S2434C4()
{
  extern Class_Descriptor cd_S2434C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2434C4, buf);
    S2434C4 *dp, &lv = *(dp=new (buf) S2434C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2434C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2434C4)");
    check_field_offset(lv, s2434c4f0, ABISELECT(8,4), "S2434C4.s2434c4f0");
    check_field_offset(lv, s2434c4f1, ABISELECT(12,8), "S2434C4.s2434c4f1");
    test_class_info(&lv, &cd_S2434C4);
    dp->~S2434C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2434C4(Test_S2434C4, "S2434C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2434C4C1Ev();
extern void _ZN7S2434C4D1Ev();
Name_Map name_map_S2434C4[] = {
  NSPAIR(_ZN7S2434C4C1Ev),
  NSPAIR(_ZN7S2434C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2434C4[];
extern void _ZN7S2434C4D1Ev();
extern void _ZN7S2434C4D0Ev();
extern void _ZN7S2434C42v9Ev();
static  VTBL_ENTRY vtc_S2434C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2434C4[0]),
  (VTBL_ENTRY)&_ZN7S2434C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2434C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2434C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S2434C4[];
extern  VTBL_ENTRY _ZTV7S2434C4[];
Class_Descriptor cd_S2434C4 = {  "S2434C4", // class name
  0,0,//no base classes
  &(vtc_S2434C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2434C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2434C4),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  S2434C3  : S2434C4 {
  int s2434c3f0[2];
  char s2434c3f1;
  ::S2432C5_nt s2434c3f2;
  ::S2432C6 s2434c3f3;
  virtual  ~S2434C3(); // _ZN7S2434C3D1Ev
  virtual void  v10(); // _ZN7S2434C33v10Ev
  S2434C3(); // tgen
};
//SIG(-1 S2434C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ FL[4]}}}


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

static void Test_S2434C3()
{
  extern Class_Descriptor cd_S2434C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S2434C3, buf);
    S2434C3 *dp, &lv = *(dp=new (buf) S2434C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S2434C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2434C3)");
    check_base_class_offset(lv, (S2434C4*), 0, "S2434C3");
    check_field_offset(lv, s2434c3f0, ABISELECT(16,12), "S2434C3.s2434c3f0");
    check_field_offset(lv, s2434c3f1, ABISELECT(24,20), "S2434C3.s2434c3f1");
    check_field_offset(lv, s2434c3f2, ABISELECT(32,24), "S2434C3.s2434c3f2");
    check_field_offset(lv, s2434c3f3, ABISELECT(40,28), "S2434C3.s2434c3f3");
    test_class_info(&lv, &cd_S2434C3);
    dp->~S2434C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2434C3(Test_S2434C3, "S2434C3", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S2434C3C1Ev();
extern void _ZN7S2434C3D1Ev();
Name_Map name_map_S2434C3[] = {
  NSPAIR(_ZN7S2434C3C1Ev),
  NSPAIR(_ZN7S2434C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2434C4;
extern VTBL_ENTRY _ZTI7S2434C4[];
extern  VTBL_ENTRY _ZTV7S2434C4[];
static Base_Class bases_S2434C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2434C3[];
extern void _ZN7S2434C3D1Ev();
extern void _ZN7S2434C3D0Ev();
extern void _ZN7S2434C42v9Ev();
extern void _ZN7S2434C33v10Ev();
static  VTBL_ENTRY vtc_S2434C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2434C3[0]),
  (VTBL_ENTRY)&_ZN7S2434C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2434C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2434C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2434C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2434C3[];
extern  VTBL_ENTRY _ZTV7S2434C3[];
Class_Descriptor cd_S2434C3 = {  "S2434C3", // class name
  bases_S2434C3, 1,
  &(vtc_S2434C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S2434C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2434C3),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  S2434C2  : S2434C3 {
  void *s2434c2f0[3];
  int s2434c2f1;
  void *s2434c2f2[2];
  int s2434c2f3[3];
  char s2434c2f4[2];
  void *s2434c2f5;
  char s2434c2f6;
  void *s2434c2f7;
  __tsi64 s2434c2f8[2];
  virtual  ~S2434C2(); // _ZN7S2434C2D1Ev
  virtual void  v11(); // _ZN7S2434C23v11Ev
  virtual void  v12(); // _ZN7S2434C23v12Ev
  virtual void  v13(); // _ZN7S2434C23v13Ev
  virtual void  v14(); // _ZN7S2434C23v14Ev
  virtual void  v15(); // _ZN7S2434C23v15Ev
  virtual void  v16(); // _ZN7S2434C23v16Ev
  virtual void  v17(); // _ZN7S2434C23v17Ev
  virtual void  v18(); // _ZN7S2434C23v18Ev
  virtual void  v19(); // _ZN7S2434C23v19Ev
  S2434C2(); // tgen
};
//SIG(-1 S2434C2) C1{ BC2{ BC3{ vd v10 Fc Fi} vd v11 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v14 Fc Fi} vd v12 v13 FC7{ FL[4]}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]}


 S2434C2 ::~S2434C2(){ note_dtor("S2434C2", this);}
void  S2434C2 ::v11(){vfunc_called(this, "_ZN7S2434C23v11Ev");}
void  S2434C2 ::v12(){vfunc_called(this, "_ZN7S2434C23v12Ev");}
void  S2434C2 ::v13(){vfunc_called(this, "_ZN7S2434C23v13Ev");}
void  S2434C2 ::v14(){vfunc_called(this, "_ZN7S2434C23v14Ev");}
void  S2434C2 ::v15(){vfunc_called(this, "_ZN7S2434C23v15Ev");}
void  S2434C2 ::v16(){vfunc_called(this, "_ZN7S2434C23v16Ev");}
void  S2434C2 ::v17(){vfunc_called(this, "_ZN7S2434C23v17Ev");}
void  S2434C2 ::v18(){vfunc_called(this, "_ZN7S2434C23v18Ev");}
void  S2434C2 ::v19(){vfunc_called(this, "_ZN7S2434C23v19Ev");}
S2434C2 ::S2434C2(){ note_ctor("S2434C2", this);} // tgen

static void Test_S2434C2()
{
  extern Class_Descriptor cd_S2434C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,36)];
    init_test(&cd_S2434C2, buf);
    S2434C2 *dp, &lv = *(dp=new (buf) S2434C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S2434C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2434C2)");
    check_base_class_offset(lv, (S2434C4*)(S2434C3*), 0, "S2434C2");
    check_base_class_offset(lv, (S2434C3*), 0, "S2434C2");
    check_field_offset(lv, s2434c2f0, ABISELECT(88,72), "S2434C2.s2434c2f0");
    check_field_offset(lv, s2434c2f1, ABISELECT(112,84), "S2434C2.s2434c2f1");
    check_field_offset(lv, s2434c2f2, ABISELECT(120,88), "S2434C2.s2434c2f2");
    check_field_offset(lv, s2434c2f3, ABISELECT(136,96), "S2434C2.s2434c2f3");
    check_field_offset(lv, s2434c2f4, ABISELECT(148,108), "S2434C2.s2434c2f4");
    check_field_offset(lv, s2434c2f5, ABISELECT(152,112), "S2434C2.s2434c2f5");
    check_field_offset(lv, s2434c2f6, ABISELECT(160,116), "S2434C2.s2434c2f6");
    check_field_offset(lv, s2434c2f7, ABISELECT(168,120), "S2434C2.s2434c2f7");
    check_field_offset(lv, s2434c2f8, ABISELECT(176,124), "S2434C2.s2434c2f8");
    test_class_info(&lv, &cd_S2434C2);
    dp->~S2434C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2434C2(Test_S2434C2, "S2434C2", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN7S2434C2C1Ev();
extern void _ZN7S2434C2D1Ev();
Name_Map name_map_S2434C2[] = {
  NSPAIR(_ZN7S2434C2C1Ev),
  NSPAIR(_ZN7S2434C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2434C4;
extern VTBL_ENTRY _ZTI7S2434C4[];
extern  VTBL_ENTRY _ZTV7S2434C4[];
extern Class_Descriptor cd_S2434C3;
extern VTBL_ENTRY _ZTI7S2434C3[];
extern  VTBL_ENTRY _ZTV7S2434C3[];
static Base_Class bases_S2434C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2434C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2434C2[];
extern void _ZN7S2434C2D1Ev();
extern void _ZN7S2434C2D0Ev();
extern void _ZN7S2434C42v9Ev();
extern void _ZN7S2434C33v10Ev();
extern void _ZN7S2434C23v11Ev();
extern void _ZN7S2434C23v12Ev();
extern void _ZN7S2434C23v13Ev();
extern void _ZN7S2434C23v14Ev();
extern void _ZN7S2434C23v15Ev();
extern void _ZN7S2434C23v16Ev();
extern void _ZN7S2434C23v17Ev();
extern void _ZN7S2434C23v18Ev();
extern void _ZN7S2434C23v19Ev();
static  VTBL_ENTRY vtc_S2434C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2434C2[0]),
  (VTBL_ENTRY)&_ZN7S2434C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2434C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2434C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2434C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S2434C2[];
extern  VTBL_ENTRY _ZTV7S2434C2[];
Class_Descriptor cd_S2434C2 = {  "S2434C2", // class name
  bases_S2434C2, 2,
  &(vtc_S2434C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI7S2434C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2434C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2434C1  : S2434C2 {
  void *s2434c1f0;
  virtual  ~S2434C1(); // _ZN7S2434C1D1Ev
  virtual void  v1(); // _ZN7S2434C12v1Ev
  virtual void  v2(); // _ZN7S2434C12v2Ev
  virtual void  v3(); // _ZN7S2434C12v3Ev
  virtual void  v4(); // _ZN7S2434C12v4Ev
  virtual void  v5(); // _ZN7S2434C12v5Ev
  virtual void  v6(); // _ZN7S2434C12v6Ev
  virtual void  v7(); // _ZN7S2434C12v7Ev
  virtual void  v8(); // _ZN7S2434C12v8Ev
  S2434C1(); // tgen
};
//SIG(1 S2434C1) C1{ BC2{ BC3{ BC4{ vd v9 Fc Fi} vd v10 Fi[2] Fc FC5{ Fp} FC6{ BC7{ vd v22 Fc Fi} vd v20 v21 FC8{ FL[4]}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp}


 S2434C1 ::~S2434C1(){ note_dtor("S2434C1", this);}
void  S2434C1 ::v1(){vfunc_called(this, "_ZN7S2434C12v1Ev");}
void  S2434C1 ::v2(){vfunc_called(this, "_ZN7S2434C12v2Ev");}
void  S2434C1 ::v3(){vfunc_called(this, "_ZN7S2434C12v3Ev");}
void  S2434C1 ::v4(){vfunc_called(this, "_ZN7S2434C12v4Ev");}
void  S2434C1 ::v5(){vfunc_called(this, "_ZN7S2434C12v5Ev");}
void  S2434C1 ::v6(){vfunc_called(this, "_ZN7S2434C12v6Ev");}
void  S2434C1 ::v7(){vfunc_called(this, "_ZN7S2434C12v7Ev");}
void  S2434C1 ::v8(){vfunc_called(this, "_ZN7S2434C12v8Ev");}
S2434C1 ::S2434C1(){ note_ctor("S2434C1", this);} // tgen

static void Test_S2434C1()
{
  extern Class_Descriptor cd_S2434C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S2434C1, buf);
    S2434C1 *dp, &lv = *(dp=new (buf) S2434C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S2434C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2434C1)");
    check_base_class_offset(lv, (S2434C4*)(S2434C3*)(S2434C2*), 0, "S2434C1");
    check_base_class_offset(lv, (S2434C3*)(S2434C2*), 0, "S2434C1");
    check_base_class_offset(lv, (S2434C2*), 0, "S2434C1");
    check_field_offset(lv, s2434c1f0, ABISELECT(192,140), "S2434C1.s2434c1f0");
    test_class_info(&lv, &cd_S2434C1);
    dp->~S2434C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2434C1(Test_S2434C1, "S2434C1", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S2434C1C1Ev();
extern void _ZN7S2434C1D1Ev();
Name_Map name_map_S2434C1[] = {
  NSPAIR(_ZN7S2434C1C1Ev),
  NSPAIR(_ZN7S2434C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2434C4;
extern VTBL_ENTRY _ZTI7S2434C4[];
extern  VTBL_ENTRY _ZTV7S2434C4[];
extern Class_Descriptor cd_S2434C3;
extern VTBL_ENTRY _ZTI7S2434C3[];
extern  VTBL_ENTRY _ZTV7S2434C3[];
extern Class_Descriptor cd_S2434C2;
extern VTBL_ENTRY _ZTI7S2434C2[];
extern  VTBL_ENTRY _ZTV7S2434C2[];
static Base_Class bases_S2434C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2434C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2434C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2434C1[];
extern void _ZN7S2434C1D1Ev();
extern void _ZN7S2434C1D0Ev();
extern void _ZN7S2434C42v9Ev();
extern void _ZN7S2434C33v10Ev();
extern void _ZN7S2434C23v11Ev();
extern void _ZN7S2434C23v12Ev();
extern void _ZN7S2434C23v13Ev();
extern void _ZN7S2434C23v14Ev();
extern void _ZN7S2434C23v15Ev();
extern void _ZN7S2434C23v16Ev();
extern void _ZN7S2434C23v17Ev();
extern void _ZN7S2434C23v18Ev();
extern void _ZN7S2434C23v19Ev();
extern void _ZN7S2434C12v1Ev();
extern void _ZN7S2434C12v2Ev();
extern void _ZN7S2434C12v3Ev();
extern void _ZN7S2434C12v4Ev();
extern void _ZN7S2434C12v5Ev();
extern void _ZN7S2434C12v6Ev();
extern void _ZN7S2434C12v7Ev();
extern void _ZN7S2434C12v8Ev();
static  VTBL_ENTRY vtc_S2434C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2434C1[0]),
  (VTBL_ENTRY)&_ZN7S2434C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2434C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2434C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2434C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2434C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2434C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S2434C1[];
extern  VTBL_ENTRY _ZTV7S2434C1[];
Class_Descriptor cd_S2434C1 = {  "S2434C1", // class name
  bases_S2434C1, 3,
  &(vtc_S2434C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S2434C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2434C1),23, //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  S2433C4  {
  char s2433c4f0;
  int s2433c4f1;
  virtual  ~S2433C4(); // _ZN7S2433C4D1Ev
  virtual void  v9(); // _ZN7S2433C42v9Ev
  S2433C4(); // tgen
};
//SIG(-1 S2433C4) C1{ vd v1 Fc Fi}


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

static void Test_S2433C4()
{
  extern Class_Descriptor cd_S2433C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2433C4, buf);
    S2433C4 *dp, &lv = *(dp=new (buf) S2433C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2433C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2433C4)");
    check_field_offset(lv, s2433c4f0, ABISELECT(8,4), "S2433C4.s2433c4f0");
    check_field_offset(lv, s2433c4f1, ABISELECT(12,8), "S2433C4.s2433c4f1");
    test_class_info(&lv, &cd_S2433C4);
    dp->~S2433C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2433C4(Test_S2433C4, "S2433C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2433C4C1Ev();
extern void _ZN7S2433C4D1Ev();
Name_Map name_map_S2433C4[] = {
  NSPAIR(_ZN7S2433C4C1Ev),
  NSPAIR(_ZN7S2433C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2433C4[];
extern void _ZN7S2433C4D1Ev();
extern void _ZN7S2433C4D0Ev();
extern void _ZN7S2433C42v9Ev();
static  VTBL_ENTRY vtc_S2433C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2433C4[0]),
  (VTBL_ENTRY)&_ZN7S2433C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2433C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2433C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S2433C4[];
extern  VTBL_ENTRY _ZTV7S2433C4[];
Class_Descriptor cd_S2433C4 = {  "S2433C4", // class name
  0,0,//no base classes
  &(vtc_S2433C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2433C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2433C4),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  S2433C3  : S2433C4 {
  int s2433c3f0[2];
  char s2433c3f1;
  ::S2432C5_nt s2433c3f2;
  ::S2431C6 s2433c3f3;
  virtual  ~S2433C3(); // _ZN7S2433C3D1Ev
  virtual void  v10(); // _ZN7S2433C33v10Ev
  S2433C3(); // tgen
};
//SIG(-1 S2433C3) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ Fl[4]}}}


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

static void Test_S2433C3()
{
  extern Class_Descriptor cd_S2433C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2433C3, buf);
    S2433C3 *dp, &lv = *(dp=new (buf) S2433C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2433C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2433C3)");
    check_base_class_offset(lv, (S2433C4*), 0, "S2433C3");
    check_field_offset(lv, s2433c3f0, ABISELECT(16,12), "S2433C3.s2433c3f0");
    check_field_offset(lv, s2433c3f1, ABISELECT(24,20), "S2433C3.s2433c3f1");
    check_field_offset(lv, s2433c3f2, ABISELECT(32,24), "S2433C3.s2433c3f2");
    check_field_offset(lv, s2433c3f3, ABISELECT(40,28), "S2433C3.s2433c3f3");
    test_class_info(&lv, &cd_S2433C3);
    dp->~S2433C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2433C3(Test_S2433C3, "S2433C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2433C3C1Ev();
extern void _ZN7S2433C3D1Ev();
Name_Map name_map_S2433C3[] = {
  NSPAIR(_ZN7S2433C3C1Ev),
  NSPAIR(_ZN7S2433C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2433C4;
extern VTBL_ENTRY _ZTI7S2433C4[];
extern  VTBL_ENTRY _ZTV7S2433C4[];
static Base_Class bases_S2433C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2433C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2433C3[];
extern void _ZN7S2433C3D1Ev();
extern void _ZN7S2433C3D0Ev();
extern void _ZN7S2433C42v9Ev();
extern void _ZN7S2433C33v10Ev();
static  VTBL_ENTRY vtc_S2433C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2433C3[0]),
  (VTBL_ENTRY)&_ZN7S2433C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2433C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2433C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2433C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2433C3[];
extern  VTBL_ENTRY _ZTV7S2433C3[];
Class_Descriptor cd_S2433C3 = {  "S2433C3", // class name
  bases_S2433C3, 1,
  &(vtc_S2433C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2433C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2433C3),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  S2433C2  : S2433C3 {
  void *s2433c2f0[3];
  int s2433c2f1;
  void *s2433c2f2[2];
  int s2433c2f3[3];
  char s2433c2f4[2];
  void *s2433c2f5;
  char s2433c2f6;
  void *s2433c2f7;
  __tsi64 s2433c2f8[2];
  virtual  ~S2433C2(); // _ZN7S2433C2D1Ev
  virtual void  v11(); // _ZN7S2433C23v11Ev
  virtual void  v12(); // _ZN7S2433C23v12Ev
  virtual void  v13(); // _ZN7S2433C23v13Ev
  virtual void  v14(); // _ZN7S2433C23v14Ev
  virtual void  v15(); // _ZN7S2433C23v15Ev
  virtual void  v16(); // _ZN7S2433C23v16Ev
  virtual void  v17(); // _ZN7S2433C23v17Ev
  virtual void  v18(); // _ZN7S2433C23v18Ev
  virtual void  v19(); // _ZN7S2433C23v19Ev
  S2433C2(); // tgen
};
//SIG(-1 S2433C2) C1{ BC2{ BC3{ vd v10 Fc Fi} vd v11 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v14 Fc Fi} vd v12 v13 FC7{ Fl[4]}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]}


 S2433C2 ::~S2433C2(){ note_dtor("S2433C2", this);}
void  S2433C2 ::v11(){vfunc_called(this, "_ZN7S2433C23v11Ev");}
void  S2433C2 ::v12(){vfunc_called(this, "_ZN7S2433C23v12Ev");}
void  S2433C2 ::v13(){vfunc_called(this, "_ZN7S2433C23v13Ev");}
void  S2433C2 ::v14(){vfunc_called(this, "_ZN7S2433C23v14Ev");}
void  S2433C2 ::v15(){vfunc_called(this, "_ZN7S2433C23v15Ev");}
void  S2433C2 ::v16(){vfunc_called(this, "_ZN7S2433C23v16Ev");}
void  S2433C2 ::v17(){vfunc_called(this, "_ZN7S2433C23v17Ev");}
void  S2433C2 ::v18(){vfunc_called(this, "_ZN7S2433C23v18Ev");}
void  S2433C2 ::v19(){vfunc_called(this, "_ZN7S2433C23v19Ev");}
S2433C2 ::S2433C2(){ note_ctor("S2433C2", this);} // tgen

static void Test_S2433C2()
{
  extern Class_Descriptor cd_S2433C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,32)];
    init_test(&cd_S2433C2, buf);
    S2433C2 *dp, &lv = *(dp=new (buf) S2433C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S2433C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2433C2)");
    check_base_class_offset(lv, (S2433C4*)(S2433C3*), 0, "S2433C2");
    check_base_class_offset(lv, (S2433C3*), 0, "S2433C2");
    check_field_offset(lv, s2433c2f0, ABISELECT(88,56), "S2433C2.s2433c2f0");
    check_field_offset(lv, s2433c2f1, ABISELECT(112,68), "S2433C2.s2433c2f1");
    check_field_offset(lv, s2433c2f2, ABISELECT(120,72), "S2433C2.s2433c2f2");
    check_field_offset(lv, s2433c2f3, ABISELECT(136,80), "S2433C2.s2433c2f3");
    check_field_offset(lv, s2433c2f4, ABISELECT(148,92), "S2433C2.s2433c2f4");
    check_field_offset(lv, s2433c2f5, ABISELECT(152,96), "S2433C2.s2433c2f5");
    check_field_offset(lv, s2433c2f6, ABISELECT(160,100), "S2433C2.s2433c2f6");
    check_field_offset(lv, s2433c2f7, ABISELECT(168,104), "S2433C2.s2433c2f7");
    check_field_offset(lv, s2433c2f8, ABISELECT(176,108), "S2433C2.s2433c2f8");
    test_class_info(&lv, &cd_S2433C2);
    dp->~S2433C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2433C2(Test_S2433C2, "S2433C2", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN7S2433C2C1Ev();
extern void _ZN7S2433C2D1Ev();
Name_Map name_map_S2433C2[] = {
  NSPAIR(_ZN7S2433C2C1Ev),
  NSPAIR(_ZN7S2433C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2433C4;
extern VTBL_ENTRY _ZTI7S2433C4[];
extern  VTBL_ENTRY _ZTV7S2433C4[];
extern Class_Descriptor cd_S2433C3;
extern VTBL_ENTRY _ZTI7S2433C3[];
extern  VTBL_ENTRY _ZTV7S2433C3[];
static Base_Class bases_S2433C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2433C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2433C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2433C2[];
extern void _ZN7S2433C2D1Ev();
extern void _ZN7S2433C2D0Ev();
extern void _ZN7S2433C42v9Ev();
extern void _ZN7S2433C33v10Ev();
extern void _ZN7S2433C23v11Ev();
extern void _ZN7S2433C23v12Ev();
extern void _ZN7S2433C23v13Ev();
extern void _ZN7S2433C23v14Ev();
extern void _ZN7S2433C23v15Ev();
extern void _ZN7S2433C23v16Ev();
extern void _ZN7S2433C23v17Ev();
extern void _ZN7S2433C23v18Ev();
extern void _ZN7S2433C23v19Ev();
static  VTBL_ENTRY vtc_S2433C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2433C2[0]),
  (VTBL_ENTRY)&_ZN7S2433C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2433C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2433C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2433C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S2433C2[];
extern  VTBL_ENTRY _ZTV7S2433C2[];
Class_Descriptor cd_S2433C2 = {  "S2433C2", // class name
  bases_S2433C2, 2,
  &(vtc_S2433C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI7S2433C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2433C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2433C1  : S2433C2 {
  void *s2433c1f0;
  virtual  ~S2433C1(); // _ZN7S2433C1D1Ev
  virtual void  v1(); // _ZN7S2433C12v1Ev
  virtual void  v2(); // _ZN7S2433C12v2Ev
  virtual void  v3(); // _ZN7S2433C12v3Ev
  virtual void  v4(); // _ZN7S2433C12v4Ev
  virtual void  v5(); // _ZN7S2433C12v5Ev
  virtual void  v6(); // _ZN7S2433C12v6Ev
  virtual void  v7(); // _ZN7S2433C12v7Ev
  virtual void  v8(); // _ZN7S2433C12v8Ev
  S2433C1(); // tgen
};
//SIG(1 S2433C1) C1{ BC2{ BC3{ BC4{ vd v9 Fc Fi} vd v10 Fi[2] Fc FC5{ Fp} FC6{ BC7{ vd v22 Fc Fi} vd v20 v21 FC8{ Fl[4]}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] Fi Fp[2] Fi[3] Fc[2] Fp Fc Fp FL[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp}


 S2433C1 ::~S2433C1(){ note_dtor("S2433C1", this);}
void  S2433C1 ::v1(){vfunc_called(this, "_ZN7S2433C12v1Ev");}
void  S2433C1 ::v2(){vfunc_called(this, "_ZN7S2433C12v2Ev");}
void  S2433C1 ::v3(){vfunc_called(this, "_ZN7S2433C12v3Ev");}
void  S2433C1 ::v4(){vfunc_called(this, "_ZN7S2433C12v4Ev");}
void  S2433C1 ::v5(){vfunc_called(this, "_ZN7S2433C12v5Ev");}
void  S2433C1 ::v6(){vfunc_called(this, "_ZN7S2433C12v6Ev");}
void  S2433C1 ::v7(){vfunc_called(this, "_ZN7S2433C12v7Ev");}
void  S2433C1 ::v8(){vfunc_called(this, "_ZN7S2433C12v8Ev");}
S2433C1 ::S2433C1(){ note_ctor("S2433C1", this);} // tgen

static void Test_S2433C1()
{
  extern Class_Descriptor cd_S2433C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,33)];
    init_test(&cd_S2433C1, buf);
    S2433C1 *dp, &lv = *(dp=new (buf) S2433C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,128), "sizeof(S2433C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2433C1)");
    check_base_class_offset(lv, (S2433C4*)(S2433C3*)(S2433C2*), 0, "S2433C1");
    check_base_class_offset(lv, (S2433C3*)(S2433C2*), 0, "S2433C1");
    check_base_class_offset(lv, (S2433C2*), 0, "S2433C1");
    check_field_offset(lv, s2433c1f0, ABISELECT(192,124), "S2433C1.s2433c1f0");
    test_class_info(&lv, &cd_S2433C1);
    dp->~S2433C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2433C1(Test_S2433C1, "S2433C1", ABISELECT(200,128));

#else // __cplusplus

extern void _ZN7S2433C1C1Ev();
extern void _ZN7S2433C1D1Ev();
Name_Map name_map_S2433C1[] = {
  NSPAIR(_ZN7S2433C1C1Ev),
  NSPAIR(_ZN7S2433C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2433C4;
extern VTBL_ENTRY _ZTI7S2433C4[];
extern  VTBL_ENTRY _ZTV7S2433C4[];
extern Class_Descriptor cd_S2433C3;
extern VTBL_ENTRY _ZTI7S2433C3[];
extern  VTBL_ENTRY _ZTV7S2433C3[];
extern Class_Descriptor cd_S2433C2;
extern VTBL_ENTRY _ZTI7S2433C2[];
extern  VTBL_ENTRY _ZTV7S2433C2[];
static Base_Class bases_S2433C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2433C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2433C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2433C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2433C1[];
extern void _ZN7S2433C1D1Ev();
extern void _ZN7S2433C1D0Ev();
extern void _ZN7S2433C42v9Ev();
extern void _ZN7S2433C33v10Ev();
extern void _ZN7S2433C23v11Ev();
extern void _ZN7S2433C23v12Ev();
extern void _ZN7S2433C23v13Ev();
extern void _ZN7S2433C23v14Ev();
extern void _ZN7S2433C23v15Ev();
extern void _ZN7S2433C23v16Ev();
extern void _ZN7S2433C23v17Ev();
extern void _ZN7S2433C23v18Ev();
extern void _ZN7S2433C23v19Ev();
extern void _ZN7S2433C12v1Ev();
extern void _ZN7S2433C12v2Ev();
extern void _ZN7S2433C12v3Ev();
extern void _ZN7S2433C12v4Ev();
extern void _ZN7S2433C12v5Ev();
extern void _ZN7S2433C12v6Ev();
extern void _ZN7S2433C12v7Ev();
extern void _ZN7S2433C12v8Ev();
static  VTBL_ENTRY vtc_S2433C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2433C1[0]),
  (VTBL_ENTRY)&_ZN7S2433C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2433C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2433C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2433C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2433C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2433C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S2433C1[];
extern  VTBL_ENTRY _ZTV7S2433C1[];
Class_Descriptor cd_S2433C1 = {  "S2433C1", // class name
  bases_S2433C1, 3,
  &(vtc_S2433C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,128), // object size
  NSPAIRA(_ZTI7S2433C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2433C1),23, //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  S9906C2_nt  {
  char s9906c2f0;
  int s9906c2f1;
  void *s9906c2f2[3];
  char s9906c2f3[3];
  ::S2382C20_nt s9906c2f4;
  char s9906c2f5;
  void *s9906c2f6;
  int s9906c2f7[2];
  virtual  ~S9906C2_nt(); // _ZN10S9906C2_ntD1Ev
  virtual void  v5(); // _ZN10S9906C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9906C2_nt2v6Ev
  virtual void  v7(); // _ZN10S9906C2_nt2v7Ev
  virtual void  v8(); // _ZN10S9906C2_nt2v8Ev
  virtual void  v9(); // _ZN10S9906C2_nt2v9Ev
  virtual void  v10(); // _ZN10S9906C2_nt3v10Ev
  virtual void  v11(); // _ZN10S9906C2_nt3v11Ev
  virtual void  v12(); // _ZN10S9906C2_nt3v12Ev
  virtual void  v13(); // _ZN10S9906C2_nt3v13Ev
  virtual void  v14(); // _ZN10S9906C2_nt3v14Ev
  virtual void  v15(); // _ZN10S9906C2_nt3v15Ev
  virtual void  v16(); // _ZN10S9906C2_nt3v16Ev
  virtual void  v17(); // _ZN10S9906C2_nt3v17Ev
  virtual void  v18(); // _ZN10S9906C2_nt3v18Ev
  S9906C2_nt(); // tgen
};
//SIG(-1 S9906C2_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]}


 S9906C2_nt ::~S9906C2_nt(){ note_dtor("S9906C2_nt", this);}
void  S9906C2_nt ::v5(){vfunc_called(this, "_ZN10S9906C2_nt2v5Ev");}
void  S9906C2_nt ::v6(){vfunc_called(this, "_ZN10S9906C2_nt2v6Ev");}
void  S9906C2_nt ::v7(){vfunc_called(this, "_ZN10S9906C2_nt2v7Ev");}
void  S9906C2_nt ::v8(){vfunc_called(this, "_ZN10S9906C2_nt2v8Ev");}
void  S9906C2_nt ::v9(){vfunc_called(this, "_ZN10S9906C2_nt2v9Ev");}
void  S9906C2_nt ::v10(){vfunc_called(this, "_ZN10S9906C2_nt3v10Ev");}
void  S9906C2_nt ::v11(){vfunc_called(this, "_ZN10S9906C2_nt3v11Ev");}
void  S9906C2_nt ::v12(){vfunc_called(this, "_ZN10S9906C2_nt3v12Ev");}
void  S9906C2_nt ::v13(){vfunc_called(this, "_ZN10S9906C2_nt3v13Ev");}
void  S9906C2_nt ::v14(){vfunc_called(this, "_ZN10S9906C2_nt3v14Ev");}
void  S9906C2_nt ::v15(){vfunc_called(this, "_ZN10S9906C2_nt3v15Ev");}
void  S9906C2_nt ::v16(){vfunc_called(this, "_ZN10S9906C2_nt3v16Ev");}
void  S9906C2_nt ::v17(){vfunc_called(this, "_ZN10S9906C2_nt3v17Ev");}
void  S9906C2_nt ::v18(){vfunc_called(this, "_ZN10S9906C2_nt3v18Ev");}
S9906C2_nt ::S9906C2_nt(){ note_ctor("S9906C2_nt", this);} // tgen

//skip512 S9906C2_nt

#else // __cplusplus

extern void _ZN10S9906C2_ntC1Ev();
extern void _ZN10S9906C2_ntD1Ev();
Name_Map name_map_S9906C2_nt[] = {
  NSPAIR(_ZN10S9906C2_ntC1Ev),
  NSPAIR(_ZN10S9906C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9906C2_nt[];
extern void _ZN10S9906C2_ntD1Ev();
extern void _ZN10S9906C2_ntD0Ev();
extern void _ZN10S9906C2_nt2v5Ev();
extern void _ZN10S9906C2_nt2v6Ev();
extern void _ZN10S9906C2_nt2v7Ev();
extern void _ZN10S9906C2_nt2v8Ev();
extern void _ZN10S9906C2_nt2v9Ev();
extern void _ZN10S9906C2_nt3v10Ev();
extern void _ZN10S9906C2_nt3v11Ev();
extern void _ZN10S9906C2_nt3v12Ev();
extern void _ZN10S9906C2_nt3v13Ev();
extern void _ZN10S9906C2_nt3v14Ev();
extern void _ZN10S9906C2_nt3v15Ev();
extern void _ZN10S9906C2_nt3v16Ev();
extern void _ZN10S9906C2_nt3v17Ev();
extern void _ZN10S9906C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S9906C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9906C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9906C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S9906C2_nt[];
VTBL_ENTRY *P__ZTI10S9906C2_nt = _ZTI10S9906C2_nt; 
extern  VTBL_ENTRY _ZTV10S9906C2_nt[];
Class_Descriptor cd_S9906C2_nt = {  "S9906C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9906C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI10S9906C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9906C2_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  S9906C1  : S9906C2_nt {
  char s9906c1f0;
  int s9906c1f1[3];
  void *s9906c1f2[6];
  ::S2382C25 s9906c1f3;
  void *s9906c1f4[2];
  virtual  ~S9906C1(); // _ZN7S9906C1D1Ev
  virtual void  v1(); // _ZN7S9906C12v1Ev
  virtual void  v2(); // _ZN7S9906C12v2Ev
  virtual void  v3(); // _ZN7S9906C12v3Ev
  virtual void  v4(); // _ZN7S9906C12v4Ev
  S9906C1(); // tgen
};
//SIG(1 S9906C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fc Fi Fp[3] Fc[3] FC3{ m Fp Fi FC4{ m}} Fc Fp Fi[2]} vd v1 v2 v3 v4 Fc Fi[3] Fp[6] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} Fp[2]}


 S9906C1 ::~S9906C1(){ note_dtor("S9906C1", this);}
void  S9906C1 ::v1(){vfunc_called(this, "_ZN7S9906C12v1Ev");}
void  S9906C1 ::v2(){vfunc_called(this, "_ZN7S9906C12v2Ev");}
void  S9906C1 ::v3(){vfunc_called(this, "_ZN7S9906C12v3Ev");}
void  S9906C1 ::v4(){vfunc_called(this, "_ZN7S9906C12v4Ev");}
S9906C1 ::S9906C1(){ note_ctor("S9906C1", this);} // tgen

static void Test_S9906C1()
{
  extern Class_Descriptor cd_S9906C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S9906C1, buf);
    S9906C1 *dp, &lv = *(dp=new (buf) S9906C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S9906C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9906C1)");
    check_base_class_offset(lv, (S9906C2_nt*), 0, "S9906C1");
    check_field_offset(lv, s9906c1f0, ABISELECT(88,56), "S9906C1.s9906c1f0");
    check_field_offset(lv, s9906c1f1, ABISELECT(92,60), "S9906C1.s9906c1f1");
    check_field_offset(lv, s9906c1f2, ABISELECT(104,72), "S9906C1.s9906c1f2");
    check_field_offset(lv, s9906c1f3, ABISELECT(152,96), "S9906C1.s9906c1f3");
    check_field_offset(lv, s9906c1f4, ABISELECT(168,108), "S9906C1.s9906c1f4");
    test_class_info(&lv, &cd_S9906C1);
    dp->~S9906C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9906C1(Test_S9906C1, "S9906C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S9906C1C1Ev();
extern void _ZN7S9906C1D1Ev();
Name_Map name_map_S9906C1[] = {
  NSPAIR(_ZN7S9906C1C1Ev),
  NSPAIR(_ZN7S9906C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9906C2_nt;
extern VTBL_ENTRY _ZTI10S9906C2_nt[];
extern  VTBL_ENTRY _ZTV10S9906C2_nt[];
static Base_Class bases_S9906C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9906C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9906C1[];
extern void _ZN7S9906C1D1Ev();
extern void _ZN7S9906C1D0Ev();
extern void _ZN10S9906C2_nt2v5Ev();
extern void _ZN10S9906C2_nt2v6Ev();
extern void _ZN10S9906C2_nt2v7Ev();
extern void _ZN10S9906C2_nt2v8Ev();
extern void _ZN10S9906C2_nt2v9Ev();
extern void _ZN10S9906C2_nt3v10Ev();
extern void _ZN10S9906C2_nt3v11Ev();
extern void _ZN10S9906C2_nt3v12Ev();
extern void _ZN10S9906C2_nt3v13Ev();
extern void _ZN10S9906C2_nt3v14Ev();
extern void _ZN10S9906C2_nt3v15Ev();
extern void _ZN10S9906C2_nt3v16Ev();
extern void _ZN10S9906C2_nt3v17Ev();
extern void _ZN10S9906C2_nt3v18Ev();
extern void _ZN7S9906C12v1Ev();
extern void _ZN7S9906C12v2Ev();
extern void _ZN7S9906C12v3Ev();
extern void _ZN7S9906C12v4Ev();
static  VTBL_ENTRY vtc_S9906C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9906C1[0]),
  (VTBL_ENTRY)&_ZN7S9906C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9906C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S9906C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S9906C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9906C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9906C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9906C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9906C1[];
extern  VTBL_ENTRY _ZTV7S9906C1[];
Class_Descriptor cd_S9906C1 = {  "S9906C1", // class name
  bases_S9906C1, 1,
  &(vtc_S9906C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S9906C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9906C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21852C5  {
  ::S2177C16 s21852c5f0;
  ::S2382C20_nt s21852c5f1;
  ::S2382C20_nt s21852c5f2;
  ::S2382C20_nt s21852c5f3;
  ::S2382C20_nt s21852c5f4;
  ::S2382C20_nt s21852c5f5;
  ::S2382C20_nt s21852c5f6;
  __tsi64 s21852c5f7;
  int s21852c5f8;
  char s21852c5f9[6];
  void  mf21852c5(); // _ZN8S21852C59mf21852c5Ev
};
//SIG(-1 S21852C5) C1{ m FC2{ m Fp} FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC3 FC3 FC3 FL Fi Fc[6]}


void  S21852C5 ::mf21852c5(){}

static void Test_S21852C5()
{
  {
    init_simple_test("S21852C5");
    S21852C5 lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S21852C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21852C5)");
    check_field_offset(lv, s21852c5f0, 0, "S21852C5.s21852c5f0");
    check_field_offset(lv, s21852c5f1, ABISELECT(8,4), "S21852C5.s21852c5f1");
    check_field_offset(lv, s21852c5f2, ABISELECT(24,16), "S21852C5.s21852c5f2");
    check_field_offset(lv, s21852c5f3, ABISELECT(40,28), "S21852C5.s21852c5f3");
    check_field_offset(lv, s21852c5f4, ABISELECT(56,40), "S21852C5.s21852c5f4");
    check_field_offset(lv, s21852c5f5, ABISELECT(72,52), "S21852C5.s21852c5f5");
    check_field_offset(lv, s21852c5f6, ABISELECT(88,64), "S21852C5.s21852c5f6");
    check_field_offset(lv, s21852c5f7, ABISELECT(104,76), "S21852C5.s21852c5f7");
    check_field_offset(lv, s21852c5f8, ABISELECT(112,84), "S21852C5.s21852c5f8");
    check_field_offset(lv, s21852c5f9, ABISELECT(116,88), "S21852C5.s21852c5f9");
  }
}
static Arrange_To_Call_Me vS21852C5(Test_S21852C5, "S21852C5", ABISELECT(128,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21852C7  {
  ::S2177C16 s21852c7f0;
  ::S2382C20_nt s21852c7f1;
  ::S2382C20_nt s21852c7f2;
  ::S2382C20_nt s21852c7f3;
  ::S2382C20_nt s21852c7f4;
  int s21852c7f5;
  __tsi64 s21852c7f6;
  char s21852c7f7;
  void  mf21852c7(); // _ZN8S21852C79mf21852c7Ev
};
//SIG(-1 S21852C7) C1{ m FC2{ m Fp} FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC3 Fi FL Fc}


void  S21852C7 ::mf21852c7(){}

static void Test_S21852C7()
{
  {
    init_simple_test("S21852C7");
    S21852C7 lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S21852C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21852C7)");
    check_field_offset(lv, s21852c7f0, 0, "S21852C7.s21852c7f0");
    check_field_offset(lv, s21852c7f1, ABISELECT(8,4), "S21852C7.s21852c7f1");
    check_field_offset(lv, s21852c7f2, ABISELECT(24,16), "S21852C7.s21852c7f2");
    check_field_offset(lv, s21852c7f3, ABISELECT(40,28), "S21852C7.s21852c7f3");
    check_field_offset(lv, s21852c7f4, ABISELECT(56,40), "S21852C7.s21852c7f4");
    check_field_offset(lv, s21852c7f5, ABISELECT(72,52), "S21852C7.s21852c7f5");
    check_field_offset(lv, s21852c7f6, ABISELECT(80,56), "S21852C7.s21852c7f6");
    check_field_offset(lv, s21852c7f7, ABISELECT(88,64), "S21852C7.s21852c7f7");
  }
}
static Arrange_To_Call_Me vS21852C7(Test_S21852C7, "S21852C7", ABISELECT(96,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21852C1  {
  void *s21852c1f0[4];
  int s21852c1f1;
  ::S2382C20_nt s21852c1f2;
  void *s21852c1f3[2];
  ::S100C38_nt s21852c1f4;
  int s21852c1f5;
  char s21852c1f6[3];
  ::S21852C5 s21852c1f7;
  ::S21852C7 s21852c1f8;
  ::S4247C19_nt s21852c1f9;
  void  mf21852c1(); // _ZN8S21852C19mf21852c1Ev
  virtual  ~S21852C1(); // _ZN8S21852C1D1Ev
  S21852C1(); // tgen
};
//SIG(1 S21852C1) C1{ vd m Fp[4] Fi FC2{ m Fp Fi FC3{ m}} Fp[2] FC4{ m Fp[2]} Fi Fc[3] FC5{ m FC6{ m Fp} FC2 FC2 FC2 FC2 FC2 FC2 FL Fi Fc[6]} FC7{ m FC6 FC2 FC2 FC2 FC2 Fi FL Fc} FC8{ m Fp Fi[2] FC9{ m}}}


void  S21852C1 ::mf21852c1(){}
 S21852C1 ::~S21852C1(){ note_dtor("S21852C1", this);}
S21852C1 ::S21852C1(){ note_ctor("S21852C1", this);} // tgen

static void Test_S21852C1()
{
  extern Class_Descriptor cd_S21852C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,61)];
    init_test(&cd_S21852C1, buf);
    S21852C1 *dp, &lv = *(dp=new (buf) S21852C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,240), "sizeof(S21852C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21852C1)");
    check_field_offset(lv, s21852c1f0, ABISELECT(8,4), "S21852C1.s21852c1f0");
    check_field_offset(lv, s21852c1f1, ABISELECT(40,20), "S21852C1.s21852c1f1");
    check_field_offset(lv, s21852c1f2, ABISELECT(48,24), "S21852C1.s21852c1f2");
    check_field_offset(lv, s21852c1f3, ABISELECT(64,36), "S21852C1.s21852c1f3");
    check_field_offset(lv, s21852c1f4, ABISELECT(80,44), "S21852C1.s21852c1f4");
    check_field_offset(lv, s21852c1f5, ABISELECT(96,52), "S21852C1.s21852c1f5");
    check_field_offset(lv, s21852c1f6, ABISELECT(100,56), "S21852C1.s21852c1f6");
    check_field_offset(lv, s21852c1f7, ABISELECT(104,60), "S21852C1.s21852c1f7");
    check_field_offset(lv, s21852c1f8, ABISELECT(232,156), "S21852C1.s21852c1f8");
    check_field_offset(lv, s21852c1f9, ABISELECT(328,224), "S21852C1.s21852c1f9");
    test_class_info(&lv, &cd_S21852C1);
    dp->~S21852C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21852C1(Test_S21852C1, "S21852C1", ABISELECT(352,240));

#else // __cplusplus

extern void _ZN8S21852C1C1Ev();
extern void _ZN8S21852C1D1Ev();
Name_Map name_map_S21852C1[] = {
  NSPAIR(_ZN8S21852C1C1Ev),
  NSPAIR(_ZN8S21852C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21852C1[];
extern void _ZN8S21852C1D1Ev();
extern void _ZN8S21852C1D0Ev();
static  VTBL_ENTRY vtc_S21852C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21852C1[0]),
  (VTBL_ENTRY)&_ZN8S21852C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21852C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21852C1[];
extern  VTBL_ENTRY _ZTV8S21852C1[];
Class_Descriptor cd_S21852C1 = {  "S21852C1", // class name
  0,0,//no base classes
  &(vtc_S21852C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,240), // object size
  NSPAIRA(_ZTI8S21852C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21852C1),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  S9907C2  {
  char s9907c2f0;
  int s9907c2f1;
  void *s9907c2f2[3];
  char s9907c2f3[3];
  ::S2382C20_nt s9907c2f4;
  char s9907c2f5;
  void *s9907c2f6;
  int s9907c2f7[2];
  virtual  ~S9907C2(); // _ZN7S9907C2D1Ev
  virtual void  v5(); // _ZN7S9907C22v5Ev
  virtual void  v6(); // _ZN7S9907C22v6Ev
  virtual void  v7(); // _ZN7S9907C22v7Ev
  virtual void  v8(); // _ZN7S9907C22v8Ev
  virtual void  v9(); // _ZN7S9907C22v9Ev
  virtual void  v10(); // _ZN7S9907C23v10Ev
  virtual void  v11(); // _ZN7S9907C23v11Ev
  virtual void  v12(); // _ZN7S9907C23v12Ev
  virtual void  v13(); // _ZN7S9907C23v13Ev
  virtual void  v14(); // _ZN7S9907C23v14Ev
  virtual void  v15(); // _ZN7S9907C23v15Ev
  virtual void  v16(); // _ZN7S9907C23v16Ev
  virtual void  v17(); // _ZN7S9907C23v17Ev
  virtual void  v18(); // _ZN7S9907C23v18Ev
  S9907C2(); // tgen
};
//SIG(-1 S9907C2) 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]}


 S9907C2 ::~S9907C2(){ note_dtor("S9907C2", this);}
void  S9907C2 ::v5(){vfunc_called(this, "_ZN7S9907C22v5Ev");}
void  S9907C2 ::v6(){vfunc_called(this, "_ZN7S9907C22v6Ev");}
void  S9907C2 ::v7(){vfunc_called(this, "_ZN7S9907C22v7Ev");}
void  S9907C2 ::v8(){vfunc_called(this, "_ZN7S9907C22v8Ev");}
void  S9907C2 ::v9(){vfunc_called(this, "_ZN7S9907C22v9Ev");}
void  S9907C2 ::v10(){vfunc_called(this, "_ZN7S9907C23v10Ev");}
void  S9907C2 ::v11(){vfunc_called(this, "_ZN7S9907C23v11Ev");}
void  S9907C2 ::v12(){vfunc_called(this, "_ZN7S9907C23v12Ev");}
void  S9907C2 ::v13(){vfunc_called(this, "_ZN7S9907C23v13Ev");}
void  S9907C2 ::v14(){vfunc_called(this, "_ZN7S9907C23v14Ev");}
void  S9907C2 ::v15(){vfunc_called(this, "_ZN7S9907C23v15Ev");}
void  S9907C2 ::v16(){vfunc_called(this, "_ZN7S9907C23v16Ev");}
void  S9907C2 ::v17(){vfunc_called(this, "_ZN7S9907C23v17Ev");}
void  S9907C2 ::v18(){vfunc_called(this, "_ZN7S9907C23v18Ev");}
S9907C2 ::S9907C2(){ note_ctor("S9907C2", this);} // tgen

static void Test_S9907C2()
{
  extern Class_Descriptor cd_S9907C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S9907C2, buf);
    S9907C2 *dp, &lv = *(dp=new (buf) S9907C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S9907C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9907C2)");
    check_field_offset(lv, s9907c2f0, ABISELECT(8,4), "S9907C2.s9907c2f0");
    check_field_offset(lv, s9907c2f1, ABISELECT(12,8), "S9907C2.s9907c2f1");
    check_field_offset(lv, s9907c2f2, ABISELECT(16,12), "S9907C2.s9907c2f2");
    check_field_offset(lv, s9907c2f3, ABISELECT(40,24), "S9907C2.s9907c2f3");
    check_field_offset(lv, s9907c2f4, ABISELECT(48,28), "S9907C2.s9907c2f4");
    check_field_offset(lv, s9907c2f5, ABISELECT(64,40), "S9907C2.s9907c2f5");
    check_field_offset(lv, s9907c2f6, ABISELECT(72,44), "S9907C2.s9907c2f6");
    check_field_offset(lv, s9907c2f7, ABISELECT(80,48), "S9907C2.s9907c2f7");
    test_class_info(&lv, &cd_S9907C2);
    dp->~S9907C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9907C2(Test_S9907C2, "S9907C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S9907C2C1Ev();
extern void _ZN7S9907C2D1Ev();
Name_Map name_map_S9907C2[] = {
  NSPAIR(_ZN7S9907C2C1Ev),
  NSPAIR(_ZN7S9907C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9907C2[];
extern void _ZN7S9907C2D1Ev();
extern void _ZN7S9907C2D0Ev();
extern void _ZN7S9907C22v5Ev();
extern void _ZN7S9907C22v6Ev();
extern void _ZN7S9907C22v7Ev();
extern void _ZN7S9907C22v8Ev();
extern void _ZN7S9907C22v9Ev();
extern void _ZN7S9907C23v10Ev();
extern void _ZN7S9907C23v11Ev();
extern void _ZN7S9907C23v12Ev();
extern void _ZN7S9907C23v13Ev();
extern void _ZN7S9907C23v14Ev();
extern void _ZN7S9907C23v15Ev();
extern void _ZN7S9907C23v16Ev();
extern void _ZN7S9907C23v17Ev();
extern void _ZN7S9907C23v18Ev();
static  VTBL_ENTRY vtc_S9907C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9907C2[0]),
  (VTBL_ENTRY)&_ZN7S9907C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9907C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S9907C2[];
extern  VTBL_ENTRY _ZTV7S9907C2[];
Class_Descriptor cd_S9907C2 = {  "S9907C2", // class name
  0,0,//no base classes
  &(vtc_S9907C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S9907C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9907C2),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  S9907C1  : S9907C2 {
  char s9907c1f0;
  void *s9907c1f1[2];
  ::S2382C25 s9907c1f2;
  void *s9907c1f3[2];
  virtual  ~S9907C1(); // _ZN7S9907C1D1Ev
  virtual void  v1(); // _ZN7S9907C12v1Ev
  virtual void  v2(); // _ZN7S9907C12v2Ev
  virtual void  v3(); // _ZN7S9907C12v3Ev
  virtual void  v4(); // _ZN7S9907C12v4Ev
  S9907C1(); // tgen
};
//SIG(1 S9907C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fc Fi Fp[3] Fc[3] FC3{ m Fp Fi FC4{ m}} Fc Fp Fi[2]} vd v1 v2 v3 v4 Fc Fp[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} Fp[2]}


 S9907C1 ::~S9907C1(){ note_dtor("S9907C1", this);}
void  S9907C1 ::v1(){vfunc_called(this, "_ZN7S9907C12v1Ev");}
void  S9907C1 ::v2(){vfunc_called(this, "_ZN7S9907C12v2Ev");}
void  S9907C1 ::v3(){vfunc_called(this, "_ZN7S9907C12v3Ev");}
void  S9907C1 ::v4(){vfunc_called(this, "_ZN7S9907C12v4Ev");}
S9907C1 ::S9907C1(){ note_ctor("S9907C1", this);} // tgen

static void Test_S9907C1()
{
  extern Class_Descriptor cd_S9907C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S9907C1, buf);
    S9907C1 *dp, &lv = *(dp=new (buf) S9907C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S9907C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9907C1)");
    check_base_class_offset(lv, (S9907C2*), 0, "S9907C1");
    check_field_offset(lv, s9907c1f0, ABISELECT(88,56), "S9907C1.s9907c1f0");
    check_field_offset(lv, s9907c1f1, ABISELECT(96,60), "S9907C1.s9907c1f1");
    check_field_offset(lv, s9907c1f2, ABISELECT(112,68), "S9907C1.s9907c1f2");
    check_field_offset(lv, s9907c1f3, ABISELECT(128,80), "S9907C1.s9907c1f3");
    test_class_info(&lv, &cd_S9907C1);
    dp->~S9907C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9907C1(Test_S9907C1, "S9907C1", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S9907C1C1Ev();
extern void _ZN7S9907C1D1Ev();
Name_Map name_map_S9907C1[] = {
  NSPAIR(_ZN7S9907C1C1Ev),
  NSPAIR(_ZN7S9907C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9907C2;
extern VTBL_ENTRY _ZTI7S9907C2[];
extern  VTBL_ENTRY _ZTV7S9907C2[];
static Base_Class bases_S9907C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9907C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9907C1[];
extern void _ZN7S9907C1D1Ev();
extern void _ZN7S9907C1D0Ev();
extern void _ZN7S9907C22v5Ev();
extern void _ZN7S9907C22v6Ev();
extern void _ZN7S9907C22v7Ev();
extern void _ZN7S9907C22v8Ev();
extern void _ZN7S9907C22v9Ev();
extern void _ZN7S9907C23v10Ev();
extern void _ZN7S9907C23v11Ev();
extern void _ZN7S9907C23v12Ev();
extern void _ZN7S9907C23v13Ev();
extern void _ZN7S9907C23v14Ev();
extern void _ZN7S9907C23v15Ev();
extern void _ZN7S9907C23v16Ev();
extern void _ZN7S9907C23v17Ev();
extern void _ZN7S9907C23v18Ev();
extern void _ZN7S9907C12v1Ev();
extern void _ZN7S9907C12v2Ev();
extern void _ZN7S9907C12v3Ev();
extern void _ZN7S9907C12v4Ev();
static  VTBL_ENTRY vtc_S9907C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9907C1[0]),
  (VTBL_ENTRY)&_ZN7S9907C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9907C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9907C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v14Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v15Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v16Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v17Ev,
  (VTBL_ENTRY)&_ZN7S9907C23v18Ev,
  (VTBL_ENTRY)&_ZN7S9907C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9907C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9907C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9907C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9907C1[];
extern  VTBL_ENTRY _ZTV7S9907C1[];
Class_Descriptor cd_S9907C1 = {  "S9907C1", // class name
  bases_S9907C1, 1,
  &(vtc_S9907C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S9907C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9907C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7028C2_nt  {
  virtual void  v6(); // _ZN10S7028C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7028C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7028C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7028C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7028C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7028C2_nt3v11Ev
  ~S7028C2_nt(); // tgen
  S7028C2_nt(); // tgen
};
//SIG(-1 S7028C2_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S7028C2_nt ::v6(){vfunc_called(this, "_ZN10S7028C2_nt2v6Ev");}
void  S7028C2_nt ::v7(){vfunc_called(this, "_ZN10S7028C2_nt2v7Ev");}
void  S7028C2_nt ::v8(){vfunc_called(this, "_ZN10S7028C2_nt2v8Ev");}
void  S7028C2_nt ::v9(){vfunc_called(this, "_ZN10S7028C2_nt2v9Ev");}
void  S7028C2_nt ::v10(){vfunc_called(this, "_ZN10S7028C2_nt3v10Ev");}
void  S7028C2_nt ::v11(){vfunc_called(this, "_ZN10S7028C2_nt3v11Ev");}
S7028C2_nt ::~S7028C2_nt(){ note_dtor("S7028C2_nt", this);} // tgen
S7028C2_nt ::S7028C2_nt(){ note_ctor("S7028C2_nt", this);} // tgen

//skip512 S7028C2_nt

#else // __cplusplus

extern void _ZN10S7028C2_ntC1Ev();
extern void _ZN10S7028C2_ntD1Ev();
Name_Map name_map_S7028C2_nt[] = {
  NSPAIR(_ZN10S7028C2_ntC1Ev),
  NSPAIR(_ZN10S7028C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7028C2_nt[];
extern void _ZN10S7028C2_nt2v6Ev();
extern void _ZN10S7028C2_nt2v7Ev();
extern void _ZN10S7028C2_nt2v8Ev();
extern void _ZN10S7028C2_nt2v9Ev();
extern void _ZN10S7028C2_nt3v10Ev();
extern void _ZN10S7028C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S7028C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S7028C2_nt[];
VTBL_ENTRY *P__ZTI10S7028C2_nt = _ZTI10S7028C2_nt; 
extern  VTBL_ENTRY _ZTV10S7028C2_nt[];
Class_Descriptor cd_S7028C2_nt = {  "S7028C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7028C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7028C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7028C2_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  S7028C4_nt  {
  char s7028c4f0;
  virtual void  v12(); // _ZN10S7028C4_nt3v12Ev
  virtual void  v13(); // _ZN10S7028C4_nt3v13Ev
  virtual void  v14(); // _ZN10S7028C4_nt3v14Ev
  virtual void  v15(); // _ZN10S7028C4_nt3v15Ev
  ~S7028C4_nt(); // tgen
  S7028C4_nt(); // tgen
};
//SIG(-1 S7028C4_nt) C1{ v1 v2 v3 v4 Fc}


void  S7028C4_nt ::v12(){vfunc_called(this, "_ZN10S7028C4_nt3v12Ev");}
void  S7028C4_nt ::v13(){vfunc_called(this, "_ZN10S7028C4_nt3v13Ev");}
void  S7028C4_nt ::v14(){vfunc_called(this, "_ZN10S7028C4_nt3v14Ev");}
void  S7028C4_nt ::v15(){vfunc_called(this, "_ZN10S7028C4_nt3v15Ev");}
S7028C4_nt ::~S7028C4_nt(){ note_dtor("S7028C4_nt", this);} // tgen
S7028C4_nt ::S7028C4_nt(){ note_ctor("S7028C4_nt", this);} // tgen

//skip512 S7028C4_nt

#else // __cplusplus

extern void _ZN10S7028C4_ntC1Ev();
extern void _ZN10S7028C4_ntD1Ev();
Name_Map name_map_S7028C4_nt[] = {
  NSPAIR(_ZN10S7028C4_ntC1Ev),
  NSPAIR(_ZN10S7028C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY vtc_S7028C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
VTBL_ENTRY *P__ZTI10S7028C4_nt = _ZTI10S7028C4_nt; 
extern  VTBL_ENTRY _ZTV10S7028C4_nt[];
Class_Descriptor cd_S7028C4_nt = {  "S7028C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7028C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7028C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7028C4_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  S7028C6_nt  : virtual S7028C4_nt {
  virtual void  v16(); // _ZN10S7028C6_nt3v16Ev
  virtual void  v17(); // _ZN10S7028C6_nt3v17Ev
  ~S7028C6_nt(); // tgen
  S7028C6_nt(); // tgen
};
//SIG(-1 S7028C6_nt) C1{ VBC2{ v3 v4 v5 v6 Fc} v1 v2}


void  S7028C6_nt ::v16(){vfunc_called(this, "_ZN10S7028C6_nt3v16Ev");}
void  S7028C6_nt ::v17(){vfunc_called(this, "_ZN10S7028C6_nt3v17Ev");}
S7028C6_nt ::~S7028C6_nt(){ note_dtor("S7028C6_nt", this);} // tgen
S7028C6_nt ::S7028C6_nt(){ note_ctor("S7028C6_nt", this);} // tgen

//skip512 S7028C6_nt

#else // __cplusplus

extern void _ZN10S7028C6_ntC1Ev();
extern void _ZN10S7028C6_ntD1Ev();
Name_Map name_map_S7028C6_nt[] = {
  NSPAIR(_ZN10S7028C6_ntC1Ev),
  NSPAIR(_ZN10S7028C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7028C4_nt;
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
extern  VTBL_ENTRY _ZTV10S7028C4_nt[];
static Base_Class bases_S7028C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7028C4_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7028C6_nt[];
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY vtc_S7028C6_nt[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern VTBL_ENTRY _ZTV10S7028C6_nt[];
static  VTT_ENTRY vtt_S7028C6_nt[] = {
  {&(_ZTV10S7028C6_nt[3]),  3,15},
  {&(_ZTV10S7028C6_nt[11]),  11,15},
};
extern VTBL_ENTRY _ZTI10S7028C6_nt[];
VTBL_ENTRY *P__ZTI10S7028C6_nt = _ZTI10S7028C6_nt; 
extern  VTBL_ENTRY _ZTV10S7028C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7028C6_nt[];
Class_Descriptor cd_S7028C6_nt = {  "S7028C6_nt", // class name
  bases_S7028C6_nt, 1,
  &(vtc_S7028C6_nt[0]), // expected_vtbl_contents
  &(vtt_S7028C6_nt[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S7028C6_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7028C6_nt),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7028C6_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  S7028C5_nt  : virtual S7028C6_nt {
  void *s7028c5f0[2];
  ::S7028C6_nt s7028c5f1;
  void *s7028c5f2;
  virtual  ~S7028C5_nt(); // _ZN10S7028C5_ntD2Ev
  virtual void  v18(); // _ZN10S7028C5_nt3v18Ev
  virtual void  v19(); // _ZN10S7028C5_nt3v19Ev
  virtual void  v20(); // _ZN10S7028C5_nt3v20Ev
  virtual void  v21(); // _ZN10S7028C5_nt3v21Ev
  virtual void  v22(); // _ZN10S7028C5_nt3v22Ev
  virtual void  v23(); // _ZN10S7028C5_nt3v23Ev
  S7028C5_nt(); // tgen
};
//SIG(-1 S7028C5_nt) C1{ VBC2{ VBC3{ v7 v8 v9 v10 Fc} v11 v12} vd v1 v2 v3 v4 v5 v6 Fp[2] FC2 Fp}


 S7028C5_nt ::~S7028C5_nt(){ note_dtor("S7028C5_nt", this);}
void  S7028C5_nt ::v18(){vfunc_called(this, "_ZN10S7028C5_nt3v18Ev");}
void  S7028C5_nt ::v19(){vfunc_called(this, "_ZN10S7028C5_nt3v19Ev");}
void  S7028C5_nt ::v20(){vfunc_called(this, "_ZN10S7028C5_nt3v20Ev");}
void  S7028C5_nt ::v21(){vfunc_called(this, "_ZN10S7028C5_nt3v21Ev");}
void  S7028C5_nt ::v22(){vfunc_called(this, "_ZN10S7028C5_nt3v22Ev");}
void  S7028C5_nt ::v23(){vfunc_called(this, "_ZN10S7028C5_nt3v23Ev");}
S7028C5_nt ::S7028C5_nt(){ note_ctor("S7028C5_nt", this);} // tgen

//skip512 S7028C5_nt

#else // __cplusplus

extern void _ZN10S7028C5_ntC1Ev();
extern void _ZN10S7028C5_ntD2Ev();
Name_Map name_map_S7028C5_nt[] = {
  NSPAIR(_ZN10S7028C5_ntC1Ev),
  NSPAIR(_ZN10S7028C5_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7028C4_nt;
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
extern  VTBL_ENTRY _ZTV10S7028C4_nt[];
extern Class_Descriptor cd_S7028C6_nt;
extern VTBL_ENTRY _ZTI10S7028C6_nt[];
extern  VTBL_ENTRY _ZTV10S7028C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7028C6_nt[];
static Base_Class bases_S7028C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7028C4_nt,    ABISELECT(56,28), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7028C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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 _ZTI10S7028C5_nt[];
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
extern void _ZN10S7028C5_ntD1Ev();
extern void _ZN10S7028C5_ntD0Ev();
extern void _ZN10S7028C5_nt3v18Ev();
extern void _ZN10S7028C5_nt3v19Ev();
extern void _ZN10S7028C5_nt3v20Ev();
extern void _ZN10S7028C5_nt3v21Ev();
extern void _ZN10S7028C5_nt3v22Ev();
extern void _ZN10S7028C5_nt3v23Ev();
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY vtc_S7028C5_nt[] = {
  0,
  0,
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI10S7028C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern VTBL_ENTRY _ZTV10S7028C5_nt[];
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C6_nt__10S7028C5_nt[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
};
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C4_nt__10S7028C6_nt__10S7028C5_nt[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
static  VTT_ENTRY vtt_S7028C5_nt[] = {
  {&(_ZTV10S7028C5_nt[6]),  6,26},
  {&(_ZTV10S7028C5_nt[6]),  6,26},
  {&(_ZTV10S7028C5_nt[22]),  22,26},
  {&(_tg__ZTV10S7028C6_nt__10S7028C5_nt[3]),  3,5},
  {&(_tg__ZTV10S7028C4_nt__10S7028C6_nt__10S7028C5_nt[6]),  6,10},
};
extern VTBL_ENTRY _ZTI10S7028C5_nt[];
VTBL_ENTRY *P__ZTI10S7028C5_nt = _ZTI10S7028C5_nt; 
extern  VTBL_ENTRY _ZTV10S7028C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7028C5_nt[];
Class_Descriptor cd_S7028C5_nt = {  "S7028C5_nt", // class name
  bases_S7028C5_nt, 2,
  &(vtc_S7028C5_nt[0]), // expected_vtbl_contents
  &(vtt_S7028C5_nt[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI10S7028C5_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7028C5_nt),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7028C5_nt),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  S7028C3  : S7028C4_nt , S7028C5_nt {
  void *s7028c3f0[2];
  ::S7028C4_nt s7028c3f1;
  virtual  ~S7028C3(); // _ZN7S7028C3D2Ev
  virtual void  v24(); // _ZN7S7028C33v24Ev
  virtual void  v25(); // _ZN7S7028C33v25Ev
  virtual void  v26(); // _ZN7S7028C33v26Ev
  virtual void  v27(); // _ZN7S7028C33v27Ev
  virtual void  v28(); // _ZN7S7028C33v28Ev
  S7028C3(); // tgen
};
//SIG(-1 S7028C3) C1{ BC2{ v6 v7 v8 v9 Fc} BC3{ VBC4{ VBC2 v10 v11} vd v12 v13 v14 v15 v16 v17 Fp[2] FC4 Fp} vd v1 v2 v3 v4 v5 Fp[2] FC2}


 S7028C3 ::~S7028C3(){ note_dtor("S7028C3", this);}
void  S7028C3 ::v24(){vfunc_called(this, "_ZN7S7028C33v24Ev");}
void  S7028C3 ::v25(){vfunc_called(this, "_ZN7S7028C33v25Ev");}
void  S7028C3 ::v26(){vfunc_called(this, "_ZN7S7028C33v26Ev");}
void  S7028C3 ::v27(){vfunc_called(this, "_ZN7S7028C33v27Ev");}
void  S7028C3 ::v28(){vfunc_called(this, "_ZN7S7028C33v28Ev");}
S7028C3 ::S7028C3(){ note_ctor("S7028C3", this);} // tgen

static void Test_S7028C3()
{
  extern Class_Descriptor cd_S7028C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7028C3, buf);
    S7028C3 *dp, &lv = *(dp=new (buf) S7028C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7028C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7028C3)");
    /*is_ambiguous_... S7028C3::S7028C4_nt */ AMB_check_base_class_offset(lv, (S7028C4_nt*), 0, "S7028C3");
    check_base_class_offset(lv, (S7028C4_nt*)(S7028C6_nt*), ABISELECT(104,52), "S7028C3");
    check_base_class_offset(lv, (S7028C6_nt*)(S7028C5_nt*), ABISELECT(16,8), "S7028C3");
    check_base_class_offset(lv, (S7028C5_nt*), ABISELECT(16,8), "S7028C3");
    check_field_offset(lv, s7028c3f0, ABISELECT(72,36), "S7028C3.s7028c3f0");
    check_field_offset(lv, s7028c3f1, ABISELECT(88,44), "S7028C3.s7028c3f1");
    test_class_info(&lv, &cd_S7028C3);
    dp->~S7028C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7028C3(Test_S7028C3, "S7028C3", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7028C3C1Ev();
extern void _ZN7S7028C3D2Ev();
Name_Map name_map_S7028C3[] = {
  NSPAIR(_ZN7S7028C3C1Ev),
  NSPAIR(_ZN7S7028C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7028C4_nt;
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
extern  VTBL_ENTRY _ZTV10S7028C4_nt[];
extern Class_Descriptor cd_S7028C4_nt;
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
extern  VTBL_ENTRY _ZTV10S7028C4_nt[];
extern Class_Descriptor cd_S7028C6_nt;
extern VTBL_ENTRY _ZTI10S7028C6_nt[];
extern  VTBL_ENTRY _ZTV10S7028C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7028C6_nt[];
extern Class_Descriptor cd_S7028C5_nt;
extern VTBL_ENTRY _ZTI10S7028C5_nt[];
extern  VTBL_ENTRY _ZTV10S7028C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7028C5_nt[];
static Base_Class bases_S7028C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7028C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7028C4_nt,    ABISELECT(104,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7028C6_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7028C5_nt,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //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 _ZTI7S7028C3[];
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
extern void _ZN7S7028C3D1Ev();
extern void _ZN7S7028C3D0Ev();
extern void _ZN7S7028C33v24Ev();
extern void _ZN7S7028C33v25Ev();
extern void _ZN7S7028C33v26Ev();
extern void _ZN7S7028C33v27Ev();
extern void _ZN7S7028C33v28Ev();
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
extern void ABISELECT(_ZThn16_N7S7028C3D1Ev,_ZThn8_N7S7028C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7028C3D0Ev,_ZThn8_N7S7028C3D0Ev)();
extern void _ZN10S7028C5_nt3v18Ev();
extern void _ZN10S7028C5_nt3v19Ev();
extern void _ZN10S7028C5_nt3v20Ev();
extern void _ZN10S7028C5_nt3v21Ev();
extern void _ZN10S7028C5_nt3v22Ev();
extern void _ZN10S7028C5_nt3v23Ev();
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY vtc_S7028C3[] = {
  ABISELECT(104,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7028C3[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN7S7028C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7028C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v28Ev,
  0,
  0,
  0,
  ABISELECT(88,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7028C3[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7028C3D1Ev,_ZThn8_N7S7028C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7028C3D0Ev,_ZThn8_N7S7028C3D0Ev),
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7028C3[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern VTBL_ENTRY _ZTV7S7028C3[];
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
extern void _ZN10S7028C5_ntD1Ev();
extern void _ZN10S7028C5_ntD0Ev();
extern void _ZN10S7028C5_nt3v18Ev();
extern void _ZN10S7028C5_nt3v19Ev();
extern void _ZN10S7028C5_nt3v20Ev();
extern void _ZN10S7028C5_nt3v21Ev();
extern void _ZN10S7028C5_nt3v22Ev();
extern void _ZN10S7028C5_nt3v23Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C5_nt__7S7028C3[] = {
  0,
  0,
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v23Ev,
};
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C4_nt__10S7028C5_nt__7S7028C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI10S7028C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C6_nt__7S7028C3[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
};
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C4_nt__10S7028C6_nt__7S7028C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
static  VTT_ENTRY vtt_S7028C3[] = {
  {&(_ZTV7S7028C3[4]),  4,41},
  {&(_tg__ZTV10S7028C5_nt__7S7028C3[6]),  6,16},
  {&(_tg__ZTV10S7028C5_nt__7S7028C3[6]),  6,16},
  {&(_tg__ZTV10S7028C4_nt__10S7028C5_nt__7S7028C3[6]),  6,10},
  {&(_ZTV7S7028C3[21]),  21,41},
  {&(_ZTV7S7028C3[21]),  21,41},
  {&(_ZTV7S7028C3[37]),  37,41},
  {&(_tg__ZTV10S7028C6_nt__7S7028C3[3]),  3,5},
  {&(_tg__ZTV10S7028C4_nt__10S7028C6_nt__7S7028C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7028C3[];
extern  VTBL_ENTRY _ZTV7S7028C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7028C3[];
Class_Descriptor cd_S7028C3 = {  "S7028C3", // class name
  bases_S7028C3, 4,
  &(vtc_S7028C3[0]), // expected_vtbl_contents
  &(vtt_S7028C3[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7028C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7028C3),41, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7028C3),9, //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  S7028C1  : S7028C2_nt , S7028C3 {
  virtual  ~S7028C1(); // _ZN7S7028C1D2Ev
  virtual void  v1(); // _ZN7S7028C12v1Ev
  virtual void  v2(); // _ZN7S7028C12v2Ev
  virtual void  v3(); // _ZN7S7028C12v3Ev
  virtual void  v4(); // _ZN7S7028C12v4Ev
  virtual void  v5(); // _ZN7S7028C12v5Ev
  S7028C1(); // tgen
};
//SIG(1 S7028C1) C1{ BC2{ v6 v7 v8 v9 v10 v11} BC3{ BC4{ v12 v13 v14 v15 Fc} BC5{ VBC6{ VBC4 v16 v17} vd v18 v19 v20 v21 v22 v23 Fp[2] FC6 Fp} vd v24 v25 v26 v27 v28 Fp[2] FC4} vd v1 v2 v3 v4 v5}


 S7028C1 ::~S7028C1(){ note_dtor("S7028C1", this);}
void  S7028C1 ::v1(){vfunc_called(this, "_ZN7S7028C12v1Ev");}
void  S7028C1 ::v2(){vfunc_called(this, "_ZN7S7028C12v2Ev");}
void  S7028C1 ::v3(){vfunc_called(this, "_ZN7S7028C12v3Ev");}
void  S7028C1 ::v4(){vfunc_called(this, "_ZN7S7028C12v4Ev");}
void  S7028C1 ::v5(){vfunc_called(this, "_ZN7S7028C12v5Ev");}
S7028C1 ::S7028C1(){ note_ctor("S7028C1", this);} // tgen

static void Test_S7028C1()
{
  extern Class_Descriptor cd_S7028C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S7028C1, buf);
    S7028C1 *dp, &lv = *(dp=new (buf) S7028C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S7028C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7028C1)");
    check_base_class_offset(lv, (S7028C2_nt*), 0, "S7028C1");
    /*is_ambiguous_... S7028C3::S7028C4_nt */ AMB_check_base_class_offset(lv, (S7028C4_nt*)(S7028C3*), ABISELECT(8,4), "S7028C1");
    check_base_class_offset(lv, (S7028C4_nt*)(S7028C6_nt*), ABISELECT(112,56), "S7028C1");
    check_base_class_offset(lv, (S7028C6_nt*)(S7028C5_nt*)(S7028C3*), ABISELECT(24,12), "S7028C1");
    check_base_class_offset(lv, (S7028C5_nt*)(S7028C3*), ABISELECT(24,12), "S7028C1");
    check_base_class_offset(lv, (S7028C3*), ABISELECT(8,4), "S7028C1");
    test_class_info(&lv, &cd_S7028C1);
    dp->~S7028C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7028C1(Test_S7028C1, "S7028C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S7028C1C1Ev();
extern void _ZN7S7028C1D2Ev();
Name_Map name_map_S7028C1[] = {
  NSPAIR(_ZN7S7028C1C1Ev),
  NSPAIR(_ZN7S7028C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7028C2_nt;
extern VTBL_ENTRY _ZTI10S7028C2_nt[];
extern  VTBL_ENTRY _ZTV10S7028C2_nt[];
extern Class_Descriptor cd_S7028C4_nt;
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
extern  VTBL_ENTRY _ZTV10S7028C4_nt[];
extern Class_Descriptor cd_S7028C4_nt;
extern VTBL_ENTRY _ZTI10S7028C4_nt[];
extern  VTBL_ENTRY _ZTV10S7028C4_nt[];
extern Class_Descriptor cd_S7028C6_nt;
extern VTBL_ENTRY _ZTI10S7028C6_nt[];
extern  VTBL_ENTRY _ZTV10S7028C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7028C6_nt[];
extern Class_Descriptor cd_S7028C5_nt;
extern VTBL_ENTRY _ZTI10S7028C5_nt[];
extern  VTBL_ENTRY _ZTV10S7028C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7028C5_nt[];
extern Class_Descriptor cd_S7028C3;
extern VTBL_ENTRY _ZTI7S7028C3[];
extern  VTBL_ENTRY _ZTV7S7028C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7028C3[];
static Base_Class bases_S7028C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7028C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7028C4_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7028C4_nt,    ABISELECT(112,56), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7028C6_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7028C5_nt,    ABISELECT(24,12), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7028C3,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7028C1[];
extern void _ZN10S7028C2_nt2v6Ev();
extern void _ZN10S7028C2_nt2v7Ev();
extern void _ZN10S7028C2_nt2v8Ev();
extern void _ZN10S7028C2_nt2v9Ev();
extern void _ZN10S7028C2_nt3v10Ev();
extern void _ZN10S7028C2_nt3v11Ev();
extern void _ZN7S7028C1D1Ev();
extern void _ZN7S7028C1D0Ev();
extern void _ZN7S7028C12v1Ev();
extern void _ZN7S7028C12v2Ev();
extern void _ZN7S7028C12v3Ev();
extern void _ZN7S7028C12v4Ev();
extern void _ZN7S7028C12v5Ev();
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
extern void ABISELECT(_ZThn8_N7S7028C1D1Ev,_ZThn4_N7S7028C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7028C1D0Ev,_ZThn4_N7S7028C1D0Ev)();
extern void _ZN7S7028C33v24Ev();
extern void _ZN7S7028C33v25Ev();
extern void _ZN7S7028C33v26Ev();
extern void _ZN7S7028C33v27Ev();
extern void _ZN7S7028C33v28Ev();
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
extern void ABISELECT(_ZThn24_N7S7028C1D1Ev,_ZThn12_N7S7028C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7028C1D0Ev,_ZThn12_N7S7028C1D0Ev)();
extern void _ZN10S7028C5_nt3v18Ev();
extern void _ZN10S7028C5_nt3v19Ev();
extern void _ZN10S7028C5_nt3v20Ev();
extern void _ZN10S7028C5_nt3v21Ev();
extern void _ZN10S7028C5_nt3v22Ev();
extern void _ZN10S7028C5_nt3v23Ev();
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY vtc_S7028C1[] = {
  ABISELECT(112,56),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7028C1[0]),
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7028C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S7028C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7028C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7028C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7028C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7028C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7028C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7028C12v5Ev,
  ABISELECT(104,52),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7028C1[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7028C1D1Ev,_ZThn4_N7S7028C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7028C1D0Ev,_ZThn4_N7S7028C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7028C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v28Ev,
  0,
  0,
  0,
  ABISELECT(88,44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7028C1[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7028C1D1Ev,_ZThn12_N7S7028C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7028C1D0Ev,_ZThn12_N7S7028C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7028C1[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern VTBL_ENTRY _ZTV7S7028C1[];
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
extern void _ZN7S7028C3D1Ev();
extern void _ZN7S7028C3D0Ev();
extern void _ZN7S7028C33v24Ev();
extern void _ZN7S7028C33v25Ev();
extern void _ZN7S7028C33v26Ev();
extern void _ZN7S7028C33v27Ev();
extern void _ZN7S7028C33v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7028C3__7S7028C1[] = {
  ABISELECT(104,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7028C3[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN7S7028C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7028C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7028C33v28Ev,
};
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
extern void _ZN10S7028C5_ntD1Ev();
extern void _ZN10S7028C5_ntD0Ev();
extern void _ZN10S7028C5_nt3v18Ev();
extern void _ZN10S7028C5_nt3v19Ev();
extern void _ZN10S7028C5_nt3v20Ev();
extern void _ZN10S7028C5_nt3v21Ev();
extern void _ZN10S7028C5_nt3v22Ev();
extern void _ZN10S7028C5_nt3v23Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C5_nt7S7028C3__7S7028C1[] = {
  0,
  0,
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v23Ev,
};
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C4_nt__10S7028C5_nt7S7028C3__7S7028C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI10S7028C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
extern void ABISELECT(_ZThn16_N7S7028C3D1Ev,_ZThn8_N7S7028C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7028C3D0Ev,_ZThn8_N7S7028C3D0Ev)();
extern void _ZN10S7028C5_nt3v18Ev();
extern void _ZN10S7028C5_nt3v19Ev();
extern void _ZN10S7028C5_nt3v20Ev();
extern void _ZN10S7028C5_nt3v21Ev();
extern void _ZN10S7028C5_nt3v22Ev();
extern void _ZN10S7028C5_nt3v23Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C5_nt__7S7028C3__7S7028C1[] = {
  0,
  0,
  0,
  ABISELECT(88,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7028C3[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7028C3D1Ev,_ZThn8_N7S7028C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7028C3D0Ev,_ZThn8_N7S7028C3D0Ev),
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7028C5_nt3v23Ev,
};
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C4_nt__A1__7S7028C3__7S7028C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7028C3[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
extern void _ZN10S7028C6_nt3v16Ev();
extern void _ZN10S7028C6_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C6_nt__7S7028C1[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7028C6_nt3v17Ev,
};
extern void _ZN10S7028C4_nt3v12Ev();
extern void _ZN10S7028C4_nt3v13Ev();
extern void _ZN10S7028C4_nt3v14Ev();
extern void _ZN10S7028C4_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV10S7028C4_nt__10S7028C6_nt__7S7028C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI10S7028C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7028C4_nt3v15Ev,
};
static  VTT_ENTRY vtt_S7028C1[] = {
  {&(_ZTV7S7028C1[4]),  4,58},
  {&(_tg__ZTV7S7028C3__7S7028C1[4]),  4,15},
  {&(_tg__ZTV10S7028C5_nt7S7028C3__7S7028C1[6]),  6,16},
  {&(_tg__ZTV10S7028C5_nt7S7028C3__7S7028C1[6]),  6,16},
  {&(_tg__ZTV10S7028C4_nt__10S7028C5_nt7S7028C3__7S7028C1[6]),  6,10},
  {&(_tg__ZTV10S7028C5_nt__7S7028C3__7S7028C1[6]),  6,16},
  {&(_tg__ZTV10S7028C5_nt__7S7028C3__7S7028C1[6]),  6,16},
  {&(_tg__ZTV10S7028C4_nt__A1__7S7028C3__7S7028C1[6]),  6,10},
  {&(_ZTV7S7028C1[21]),  21,58},
  {&(_ZTV7S7028C1[38]),  38,58},
  {&(_ZTV7S7028C1[38]),  38,58},
  {&(_ZTV7S7028C1[54]),  54,58},
  {&(_tg__ZTV10S7028C6_nt__7S7028C1[3]),  3,5},
  {&(_tg__ZTV10S7028C4_nt__10S7028C6_nt__7S7028C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7028C1[];
extern  VTBL_ENTRY _ZTV7S7028C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7028C1[];
Class_Descriptor cd_S7028C1 = {  "S7028C1", // class name
  bases_S7028C1, 6,
  &(vtc_S7028C1[0]), // expected_vtbl_contents
  &(vtt_S7028C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S7028C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7028C1),58, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7028C1),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


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

//skip512 S7568C3_nt

#else // __cplusplus

extern void _ZN10S7568C3_ntC1Ev();
extern void _ZN10S7568C3_ntD1Ev();
Name_Map name_map_S7568C3_nt[] = {
  NSPAIR(_ZN10S7568C3_ntC1Ev),
  NSPAIR(_ZN10S7568C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern void _ZN10S7568C3_nt2v2Ev();
static  VTBL_ENTRY vtc_S7568C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7568C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
VTBL_ENTRY *P__ZTI10S7568C3_nt = _ZTI10S7568C3_nt; 
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
Class_Descriptor cd_S7568C3_nt = {  "S7568C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7568C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7568C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7568C3_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  S7568C4  : S7568C3_nt {
  void *s7568c4f0;
  int s7568c4f1[2];
  char s7568c4f2[2];
  virtual  ~S7568C4(); // _ZN7S7568C4D1Ev
  S7568C4(); // tgen
};
//SIG(-1 S7568C4) C1{ BC2{ v1} vd Fp Fi[2] Fc[2]}


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

static void Test_S7568C4()
{
  extern Class_Descriptor cd_S7568C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7568C4, buf);
    S7568C4 *dp, &lv = *(dp=new (buf) S7568C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7568C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7568C4)");
    check_base_class_offset(lv, (S7568C3_nt*), 0, "S7568C4");
    check_field_offset(lv, s7568c4f0, ABISELECT(8,4), "S7568C4.s7568c4f0");
    check_field_offset(lv, s7568c4f1, ABISELECT(16,8), "S7568C4.s7568c4f1");
    check_field_offset(lv, s7568c4f2, ABISELECT(24,16), "S7568C4.s7568c4f2");
    test_class_info(&lv, &cd_S7568C4);
    dp->~S7568C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7568C4(Test_S7568C4, "S7568C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7568C4C1Ev();
extern void _ZN7S7568C4D1Ev();
Name_Map name_map_S7568C4[] = {
  NSPAIR(_ZN7S7568C4C1Ev),
  NSPAIR(_ZN7S7568C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
static Base_Class bases_S7568C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7568C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7568C4[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C4D1Ev();
extern void _ZN7S7568C4D0Ev();
static  VTBL_ENTRY vtc_S7568C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C4[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
Class_Descriptor cd_S7568C4 = {  "S7568C4", // class name
  bases_S7568C4, 1,
  &(vtc_S7568C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7568C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7568C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7568C2  : virtual S7568C3_nt , virtual S7568C4 {
  long double s7568c2f0[5];
  short s7568c2f1[3];
  int s7568c2f2;
  ~S7568C2(); // tgen
  S7568C2(); // tgen
};
//SIG(-1 S7568C2) C1{ VBC2{ v1} VBC3{ BC2 vd Fp Fi[2] Fc[2]} FD[5] Fs[3] Fi}


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

static void Test_S7568C2()
{
  extern Class_Descriptor cd_S7568C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,25)];
    init_test(&cd_S7568C2, buf);
    S7568C2 *dp, &lv = *(dp=new (buf) S7568C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S7568C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7568C2)");
    /*is_ambiguous_... S7568C2::S7568C3_nt */ AMB_check_base_class_offset(lv, (S7568C3_nt*), 0, "S7568C2");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*), ABISELECT(112,76), "S7568C2");
    check_base_class_offset(lv, (S7568C4*), ABISELECT(112,76), "S7568C2");
    check_field_offset(lv, s7568c2f0, ABISELECT(16,4), "S7568C2.s7568c2f0");
    check_field_offset(lv, s7568c2f1, ABISELECT(96,64), "S7568C2.s7568c2f1");
    check_field_offset(lv, s7568c2f2, ABISELECT(104,72), "S7568C2.s7568c2f2");
    test_class_info(&lv, &cd_S7568C2);
    dp->~S7568C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7568C2(Test_S7568C2, "S7568C2", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S7568C2C1Ev();
extern void _ZN7S7568C2D1Ev();
Name_Map name_map_S7568C2[] = {
  NSPAIR(_ZN7S7568C2C1Ev),
  NSPAIR(_ZN7S7568C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
static Base_Class bases_S7568C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7568C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7568C3_nt,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(112,76), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7568C2[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C2D1Ev();
extern void _ZN7S7568C2D0Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7568C2D1Ev,_ZThn76_N7S7568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7568C2D0Ev,_ZThn76_N7S7568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7568C2[] = {
  ABISELECT(112,76),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D0Ev,
  ABISELECT(-112,-76),
  0,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7568C2[];
static  VTT_ENTRY vtt_S7568C2[] = {
  {&(_ZTV7S7568C2[5]),  5,15},
  {&(_ZTV7S7568C2[5]),  5,15},
  {&(_ZTV7S7568C2[12]),  12,15},
};
extern VTBL_ENTRY _ZTI7S7568C2[];
extern  VTBL_ENTRY _ZTV7S7568C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C2[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7568C2D0Ev,_ZThn76_N7S7568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7568C2D1Ev,_ZThn76_N7S7568C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7568C2 = {  "S7568C2", // class name
  bases_S7568C2, 3,
  &(vtc_S7568C2[0]), // expected_vtbl_contents
  &(vtt_S7568C2[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S7568C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7568C2),15, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7568C2),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7568C5  : S7568C4 {
  ::S7568C2 s7568c5f0;
  virtual void  v3(); // _ZN7S7568C52v3Ev
  virtual void  v4(); // _ZN7S7568C52v4Ev
  virtual void  v5(); // _ZN7S7568C52v5Ev
  ~S7568C5(); // tgen
  S7568C5(); // tgen
};
//SIG(-1 S7568C5) C1{ BC2{ BC3{ v4} vd Fp Fi[2] Fc[2]} v1 v2 v3 FC4{ VBC3 VBC2 FD[5] Fs[3] Fi}}


void  S7568C5 ::v3(){vfunc_called(this, "_ZN7S7568C52v3Ev");}
void  S7568C5 ::v4(){vfunc_called(this, "_ZN7S7568C52v4Ev");}
void  S7568C5 ::v5(){vfunc_called(this, "_ZN7S7568C52v5Ev");}
S7568C5 ::~S7568C5(){ note_dtor("S7568C5", this);} // tgen
S7568C5 ::S7568C5(){ note_ctor("S7568C5", this);} // tgen

static void Test_S7568C5()
{
  extern Class_Descriptor cd_S7568C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,30)];
    init_test(&cd_S7568C5, buf);
    S7568C5 *dp, &lv = *(dp=new (buf) S7568C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,116), "sizeof(S7568C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7568C5)");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*), 0, "S7568C5");
    check_base_class_offset(lv, (S7568C4*), 0, "S7568C5");
    check_field_offset(lv, s7568c5f0, ABISELECT(32,20), "S7568C5.s7568c5f0");
    test_class_info(&lv, &cd_S7568C5);
    dp->~S7568C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7568C5(Test_S7568C5, "S7568C5", ABISELECT(176,116));

#else // __cplusplus

extern void _ZN7S7568C5C1Ev();
extern void _ZN7S7568C5D1Ev();
Name_Map name_map_S7568C5[] = {
  NSPAIR(_ZN7S7568C5C1Ev),
  NSPAIR(_ZN7S7568C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
static Base_Class bases_S7568C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7568C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7568C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7568C5[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C5D1Ev();
extern void _ZN7S7568C5D0Ev();
extern void _ZN7S7568C52v3Ev();
extern void _ZN7S7568C52v4Ev();
extern void _ZN7S7568C52v5Ev();
static  VTBL_ENTRY vtc_S7568C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C5[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v5Ev,
};
extern VTBL_ENTRY _ZTI7S7568C5[];
extern  VTBL_ENTRY _ZTV7S7568C5[];
Class_Descriptor cd_S7568C5 = {  "S7568C5", // class name
  bases_S7568C5, 2,
  &(vtc_S7568C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,116), // object size
  NSPAIRA(_ZTI7S7568C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7568C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7568C7  : S7568C3_nt , S7568C4 {
  int s7568c7f0;
  char s7568c7f1;
  virtual  ~S7568C7(); // _ZN7S7568C7D1Ev
  virtual void  v6(); // _ZN7S7568C72v6Ev
  virtual void  v7(); // _ZN7S7568C72v7Ev
  S7568C7(); // tgen
};
//SIG(-1 S7568C7) C1{ BC2{ v3} BC3{ BC2 vd Fp Fi[2] Fc[2]} vd v1 v2 Fi Fc}


 S7568C7 ::~S7568C7(){ note_dtor("S7568C7", this);}
void  S7568C7 ::v6(){vfunc_called(this, "_ZN7S7568C72v6Ev");}
void  S7568C7 ::v7(){vfunc_called(this, "_ZN7S7568C72v7Ev");}
S7568C7 ::S7568C7(){ note_ctor("S7568C7", this);} // tgen

static void Test_S7568C7()
{
  extern Class_Descriptor cd_S7568C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S7568C7, buf);
    S7568C7 *dp, &lv = *(dp=new (buf) S7568C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S7568C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7568C7)");
    /*is_ambiguous_... S7568C7::S7568C3_nt */ AMB_check_base_class_offset(lv, (S7568C3_nt*), 0, "S7568C7");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*), ABISELECT(8,4), "S7568C7");
    check_base_class_offset(lv, (S7568C4*), ABISELECT(8,4), "S7568C7");
    check_field_offset(lv, s7568c7f0, ABISELECT(36,24), "S7568C7.s7568c7f0");
    check_field_offset(lv, s7568c7f1, ABISELECT(40,28), "S7568C7.s7568c7f1");
    test_class_info(&lv, &cd_S7568C7);
    dp->~S7568C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7568C7(Test_S7568C7, "S7568C7", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S7568C7C1Ev();
extern void _ZN7S7568C7D1Ev();
Name_Map name_map_S7568C7[] = {
  NSPAIR(_ZN7S7568C7C1Ev),
  NSPAIR(_ZN7S7568C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
static Base_Class bases_S7568C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7568C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7568C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7568C7[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C7D1Ev();
extern void _ZN7S7568C7D0Ev();
extern void _ZN7S7568C72v6Ev();
extern void _ZN7S7568C72v7Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZThn8_N7S7568C7D1Ev,_ZThn4_N7S7568C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7568C7D0Ev,_ZThn4_N7S7568C7D0Ev)();
static  VTBL_ENTRY vtc_S7568C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C7[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v7Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7568C7[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7568C7D1Ev,_ZThn4_N7S7568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7568C7D0Ev,_ZThn4_N7S7568C7D0Ev),
};
extern VTBL_ENTRY _ZTI7S7568C7[];
extern  VTBL_ENTRY _ZTV7S7568C7[];
Class_Descriptor cd_S7568C7 = {  "S7568C7", // class name
  bases_S7568C7, 3,
  &(vtc_S7568C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S7568C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7568C7),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7568C6  : virtual S7568C7 , S7568C5 , S7568C4 {
  ~S7568C6(); // tgen
  S7568C6(); // tgen
};
//SIG(-1 S7568C6) C1{ VBC2{ BC3{ v1} BC4{ BC3 vd Fp Fi[2] Fc[2]} vd v2 v3 Fi Fc} BC5{ BC4 v4 v5 v6 FC6{ VBC3 VBC4 FD[5] Fs[3] Fi}} BC4}


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

static void Test_S7568C6()
{
  extern Class_Descriptor cd_S7568C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S7568C6, buf);
    S7568C6 *dp, &lv = *(dp=new (buf) S7568C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S7568C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7568C6)");
    /*is_ambiguous_... S7568C7::S7568C3_nt */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C7*), ABISELECT(208,136), "S7568C6");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C7*), ABISELECT(216,140), "S7568C6");
    check_base_class_offset(lv, (S7568C4*)(S7568C7*), ABISELECT(216,140), "S7568C6");
    check_base_class_offset(lv, (S7568C7*), ABISELECT(208,136), "S7568C6");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C5*), 0, "S7568C6");
    check_base_class_offset(lv, (S7568C4*)(S7568C5*), 0, "S7568C6");
    check_base_class_offset(lv, (S7568C5*), 0, "S7568C6");
    /*is_ambiguous_... S7568C6::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*), ABISELECT(176,116), "S7568C6");
    /*is_ambiguous_... S7568C6::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C4*), ABISELECT(176,116), "S7568C6");
    test_class_info(&lv, &cd_S7568C6);
    dp->~S7568C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7568C6(Test_S7568C6, "S7568C6", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN7S7568C6C1Ev();
extern void _ZN7S7568C6D1Ev();
Name_Map name_map_S7568C6[] = {
  NSPAIR(_ZN7S7568C6C1Ev),
  NSPAIR(_ZN7S7568C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C7;
extern VTBL_ENTRY _ZTI7S7568C7[];
extern  VTBL_ENTRY _ZTV7S7568C7[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C5;
extern VTBL_ENTRY _ZTI7S7568C5[];
extern  VTBL_ENTRY _ZTV7S7568C5[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
static Base_Class bases_S7568C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7568C3_nt,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7568C3_nt,    ABISELECT(216,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(216,140), //bcp->offset
    25, //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7568C7,    ABISELECT(208,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7568C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7568C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7568C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7568C3_nt,    ABISELECT(176,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(176,116), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7568C6[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C6D1Ev();
extern void _ZN7S7568C6D0Ev();
extern void _ZN7S7568C52v3Ev();
extern void _ZN7S7568C52v4Ev();
extern void _ZN7S7568C52v5Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZThn176_N7S7568C6D1Ev,_ZThn116_N7S7568C6D1Ev)();
extern void ABISELECT(_ZThn176_N7S7568C6D0Ev,_ZThn116_N7S7568C6D0Ev)();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C6D1Ev,_ZTv0_n16_N7S7568C6D1Ev)();
extern void ABISELECT(_ZThn208_N7S7568C6D1Ev,_ZThn136_N7S7568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C6D0Ev,_ZTv0_n16_N7S7568C6D0Ev)();
extern void ABISELECT(_ZThn208_N7S7568C6D0Ev,_ZThn136_N7S7568C6D0Ev)() __attribute__((weak));
extern void _ZN7S7568C72v6Ev();
extern void _ZN7S7568C72v7Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTvn8_n32_N7S7568C6D1Ev,_ZTvn4_n16_N7S7568C6D1Ev)();
extern void ABISELECT(_ZTvn8_n32_N7S7568C6D0Ev,_ZTvn4_n16_N7S7568C6D0Ev)();
static  VTBL_ENTRY vtc_S7568C6[] = {
  ABISELECT(208,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C6[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v5Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7568C6[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S7568C6D1Ev,_ZThn116_N7S7568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S7568C6D0Ev,_ZThn116_N7S7568C6D0Ev),
  0,
  0,
  ABISELECT(-208,-136),
  0,
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S7568C6[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C6D1Ev,_ZTv0_n16_N7S7568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C6D0Ev,_ZTv0_n16_N7S7568C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7568C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v7Ev,
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI7S7568C6[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N7S7568C6D1Ev,_ZTvn4_n16_N7S7568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N7S7568C6D0Ev,_ZTvn4_n16_N7S7568C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7568C6[];
static  VTT_ENTRY vtt_S7568C6[] = {
  {&(_ZTV7S7568C6[3]),  3,30},
  {&(_ZTV7S7568C6[20]),  20,30},
  {&(_ZTV7S7568C6[27]),  27,30},
};
extern VTBL_ENTRY _ZTI7S7568C6[];
extern  VTBL_ENTRY _ZTV7S7568C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C6[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C6D0Ev,_ZTv0_n16_N7S7568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7568C6D0Ev,_ZThn136_N7S7568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C6D1Ev,_ZTv0_n16_N7S7568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7568C6D1Ev,_ZThn136_N7S7568C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7568C6 = {  "S7568C6", // class name
  bases_S7568C6, 9,
  &(vtc_S7568C6[0]), // expected_vtbl_contents
  &(vtt_S7568C6[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI7S7568C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7568C6),30, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7568C6),3, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7568C8  : S7568C7 , S7568C2 {
  __tsi64 s7568c8f0;
  virtual  ~S7568C8(); // _ZN7S7568C8D2Ev
  S7568C8(); // tgen
};
//SIG(-1 S7568C8) C1{ BC2{ BC3{ v1} BC4{ BC3 vd Fp Fi[2] Fc[2]} vd v2 v3 Fi Fc} BC5{ VBC3 VBC4 FD[5] Fs[3] Fi} vd FL}


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

static void Test_S7568C8()
{
  extern Class_Descriptor cd_S7568C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S7568C8, buf);
    S7568C8 *dp, &lv = *(dp=new (buf) S7568C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S7568C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7568C8)");
    /*is_ambiguous_... S7568C7::S7568C3_nt */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C7*), 0, "S7568C8");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C7*), ABISELECT(8,4), "S7568C8");
    check_base_class_offset(lv, (S7568C4*)(S7568C7*), ABISELECT(8,4), "S7568C8");
    check_base_class_offset(lv, (S7568C7*), 0, "S7568C8");
    /*is_ambiguous_... S7568C2::S7568C3_nt */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C2*), ABISELECT(48,32), "S7568C8");
    /*is_ambiguous_... S7568C8::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*), ABISELECT(168,116), "S7568C8");
    check_base_class_offset(lv, (S7568C4*)(S7568C2*), ABISELECT(168,116), "S7568C8");
    check_base_class_offset(lv, (S7568C2*), ABISELECT(48,32), "S7568C8");
    check_field_offset(lv, s7568c8f0, ABISELECT(160,108), "S7568C8.s7568c8f0");
    test_class_info(&lv, &cd_S7568C8);
    dp->~S7568C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7568C8(Test_S7568C8, "S7568C8", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S7568C8C1Ev();
extern void _ZN7S7568C8D2Ev();
Name_Map name_map_S7568C8[] = {
  NSPAIR(_ZN7S7568C8C1Ev),
  NSPAIR(_ZN7S7568C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C7;
extern VTBL_ENTRY _ZTI7S7568C7[];
extern  VTBL_ENTRY _ZTV7S7568C7[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C2;
extern VTBL_ENTRY _ZTI7S7568C2[];
extern  VTBL_ENTRY _ZTV7S7568C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C2[];
static Base_Class bases_S7568C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7568C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7568C3_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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7568C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7568C3_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7568C3_nt,    ABISELECT(168,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(168,116), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7568C2,    ABISELECT(48,32), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7568C8[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C8D1Ev();
extern void _ZN7S7568C8D0Ev();
extern void _ZN7S7568C72v6Ev();
extern void _ZN7S7568C72v7Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZThn8_N7S7568C8D1Ev,_ZThn4_N7S7568C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S7568C8D0Ev,_ZThn4_N7S7568C8D0Ev)();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZThn48_N7S7568C8D1Ev,_ZThn32_N7S7568C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S7568C8D0Ev,_ZThn32_N7S7568C8D0Ev)();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C8D1Ev,_ZTv0_n16_N7S7568C8D1Ev)();
extern void ABISELECT(_ZThn168_N7S7568C8D1Ev,_ZThn116_N7S7568C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C8D0Ev,_ZTv0_n16_N7S7568C8D0Ev)();
extern void ABISELECT(_ZThn168_N7S7568C8D0Ev,_ZThn116_N7S7568C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7568C8[] = {
  ABISELECT(168,116),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v7Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7568C8D1Ev,_ZThn4_N7S7568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7568C8D0Ev,_ZThn4_N7S7568C8D0Ev),
  ABISELECT(120,84),
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7568C8D1Ev,_ZThn32_N7S7568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7568C8D0Ev,_ZThn32_N7S7568C8D0Ev),
  ABISELECT(-168,-116),
  0,
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C8D1Ev,_ZTv0_n16_N7S7568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C8D0Ev,_ZTv0_n16_N7S7568C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S7568C8[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C2D1Ev();
extern void _ZN7S7568C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7568C2__7S7568C8[] = {
  ABISELECT(120,84),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D0Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S7568C2D1Ev,_ZThn84_N7S7568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S7568C2D0Ev,_ZThn84_N7S7568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7568C4__7S7568C2__7S7568C8[] = {
  ABISELECT(-120,-84),
  0,
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev),
};
static  VTT_ENTRY vtt_S7568C8[] = {
  {&(_ZTV7S7568C8[4]),  4,29},
  {&(_tg__ZTV7S7568C2__7S7568C8[5]),  5,8},
  {&(_tg__ZTV7S7568C2__7S7568C8[5]),  5,8},
  {&(_tg__ZTV7S7568C4__7S7568C2__7S7568C8[4]),  4,7},
  {&(_ZTV7S7568C8[19]),  19,29},
  {&(_ZTV7S7568C8[19]),  19,29},
  {&(_ZTV7S7568C8[26]),  26,29},
};
extern VTBL_ENTRY _ZTI7S7568C8[];
extern  VTBL_ENTRY _ZTV7S7568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C8[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7568C2D0Ev,_ZThn84_N7S7568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7568C2D1Ev,_ZThn84_N7S7568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C8D0Ev,_ZTv0_n16_N7S7568C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7568C8D0Ev,_ZThn116_N7S7568C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C8D1Ev,_ZTv0_n16_N7S7568C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7568C8D1Ev,_ZThn116_N7S7568C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7568C8 = {  "S7568C8", // class name
  bases_S7568C8, 8,
  &(vtc_S7568C8[0]), // expected_vtbl_contents
  &(vtt_S7568C8[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S7568C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7568C8),29, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7568C8),7, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7568C1  : S7568C2 , S7568C5 , virtual S7568C6 , virtual S7568C8 , S7568C4 {
  long double s7568c1f0[7];
  __tsi64  :0;
  int s7568c1f2[2];
  virtual void  v1(); // _ZN7S7568C12v1Ev
  ~S7568C1(); // tgen
  S7568C1(); // tgen
};
//SIG(1 S7568C1) C1{ BC2{ VBC3{ v2} VBC4{ BC3 vd Fp Fi[2] Fc[2]} FD[5] Fs[3] Fi} BC5{ BC4 v3 v4 v5 FC2} VBC6{ VBC7{ BC3 BC4 vd v6 v7 Fi Fc} BC5 BC4} VBC8{ BC7 BC2 vd FL} BC4 v1 FD[7] FL:0 Fi[2]}


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

static void Test_S7568C1()
{
  extern Class_Descriptor cd_S7568C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,153)];
    init_test(&cd_S7568C1, buf);
    S7568C1 *dp, &lv = *(dp=new (buf) S7568C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,608), "sizeof(S7568C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7568C1)");
    /*is_ambiguous_... S7568C1::S7568C2 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C2*), 0, "S7568C1");
    /*is_ambiguous_... S7568C2::S7568C3_nt */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C2*)(S7568C8*), 0, "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*), ABISELECT(440,304), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C2 */ AMB_check_base_class_offset(lv, (S7568C4*)(S7568C2*), ABISELECT(440,304), "S7568C1");
    check_base_class_offset(lv, (S7568C4*)(S7568C2*)(S7568C8*), ABISELECT(440,304), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C2 */ AMB_check_base_class_offset(lv, (S7568C2*), 0, "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C5 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C5*), ABISELECT(112,76), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C5 */ AMB_check_base_class_offset(lv, (S7568C4*)(S7568C5*), ABISELECT(112,76), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C5 */ AMB_check_base_class_offset(lv, (S7568C5*), ABISELECT(112,76), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C7 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C7*), ABISELECT(688,460), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C7 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C7*), ABISELECT(696,464), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C7 */ AMB_check_base_class_offset(lv, (S7568C4*)(S7568C7*), ABISELECT(696,464), "S7568C1");
    check_base_class_offset(lv, (S7568C7*)(S7568C6*), ABISELECT(688,460), "S7568C1");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C5*)(S7568C6*), ABISELECT(480,324), "S7568C1");
    check_base_class_offset(lv, (S7568C4*)(S7568C5*)(S7568C6*), ABISELECT(480,324), "S7568C1");
    check_base_class_offset(lv, (S7568C5*)(S7568C6*), ABISELECT(480,324), "S7568C1");
    /*is_ambiguous_... S7568C6::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C6*), ABISELECT(656,440), "S7568C1");
    /*is_ambiguous_... S7568C6::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C4*)(S7568C6*), ABISELECT(656,440), "S7568C1");
    check_base_class_offset(lv, (S7568C6*), ABISELECT(480,324), "S7568C1");
    /*is_ambiguous_... S7568C7::S7568C3_nt */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C7*)(S7568C8*), ABISELECT(736,492), "S7568C1");
    check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*)(S7568C7*)(S7568C8*), ABISELECT(744,496), "S7568C1");
    check_base_class_offset(lv, (S7568C4*)(S7568C7*)(S7568C8*), ABISELECT(744,496), "S7568C1");
    check_base_class_offset(lv, (S7568C7*)(S7568C8*), ABISELECT(736,492), "S7568C1");
    check_base_class_offset(lv, (S7568C2*)(S7568C8*), ABISELECT(784,524), "S7568C1");
    check_base_class_offset(lv, (S7568C8*), ABISELECT(736,492), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C3_nt*)(S7568C4*), ABISELECT(288,192), "S7568C1");
    /*is_ambiguous_... S7568C1::S7568C4 */ AMB_check_base_class_offset(lv, (S7568C4*), ABISELECT(288,192), "S7568C1");
    check_field_offset(lv, s7568c1f0, ABISELECT(320,212), "S7568C1.s7568c1f0");
    check_field_offset(lv, s7568c1f2, ABISELECT(432,296), "S7568C1.s7568c1f2");
    test_class_info(&lv, &cd_S7568C1);
    dp->~S7568C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7568C1(Test_S7568C1, "S7568C1", ABISELECT(912,608));

#else // __cplusplus

extern void _ZN7S7568C1C1Ev();
extern void _ZN7S7568C1D1Ev();
Name_Map name_map_S7568C1[] = {
  NSPAIR(_ZN7S7568C1C1Ev),
  NSPAIR(_ZN7S7568C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C2;
extern VTBL_ENTRY _ZTI7S7568C2[];
extern  VTBL_ENTRY _ZTV7S7568C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C2[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C5;
extern VTBL_ENTRY _ZTI7S7568C5[];
extern  VTBL_ENTRY _ZTV7S7568C5[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C7;
extern VTBL_ENTRY _ZTI7S7568C7[];
extern  VTBL_ENTRY _ZTV7S7568C7[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C5;
extern VTBL_ENTRY _ZTI7S7568C5[];
extern  VTBL_ENTRY _ZTV7S7568C5[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C6;
extern VTBL_ENTRY _ZTI7S7568C6[];
extern  VTBL_ENTRY _ZTV7S7568C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C6[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
extern Class_Descriptor cd_S7568C7;
extern VTBL_ENTRY _ZTI7S7568C7[];
extern  VTBL_ENTRY _ZTV7S7568C7[];
extern Class_Descriptor cd_S7568C2;
extern VTBL_ENTRY _ZTI7S7568C2[];
extern  VTBL_ENTRY _ZTV7S7568C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C2[];
extern Class_Descriptor cd_S7568C8;
extern VTBL_ENTRY _ZTI7S7568C8[];
extern  VTBL_ENTRY _ZTV7S7568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C8[];
extern Class_Descriptor cd_S7568C3_nt;
extern VTBL_ENTRY _ZTI10S7568C3_nt[];
extern  VTBL_ENTRY _ZTV10S7568C3_nt[];
extern Class_Descriptor cd_S7568C4;
extern VTBL_ENTRY _ZTI7S7568C4[];
extern  VTBL_ENTRY _ZTV7S7568C4[];
static Base_Class bases_S7568C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7568C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7568C3_nt,    ABISELECT(440,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(440,304), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7568C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7568C3_nt,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7568C5,    ABISELECT(112,76), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7568C3_nt,    ABISELECT(688,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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7568C3_nt,    ABISELECT(696,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(696,464), //bcp->offset
    62, //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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7568C7,    ABISELECT(688,460), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7568C3_nt,    ABISELECT(480,324), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7568C4,    ABISELECT(480,324), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S7568C5,    ABISELECT(480,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7568C3_nt,    ABISELECT(656,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(656,440), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7568C6,    ABISELECT(480,324), //bcp->offset
    32, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7568C3_nt,    ABISELECT(736,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7568C3_nt,    ABISELECT(744,496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(744,496), //bcp->offset
    80, //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
    16, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7568C7,    ABISELECT(736,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7568C2,    ABISELECT(784,524), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7568C8,    ABISELECT(736,492), //bcp->offset
    67, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7568C3_nt,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7568C4,    ABISELECT(288,192), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7568C1[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C1D1Ev();
extern void _ZN7S7568C1D0Ev();
extern void _ZN7S7568C12v1Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZThn112_N7S7568C1D1Ev,_ZThn76_N7S7568C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7568C1D0Ev,_ZThn76_N7S7568C1D0Ev)();
extern void _ZN7S7568C52v3Ev();
extern void _ZN7S7568C52v4Ev();
extern void _ZN7S7568C52v5Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZThn288_N7S7568C1D1Ev,_ZThn192_N7S7568C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S7568C1D0Ev,_ZThn192_N7S7568C1D0Ev)();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C1D1Ev,_ZTv0_n16_N7S7568C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S7568C1D1Ev,_ZThn304_N7S7568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C1D0Ev,_ZTv0_n16_N7S7568C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S7568C1D0Ev,_ZThn304_N7S7568C1D0Ev)() __attribute__((weak));
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S7568C1D1Ev,_ZTv0_n20_N7S7568C1D1Ev)();
extern void ABISELECT(_ZThn480_N7S7568C1D1Ev,_ZThn324_N7S7568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7568C1D0Ev,_ZTv0_n20_N7S7568C1D0Ev)();
extern void ABISELECT(_ZThn480_N7S7568C1D0Ev,_ZThn324_N7S7568C1D0Ev)() __attribute__((weak));
extern void _ZN7S7568C52v3Ev();
extern void _ZN7S7568C52v4Ev();
extern void _ZN7S7568C52v5Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTvn176_n40_N7S7568C1D1Ev,_ZTvn116_n20_N7S7568C1D1Ev)();
extern void ABISELECT(_ZTvn176_n40_N7S7568C1D0Ev,_ZTvn116_n20_N7S7568C1D0Ev)();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C1D1Ev,_ZTv0_n16_N7S7568C1D1Ev)();
extern void ABISELECT(_ZThn688_N7S7568C1D1Ev,_ZThn460_N7S7568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C1D0Ev,_ZTv0_n16_N7S7568C1D0Ev)();
extern void ABISELECT(_ZThn688_N7S7568C1D0Ev,_ZThn460_N7S7568C1D0Ev)() __attribute__((weak));
extern void _ZN7S7568C72v6Ev();
extern void _ZN7S7568C72v7Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTvn8_n32_N7S7568C1D1Ev,_ZTvn4_n16_N7S7568C1D1Ev)();
extern void ABISELECT(_ZTvn8_n32_N7S7568C1D0Ev,_ZTvn4_n16_N7S7568C1D0Ev)();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7568C1D1Ev,_ZTv0_n24_N7S7568C1D1Ev)();
extern void ABISELECT(_ZThn736_N7S7568C1D1Ev,_ZThn492_N7S7568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7568C1D0Ev,_ZTv0_n24_N7S7568C1D0Ev)();
extern void ABISELECT(_ZThn736_N7S7568C1D0Ev,_ZThn492_N7S7568C1D0Ev)() __attribute__((weak));
extern void _ZN7S7568C72v6Ev();
extern void _ZN7S7568C72v7Ev();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTvn8_n48_N7S7568C1D1Ev,_ZTvn4_n24_N7S7568C1D1Ev)();
extern void ABISELECT(_ZTvn8_n48_N7S7568C1D0Ev,_ZTvn4_n24_N7S7568C1D0Ev)();
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTvn48_n48_N7S7568C1D1Ev,_ZTvn32_n24_N7S7568C1D1Ev)();
extern void ABISELECT(_ZTvn48_n48_N7S7568C1D0Ev,_ZTvn32_n24_N7S7568C1D0Ev)();
static  VTBL_ENTRY vtc_S7568C1[] = {
  ABISELECT(736,492),
  ABISELECT(688,460),
  ABISELECT(480,324),
  ABISELECT(440,304),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7568C12v1Ev,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7568C1D1Ev,_ZThn76_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7568C1D0Ev,_ZThn76_N7S7568C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7568C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v5Ev,
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7568C1D1Ev,_ZThn192_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7568C1D0Ev,_ZThn192_N7S7568C1D0Ev),
  ABISELECT(-440,-304),
  0,
  ABISELECT(-440,-304),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C1D1Ev,_ZTv0_n16_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C1D0Ev,_ZTv0_n16_N7S7568C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-480,-324),
  0,
  ABISELECT(208,136),
  ABISELECT(-480,-324),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7568C1D1Ev,_ZTv0_n20_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7568C1D0Ev,_ZTv0_n20_N7S7568C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7568C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v5Ev,
  ABISELECT(-656,-440),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n40_N7S7568C1D1Ev,_ZTvn116_n20_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n40_N7S7568C1D0Ev,_ZTvn116_n20_N7S7568C1D0Ev),
  0,
  0,
  ABISELECT(-688,-460),
  0,
  ABISELECT(-688,-460),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C1D1Ev,_ZTv0_n16_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C1D0Ev,_ZTv0_n16_N7S7568C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7568C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v7Ev,
  ABISELECT(-696,-464),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N7S7568C1D1Ev,_ZTvn4_n16_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N7S7568C1D0Ev,_ZTvn4_n16_N7S7568C1D0Ev),
  0,
  0,
  ABISELECT(-736,-492),
  0,
  ABISELECT(-296,-188),
  ABISELECT(-736,-492),
  ABISELECT(-736,-492),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7568C1D1Ev,_ZTv0_n24_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7568C1D0Ev,_ZTv0_n24_N7S7568C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7568C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v7Ev,
  ABISELECT(-744,-496),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n48_N7S7568C1D1Ev,_ZTvn4_n24_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n48_N7S7568C1D0Ev,_ZTvn4_n24_N7S7568C1D0Ev),
  ABISELECT(-344,-220),
  ABISELECT(-784,-524),
  ABISELECT(-784,-524),
  ABISELECT(-784,-524),
  (VTBL_ENTRY)&(_ZTI7S7568C1[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n48_N7S7568C1D1Ev,_ZTvn32_n24_N7S7568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n48_N7S7568C1D0Ev,_ZTvn32_n24_N7S7568C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7568C1[];
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C2D1Ev();
extern void _ZN7S7568C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7568C2__7S7568C1[] = {
  ABISELECT(440,304),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D0Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev)();
extern void ABISELECT(_ZThn440_N7S7568C2D1Ev,_ZThn304_N7S7568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev)();
extern void ABISELECT(_ZThn440_N7S7568C2D0Ev,_ZThn304_N7S7568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7568C4__7S7568C2__7S7568C1[] = {
  ABISELECT(-440,-304),
  0,
  ABISELECT(-440,-304),
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev),
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C6D1Ev();
extern void _ZN7S7568C6D0Ev();
extern void _ZN7S7568C52v3Ev();
extern void _ZN7S7568C52v4Ev();
extern void _ZN7S7568C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7568C6__7S7568C1[] = {
  ABISELECT(208,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C6[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7568C52v5Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C6D1Ev,_ZTv0_n16_N7S7568C6D1Ev)();
extern void ABISELECT(_ZThn208_N7S7568C6D1Ev,_ZThn136_N7S7568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7568C6D0Ev,_ZTv0_n16_N7S7568C6D0Ev)();
extern void ABISELECT(_ZThn208_N7S7568C6D0Ev,_ZThn136_N7S7568C6D0Ev)() __attribute__((weak));
extern void _ZN7S7568C72v6Ev();
extern void _ZN7S7568C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7568C7__7S7568C6__7S7568C1[] = {
  0,
  0,
  ABISELECT(-208,-136),
  0,
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S7568C6[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C6D1Ev,_ZTv0_n16_N7S7568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C6D0Ev,_ZTv0_n16_N7S7568C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7568C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v7Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTvn8_n32_N7S7568C6D1Ev,_ZTvn4_n16_N7S7568C6D1Ev)();
extern void ABISELECT(_ZTvn8_n32_N7S7568C6D0Ev,_ZTvn4_n16_N7S7568C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7568C47S7568C7__7S7568C6__7S7568C1[] = {
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI7S7568C6[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N7S7568C6D1Ev,_ZTvn4_n16_N7S7568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N7S7568C6D0Ev,_ZTvn4_n16_N7S7568C6D0Ev),
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C8D1Ev();
extern void _ZN7S7568C8D0Ev();
extern void _ZN7S7568C72v6Ev();
extern void _ZN7S7568C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7568C8__7S7568C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(-736,-492),
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7568C72v7Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void _ZN7S7568C2D1Ev();
extern void _ZN7S7568C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7568C27S7568C8__A1__7S7568C1[] = {
  ABISELECT(-344,-220),
  ABISELECT(-784,-524),
  ABISELECT(-784,-524),
  0,
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7568C2D0Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV10S7568C3_nt__7S7568C27S7568C8__A1__7S7568C1[] = {
  0,
  ABISELECT(784,524),
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7568C4__7S7568C27S7568C8__A1__7S7568C1[] = {
  ABISELECT(344,220),
  0,
  ABISELECT(344,220),
  (VTBL_ENTRY)&(_ZTI7S7568C2[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev),
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZThn48_N7S7568C8D1Ev,_ZThn32_N7S7568C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S7568C8D0Ev,_ZThn32_N7S7568C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7568C2__7S7568C8__7S7568C1[] = {
  ABISELECT(-344,-220),
  ABISELECT(-784,-524),
  ABISELECT(-784,-524),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7568C8D1Ev,_ZThn32_N7S7568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7568C8D0Ev,_ZThn32_N7S7568C8D0Ev),
};
extern void _ZN10S7568C3_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV10S7568C3_nt__A2__7S7568C8__7S7568C1[] = {
  0,
  ABISELECT(736,492),
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
};
extern void _ZN10S7568C3_nt2v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7568C8D1Ev,_ZTv0_n16_N7S7568C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7568C8D0Ev,_ZTv0_n16_N7S7568C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7568C4__A1__7S7568C8__7S7568C1[] = {
  ABISELECT(296,188),
  0,
  ABISELECT(296,188),
  (VTBL_ENTRY)&(_ZTI7S7568C8[0]),
  (VTBL_ENTRY)&_ZN10S7568C3_nt2v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C8D1Ev,_ZTv0_n16_N7S7568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7568C8D0Ev,_ZTv0_n16_N7S7568C8D0Ev),
};
static  VTT_ENTRY vtt_S7568C1[] = {
  {&(_ZTV7S7568C1[8]),  8,93},
  {&(_tg__ZTV7S7568C2__7S7568C1[5]),  5,8},
  {&(_tg__ZTV7S7568C2__7S7568C1[5]),  5,8},
  {&(_tg__ZTV7S7568C4__7S7568C2__7S7568C1[4]),  4,7},
  {&(_ZTV7S7568C1[8]),  8,93},
  {&(_ZTV7S7568C1[29]),  29,93},
  {&(_ZTV7S7568C1[40]),  40,93},
  {&(_ZTV7S7568C1[57]),  57,93},
  {&(_ZTV7S7568C1[64]),  64,93},
  {&(_ZTV7S7568C1[48]),  48,93},
  {&(_ZTV7S7568C1[75]),  75,93},
  {&(_ZTV7S7568C1[82]),  82,93},
  {&(_ZTV7S7568C1[90]),  90,93},
  {&(_tg__ZTV7S7568C6__7S7568C1[3]),  3,9},
  {&(_tg__ZTV7S7568C7__7S7568C6__7S7568C1[6]),  6,11},
  {&(_tg__ZTV7S7568C47S7568C7__7S7568C6__7S7568C1[2]),  2,5},
  {&(_tg__ZTV7S7568C8__7S7568C1[4]),  4,9},
  {&(_tg__ZTV7S7568C27S7568C8__A1__7S7568C1[5]),  5,8},
  {&(_tg__ZTV10S7568C3_nt__7S7568C27S7568C8__A1__7S7568C1[3]),  3,4},
  {&(_tg__ZTV7S7568C4__7S7568C27S7568C8__A1__7S7568C1[4]),  4,7},
  {&(_tg__ZTV7S7568C2__7S7568C8__7S7568C1[5]),  5,8},
  {&(_tg__ZTV10S7568C3_nt__A2__7S7568C8__7S7568C1[3]),  3,4},
  {&(_tg__ZTV7S7568C4__A1__7S7568C8__7S7568C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7568C1[];
extern  VTBL_ENTRY _ZTV7S7568C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7568C1[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C6D0Ev,_ZTv0_n16_N7S7568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7568C6D0Ev,_ZThn136_N7S7568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C6D1Ev,_ZTv0_n16_N7S7568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7568C6D1Ev,_ZThn136_N7S7568C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C2D0Ev,_ZTv0_n16_N7S7568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S7568C2D0Ev,_ZThn304_N7S7568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C2D1Ev,_ZTv0_n16_N7S7568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S7568C2D1Ev,_ZThn304_N7S7568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7568C1D0Ev,_ZTv0_n24_N7S7568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N7S7568C1D0Ev,_ZThn492_N7S7568C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7568C1D1Ev,_ZTv0_n24_N7S7568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N7S7568C1D1Ev,_ZThn492_N7S7568C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7568C1D0Ev,_ZTv0_n20_N7S7568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N7S7568C1D0Ev,_ZThn324_N7S7568C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7568C1D1Ev,_ZTv0_n20_N7S7568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N7S7568C1D1Ev,_ZThn324_N7S7568C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C1D0Ev,_ZTv0_n16_N7S7568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S7568C1D0Ev,_ZThn460_N7S7568C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S7568C1D0Ev,_ZThn304_N7S7568C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7568C1D1Ev,_ZTv0_n16_N7S7568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S7568C1D1Ev,_ZThn460_N7S7568C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S7568C1D1Ev,_ZThn304_N7S7568C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7568C1 = {  "S7568C1", // class name
  bases_S7568C1, 25,
  &(vtc_S7568C1[0]), // expected_vtbl_contents
  &(vtt_S7568C1[0]), // expected_vtt_contents
  ABISELECT(912,608), // object size
  NSPAIRA(_ZTI7S7568C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7568C1),93, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7568C1),23, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2200C4_nt  {
  void *s2200c4f0;
  char s2200c4f1;
  int s2200c4f2[4];
  void *s2200c4f3;
  virtual  ~S2200C4_nt(); // _ZN10S2200C4_ntD1Ev
  virtual void  v3(); // _ZN10S2200C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2200C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2200C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2200C4_nt2v6Ev
  S2200C4_nt(); // tgen
};
//SIG(-1 S2200C4_nt) C1{ vd v1 v2 v3 v4 Fp Fc Fi[4] Fp}


 S2200C4_nt ::~S2200C4_nt(){ note_dtor("S2200C4_nt", this);}
void  S2200C4_nt ::v3(){vfunc_called(this, "_ZN10S2200C4_nt2v3Ev");}
void  S2200C4_nt ::v4(){vfunc_called(this, "_ZN10S2200C4_nt2v4Ev");}
void  S2200C4_nt ::v5(){vfunc_called(this, "_ZN10S2200C4_nt2v5Ev");}
void  S2200C4_nt ::v6(){vfunc_called(this, "_ZN10S2200C4_nt2v6Ev");}
S2200C4_nt ::S2200C4_nt(){ note_ctor("S2200C4_nt", this);} // tgen

//skip512 S2200C4_nt

#else // __cplusplus

extern void _ZN10S2200C4_ntC1Ev();
extern void _ZN10S2200C4_ntD1Ev();
Name_Map name_map_S2200C4_nt[] = {
  NSPAIR(_ZN10S2200C4_ntC1Ev),
  NSPAIR(_ZN10S2200C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2200C4_nt[];
extern void _ZN10S2200C4_ntD1Ev();
extern void _ZN10S2200C4_ntD0Ev();
extern void _ZN10S2200C4_nt2v3Ev();
extern void _ZN10S2200C4_nt2v4Ev();
extern void _ZN10S2200C4_nt2v5Ev();
extern void _ZN10S2200C4_nt2v6Ev();
static  VTBL_ENTRY vtc_S2200C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2200C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2200C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S2200C4_nt[];
VTBL_ENTRY *P__ZTI10S2200C4_nt = _ZTI10S2200C4_nt; 
extern  VTBL_ENTRY _ZTV10S2200C4_nt[];
Class_Descriptor cd_S2200C4_nt = {  "S2200C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2200C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S2200C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2200C4_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  S2200C3_nt  : S2200C4_nt {
  int s2200c3f0[3];
  virtual  ~S2200C3_nt(); // _ZN10S2200C3_ntD1Ev
  virtual void  v7(); // _ZN10S2200C3_nt2v7Ev
  virtual void  v8(); // _ZN10S2200C3_nt2v8Ev
  virtual void  v9(); // _ZN10S2200C3_nt2v9Ev
  S2200C3_nt(); // tgen
};
//SIG(-1 S2200C3_nt) C1{ BC2{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v1 v2 v3 Fi[3]}


 S2200C3_nt ::~S2200C3_nt(){ note_dtor("S2200C3_nt", this);}
void  S2200C3_nt ::v7(){vfunc_called(this, "_ZN10S2200C3_nt2v7Ev");}
void  S2200C3_nt ::v8(){vfunc_called(this, "_ZN10S2200C3_nt2v8Ev");}
void  S2200C3_nt ::v9(){vfunc_called(this, "_ZN10S2200C3_nt2v9Ev");}
S2200C3_nt ::S2200C3_nt(){ note_ctor("S2200C3_nt", this);} // tgen

//skip512 S2200C3_nt

#else // __cplusplus

extern void _ZN10S2200C3_ntC1Ev();
extern void _ZN10S2200C3_ntD1Ev();
Name_Map name_map_S2200C3_nt[] = {
  NSPAIR(_ZN10S2200C3_ntC1Ev),
  NSPAIR(_ZN10S2200C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2200C4_nt;
extern VTBL_ENTRY _ZTI10S2200C4_nt[];
extern  VTBL_ENTRY _ZTV10S2200C4_nt[];
static Base_Class bases_S2200C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2200C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2200C3_nt[];
extern void _ZN10S2200C3_ntD1Ev();
extern void _ZN10S2200C3_ntD0Ev();
extern void _ZN10S2200C4_nt2v3Ev();
extern void _ZN10S2200C4_nt2v4Ev();
extern void _ZN10S2200C4_nt2v5Ev();
extern void _ZN10S2200C4_nt2v6Ev();
extern void _ZN10S2200C3_nt2v7Ev();
extern void _ZN10S2200C3_nt2v8Ev();
extern void _ZN10S2200C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S2200C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2200C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2200C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S2200C3_nt[];
VTBL_ENTRY *P__ZTI10S2200C3_nt = _ZTI10S2200C3_nt; 
extern  VTBL_ENTRY _ZTV10S2200C3_nt[];
Class_Descriptor cd_S2200C3_nt = {  "S2200C3_nt", // class name
  bases_S2200C3_nt, 1,
  &(vtc_S2200C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI10S2200C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2200C3_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2200C2_nt  : S2200C3_nt {
  int s2200c2f0[3];
  virtual  ~S2200C2_nt(); // _ZN10S2200C2_ntD1Ev
  virtual void  v10(); // _ZN10S2200C2_nt3v10Ev
  virtual void  v11(); // _ZN10S2200C2_nt3v11Ev
  virtual void  v12(); // _ZN10S2200C2_nt3v12Ev
  S2200C2_nt(); // tgen
};
//SIG(-1 S2200C2_nt) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v8 v9 v10 Fi[3]} vd v1 v2 v3 Fi[3]}


 S2200C2_nt ::~S2200C2_nt(){ note_dtor("S2200C2_nt", this);}
void  S2200C2_nt ::v10(){vfunc_called(this, "_ZN10S2200C2_nt3v10Ev");}
void  S2200C2_nt ::v11(){vfunc_called(this, "_ZN10S2200C2_nt3v11Ev");}
void  S2200C2_nt ::v12(){vfunc_called(this, "_ZN10S2200C2_nt3v12Ev");}
S2200C2_nt ::S2200C2_nt(){ note_ctor("S2200C2_nt", this);} // tgen

//skip512 S2200C2_nt

#else // __cplusplus

extern void _ZN10S2200C2_ntC1Ev();
extern void _ZN10S2200C2_ntD1Ev();
Name_Map name_map_S2200C2_nt[] = {
  NSPAIR(_ZN10S2200C2_ntC1Ev),
  NSPAIR(_ZN10S2200C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2200C4_nt;
extern VTBL_ENTRY _ZTI10S2200C4_nt[];
extern  VTBL_ENTRY _ZTV10S2200C4_nt[];
extern Class_Descriptor cd_S2200C3_nt;
extern VTBL_ENTRY _ZTI10S2200C3_nt[];
extern  VTBL_ENTRY _ZTV10S2200C3_nt[];
static Base_Class bases_S2200C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2200C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2200C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S2200C2_nt[];
extern void _ZN10S2200C2_ntD1Ev();
extern void _ZN10S2200C2_ntD0Ev();
extern void _ZN10S2200C4_nt2v3Ev();
extern void _ZN10S2200C4_nt2v4Ev();
extern void _ZN10S2200C4_nt2v5Ev();
extern void _ZN10S2200C4_nt2v6Ev();
extern void _ZN10S2200C3_nt2v7Ev();
extern void _ZN10S2200C3_nt2v8Ev();
extern void _ZN10S2200C3_nt2v9Ev();
extern void _ZN10S2200C2_nt3v10Ev();
extern void _ZN10S2200C2_nt3v11Ev();
extern void _ZN10S2200C2_nt3v12Ev();
static  VTBL_ENTRY vtc_S2200C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2200C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2200C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2200C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2200C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2200C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2200C2_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S2200C2_nt[];
VTBL_ENTRY *P__ZTI10S2200C2_nt = _ZTI10S2200C2_nt; 
extern  VTBL_ENTRY _ZTV10S2200C2_nt[];
Class_Descriptor cd_S2200C2_nt = {  "S2200C2_nt", // class name
  bases_S2200C2_nt, 2,
  &(vtc_S2200C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S2200C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2200C2_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2200C5_nt  {
  __tsi64 s2200c5f0;
  void *s2200c5f1;
  void  mf2200c5(); // _ZN10S2200C5_nt8mf2200c5Ev
};
//SIG(-1 S2200C5_nt) C1{ m FL Fp}


void  S2200C5_nt ::mf2200c5(){}

//skip512 S2200C5_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S2200C5_nt[];
VTBL_ENTRY *P__ZTI10S2200C5_nt = _ZTI10S2200C5_nt; 
Class_Descriptor cd_S2200C5_nt = {  "S2200C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S2200C5_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  S2200C7  {
  virtual  ~S2200C7(); // _ZN7S2200C7D1Ev
  virtual void  v14(); // _ZN7S2200C73v14Ev
  S2200C7(); // tgen
};
//SIG(-1 S2200C7) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S2200C7C1Ev();
extern void _ZN7S2200C7D1Ev();
Name_Map name_map_S2200C7[] = {
  NSPAIR(_ZN7S2200C7C1Ev),
  NSPAIR(_ZN7S2200C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2200C7[];
extern void _ZN7S2200C7D1Ev();
extern void _ZN7S2200C7D0Ev();
extern void _ZN7S2200C73v14Ev();
static  VTBL_ENTRY vtc_S2200C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2200C7[0]),
  (VTBL_ENTRY)&_ZN7S2200C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2200C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2200C73v14Ev,
};
extern VTBL_ENTRY _ZTI7S2200C7[];
extern  VTBL_ENTRY _ZTV7S2200C7[];
Class_Descriptor cd_S2200C7 = {  "S2200C7", // class name
  0,0,//no base classes
  &(vtc_S2200C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2200C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2200C7),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  S2200C6  : S2200C7 {
  int s2200c6f0[2];
  virtual  ~S2200C6(); // _ZN7S2200C6D1Ev
  virtual void  v13(); // _ZN7S2200C63v13Ev
  S2200C6(); // tgen
};
//SIG(-1 S2200C6) C1{ BC2{ vd v2} vd v1 Fi[2]}


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

static void Test_S2200C6()
{
  extern Class_Descriptor cd_S2200C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2200C6, buf);
    S2200C6 *dp, &lv = *(dp=new (buf) S2200C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2200C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2200C6)");
    check_base_class_offset(lv, (S2200C7*), 0, "S2200C6");
    check_field_offset(lv, s2200c6f0, ABISELECT(8,4), "S2200C6.s2200c6f0");
    test_class_info(&lv, &cd_S2200C6);
    dp->~S2200C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2200C6(Test_S2200C6, "S2200C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2200C6C1Ev();
extern void _ZN7S2200C6D1Ev();
Name_Map name_map_S2200C6[] = {
  NSPAIR(_ZN7S2200C6C1Ev),
  NSPAIR(_ZN7S2200C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2200C7;
extern VTBL_ENTRY _ZTI7S2200C7[];
extern  VTBL_ENTRY _ZTV7S2200C7[];
static Base_Class bases_S2200C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2200C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2200C6[];
extern void _ZN7S2200C6D1Ev();
extern void _ZN7S2200C6D0Ev();
extern void _ZN7S2200C73v14Ev();
extern void _ZN7S2200C63v13Ev();
static  VTBL_ENTRY vtc_S2200C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2200C6[0]),
  (VTBL_ENTRY)&_ZN7S2200C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2200C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2200C73v14Ev,
  (VTBL_ENTRY)&_ZN7S2200C63v13Ev,
};
extern VTBL_ENTRY _ZTI7S2200C6[];
extern  VTBL_ENTRY _ZTV7S2200C6[];
Class_Descriptor cd_S2200C6 = {  "S2200C6", // class name
  bases_S2200C6, 1,
  &(vtc_S2200C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2200C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2200C6),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  S2200C1  : S2200C2_nt {
  int s2200c1f0[9];
  ::S2200C5_nt s2200c1f1;
  int s2200c1f2[2];
  ::S2200C6 s2200c1f3;
  int s2200c1f4[6];
  char s2200c1f5[2];
  int s2200c1f6;
  virtual  ~S2200C1(); // _ZN7S2200C1D1Ev
  virtual void  v1(); // _ZN7S2200C12v1Ev
  virtual void  v2(); // _ZN7S2200C12v2Ev
  S2200C1(); // tgen
};
//SIG(1 S2200C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 v6 Fp Fc Fi[4] Fp} vd v7 v8 v9 Fi[3]} vd v10 v11 v12 Fi[3]} vd v1 v2 Fi[9] FC5{ m FL Fp} Fi[2] FC6{ BC7{ vd v14} vd v13 Fi[2]} Fi[6] Fc[2] Fi}


 S2200C1 ::~S2200C1(){ note_dtor("S2200C1", this);}
void  S2200C1 ::v1(){vfunc_called(this, "_ZN7S2200C12v1Ev");}
void  S2200C1 ::v2(){vfunc_called(this, "_ZN7S2200C12v2Ev");}
S2200C1 ::S2200C1(){ note_ctor("S2200C1", this);} // tgen

static void Test_S2200C1()
{
  extern Class_Descriptor cd_S2200C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,40)];
    init_test(&cd_S2200C1, buf);
    S2200C1 *dp, &lv = *(dp=new (buf) S2200C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,156), "sizeof(S2200C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2200C1)");
    check_base_class_offset(lv, (S2200C4_nt*)(S2200C3_nt*)(S2200C2_nt*), 0, "S2200C1");
    check_base_class_offset(lv, (S2200C3_nt*)(S2200C2_nt*), 0, "S2200C1");
    check_base_class_offset(lv, (S2200C2_nt*), 0, "S2200C1");
    check_field_offset(lv, s2200c1f0, ABISELECT(72,56), "S2200C1.s2200c1f0");
    check_field_offset(lv, s2200c1f1, ABISELECT(112,92), "S2200C1.s2200c1f1");
    check_field_offset(lv, s2200c1f2, ABISELECT(128,104), "S2200C1.s2200c1f2");
    check_field_offset(lv, s2200c1f3, ABISELECT(136,112), "S2200C1.s2200c1f3");
    check_field_offset(lv, s2200c1f4, ABISELECT(152,124), "S2200C1.s2200c1f4");
    check_field_offset(lv, s2200c1f5, ABISELECT(176,148), "S2200C1.s2200c1f5");
    check_field_offset(lv, s2200c1f6, ABISELECT(180,152), "S2200C1.s2200c1f6");
    test_class_info(&lv, &cd_S2200C1);
    dp->~S2200C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2200C1(Test_S2200C1, "S2200C1", ABISELECT(184,156));

#else // __cplusplus

extern void _ZN7S2200C1C1Ev();
extern void _ZN7S2200C1D1Ev();
Name_Map name_map_S2200C1[] = {
  NSPAIR(_ZN7S2200C1C1Ev),
  NSPAIR(_ZN7S2200C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2200C4_nt;
extern VTBL_ENTRY _ZTI10S2200C4_nt[];
extern  VTBL_ENTRY _ZTV10S2200C4_nt[];
extern Class_Descriptor cd_S2200C3_nt;
extern VTBL_ENTRY _ZTI10S2200C3_nt[];
extern  VTBL_ENTRY _ZTV10S2200C3_nt[];
extern Class_Descriptor cd_S2200C2_nt;
extern VTBL_ENTRY _ZTI10S2200C2_nt[];
extern  VTBL_ENTRY _ZTV10S2200C2_nt[];
static Base_Class bases_S2200C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2200C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2200C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2200C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2200C1[];
extern void _ZN7S2200C1D1Ev();
extern void _ZN7S2200C1D0Ev();
extern void _ZN10S2200C4_nt2v3Ev();
extern void _ZN10S2200C4_nt2v4Ev();
extern void _ZN10S2200C4_nt2v5Ev();
extern void _ZN10S2200C4_nt2v6Ev();
extern void _ZN10S2200C3_nt2v7Ev();
extern void _ZN10S2200C3_nt2v8Ev();
extern void _ZN10S2200C3_nt2v9Ev();
extern void _ZN10S2200C2_nt3v10Ev();
extern void _ZN10S2200C2_nt3v11Ev();
extern void _ZN10S2200C2_nt3v12Ev();
extern void _ZN7S2200C12v1Ev();
extern void _ZN7S2200C12v2Ev();
static  VTBL_ENTRY vtc_S2200C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2200C1[0]),
  (VTBL_ENTRY)&_ZN7S2200C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2200C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2200C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2200C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2200C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2200C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2200C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S2200C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2200C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2200C1[];
extern  VTBL_ENTRY _ZTV7S2200C1[];
Class_Descriptor cd_S2200C1 = {  "S2200C1", // class name
  bases_S2200C1, 3,
  &(vtc_S2200C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,156), // object size
  NSPAIRA(_ZTI7S2200C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2200C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2199C4  {
  void *s2199c4f0;
  char s2199c4f1;
  int s2199c4f2[4];
  void *s2199c4f3;
  virtual  ~S2199C4(); // _ZN7S2199C4D1Ev
  virtual void  v3(); // _ZN7S2199C42v3Ev
  virtual void  v4(); // _ZN7S2199C42v4Ev
  virtual void  v5(); // _ZN7S2199C42v5Ev
  virtual void  v6(); // _ZN7S2199C42v6Ev
  S2199C4(); // tgen
};
//SIG(-1 S2199C4) C1{ vd v1 v2 v3 v4 Fp Fc Fi[4] Fp}


 S2199C4 ::~S2199C4(){ note_dtor("S2199C4", this);}
void  S2199C4 ::v3(){vfunc_called(this, "_ZN7S2199C42v3Ev");}
void  S2199C4 ::v4(){vfunc_called(this, "_ZN7S2199C42v4Ev");}
void  S2199C4 ::v5(){vfunc_called(this, "_ZN7S2199C42v5Ev");}
void  S2199C4 ::v6(){vfunc_called(this, "_ZN7S2199C42v6Ev");}
S2199C4 ::S2199C4(){ note_ctor("S2199C4", this);} // tgen

static void Test_S2199C4()
{
  extern Class_Descriptor cd_S2199C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2199C4, buf);
    S2199C4 *dp, &lv = *(dp=new (buf) S2199C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2199C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2199C4)");
    check_field_offset(lv, s2199c4f0, ABISELECT(8,4), "S2199C4.s2199c4f0");
    check_field_offset(lv, s2199c4f1, ABISELECT(16,8), "S2199C4.s2199c4f1");
    check_field_offset(lv, s2199c4f2, ABISELECT(20,12), "S2199C4.s2199c4f2");
    check_field_offset(lv, s2199c4f3, ABISELECT(40,28), "S2199C4.s2199c4f3");
    test_class_info(&lv, &cd_S2199C4);
    dp->~S2199C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2199C4(Test_S2199C4, "S2199C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2199C4C1Ev();
extern void _ZN7S2199C4D1Ev();
Name_Map name_map_S2199C4[] = {
  NSPAIR(_ZN7S2199C4C1Ev),
  NSPAIR(_ZN7S2199C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2199C4[];
extern void _ZN7S2199C4D1Ev();
extern void _ZN7S2199C4D0Ev();
extern void _ZN7S2199C42v3Ev();
extern void _ZN7S2199C42v4Ev();
extern void _ZN7S2199C42v5Ev();
extern void _ZN7S2199C42v6Ev();
static  VTBL_ENTRY vtc_S2199C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2199C4[0]),
  (VTBL_ENTRY)&_ZN7S2199C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2199C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2199C4[];
extern  VTBL_ENTRY _ZTV7S2199C4[];
Class_Descriptor cd_S2199C4 = {  "S2199C4", // class name
  0,0,//no base classes
  &(vtc_S2199C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2199C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2199C4),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  S2199C3  : S2199C4 {
  int s2199c3f0[3];
  virtual  ~S2199C3(); // _ZN7S2199C3D1Ev
  virtual void  v7(); // _ZN7S2199C32v7Ev
  virtual void  v8(); // _ZN7S2199C32v8Ev
  virtual void  v9(); // _ZN7S2199C32v9Ev
  S2199C3(); // tgen
};
//SIG(-1 S2199C3) C1{ BC2{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v1 v2 v3 Fi[3]}


 S2199C3 ::~S2199C3(){ note_dtor("S2199C3", this);}
void  S2199C3 ::v7(){vfunc_called(this, "_ZN7S2199C32v7Ev");}
void  S2199C3 ::v8(){vfunc_called(this, "_ZN7S2199C32v8Ev");}
void  S2199C3 ::v9(){vfunc_called(this, "_ZN7S2199C32v9Ev");}
S2199C3 ::S2199C3(){ note_ctor("S2199C3", this);} // tgen

static void Test_S2199C3()
{
  extern Class_Descriptor cd_S2199C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2199C3, buf);
    S2199C3 *dp, &lv = *(dp=new (buf) S2199C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2199C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2199C3)");
    check_base_class_offset(lv, (S2199C4*), 0, "S2199C3");
    check_field_offset(lv, s2199c3f0, ABISELECT(48,32), "S2199C3.s2199c3f0");
    test_class_info(&lv, &cd_S2199C3);
    dp->~S2199C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2199C3(Test_S2199C3, "S2199C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2199C3C1Ev();
extern void _ZN7S2199C3D1Ev();
Name_Map name_map_S2199C3[] = {
  NSPAIR(_ZN7S2199C3C1Ev),
  NSPAIR(_ZN7S2199C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2199C4;
extern VTBL_ENTRY _ZTI7S2199C4[];
extern  VTBL_ENTRY _ZTV7S2199C4[];
static Base_Class bases_S2199C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2199C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2199C3[];
extern void _ZN7S2199C3D1Ev();
extern void _ZN7S2199C3D0Ev();
extern void _ZN7S2199C42v3Ev();
extern void _ZN7S2199C42v4Ev();
extern void _ZN7S2199C42v5Ev();
extern void _ZN7S2199C42v6Ev();
extern void _ZN7S2199C32v7Ev();
extern void _ZN7S2199C32v8Ev();
extern void _ZN7S2199C32v9Ev();
static  VTBL_ENTRY vtc_S2199C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2199C3[0]),
  (VTBL_ENTRY)&_ZN7S2199C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2199C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2199C3[];
extern  VTBL_ENTRY _ZTV7S2199C3[];
Class_Descriptor cd_S2199C3 = {  "S2199C3", // class name
  bases_S2199C3, 1,
  &(vtc_S2199C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2199C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2199C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2199C2  : S2199C3 {
  int s2199c2f0[3];
  virtual  ~S2199C2(); // _ZN7S2199C2D1Ev
  virtual void  v10(); // _ZN7S2199C23v10Ev
  virtual void  v11(); // _ZN7S2199C23v11Ev
  virtual void  v12(); // _ZN7S2199C23v12Ev
  S2199C2(); // tgen
};
//SIG(-1 S2199C2) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v8 v9 v10 Fi[3]} vd v1 v2 v3 Fi[3]}


 S2199C2 ::~S2199C2(){ note_dtor("S2199C2", this);}
void  S2199C2 ::v10(){vfunc_called(this, "_ZN7S2199C23v10Ev");}
void  S2199C2 ::v11(){vfunc_called(this, "_ZN7S2199C23v11Ev");}
void  S2199C2 ::v12(){vfunc_called(this, "_ZN7S2199C23v12Ev");}
S2199C2 ::S2199C2(){ note_ctor("S2199C2", this);} // tgen

static void Test_S2199C2()
{
  extern Class_Descriptor cd_S2199C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2199C2, buf);
    S2199C2 *dp, &lv = *(dp=new (buf) S2199C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2199C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2199C2)");
    check_base_class_offset(lv, (S2199C4*)(S2199C3*), 0, "S2199C2");
    check_base_class_offset(lv, (S2199C3*), 0, "S2199C2");
    check_field_offset(lv, s2199c2f0, ABISELECT(60,44), "S2199C2.s2199c2f0");
    test_class_info(&lv, &cd_S2199C2);
    dp->~S2199C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2199C2(Test_S2199C2, "S2199C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2199C2C1Ev();
extern void _ZN7S2199C2D1Ev();
Name_Map name_map_S2199C2[] = {
  NSPAIR(_ZN7S2199C2C1Ev),
  NSPAIR(_ZN7S2199C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2199C4;
extern VTBL_ENTRY _ZTI7S2199C4[];
extern  VTBL_ENTRY _ZTV7S2199C4[];
extern Class_Descriptor cd_S2199C3;
extern VTBL_ENTRY _ZTI7S2199C3[];
extern  VTBL_ENTRY _ZTV7S2199C3[];
static Base_Class bases_S2199C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2199C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2199C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2199C2[];
extern void _ZN7S2199C2D1Ev();
extern void _ZN7S2199C2D0Ev();
extern void _ZN7S2199C42v3Ev();
extern void _ZN7S2199C42v4Ev();
extern void _ZN7S2199C42v5Ev();
extern void _ZN7S2199C42v6Ev();
extern void _ZN7S2199C32v7Ev();
extern void _ZN7S2199C32v8Ev();
extern void _ZN7S2199C32v9Ev();
extern void _ZN7S2199C23v10Ev();
extern void _ZN7S2199C23v11Ev();
extern void _ZN7S2199C23v12Ev();
static  VTBL_ENTRY vtc_S2199C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2199C2[0]),
  (VTBL_ENTRY)&_ZN7S2199C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2199C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2199C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2199C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2199C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2199C2[];
extern  VTBL_ENTRY _ZTV7S2199C2[];
Class_Descriptor cd_S2199C2 = {  "S2199C2", // class name
  bases_S2199C2, 2,
  &(vtc_S2199C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2199C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2199C2),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  S2199C5_nt  {
  long s2199c5f0;
  void *s2199c5f1;
  void  mf2199c5(); // _ZN10S2199C5_nt8mf2199c5Ev
};
//SIG(-1 S2199C5_nt) C1{ m Fl Fp}


void  S2199C5_nt ::mf2199c5(){}

//skip512 S2199C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2199C1  : S2199C2 {
  int s2199c1f0[9];
  ::S2199C5_nt s2199c1f1;
  int s2199c1f2[2];
  ::S2200C6 s2199c1f3;
  int s2199c1f4[6];
  char s2199c1f5[2];
  int s2199c1f6;
  virtual  ~S2199C1(); // _ZN7S2199C1D1Ev
  virtual void  v1(); // _ZN7S2199C12v1Ev
  virtual void  v2(); // _ZN7S2199C12v2Ev
  S2199C1(); // tgen
};
//SIG(1 S2199C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 v6 Fp Fc Fi[4] Fp} vd v7 v8 v9 Fi[3]} vd v10 v11 v12 Fi[3]} vd v1 v2 Fi[9] FC5{ m Fl Fp} Fi[2] FC6{ BC7{ vd v14} vd v13 Fi[2]} Fi[6] Fc[2] Fi}


 S2199C1 ::~S2199C1(){ note_dtor("S2199C1", this);}
void  S2199C1 ::v1(){vfunc_called(this, "_ZN7S2199C12v1Ev");}
void  S2199C1 ::v2(){vfunc_called(this, "_ZN7S2199C12v2Ev");}
S2199C1 ::S2199C1(){ note_ctor("S2199C1", this);} // tgen

static void Test_S2199C1()
{
  extern Class_Descriptor cd_S2199C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,39)];
    init_test(&cd_S2199C1, buf);
    S2199C1 *dp, &lv = *(dp=new (buf) S2199C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,152), "sizeof(S2199C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2199C1)");
    check_base_class_offset(lv, (S2199C4*)(S2199C3*)(S2199C2*), 0, "S2199C1");
    check_base_class_offset(lv, (S2199C3*)(S2199C2*), 0, "S2199C1");
    check_base_class_offset(lv, (S2199C2*), 0, "S2199C1");
    check_field_offset(lv, s2199c1f0, ABISELECT(72,56), "S2199C1.s2199c1f0");
    check_field_offset(lv, s2199c1f1, ABISELECT(112,92), "S2199C1.s2199c1f1");
    check_field_offset(lv, s2199c1f2, ABISELECT(128,100), "S2199C1.s2199c1f2");
    check_field_offset(lv, s2199c1f3, ABISELECT(136,108), "S2199C1.s2199c1f3");
    check_field_offset(lv, s2199c1f4, ABISELECT(152,120), "S2199C1.s2199c1f4");
    check_field_offset(lv, s2199c1f5, ABISELECT(176,144), "S2199C1.s2199c1f5");
    check_field_offset(lv, s2199c1f6, ABISELECT(180,148), "S2199C1.s2199c1f6");
    test_class_info(&lv, &cd_S2199C1);
    dp->~S2199C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2199C1(Test_S2199C1, "S2199C1", ABISELECT(184,152));

#else // __cplusplus

extern void _ZN7S2199C1C1Ev();
extern void _ZN7S2199C1D1Ev();
Name_Map name_map_S2199C1[] = {
  NSPAIR(_ZN7S2199C1C1Ev),
  NSPAIR(_ZN7S2199C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2199C4;
extern VTBL_ENTRY _ZTI7S2199C4[];
extern  VTBL_ENTRY _ZTV7S2199C4[];
extern Class_Descriptor cd_S2199C3;
extern VTBL_ENTRY _ZTI7S2199C3[];
extern  VTBL_ENTRY _ZTV7S2199C3[];
extern Class_Descriptor cd_S2199C2;
extern VTBL_ENTRY _ZTI7S2199C2[];
extern  VTBL_ENTRY _ZTV7S2199C2[];
static Base_Class bases_S2199C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2199C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2199C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2199C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2199C1[];
extern void _ZN7S2199C1D1Ev();
extern void _ZN7S2199C1D0Ev();
extern void _ZN7S2199C42v3Ev();
extern void _ZN7S2199C42v4Ev();
extern void _ZN7S2199C42v5Ev();
extern void _ZN7S2199C42v6Ev();
extern void _ZN7S2199C32v7Ev();
extern void _ZN7S2199C32v8Ev();
extern void _ZN7S2199C32v9Ev();
extern void _ZN7S2199C23v10Ev();
extern void _ZN7S2199C23v11Ev();
extern void _ZN7S2199C23v12Ev();
extern void _ZN7S2199C12v1Ev();
extern void _ZN7S2199C12v2Ev();
static  VTBL_ENTRY vtc_S2199C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2199C1[0]),
  (VTBL_ENTRY)&_ZN7S2199C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2199C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2199C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2199C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2199C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2199C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2199C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2199C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2199C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2199C1[];
extern  VTBL_ENTRY _ZTV7S2199C1[];
Class_Descriptor cd_S2199C1 = {  "S2199C1", // class name
  bases_S2199C1, 3,
  &(vtc_S2199C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,152), // object size
  NSPAIRA(_ZTI7S2199C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2199C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19311C3  {
  virtual void  v2(); // _ZN8S19311C32v2Ev
  virtual void  v3(); // _ZN8S19311C32v3Ev
  virtual void  v4(); // _ZN8S19311C32v4Ev
  ~S19311C3(); // tgen
  S19311C3(); // tgen
};
//SIG(-1 S19311C3) C1{ v1 v2 v3}


void  S19311C3 ::v2(){vfunc_called(this, "_ZN8S19311C32v2Ev");}
void  S19311C3 ::v3(){vfunc_called(this, "_ZN8S19311C32v3Ev");}
void  S19311C3 ::v4(){vfunc_called(this, "_ZN8S19311C32v4Ev");}
S19311C3 ::~S19311C3(){ note_dtor("S19311C3", this);} // tgen
S19311C3 ::S19311C3(){ note_ctor("S19311C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19311C3C1Ev();
extern void _ZN8S19311C3D1Ev();
Name_Map name_map_S19311C3[] = {
  NSPAIR(_ZN8S19311C3C1Ev),
  NSPAIR(_ZN8S19311C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19311C3[];
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
static  VTBL_ENTRY vtc_S19311C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C3[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
Class_Descriptor cd_S19311C3 = {  "S19311C3", // class name
  0,0,//no base classes
  &(vtc_S19311C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19311C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19311C3),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  S19311C2  : S19311C3 {
  virtual void  v5(); // _ZN8S19311C22v5Ev
  ~S19311C2(); // tgen
  S19311C2(); // tgen
};
//SIG(-1 S19311C2) C1{ BC2{ v2 v3 v4} v1}


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

static void Test_S19311C2()
{
  extern Class_Descriptor cd_S19311C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19311C2, buf);
    S19311C2 *dp, &lv = *(dp=new (buf) S19311C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19311C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19311C2)");
    check_base_class_offset(lv, (S19311C3*), 0, "S19311C2");
    test_class_info(&lv, &cd_S19311C2);
    dp->~S19311C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19311C2(Test_S19311C2, "S19311C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19311C2C1Ev();
extern void _ZN8S19311C2D1Ev();
Name_Map name_map_S19311C2[] = {
  NSPAIR(_ZN8S19311C2C1Ev),
  NSPAIR(_ZN8S19311C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
static Base_Class bases_S19311C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19311C2[];
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
static  VTBL_ENTRY vtc_S19311C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C2[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S19311C2[];
extern  VTBL_ENTRY _ZTV8S19311C2[];
Class_Descriptor cd_S19311C2 = {  "S19311C2", // class name
  bases_S19311C2, 1,
  &(vtc_S19311C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19311C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19311C2),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  S19311C5  : virtual S19311C3 , virtual S19311C2 {
  void *s19311c5f0;
  short s19311c5f1;
  int s19311c5f2;
  ~S19311C5(); // tgen
  S19311C5(); // tgen
};
//SIG(-1 S19311C5) C1{ VBC2{ v1 v2 v3} VBC3{ BC2 v4} Fp Fs Fi}


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

static void Test_S19311C5()
{
  extern Class_Descriptor cd_S19311C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19311C5, buf);
    S19311C5 *dp, &lv = *(dp=new (buf) S19311C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19311C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19311C5)");
    /*is_ambiguous_... S19311C5::S19311C3 */ AMB_check_base_class_offset(lv, (S19311C3*), 0, "S19311C5");
    check_base_class_offset(lv, (S19311C3*)(S19311C2*), ABISELECT(24,16), "S19311C5");
    check_base_class_offset(lv, (S19311C2*), ABISELECT(24,16), "S19311C5");
    check_field_offset(lv, s19311c5f0, ABISELECT(8,4), "S19311C5.s19311c5f0");
    check_field_offset(lv, s19311c5f1, ABISELECT(16,8), "S19311C5.s19311c5f1");
    check_field_offset(lv, s19311c5f2, ABISELECT(20,12), "S19311C5.s19311c5f2");
    test_class_info(&lv, &cd_S19311C5);
    dp->~S19311C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19311C5(Test_S19311C5, "S19311C5", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19311C5C1Ev();
extern void _ZN8S19311C5D1Ev();
Name_Map name_map_S19311C5[] = {
  NSPAIR(_ZN8S19311C5C1Ev),
  NSPAIR(_ZN8S19311C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C2;
extern VTBL_ENTRY _ZTI8S19311C2[];
extern  VTBL_ENTRY _ZTV8S19311C2[];
static Base_Class bases_S19311C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19311C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19311C2,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19311C5[];
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
static  VTBL_ENTRY vtc_S19311C5[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C5[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19311C5[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S19311C5[];
static  VTT_ENTRY vtt_S19311C5[] = {
  {&(_ZTV8S19311C5[7]),  7,20},
  {&(_ZTV8S19311C5[7]),  7,20},
  {&(_ZTV8S19311C5[16]),  16,20},
};
extern VTBL_ENTRY _ZTI8S19311C5[];
extern  VTBL_ENTRY _ZTV8S19311C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19311C5[];
Class_Descriptor cd_S19311C5 = {  "S19311C5", // class name
  bases_S19311C5, 3,
  &(vtc_S19311C5[0]), // expected_vtbl_contents
  &(vtt_S19311C5[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19311C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19311C5),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19311C5),3, //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  S19311C4  : virtual S19311C3 , virtual S19311C5 , S19311C2 {
  short s19311c4f0;
  long double s19311c4f1;
  virtual void  v6(); // _ZN8S19311C42v6Ev
  virtual void  v7(); // _ZN8S19311C42v7Ev
  virtual void  v8(); // _ZN8S19311C42v8Ev
  virtual void  v9(); // _ZN8S19311C42v9Ev
  ~S19311C4(); // tgen
  S19311C4(); // tgen
};
//SIG(-1 S19311C4) C1{ VBC2{ v5 v6 v7} VBC3{ VBC2 VBC4{ BC2 v8} Fp Fs Fi} BC4 v1 v2 v3 v4 Fs FD}


void  S19311C4 ::v6(){vfunc_called(this, "_ZN8S19311C42v6Ev");}
void  S19311C4 ::v7(){vfunc_called(this, "_ZN8S19311C42v7Ev");}
void  S19311C4 ::v8(){vfunc_called(this, "_ZN8S19311C42v8Ev");}
void  S19311C4 ::v9(){vfunc_called(this, "_ZN8S19311C42v9Ev");}
S19311C4 ::~S19311C4(){ note_dtor("S19311C4", this);} // tgen
S19311C4 ::S19311C4(){ note_ctor("S19311C4", this);} // tgen

static void Test_S19311C4()
{
  extern Class_Descriptor cd_S19311C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S19311C4, buf);
    S19311C4 *dp, &lv = *(dp=new (buf) S19311C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S19311C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19311C4)");
    /*is_ambiguous_... S19311C4::S19311C3 */ AMB_check_base_class_offset(lv, (S19311C3*), ABISELECT(32,20), "S19311C4");
    /*is_ambiguous_... S19311C5::S19311C3 */ AMB_check_base_class_offset(lv, (S19311C3*)(S19311C5*), ABISELECT(32,20), "S19311C4");
    /*is_ambiguous_... S19311C4::S19311C2 */ AMB_check_base_class_offset(lv, (S19311C3*)(S19311C2*), ABISELECT(56,36), "S19311C4");
    check_base_class_offset(lv, (S19311C2*)(S19311C5*), ABISELECT(56,36), "S19311C4");
    check_base_class_offset(lv, (S19311C5*), ABISELECT(32,20), "S19311C4");
    /*is_ambiguous_... S19311C4::S19311C2 */ AMB_check_base_class_offset(lv, (S19311C3*)(S19311C2*), 0, "S19311C4");
    /*is_ambiguous_... S19311C4::S19311C2 */ AMB_check_base_class_offset(lv, (S19311C2*), 0, "S19311C4");
    check_field_offset(lv, s19311c4f0, ABISELECT(8,4), "S19311C4.s19311c4f0");
    check_field_offset(lv, s19311c4f1, ABISELECT(16,8), "S19311C4.s19311c4f1");
    test_class_info(&lv, &cd_S19311C4);
    dp->~S19311C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19311C4(Test_S19311C4, "S19311C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S19311C4C1Ev();
extern void _ZN8S19311C4D1Ev();
Name_Map name_map_S19311C4[] = {
  NSPAIR(_ZN8S19311C4C1Ev),
  NSPAIR(_ZN8S19311C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C2;
extern VTBL_ENTRY _ZTI8S19311C2[];
extern  VTBL_ENTRY _ZTV8S19311C2[];
extern Class_Descriptor cd_S19311C5;
extern VTBL_ENTRY _ZTI8S19311C5[];
extern  VTBL_ENTRY _ZTV8S19311C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19311C5[];
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C2;
extern VTBL_ENTRY _ZTI8S19311C2[];
extern  VTBL_ENTRY _ZTV8S19311C2[];
static Base_Class bases_S19311C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19311C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19311C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19311C2,    ABISELECT(56,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19311C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19311C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19311C4[];
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
extern void _ZN8S19311C42v6Ev();
extern void _ZN8S19311C42v7Ev();
extern void _ZN8S19311C42v8Ev();
extern void _ZN8S19311C42v9Ev();
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
static  VTBL_ENTRY vtc_S19311C4[] = {
  ABISELECT(56,36),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C4[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v9Ev,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19311C4[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19311C4[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S19311C4[];
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19311C5__8S19311C4[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C5[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
};
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19311C2__8S19311C5__8S19311C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19311C5[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
};
static  VTT_ENTRY vtt_S19311C4[] = {
  {&(_ZTV8S19311C4[5]),  5,33},
  {&(_ZTV8S19311C4[20]),  20,33},
  {&(_ZTV8S19311C4[20]),  20,33},
  {&(_ZTV8S19311C4[29]),  29,33},
  {&(_tg__ZTV8S19311C5__8S19311C4[7]),  7,10},
  {&(_tg__ZTV8S19311C5__8S19311C4[7]),  7,10},
  {&(_tg__ZTV8S19311C2__8S19311C5__8S19311C4[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19311C4[];
extern  VTBL_ENTRY _ZTV8S19311C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19311C4[];
Class_Descriptor cd_S19311C4 = {  "S19311C4", // class name
  bases_S19311C4, 6,
  &(vtc_S19311C4[0]), // expected_vtbl_contents
  &(vtt_S19311C4[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S19311C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19311C4),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19311C4),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19311C6  {
  void *s19311c6f0[5];
  virtual void  v10(); // _ZN8S19311C63v10Ev
  virtual void  v11(); // _ZN8S19311C63v11Ev
  virtual void  v12(); // _ZN8S19311C63v12Ev
  virtual void  v13(); // _ZN8S19311C63v13Ev
  virtual void  v14(); // _ZN8S19311C63v14Ev
  virtual void  v15(); // _ZN8S19311C63v15Ev
  virtual void  v16(); // _ZN8S19311C63v16Ev
  virtual void  v17(); // _ZN8S19311C63v17Ev
  virtual void  v18(); // _ZN8S19311C63v18Ev
  ~S19311C6(); // tgen
  S19311C6(); // tgen
};
//SIG(-1 S19311C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S19311C6 ::v10(){vfunc_called(this, "_ZN8S19311C63v10Ev");}
void  S19311C6 ::v11(){vfunc_called(this, "_ZN8S19311C63v11Ev");}
void  S19311C6 ::v12(){vfunc_called(this, "_ZN8S19311C63v12Ev");}
void  S19311C6 ::v13(){vfunc_called(this, "_ZN8S19311C63v13Ev");}
void  S19311C6 ::v14(){vfunc_called(this, "_ZN8S19311C63v14Ev");}
void  S19311C6 ::v15(){vfunc_called(this, "_ZN8S19311C63v15Ev");}
void  S19311C6 ::v16(){vfunc_called(this, "_ZN8S19311C63v16Ev");}
void  S19311C6 ::v17(){vfunc_called(this, "_ZN8S19311C63v17Ev");}
void  S19311C6 ::v18(){vfunc_called(this, "_ZN8S19311C63v18Ev");}
S19311C6 ::~S19311C6(){ note_dtor("S19311C6", this);} // tgen
S19311C6 ::S19311C6(){ note_ctor("S19311C6", this);} // tgen

static void Test_S19311C6()
{
  extern Class_Descriptor cd_S19311C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19311C6, buf);
    S19311C6 *dp, &lv = *(dp=new (buf) S19311C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19311C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19311C6)");
    check_field_offset(lv, s19311c6f0, ABISELECT(8,4), "S19311C6.s19311c6f0");
    test_class_info(&lv, &cd_S19311C6);
    dp->~S19311C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19311C6(Test_S19311C6, "S19311C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19311C6C1Ev();
extern void _ZN8S19311C6D1Ev();
Name_Map name_map_S19311C6[] = {
  NSPAIR(_ZN8S19311C6C1Ev),
  NSPAIR(_ZN8S19311C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19311C6[];
extern void _ZN8S19311C63v10Ev();
extern void _ZN8S19311C63v11Ev();
extern void _ZN8S19311C63v12Ev();
extern void _ZN8S19311C63v13Ev();
extern void _ZN8S19311C63v14Ev();
extern void _ZN8S19311C63v15Ev();
extern void _ZN8S19311C63v16Ev();
extern void _ZN8S19311C63v17Ev();
extern void _ZN8S19311C63v18Ev();
static  VTBL_ENTRY vtc_S19311C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C6[0]),
  (VTBL_ENTRY)&_ZN8S19311C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v18Ev,
};
extern VTBL_ENTRY _ZTI8S19311C6[];
extern  VTBL_ENTRY _ZTV8S19311C6[];
Class_Descriptor cd_S19311C6 = {  "S19311C6", // class name
  0,0,//no base classes
  &(vtc_S19311C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19311C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19311C6),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  S19311C7  {
  virtual  ~S19311C7(); // _ZN8S19311C7D1Ev
  virtual void  v19(); // _ZN8S19311C73v19Ev
  virtual void  v20(); // _ZN8S19311C73v20Ev
  virtual void  v21(); // _ZN8S19311C73v21Ev
  virtual void  v22(); // _ZN8S19311C73v22Ev
  S19311C7(); // tgen
};
//SIG(-1 S19311C7) C1{ vd v1 v2 v3 v4}


 S19311C7 ::~S19311C7(){ note_dtor("S19311C7", this);}
void  S19311C7 ::v19(){vfunc_called(this, "_ZN8S19311C73v19Ev");}
void  S19311C7 ::v20(){vfunc_called(this, "_ZN8S19311C73v20Ev");}
void  S19311C7 ::v21(){vfunc_called(this, "_ZN8S19311C73v21Ev");}
void  S19311C7 ::v22(){vfunc_called(this, "_ZN8S19311C73v22Ev");}
S19311C7 ::S19311C7(){ note_ctor("S19311C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19311C7C1Ev();
extern void _ZN8S19311C7D1Ev();
Name_Map name_map_S19311C7[] = {
  NSPAIR(_ZN8S19311C7C1Ev),
  NSPAIR(_ZN8S19311C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19311C7[];
extern void _ZN8S19311C7D1Ev();
extern void _ZN8S19311C7D0Ev();
extern void _ZN8S19311C73v19Ev();
extern void _ZN8S19311C73v20Ev();
extern void _ZN8S19311C73v21Ev();
extern void _ZN8S19311C73v22Ev();
static  VTBL_ENTRY vtc_S19311C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C7[0]),
  (VTBL_ENTRY)&_ZN8S19311C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19311C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19311C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19311C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19311C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19311C73v22Ev,
};
extern VTBL_ENTRY _ZTI8S19311C7[];
extern  VTBL_ENTRY _ZTV8S19311C7[];
Class_Descriptor cd_S19311C7 = {  "S19311C7", // class name
  0,0,//no base classes
  &(vtc_S19311C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19311C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19311C7),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  S19311C1  : virtual S19311C2 , virtual S19311C4 , S19311C6 , virtual S19311C7 {
  long s19311c1f0;
  virtual  ~S19311C1(); // _ZN8S19311C1D2Ev
  virtual void  v1(); // _ZN8S19311C12v1Ev
  S19311C1(); // tgen
};
//SIG(1 S19311C1) C1{ VBC2{ BC3{ v2 v3 v4} v5} VBC4{ VBC3 VBC5{ VBC3 VBC2 Fp Fs Fi} BC2 v6 v7 v8 v9 Fs FD} BC6{ v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5]} VBC7{ vd v19 v20 v21 v22} vd v1 Fl}


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

static void Test_S19311C1()
{
  extern Class_Descriptor cd_S19311C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,19)];
    init_test(&cd_S19311C1, buf);
    S19311C1 *dp, &lv = *(dp=new (buf) S19311C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S19311C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19311C1)");
    /*is_ambiguous_... S19311C1::S19311C2 */ AMB_check_base_class_offset(lv, (S19311C3*)(S19311C2*), ABISELECT(56,28), "S19311C1");
    /*is_ambiguous_... S19311C1::S19311C2 */ AMB_check_base_class_offset(lv, (S19311C2*), ABISELECT(56,28), "S19311C1");
    check_base_class_offset(lv, (S19311C2*)(S19311C5*), ABISELECT(56,28), "S19311C1");
    /*is_ambiguous_... S19311C4::S19311C3 */ AMB_check_base_class_offset(lv, (S19311C3*)(S19311C4*), ABISELECT(96,52), "S19311C1");
    /*is_ambiguous_... S19311C5::S19311C3 */ AMB_check_base_class_offset(lv, (S19311C3*)(S19311C5*), ABISELECT(96,52), "S19311C1");
    check_base_class_offset(lv, (S19311C5*)(S19311C4*), ABISELECT(96,52), "S19311C1");
    /*is_ambiguous_... S19311C4::S19311C2 */ AMB_check_base_class_offset(lv, (S19311C3*)(S19311C2*)(S19311C4*), ABISELECT(64,32), "S19311C1");
    /*is_ambiguous_... S19311C4::S19311C2 */ AMB_check_base_class_offset(lv, (S19311C2*)(S19311C4*), ABISELECT(64,32), "S19311C1");
    check_base_class_offset(lv, (S19311C4*), ABISELECT(64,32), "S19311C1");
    check_base_class_offset(lv, (S19311C6*), 0, "S19311C1");
    check_base_class_offset(lv, (S19311C7*), ABISELECT(120,68), "S19311C1");
    check_field_offset(lv, s19311c1f0, ABISELECT(48,24), "S19311C1.s19311c1f0");
    test_class_info(&lv, &cd_S19311C1);
    dp->~S19311C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19311C1(Test_S19311C1, "S19311C1", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN8S19311C1C1Ev();
extern void _ZN8S19311C1D2Ev();
Name_Map name_map_S19311C1[] = {
  NSPAIR(_ZN8S19311C1C1Ev),
  NSPAIR(_ZN8S19311C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C2;
extern VTBL_ENTRY _ZTI8S19311C2[];
extern  VTBL_ENTRY _ZTV8S19311C2[];
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C5;
extern VTBL_ENTRY _ZTI8S19311C5[];
extern  VTBL_ENTRY _ZTV8S19311C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19311C5[];
extern Class_Descriptor cd_S19311C3;
extern VTBL_ENTRY _ZTI8S19311C3[];
extern  VTBL_ENTRY _ZTV8S19311C3[];
extern Class_Descriptor cd_S19311C2;
extern VTBL_ENTRY _ZTI8S19311C2[];
extern  VTBL_ENTRY _ZTV8S19311C2[];
extern Class_Descriptor cd_S19311C4;
extern VTBL_ENTRY _ZTI8S19311C4[];
extern  VTBL_ENTRY _ZTV8S19311C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19311C4[];
extern Class_Descriptor cd_S19311C6;
extern VTBL_ENTRY _ZTI8S19311C6[];
extern  VTBL_ENTRY _ZTV8S19311C6[];
extern Class_Descriptor cd_S19311C7;
extern VTBL_ENTRY _ZTI8S19311C7[];
extern  VTBL_ENTRY _ZTV8S19311C7[];
static Base_Class bases_S19311C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19311C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19311C2,    ABISELECT(56,28), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19311C3,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19311C5,    ABISELECT(96,52), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19311C3,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19311C2,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19311C4,    ABISELECT(64,32), //bcp->offset
    29, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19311C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19311C7,    ABISELECT(120,68), //bcp->offset
    60, //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
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19311C1[];
extern void _ZN8S19311C63v10Ev();
extern void _ZN8S19311C63v11Ev();
extern void _ZN8S19311C63v12Ev();
extern void _ZN8S19311C63v13Ev();
extern void _ZN8S19311C63v14Ev();
extern void _ZN8S19311C63v15Ev();
extern void _ZN8S19311C63v16Ev();
extern void _ZN8S19311C63v17Ev();
extern void _ZN8S19311C63v18Ev();
extern void _ZN8S19311C1D1Ev();
extern void _ZN8S19311C1D0Ev();
extern void _ZN8S19311C12v1Ev();
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
extern void _ZN8S19311C42v6Ev();
extern void _ZN8S19311C42v7Ev();
extern void _ZN8S19311C42v8Ev();
extern void _ZN8S19311C42v9Ev();
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19311C1D1Ev,_ZTv0_n12_N8S19311C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S19311C1D1Ev,_ZThn68_N8S19311C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19311C1D0Ev,_ZTv0_n12_N8S19311C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S19311C1D0Ev,_ZThn68_N8S19311C1D0Ev)() __attribute__((weak));
extern void _ZN8S19311C73v19Ev();
extern void _ZN8S19311C73v20Ev();
extern void _ZN8S19311C73v21Ev();
extern void _ZN8S19311C73v22Ev();
static  VTBL_ENTRY vtc_S19311C1[] = {
  ABISELECT(120,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C1[0]),
  (VTBL_ENTRY)&_ZN8S19311C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19311C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19311C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19311C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19311C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19311C1[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19311C1[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v9Ev,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19311C1[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S19311C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19311C1D1Ev,_ZTv0_n12_N8S19311C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19311C1D0Ev,_ZTv0_n12_N8S19311C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19311C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19311C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19311C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19311C73v22Ev,
};
extern VTBL_ENTRY _ZTV8S19311C1[];
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
extern void _ZN8S19311C42v6Ev();
extern void _ZN8S19311C42v7Ev();
extern void _ZN8S19311C42v8Ev();
extern void _ZN8S19311C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19311C4__8S19311C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C4[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19311C42v9Ev,
};
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19311C5__8S19311C4__8S19311C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19311C4[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
};
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19311C2__8S19311C4__8S19311C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19311C4[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
};
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19311C5__8S19311C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19311C5[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
};
extern void _ZN8S19311C32v2Ev();
extern void _ZN8S19311C32v3Ev();
extern void _ZN8S19311C32v4Ev();
extern void _ZN8S19311C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19311C2__8S19311C5__8S19311C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19311C5[0]),
  (VTBL_ENTRY)&_ZN8S19311C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19311C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19311C22v5Ev,
};
static  VTT_ENTRY vtt_S19311C1[] = {
  {&(_ZTV8S19311C1[7]),  7,73},
  {&(_ZTV8S19311C1[25]),  25,73},
  {&(_ZTV8S19311C1[42]),  42,73},
  {&(_ZTV8S19311C1[57]),  57,73},
  {&(_ZTV8S19311C1[57]),  57,73},
  {&(_ZTV8S19311C1[67]),  67,73},
  {&(_tg__ZTV8S19311C4__8S19311C1[5]),  5,13},
  {&(_tg__ZTV8S19311C5__8S19311C4__8S19311C1[7]),  7,10},
  {&(_tg__ZTV8S19311C5__8S19311C4__8S19311C1[7]),  7,10},
  {&(_tg__ZTV8S19311C2__8S19311C4__8S19311C1[6]),  6,10},
  {&(_tg__ZTV8S19311C5__8S19311C1[7]),  7,10},
  {&(_tg__ZTV8S19311C5__8S19311C1[7]),  7,10},
  {&(_tg__ZTV8S19311C2__8S19311C5__8S19311C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19311C1[];
extern  VTBL_ENTRY _ZTV8S19311C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19311C1[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19311C1D0Ev,_ZTv0_n12_N8S19311C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19311C1D0Ev,_ZThn68_N8S19311C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19311C1D1Ev,_ZTv0_n12_N8S19311C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19311C1D1Ev,_ZThn68_N8S19311C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19311C1 = {  "S19311C1", // class name
  bases_S19311C1, 9,
  &(vtc_S19311C1[0]), // expected_vtbl_contents
  &(vtt_S19311C1[0]), // expected_vtt_contents
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI8S19311C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19311C1),73, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19311C1),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5363C3  {
  char s5363c3f0;
  int s5363c3f1;
  virtual  ~S5363C3(); // _ZN7S5363C3D1Ev
  virtual void  v7(); // _ZN7S5363C32v7Ev
  S5363C3(); // tgen
};
//SIG(-1 S5363C3) C1{ vd v1 Fc Fi}


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

static void Test_S5363C3()
{
  extern Class_Descriptor cd_S5363C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5363C3, buf);
    S5363C3 *dp, &lv = *(dp=new (buf) S5363C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5363C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5363C3)");
    check_field_offset(lv, s5363c3f0, ABISELECT(8,4), "S5363C3.s5363c3f0");
    check_field_offset(lv, s5363c3f1, ABISELECT(12,8), "S5363C3.s5363c3f1");
    test_class_info(&lv, &cd_S5363C3);
    dp->~S5363C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5363C3(Test_S5363C3, "S5363C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S5363C3C1Ev();
extern void _ZN7S5363C3D1Ev();
Name_Map name_map_S5363C3[] = {
  NSPAIR(_ZN7S5363C3C1Ev),
  NSPAIR(_ZN7S5363C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5363C3[];
extern void _ZN7S5363C3D1Ev();
extern void _ZN7S5363C3D0Ev();
extern void _ZN7S5363C32v7Ev();
static  VTBL_ENTRY vtc_S5363C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5363C3[0]),
  (VTBL_ENTRY)&_ZN7S5363C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5363C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5363C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5363C3[];
extern  VTBL_ENTRY _ZTV7S5363C3[];
Class_Descriptor cd_S5363C3 = {  "S5363C3", // class name
  0,0,//no base classes
  &(vtc_S5363C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S5363C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5363C3),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  S5363C2  : S5363C3 {
  int s5363c2f0[2];
  char s5363c2f1;
  ::S2432C5_nt s5363c2f2;
  ::S2432C6 s5363c2f3;
  virtual  ~S5363C2(); // _ZN7S5363C2D1Ev
  virtual void  v8(); // _ZN7S5363C22v8Ev
  S5363C2(); // tgen
};
//SIG(-1 S5363C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ FL[4]}}}


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

static void Test_S5363C2()
{
  extern Class_Descriptor cd_S5363C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S5363C2, buf);
    S5363C2 *dp, &lv = *(dp=new (buf) S5363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S5363C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5363C2)");
    check_base_class_offset(lv, (S5363C3*), 0, "S5363C2");
    check_field_offset(lv, s5363c2f0, ABISELECT(16,12), "S5363C2.s5363c2f0");
    check_field_offset(lv, s5363c2f1, ABISELECT(24,20), "S5363C2.s5363c2f1");
    check_field_offset(lv, s5363c2f2, ABISELECT(32,24), "S5363C2.s5363c2f2");
    check_field_offset(lv, s5363c2f3, ABISELECT(40,28), "S5363C2.s5363c2f3");
    test_class_info(&lv, &cd_S5363C2);
    dp->~S5363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5363C2(Test_S5363C2, "S5363C2", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S5363C2C1Ev();
extern void _ZN7S5363C2D1Ev();
Name_Map name_map_S5363C2[] = {
  NSPAIR(_ZN7S5363C2C1Ev),
  NSPAIR(_ZN7S5363C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5363C3;
extern VTBL_ENTRY _ZTI7S5363C3[];
extern  VTBL_ENTRY _ZTV7S5363C3[];
static Base_Class bases_S5363C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5363C2[];
extern void _ZN7S5363C2D1Ev();
extern void _ZN7S5363C2D0Ev();
extern void _ZN7S5363C32v7Ev();
extern void _ZN7S5363C22v8Ev();
static  VTBL_ENTRY vtc_S5363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5363C2[0]),
  (VTBL_ENTRY)&_ZN7S5363C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5363C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5363C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5363C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5363C2[];
extern  VTBL_ENTRY _ZTV7S5363C2[];
Class_Descriptor cd_S5363C2 = {  "S5363C2", // class name
  bases_S5363C2, 1,
  &(vtc_S5363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S5363C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5363C2),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  S5363C7  {
  virtual  ~S5363C7(); // _ZN7S5363C7D1Ev
  virtual void  v9(); // _ZN7S5363C72v9Ev
  virtual void  v10(); // _ZN7S5363C73v10Ev
  virtual void  v11(); // _ZN7S5363C73v11Ev
  virtual void  v12(); // _ZN7S5363C73v12Ev
  virtual void  v13(); // _ZN7S5363C73v13Ev
  S5363C7(); // tgen
};
//SIG(-1 S5363C7) C1{ vd v1 v2 v3 v4 v5}


 S5363C7 ::~S5363C7(){ note_dtor("S5363C7", this);}
void  S5363C7 ::v9(){vfunc_called(this, "_ZN7S5363C72v9Ev");}
void  S5363C7 ::v10(){vfunc_called(this, "_ZN7S5363C73v10Ev");}
void  S5363C7 ::v11(){vfunc_called(this, "_ZN7S5363C73v11Ev");}
void  S5363C7 ::v12(){vfunc_called(this, "_ZN7S5363C73v12Ev");}
void  S5363C7 ::v13(){vfunc_called(this, "_ZN7S5363C73v13Ev");}
S5363C7 ::S5363C7(){ note_ctor("S5363C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5363C7C1Ev();
extern void _ZN7S5363C7D1Ev();
Name_Map name_map_S5363C7[] = {
  NSPAIR(_ZN7S5363C7C1Ev),
  NSPAIR(_ZN7S5363C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5363C7[];
extern void _ZN7S5363C7D1Ev();
extern void _ZN7S5363C7D0Ev();
extern void _ZN7S5363C72v9Ev();
extern void _ZN7S5363C73v10Ev();
extern void _ZN7S5363C73v11Ev();
extern void _ZN7S5363C73v12Ev();
extern void _ZN7S5363C73v13Ev();
static  VTBL_ENTRY vtc_S5363C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5363C7[0]),
  (VTBL_ENTRY)&_ZN7S5363C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5363C7D0Ev,
  (VTBL_ENTRY)&_ZN7S5363C72v9Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v10Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v11Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v12Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v13Ev,
};
extern VTBL_ENTRY _ZTI7S5363C7[];
extern  VTBL_ENTRY _ZTV7S5363C7[];
Class_Descriptor cd_S5363C7 = {  "S5363C7", // class name
  0,0,//no base classes
  &(vtc_S5363C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5363C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5363C7),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5363C1  : S5363C2 , S5363C7 {
  char s5363c1f0;
  void *s5363c1f1[5];
  char s5363c1f2;
  int s5363c1f3[4];
  void *s5363c1f4[2];
  int s5363c1f5[2];
  void *s5363c1f6;
  int s5363c1f7;
  virtual  ~S5363C1(); // _ZN7S5363C1D1Ev
  virtual void  v1(); // _ZN7S5363C12v1Ev
  virtual void  v2(); // _ZN7S5363C12v2Ev
  virtual void  v3(); // _ZN7S5363C12v3Ev
  virtual void  v4(); // _ZN7S5363C12v4Ev
  virtual void  v5(); // _ZN7S5363C12v5Ev
  virtual void  v6(); // _ZN7S5363C12v6Ev
  S5363C1(); // tgen
};
//SIG(1 S5363C1) C1{ BC2{ BC3{ vd v7 Fc Fi} vd v8 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v16 Fc Fi} vd v14 v15 FC7{ FL[4]}}} BC8{ vd v9 v10 v11 v12 v13} vd v1 v2 v3 v4 v5 v6 Fc Fp[5] Fc Fi[4] Fp[2] Fi[2] Fp Fi}


 S5363C1 ::~S5363C1(){ note_dtor("S5363C1", this);}
void  S5363C1 ::v1(){vfunc_called(this, "_ZN7S5363C12v1Ev");}
void  S5363C1 ::v2(){vfunc_called(this, "_ZN7S5363C12v2Ev");}
void  S5363C1 ::v3(){vfunc_called(this, "_ZN7S5363C12v3Ev");}
void  S5363C1 ::v4(){vfunc_called(this, "_ZN7S5363C12v4Ev");}
void  S5363C1 ::v5(){vfunc_called(this, "_ZN7S5363C12v5Ev");}
void  S5363C1 ::v6(){vfunc_called(this, "_ZN7S5363C12v6Ev");}
S5363C1 ::S5363C1(){ note_ctor("S5363C1", this);} // tgen

static void Test_S5363C1()
{
  extern Class_Descriptor cd_S5363C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S5363C1, buf);
    S5363C1 *dp, &lv = *(dp=new (buf) S5363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S5363C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5363C1)");
    check_base_class_offset(lv, (S5363C3*)(S5363C2*), 0, "S5363C1");
    check_base_class_offset(lv, (S5363C2*), 0, "S5363C1");
    check_base_class_offset(lv, (S5363C7*), ABISELECT(88,72), "S5363C1");
    check_field_offset(lv, s5363c1f0, ABISELECT(96,76), "S5363C1.s5363c1f0");
    check_field_offset(lv, s5363c1f1, ABISELECT(104,80), "S5363C1.s5363c1f1");
    check_field_offset(lv, s5363c1f2, ABISELECT(144,100), "S5363C1.s5363c1f2");
    check_field_offset(lv, s5363c1f3, ABISELECT(148,104), "S5363C1.s5363c1f3");
    check_field_offset(lv, s5363c1f4, ABISELECT(168,120), "S5363C1.s5363c1f4");
    check_field_offset(lv, s5363c1f5, ABISELECT(184,128), "S5363C1.s5363c1f5");
    check_field_offset(lv, s5363c1f6, ABISELECT(192,136), "S5363C1.s5363c1f6");
    check_field_offset(lv, s5363c1f7, ABISELECT(200,140), "S5363C1.s5363c1f7");
    test_class_info(&lv, &cd_S5363C1);
    dp->~S5363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5363C1(Test_S5363C1, "S5363C1", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN7S5363C1C1Ev();
extern void _ZN7S5363C1D1Ev();
Name_Map name_map_S5363C1[] = {
  NSPAIR(_ZN7S5363C1C1Ev),
  NSPAIR(_ZN7S5363C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5363C3;
extern VTBL_ENTRY _ZTI7S5363C3[];
extern  VTBL_ENTRY _ZTV7S5363C3[];
extern Class_Descriptor cd_S5363C2;
extern VTBL_ENTRY _ZTI7S5363C2[];
extern  VTBL_ENTRY _ZTV7S5363C2[];
extern Class_Descriptor cd_S5363C7;
extern VTBL_ENTRY _ZTI7S5363C7[];
extern  VTBL_ENTRY _ZTV7S5363C7[];
static Base_Class bases_S5363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5363C7,    ABISELECT(88,72), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5363C1[];
extern void _ZN7S5363C1D1Ev();
extern void _ZN7S5363C1D0Ev();
extern void _ZN7S5363C32v7Ev();
extern void _ZN7S5363C22v8Ev();
extern void _ZN7S5363C12v1Ev();
extern void _ZN7S5363C12v2Ev();
extern void _ZN7S5363C12v3Ev();
extern void _ZN7S5363C12v4Ev();
extern void _ZN7S5363C12v5Ev();
extern void _ZN7S5363C12v6Ev();
extern void ABISELECT(_ZThn88_N7S5363C1D1Ev,_ZThn72_N7S5363C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S5363C1D0Ev,_ZThn72_N7S5363C1D0Ev)();
extern void _ZN7S5363C72v9Ev();
extern void _ZN7S5363C73v10Ev();
extern void _ZN7S5363C73v11Ev();
extern void _ZN7S5363C73v12Ev();
extern void _ZN7S5363C73v13Ev();
static  VTBL_ENTRY vtc_S5363C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5363C1[0]),
  (VTBL_ENTRY)&_ZN7S5363C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5363C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5363C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5363C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5363C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5363C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5363C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5363C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5363C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5363C12v6Ev,
  ABISELECT(-88,-72),
  (VTBL_ENTRY)&(_ZTI7S5363C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S5363C1D1Ev,_ZThn72_N7S5363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S5363C1D0Ev,_ZThn72_N7S5363C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5363C72v9Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v10Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v11Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v12Ev,
  (VTBL_ENTRY)&_ZN7S5363C73v13Ev,
};
extern VTBL_ENTRY _ZTI7S5363C1[];
extern  VTBL_ENTRY _ZTV7S5363C1[];
Class_Descriptor cd_S5363C1 = {  "S5363C1", // class name
  bases_S5363C1, 3,
  &(vtc_S5363C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI7S5363C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5363C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5362C3  {
  char s5362c3f0;
  int s5362c3f1;
  virtual  ~S5362C3(); // _ZN7S5362C3D1Ev
  virtual void  v7(); // _ZN7S5362C32v7Ev
  S5362C3(); // tgen
};
//SIG(-1 S5362C3) C1{ vd v1 Fc Fi}


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

static void Test_S5362C3()
{
  extern Class_Descriptor cd_S5362C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5362C3, buf);
    S5362C3 *dp, &lv = *(dp=new (buf) S5362C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5362C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5362C3)");
    check_field_offset(lv, s5362c3f0, ABISELECT(8,4), "S5362C3.s5362c3f0");
    check_field_offset(lv, s5362c3f1, ABISELECT(12,8), "S5362C3.s5362c3f1");
    test_class_info(&lv, &cd_S5362C3);
    dp->~S5362C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5362C3(Test_S5362C3, "S5362C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S5362C3C1Ev();
extern void _ZN7S5362C3D1Ev();
Name_Map name_map_S5362C3[] = {
  NSPAIR(_ZN7S5362C3C1Ev),
  NSPAIR(_ZN7S5362C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5362C3[];
extern void _ZN7S5362C3D1Ev();
extern void _ZN7S5362C3D0Ev();
extern void _ZN7S5362C32v7Ev();
static  VTBL_ENTRY vtc_S5362C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5362C3[0]),
  (VTBL_ENTRY)&_ZN7S5362C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5362C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5362C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5362C3[];
extern  VTBL_ENTRY _ZTV7S5362C3[];
Class_Descriptor cd_S5362C3 = {  "S5362C3", // class name
  0,0,//no base classes
  &(vtc_S5362C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S5362C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5362C3),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  S5362C2  : S5362C3 {
  int s5362c2f0[2];
  char s5362c2f1;
  ::S2432C5_nt s5362c2f2;
  ::S2431C6 s5362c2f3;
  virtual  ~S5362C2(); // _ZN7S5362C2D1Ev
  virtual void  v8(); // _ZN7S5362C22v8Ev
  S5362C2(); // tgen
};
//SIG(-1 S5362C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ Fl[4]}}}


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

static void Test_S5362C2()
{
  extern Class_Descriptor cd_S5362C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S5362C2, buf);
    S5362C2 *dp, &lv = *(dp=new (buf) S5362C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S5362C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5362C2)");
    check_base_class_offset(lv, (S5362C3*), 0, "S5362C2");
    check_field_offset(lv, s5362c2f0, ABISELECT(16,12), "S5362C2.s5362c2f0");
    check_field_offset(lv, s5362c2f1, ABISELECT(24,20), "S5362C2.s5362c2f1");
    check_field_offset(lv, s5362c2f2, ABISELECT(32,24), "S5362C2.s5362c2f2");
    check_field_offset(lv, s5362c2f3, ABISELECT(40,28), "S5362C2.s5362c2f3");
    test_class_info(&lv, &cd_S5362C2);
    dp->~S5362C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5362C2(Test_S5362C2, "S5362C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S5362C2C1Ev();
extern void _ZN7S5362C2D1Ev();
Name_Map name_map_S5362C2[] = {
  NSPAIR(_ZN7S5362C2C1Ev),
  NSPAIR(_ZN7S5362C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5362C3;
extern VTBL_ENTRY _ZTI7S5362C3[];
extern  VTBL_ENTRY _ZTV7S5362C3[];
static Base_Class bases_S5362C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5362C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5362C2[];
extern void _ZN7S5362C2D1Ev();
extern void _ZN7S5362C2D0Ev();
extern void _ZN7S5362C32v7Ev();
extern void _ZN7S5362C22v8Ev();
static  VTBL_ENTRY vtc_S5362C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5362C2[0]),
  (VTBL_ENTRY)&_ZN7S5362C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5362C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5362C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5362C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5362C2[];
extern  VTBL_ENTRY _ZTV7S5362C2[];
Class_Descriptor cd_S5362C2 = {  "S5362C2", // class name
  bases_S5362C2, 1,
  &(vtc_S5362C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S5362C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5362C2),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  S5362C7  {
  virtual  ~S5362C7(); // _ZN7S5362C7D1Ev
  virtual void  v9(); // _ZN7S5362C72v9Ev
  virtual void  v10(); // _ZN7S5362C73v10Ev
  virtual void  v11(); // _ZN7S5362C73v11Ev
  virtual void  v12(); // _ZN7S5362C73v12Ev
  virtual void  v13(); // _ZN7S5362C73v13Ev
  S5362C7(); // tgen
};
//SIG(-1 S5362C7) C1{ vd v1 v2 v3 v4 v5}


 S5362C7 ::~S5362C7(){ note_dtor("S5362C7", this);}
void  S5362C7 ::v9(){vfunc_called(this, "_ZN7S5362C72v9Ev");}
void  S5362C7 ::v10(){vfunc_called(this, "_ZN7S5362C73v10Ev");}
void  S5362C7 ::v11(){vfunc_called(this, "_ZN7S5362C73v11Ev");}
void  S5362C7 ::v12(){vfunc_called(this, "_ZN7S5362C73v12Ev");}
void  S5362C7 ::v13(){vfunc_called(this, "_ZN7S5362C73v13Ev");}
S5362C7 ::S5362C7(){ note_ctor("S5362C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5362C7C1Ev();
extern void _ZN7S5362C7D1Ev();
Name_Map name_map_S5362C7[] = {
  NSPAIR(_ZN7S5362C7C1Ev),
  NSPAIR(_ZN7S5362C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5362C7[];
extern void _ZN7S5362C7D1Ev();
extern void _ZN7S5362C7D0Ev();
extern void _ZN7S5362C72v9Ev();
extern void _ZN7S5362C73v10Ev();
extern void _ZN7S5362C73v11Ev();
extern void _ZN7S5362C73v12Ev();
extern void _ZN7S5362C73v13Ev();
static  VTBL_ENTRY vtc_S5362C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5362C7[0]),
  (VTBL_ENTRY)&_ZN7S5362C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5362C7D0Ev,
  (VTBL_ENTRY)&_ZN7S5362C72v9Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v10Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v11Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v12Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v13Ev,
};
extern VTBL_ENTRY _ZTI7S5362C7[];
extern  VTBL_ENTRY _ZTV7S5362C7[];
Class_Descriptor cd_S5362C7 = {  "S5362C7", // class name
  0,0,//no base classes
  &(vtc_S5362C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5362C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5362C7),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5362C1  : S5362C2 , S5362C7 {
  char s5362c1f0;
  void *s5362c1f1[5];
  char s5362c1f2;
  int s5362c1f3[4];
  void *s5362c1f4[2];
  int s5362c1f5[2];
  void *s5362c1f6;
  int s5362c1f7;
  virtual  ~S5362C1(); // _ZN7S5362C1D1Ev
  virtual void  v1(); // _ZN7S5362C12v1Ev
  virtual void  v2(); // _ZN7S5362C12v2Ev
  virtual void  v3(); // _ZN7S5362C12v3Ev
  virtual void  v4(); // _ZN7S5362C12v4Ev
  virtual void  v5(); // _ZN7S5362C12v5Ev
  virtual void  v6(); // _ZN7S5362C12v6Ev
  S5362C1(); // tgen
};
//SIG(1 S5362C1) C1{ BC2{ BC3{ vd v7 Fc Fi} vd v8 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v16 Fc Fi} vd v14 v15 FC7{ Fl[4]}}} BC8{ vd v9 v10 v11 v12 v13} vd v1 v2 v3 v4 v5 v6 Fc Fp[5] Fc Fi[4] Fp[2] Fi[2] Fp Fi}


 S5362C1 ::~S5362C1(){ note_dtor("S5362C1", this);}
void  S5362C1 ::v1(){vfunc_called(this, "_ZN7S5362C12v1Ev");}
void  S5362C1 ::v2(){vfunc_called(this, "_ZN7S5362C12v2Ev");}
void  S5362C1 ::v3(){vfunc_called(this, "_ZN7S5362C12v3Ev");}
void  S5362C1 ::v4(){vfunc_called(this, "_ZN7S5362C12v4Ev");}
void  S5362C1 ::v5(){vfunc_called(this, "_ZN7S5362C12v5Ev");}
void  S5362C1 ::v6(){vfunc_called(this, "_ZN7S5362C12v6Ev");}
S5362C1 ::S5362C1(){ note_ctor("S5362C1", this);} // tgen

static void Test_S5362C1()
{
  extern Class_Descriptor cd_S5362C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,33)];
    init_test(&cd_S5362C1, buf);
    S5362C1 *dp, &lv = *(dp=new (buf) S5362C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S5362C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5362C1)");
    check_base_class_offset(lv, (S5362C3*)(S5362C2*), 0, "S5362C1");
    check_base_class_offset(lv, (S5362C2*), 0, "S5362C1");
    check_base_class_offset(lv, (S5362C7*), ABISELECT(88,56), "S5362C1");
    check_field_offset(lv, s5362c1f0, ABISELECT(96,60), "S5362C1.s5362c1f0");
    check_field_offset(lv, s5362c1f1, ABISELECT(104,64), "S5362C1.s5362c1f1");
    check_field_offset(lv, s5362c1f2, ABISELECT(144,84), "S5362C1.s5362c1f2");
    check_field_offset(lv, s5362c1f3, ABISELECT(148,88), "S5362C1.s5362c1f3");
    check_field_offset(lv, s5362c1f4, ABISELECT(168,104), "S5362C1.s5362c1f4");
    check_field_offset(lv, s5362c1f5, ABISELECT(184,112), "S5362C1.s5362c1f5");
    check_field_offset(lv, s5362c1f6, ABISELECT(192,120), "S5362C1.s5362c1f6");
    check_field_offset(lv, s5362c1f7, ABISELECT(200,124), "S5362C1.s5362c1f7");
    test_class_info(&lv, &cd_S5362C1);
    dp->~S5362C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5362C1(Test_S5362C1, "S5362C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S5362C1C1Ev();
extern void _ZN7S5362C1D1Ev();
Name_Map name_map_S5362C1[] = {
  NSPAIR(_ZN7S5362C1C1Ev),
  NSPAIR(_ZN7S5362C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5362C3;
extern VTBL_ENTRY _ZTI7S5362C3[];
extern  VTBL_ENTRY _ZTV7S5362C3[];
extern Class_Descriptor cd_S5362C2;
extern VTBL_ENTRY _ZTI7S5362C2[];
extern  VTBL_ENTRY _ZTV7S5362C2[];
extern Class_Descriptor cd_S5362C7;
extern VTBL_ENTRY _ZTI7S5362C7[];
extern  VTBL_ENTRY _ZTV7S5362C7[];
static Base_Class bases_S5362C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5362C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5362C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5362C7,    ABISELECT(88,56), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5362C1[];
extern void _ZN7S5362C1D1Ev();
extern void _ZN7S5362C1D0Ev();
extern void _ZN7S5362C32v7Ev();
extern void _ZN7S5362C22v8Ev();
extern void _ZN7S5362C12v1Ev();
extern void _ZN7S5362C12v2Ev();
extern void _ZN7S5362C12v3Ev();
extern void _ZN7S5362C12v4Ev();
extern void _ZN7S5362C12v5Ev();
extern void _ZN7S5362C12v6Ev();
extern void ABISELECT(_ZThn88_N7S5362C1D1Ev,_ZThn56_N7S5362C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S5362C1D0Ev,_ZThn56_N7S5362C1D0Ev)();
extern void _ZN7S5362C72v9Ev();
extern void _ZN7S5362C73v10Ev();
extern void _ZN7S5362C73v11Ev();
extern void _ZN7S5362C73v12Ev();
extern void _ZN7S5362C73v13Ev();
static  VTBL_ENTRY vtc_S5362C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5362C1[0]),
  (VTBL_ENTRY)&_ZN7S5362C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5362C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5362C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5362C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5362C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5362C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5362C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5362C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5362C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5362C12v6Ev,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S5362C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S5362C1D1Ev,_ZThn56_N7S5362C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S5362C1D0Ev,_ZThn56_N7S5362C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5362C72v9Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v10Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v11Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v12Ev,
  (VTBL_ENTRY)&_ZN7S5362C73v13Ev,
};
extern VTBL_ENTRY _ZTI7S5362C1[];
extern  VTBL_ENTRY _ZTV7S5362C1[];
Class_Descriptor cd_S5362C1 = {  "S5362C1", // class name
  bases_S5362C1, 3,
  &(vtc_S5362C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S5362C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5362C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19312C3  {
  virtual void  v2(); // _ZN8S19312C32v2Ev
  virtual void  v3(); // _ZN8S19312C32v3Ev
  virtual void  v4(); // _ZN8S19312C32v4Ev
  ~S19312C3(); // tgen
  S19312C3(); // tgen
};
//SIG(-1 S19312C3) C1{ v1 v2 v3}


void  S19312C3 ::v2(){vfunc_called(this, "_ZN8S19312C32v2Ev");}
void  S19312C3 ::v3(){vfunc_called(this, "_ZN8S19312C32v3Ev");}
void  S19312C3 ::v4(){vfunc_called(this, "_ZN8S19312C32v4Ev");}
S19312C3 ::~S19312C3(){ note_dtor("S19312C3", this);} // tgen
S19312C3 ::S19312C3(){ note_ctor("S19312C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19312C3C1Ev();
extern void _ZN8S19312C3D1Ev();
Name_Map name_map_S19312C3[] = {
  NSPAIR(_ZN8S19312C3C1Ev),
  NSPAIR(_ZN8S19312C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19312C3[];
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
static  VTBL_ENTRY vtc_S19312C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C3[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
Class_Descriptor cd_S19312C3 = {  "S19312C3", // class name
  0,0,//no base classes
  &(vtc_S19312C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19312C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19312C3),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  S19312C2  : S19312C3 {
  virtual void  v5(); // _ZN8S19312C22v5Ev
  ~S19312C2(); // tgen
  S19312C2(); // tgen
};
//SIG(-1 S19312C2) C1{ BC2{ v2 v3 v4} v1}


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

static void Test_S19312C2()
{
  extern Class_Descriptor cd_S19312C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19312C2, buf);
    S19312C2 *dp, &lv = *(dp=new (buf) S19312C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19312C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19312C2)");
    check_base_class_offset(lv, (S19312C3*), 0, "S19312C2");
    test_class_info(&lv, &cd_S19312C2);
    dp->~S19312C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19312C2(Test_S19312C2, "S19312C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19312C2C1Ev();
extern void _ZN8S19312C2D1Ev();
Name_Map name_map_S19312C2[] = {
  NSPAIR(_ZN8S19312C2C1Ev),
  NSPAIR(_ZN8S19312C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
static Base_Class bases_S19312C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19312C2[];
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
static  VTBL_ENTRY vtc_S19312C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C2[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S19312C2[];
extern  VTBL_ENTRY _ZTV8S19312C2[];
Class_Descriptor cd_S19312C2 = {  "S19312C2", // class name
  bases_S19312C2, 1,
  &(vtc_S19312C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19312C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19312C2),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  S19312C5  : virtual S19312C3 , virtual S19312C2 {
  void *s19312c5f0;
  short s19312c5f1;
  int s19312c5f2;
  ~S19312C5(); // tgen
  S19312C5(); // tgen
};
//SIG(-1 S19312C5) C1{ VBC2{ v1 v2 v3} VBC3{ BC2 v4} Fp Fs Fi}


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

static void Test_S19312C5()
{
  extern Class_Descriptor cd_S19312C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19312C5, buf);
    S19312C5 *dp, &lv = *(dp=new (buf) S19312C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19312C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19312C5)");
    /*is_ambiguous_... S19312C5::S19312C3 */ AMB_check_base_class_offset(lv, (S19312C3*), 0, "S19312C5");
    check_base_class_offset(lv, (S19312C3*)(S19312C2*), ABISELECT(24,16), "S19312C5");
    check_base_class_offset(lv, (S19312C2*), ABISELECT(24,16), "S19312C5");
    check_field_offset(lv, s19312c5f0, ABISELECT(8,4), "S19312C5.s19312c5f0");
    check_field_offset(lv, s19312c5f1, ABISELECT(16,8), "S19312C5.s19312c5f1");
    check_field_offset(lv, s19312c5f2, ABISELECT(20,12), "S19312C5.s19312c5f2");
    test_class_info(&lv, &cd_S19312C5);
    dp->~S19312C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19312C5(Test_S19312C5, "S19312C5", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19312C5C1Ev();
extern void _ZN8S19312C5D1Ev();
Name_Map name_map_S19312C5[] = {
  NSPAIR(_ZN8S19312C5C1Ev),
  NSPAIR(_ZN8S19312C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C2;
extern VTBL_ENTRY _ZTI8S19312C2[];
extern  VTBL_ENTRY _ZTV8S19312C2[];
static Base_Class bases_S19312C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19312C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19312C2,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19312C5[];
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
static  VTBL_ENTRY vtc_S19312C5[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C5[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19312C5[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S19312C5[];
static  VTT_ENTRY vtt_S19312C5[] = {
  {&(_ZTV8S19312C5[7]),  7,20},
  {&(_ZTV8S19312C5[7]),  7,20},
  {&(_ZTV8S19312C5[16]),  16,20},
};
extern VTBL_ENTRY _ZTI8S19312C5[];
extern  VTBL_ENTRY _ZTV8S19312C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19312C5[];
Class_Descriptor cd_S19312C5 = {  "S19312C5", // class name
  bases_S19312C5, 3,
  &(vtc_S19312C5[0]), // expected_vtbl_contents
  &(vtt_S19312C5[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19312C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19312C5),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19312C5),3, //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  S19312C4  : virtual S19312C3 , virtual S19312C5 , S19312C2 {
  short s19312c4f0;
  long double s19312c4f1;
  virtual void  v6(); // _ZN8S19312C42v6Ev
  virtual void  v7(); // _ZN8S19312C42v7Ev
  virtual void  v8(); // _ZN8S19312C42v8Ev
  virtual void  v9(); // _ZN8S19312C42v9Ev
  ~S19312C4(); // tgen
  S19312C4(); // tgen
};
//SIG(-1 S19312C4) C1{ VBC2{ v5 v6 v7} VBC3{ VBC2 VBC4{ BC2 v8} Fp Fs Fi} BC4 v1 v2 v3 v4 Fs FD}


void  S19312C4 ::v6(){vfunc_called(this, "_ZN8S19312C42v6Ev");}
void  S19312C4 ::v7(){vfunc_called(this, "_ZN8S19312C42v7Ev");}
void  S19312C4 ::v8(){vfunc_called(this, "_ZN8S19312C42v8Ev");}
void  S19312C4 ::v9(){vfunc_called(this, "_ZN8S19312C42v9Ev");}
S19312C4 ::~S19312C4(){ note_dtor("S19312C4", this);} // tgen
S19312C4 ::S19312C4(){ note_ctor("S19312C4", this);} // tgen

static void Test_S19312C4()
{
  extern Class_Descriptor cd_S19312C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S19312C4, buf);
    S19312C4 *dp, &lv = *(dp=new (buf) S19312C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S19312C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19312C4)");
    /*is_ambiguous_... S19312C4::S19312C3 */ AMB_check_base_class_offset(lv, (S19312C3*), ABISELECT(32,20), "S19312C4");
    /*is_ambiguous_... S19312C5::S19312C3 */ AMB_check_base_class_offset(lv, (S19312C3*)(S19312C5*), ABISELECT(32,20), "S19312C4");
    /*is_ambiguous_... S19312C4::S19312C2 */ AMB_check_base_class_offset(lv, (S19312C3*)(S19312C2*), ABISELECT(56,36), "S19312C4");
    check_base_class_offset(lv, (S19312C2*)(S19312C5*), ABISELECT(56,36), "S19312C4");
    check_base_class_offset(lv, (S19312C5*), ABISELECT(32,20), "S19312C4");
    /*is_ambiguous_... S19312C4::S19312C2 */ AMB_check_base_class_offset(lv, (S19312C3*)(S19312C2*), 0, "S19312C4");
    /*is_ambiguous_... S19312C4::S19312C2 */ AMB_check_base_class_offset(lv, (S19312C2*), 0, "S19312C4");
    check_field_offset(lv, s19312c4f0, ABISELECT(8,4), "S19312C4.s19312c4f0");
    check_field_offset(lv, s19312c4f1, ABISELECT(16,8), "S19312C4.s19312c4f1");
    test_class_info(&lv, &cd_S19312C4);
    dp->~S19312C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19312C4(Test_S19312C4, "S19312C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S19312C4C1Ev();
extern void _ZN8S19312C4D1Ev();
Name_Map name_map_S19312C4[] = {
  NSPAIR(_ZN8S19312C4C1Ev),
  NSPAIR(_ZN8S19312C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C2;
extern VTBL_ENTRY _ZTI8S19312C2[];
extern  VTBL_ENTRY _ZTV8S19312C2[];
extern Class_Descriptor cd_S19312C5;
extern VTBL_ENTRY _ZTI8S19312C5[];
extern  VTBL_ENTRY _ZTV8S19312C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19312C5[];
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C2;
extern VTBL_ENTRY _ZTI8S19312C2[];
extern  VTBL_ENTRY _ZTV8S19312C2[];
static Base_Class bases_S19312C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19312C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19312C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19312C2,    ABISELECT(56,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19312C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19312C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19312C4[];
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
extern void _ZN8S19312C42v6Ev();
extern void _ZN8S19312C42v7Ev();
extern void _ZN8S19312C42v8Ev();
extern void _ZN8S19312C42v9Ev();
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
static  VTBL_ENTRY vtc_S19312C4[] = {
  ABISELECT(56,36),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C4[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v9Ev,
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19312C4[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19312C4[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S19312C4[];
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19312C5__8S19312C4[] = {
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C5[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
};
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19312C2__8S19312C5__8S19312C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19312C5[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
};
static  VTT_ENTRY vtt_S19312C4[] = {
  {&(_ZTV8S19312C4[5]),  5,33},
  {&(_ZTV8S19312C4[20]),  20,33},
  {&(_ZTV8S19312C4[20]),  20,33},
  {&(_ZTV8S19312C4[29]),  29,33},
  {&(_tg__ZTV8S19312C5__8S19312C4[7]),  7,10},
  {&(_tg__ZTV8S19312C5__8S19312C4[7]),  7,10},
  {&(_tg__ZTV8S19312C2__8S19312C5__8S19312C4[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19312C4[];
extern  VTBL_ENTRY _ZTV8S19312C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19312C4[];
Class_Descriptor cd_S19312C4 = {  "S19312C4", // class name
  bases_S19312C4, 6,
  &(vtc_S19312C4[0]), // expected_vtbl_contents
  &(vtt_S19312C4[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S19312C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19312C4),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19312C4),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19312C6  {
  void *s19312c6f0[5];
  virtual void  v10(); // _ZN8S19312C63v10Ev
  virtual void  v11(); // _ZN8S19312C63v11Ev
  virtual void  v12(); // _ZN8S19312C63v12Ev
  virtual void  v13(); // _ZN8S19312C63v13Ev
  virtual void  v14(); // _ZN8S19312C63v14Ev
  virtual void  v15(); // _ZN8S19312C63v15Ev
  virtual void  v16(); // _ZN8S19312C63v16Ev
  virtual void  v17(); // _ZN8S19312C63v17Ev
  virtual void  v18(); // _ZN8S19312C63v18Ev
  ~S19312C6(); // tgen
  S19312C6(); // tgen
};
//SIG(-1 S19312C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[5]}


void  S19312C6 ::v10(){vfunc_called(this, "_ZN8S19312C63v10Ev");}
void  S19312C6 ::v11(){vfunc_called(this, "_ZN8S19312C63v11Ev");}
void  S19312C6 ::v12(){vfunc_called(this, "_ZN8S19312C63v12Ev");}
void  S19312C6 ::v13(){vfunc_called(this, "_ZN8S19312C63v13Ev");}
void  S19312C6 ::v14(){vfunc_called(this, "_ZN8S19312C63v14Ev");}
void  S19312C6 ::v15(){vfunc_called(this, "_ZN8S19312C63v15Ev");}
void  S19312C6 ::v16(){vfunc_called(this, "_ZN8S19312C63v16Ev");}
void  S19312C6 ::v17(){vfunc_called(this, "_ZN8S19312C63v17Ev");}
void  S19312C6 ::v18(){vfunc_called(this, "_ZN8S19312C63v18Ev");}
S19312C6 ::~S19312C6(){ note_dtor("S19312C6", this);} // tgen
S19312C6 ::S19312C6(){ note_ctor("S19312C6", this);} // tgen

static void Test_S19312C6()
{
  extern Class_Descriptor cd_S19312C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19312C6, buf);
    S19312C6 *dp, &lv = *(dp=new (buf) S19312C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19312C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19312C6)");
    check_field_offset(lv, s19312c6f0, ABISELECT(8,4), "S19312C6.s19312c6f0");
    test_class_info(&lv, &cd_S19312C6);
    dp->~S19312C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19312C6(Test_S19312C6, "S19312C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19312C6C1Ev();
extern void _ZN8S19312C6D1Ev();
Name_Map name_map_S19312C6[] = {
  NSPAIR(_ZN8S19312C6C1Ev),
  NSPAIR(_ZN8S19312C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19312C6[];
extern void _ZN8S19312C63v10Ev();
extern void _ZN8S19312C63v11Ev();
extern void _ZN8S19312C63v12Ev();
extern void _ZN8S19312C63v13Ev();
extern void _ZN8S19312C63v14Ev();
extern void _ZN8S19312C63v15Ev();
extern void _ZN8S19312C63v16Ev();
extern void _ZN8S19312C63v17Ev();
extern void _ZN8S19312C63v18Ev();
static  VTBL_ENTRY vtc_S19312C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C6[0]),
  (VTBL_ENTRY)&_ZN8S19312C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v18Ev,
};
extern VTBL_ENTRY _ZTI8S19312C6[];
extern  VTBL_ENTRY _ZTV8S19312C6[];
Class_Descriptor cd_S19312C6 = {  "S19312C6", // class name
  0,0,//no base classes
  &(vtc_S19312C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19312C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19312C6),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  S19312C7  {
  virtual  ~S19312C7(); // _ZN8S19312C7D1Ev
  virtual void  v19(); // _ZN8S19312C73v19Ev
  virtual void  v20(); // _ZN8S19312C73v20Ev
  virtual void  v21(); // _ZN8S19312C73v21Ev
  virtual void  v22(); // _ZN8S19312C73v22Ev
  S19312C7(); // tgen
};
//SIG(-1 S19312C7) C1{ vd v1 v2 v3 v4}


 S19312C7 ::~S19312C7(){ note_dtor("S19312C7", this);}
void  S19312C7 ::v19(){vfunc_called(this, "_ZN8S19312C73v19Ev");}
void  S19312C7 ::v20(){vfunc_called(this, "_ZN8S19312C73v20Ev");}
void  S19312C7 ::v21(){vfunc_called(this, "_ZN8S19312C73v21Ev");}
void  S19312C7 ::v22(){vfunc_called(this, "_ZN8S19312C73v22Ev");}
S19312C7 ::S19312C7(){ note_ctor("S19312C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19312C7C1Ev();
extern void _ZN8S19312C7D1Ev();
Name_Map name_map_S19312C7[] = {
  NSPAIR(_ZN8S19312C7C1Ev),
  NSPAIR(_ZN8S19312C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19312C7[];
extern void _ZN8S19312C7D1Ev();
extern void _ZN8S19312C7D0Ev();
extern void _ZN8S19312C73v19Ev();
extern void _ZN8S19312C73v20Ev();
extern void _ZN8S19312C73v21Ev();
extern void _ZN8S19312C73v22Ev();
static  VTBL_ENTRY vtc_S19312C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C7[0]),
  (VTBL_ENTRY)&_ZN8S19312C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19312C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19312C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19312C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19312C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19312C73v22Ev,
};
extern VTBL_ENTRY _ZTI8S19312C7[];
extern  VTBL_ENTRY _ZTV8S19312C7[];
Class_Descriptor cd_S19312C7 = {  "S19312C7", // class name
  0,0,//no base classes
  &(vtc_S19312C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19312C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19312C7),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  S19312C1  : virtual S19312C2 , virtual S19312C4 , S19312C6 , virtual S19312C7 {
  __tsi64 s19312c1f0;
  virtual  ~S19312C1(); // _ZN8S19312C1D2Ev
  virtual void  v1(); // _ZN8S19312C12v1Ev
  S19312C1(); // tgen
};
//SIG(1 S19312C1) C1{ VBC2{ BC3{ v2 v3 v4} v5} VBC4{ VBC3 VBC5{ VBC3 VBC2 Fp Fs Fi} BC2 v6 v7 v8 v9 Fs FD} BC6{ v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5]} VBC7{ vd v19 v20 v21 v22} vd v1 FL}


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

static void Test_S19312C1()
{
  extern Class_Descriptor cd_S19312C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S19312C1, buf);
    S19312C1 *dp, &lv = *(dp=new (buf) S19312C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S19312C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19312C1)");
    /*is_ambiguous_... S19312C1::S19312C2 */ AMB_check_base_class_offset(lv, (S19312C3*)(S19312C2*), ABISELECT(56,32), "S19312C1");
    /*is_ambiguous_... S19312C1::S19312C2 */ AMB_check_base_class_offset(lv, (S19312C2*), ABISELECT(56,32), "S19312C1");
    check_base_class_offset(lv, (S19312C2*)(S19312C5*), ABISELECT(56,32), "S19312C1");
    /*is_ambiguous_... S19312C4::S19312C3 */ AMB_check_base_class_offset(lv, (S19312C3*)(S19312C4*), ABISELECT(96,56), "S19312C1");
    /*is_ambiguous_... S19312C5::S19312C3 */ AMB_check_base_class_offset(lv, (S19312C3*)(S19312C5*), ABISELECT(96,56), "S19312C1");
    check_base_class_offset(lv, (S19312C5*)(S19312C4*), ABISELECT(96,56), "S19312C1");
    /*is_ambiguous_... S19312C4::S19312C2 */ AMB_check_base_class_offset(lv, (S19312C3*)(S19312C2*)(S19312C4*), ABISELECT(64,36), "S19312C1");
    /*is_ambiguous_... S19312C4::S19312C2 */ AMB_check_base_class_offset(lv, (S19312C2*)(S19312C4*), ABISELECT(64,36), "S19312C1");
    check_base_class_offset(lv, (S19312C4*), ABISELECT(64,36), "S19312C1");
    check_base_class_offset(lv, (S19312C6*), 0, "S19312C1");
    check_base_class_offset(lv, (S19312C7*), ABISELECT(120,72), "S19312C1");
    check_field_offset(lv, s19312c1f0, ABISELECT(48,24), "S19312C1.s19312c1f0");
    test_class_info(&lv, &cd_S19312C1);
    dp->~S19312C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19312C1(Test_S19312C1, "S19312C1", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN8S19312C1C1Ev();
extern void _ZN8S19312C1D2Ev();
Name_Map name_map_S19312C1[] = {
  NSPAIR(_ZN8S19312C1C1Ev),
  NSPAIR(_ZN8S19312C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C2;
extern VTBL_ENTRY _ZTI8S19312C2[];
extern  VTBL_ENTRY _ZTV8S19312C2[];
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C5;
extern VTBL_ENTRY _ZTI8S19312C5[];
extern  VTBL_ENTRY _ZTV8S19312C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19312C5[];
extern Class_Descriptor cd_S19312C3;
extern VTBL_ENTRY _ZTI8S19312C3[];
extern  VTBL_ENTRY _ZTV8S19312C3[];
extern Class_Descriptor cd_S19312C2;
extern VTBL_ENTRY _ZTI8S19312C2[];
extern  VTBL_ENTRY _ZTV8S19312C2[];
extern Class_Descriptor cd_S19312C4;
extern VTBL_ENTRY _ZTI8S19312C4[];
extern  VTBL_ENTRY _ZTV8S19312C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19312C4[];
extern Class_Descriptor cd_S19312C6;
extern VTBL_ENTRY _ZTI8S19312C6[];
extern  VTBL_ENTRY _ZTV8S19312C6[];
extern Class_Descriptor cd_S19312C7;
extern VTBL_ENTRY _ZTI8S19312C7[];
extern  VTBL_ENTRY _ZTV8S19312C7[];
static Base_Class bases_S19312C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19312C3,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19312C2,    ABISELECT(56,32), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19312C3,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19312C5,    ABISELECT(96,56), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19312C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19312C2,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19312C4,    ABISELECT(64,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19312C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19312C7,    ABISELECT(120,72), //bcp->offset
    60, //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
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19312C1[];
extern void _ZN8S19312C63v10Ev();
extern void _ZN8S19312C63v11Ev();
extern void _ZN8S19312C63v12Ev();
extern void _ZN8S19312C63v13Ev();
extern void _ZN8S19312C63v14Ev();
extern void _ZN8S19312C63v15Ev();
extern void _ZN8S19312C63v16Ev();
extern void _ZN8S19312C63v17Ev();
extern void _ZN8S19312C63v18Ev();
extern void _ZN8S19312C1D1Ev();
extern void _ZN8S19312C1D0Ev();
extern void _ZN8S19312C12v1Ev();
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
extern void _ZN8S19312C42v6Ev();
extern void _ZN8S19312C42v7Ev();
extern void _ZN8S19312C42v8Ev();
extern void _ZN8S19312C42v9Ev();
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19312C1D1Ev,_ZTv0_n12_N8S19312C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S19312C1D1Ev,_ZThn72_N8S19312C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19312C1D0Ev,_ZTv0_n12_N8S19312C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S19312C1D0Ev,_ZThn72_N8S19312C1D0Ev)() __attribute__((weak));
extern void _ZN8S19312C73v19Ev();
extern void _ZN8S19312C73v20Ev();
extern void _ZN8S19312C73v21Ev();
extern void _ZN8S19312C73v22Ev();
static  VTBL_ENTRY vtc_S19312C1[] = {
  ABISELECT(120,72),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(64,36),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C1[0]),
  (VTBL_ENTRY)&_ZN8S19312C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19312C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19312C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19312C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19312C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19312C1[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19312C1[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v9Ev,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S19312C1[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S19312C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19312C1D1Ev,_ZTv0_n12_N8S19312C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19312C1D0Ev,_ZTv0_n12_N8S19312C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19312C73v19Ev,
  (VTBL_ENTRY)&_ZN8S19312C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19312C73v21Ev,
  (VTBL_ENTRY)&_ZN8S19312C73v22Ev,
};
extern VTBL_ENTRY _ZTV8S19312C1[];
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
extern void _ZN8S19312C42v6Ev();
extern void _ZN8S19312C42v7Ev();
extern void _ZN8S19312C42v8Ev();
extern void _ZN8S19312C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19312C4__8S19312C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C4[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19312C42v9Ev,
};
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19312C5__8S19312C4__8S19312C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19312C4[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
};
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19312C2__8S19312C4__8S19312C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19312C4[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
};
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19312C5__8S19312C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19312C5[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
};
extern void _ZN8S19312C32v2Ev();
extern void _ZN8S19312C32v3Ev();
extern void _ZN8S19312C32v4Ev();
extern void _ZN8S19312C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19312C2__8S19312C5__8S19312C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19312C5[0]),
  (VTBL_ENTRY)&_ZN8S19312C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19312C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19312C22v5Ev,
};
static  VTT_ENTRY vtt_S19312C1[] = {
  {&(_ZTV8S19312C1[7]),  7,73},
  {&(_ZTV8S19312C1[25]),  25,73},
  {&(_ZTV8S19312C1[42]),  42,73},
  {&(_ZTV8S19312C1[57]),  57,73},
  {&(_ZTV8S19312C1[57]),  57,73},
  {&(_ZTV8S19312C1[67]),  67,73},
  {&(_tg__ZTV8S19312C4__8S19312C1[5]),  5,13},
  {&(_tg__ZTV8S19312C5__8S19312C4__8S19312C1[7]),  7,10},
  {&(_tg__ZTV8S19312C5__8S19312C4__8S19312C1[7]),  7,10},
  {&(_tg__ZTV8S19312C2__8S19312C4__8S19312C1[6]),  6,10},
  {&(_tg__ZTV8S19312C5__8S19312C1[7]),  7,10},
  {&(_tg__ZTV8S19312C5__8S19312C1[7]),  7,10},
  {&(_tg__ZTV8S19312C2__8S19312C5__8S19312C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19312C1[];
extern  VTBL_ENTRY _ZTV8S19312C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19312C1[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19312C1D0Ev,_ZTv0_n12_N8S19312C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19312C1D0Ev,_ZThn72_N8S19312C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19312C1D1Ev,_ZTv0_n12_N8S19312C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19312C1D1Ev,_ZThn72_N8S19312C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19312C1 = {  "S19312C1", // class name
  bases_S19312C1, 9,
  &(vtc_S19312C1[0]), // expected_vtbl_contents
  &(vtt_S19312C1[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI8S19312C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19312C1),73, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19312C1),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2101C4  {
  void *s2101c4f0;
  char s2101c4f1;
  int s2101c4f2[4];
  void *s2101c4f3;
  virtual  ~S2101C4(); // _ZN7S2101C4D1Ev
  virtual void  v2(); // _ZN7S2101C42v2Ev
  virtual void  v3(); // _ZN7S2101C42v3Ev
  virtual void  v4(); // _ZN7S2101C42v4Ev
  virtual void  v5(); // _ZN7S2101C42v5Ev
  S2101C4(); // tgen
};
//SIG(-1 S2101C4) C1{ vd v1 v2 v3 v4 Fp Fc Fi[4] Fp}


 S2101C4 ::~S2101C4(){ note_dtor("S2101C4", this);}
void  S2101C4 ::v2(){vfunc_called(this, "_ZN7S2101C42v2Ev");}
void  S2101C4 ::v3(){vfunc_called(this, "_ZN7S2101C42v3Ev");}
void  S2101C4 ::v4(){vfunc_called(this, "_ZN7S2101C42v4Ev");}
void  S2101C4 ::v5(){vfunc_called(this, "_ZN7S2101C42v5Ev");}
S2101C4 ::S2101C4(){ note_ctor("S2101C4", this);} // tgen

static void Test_S2101C4()
{
  extern Class_Descriptor cd_S2101C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2101C4, buf);
    S2101C4 *dp, &lv = *(dp=new (buf) S2101C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2101C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2101C4)");
    check_field_offset(lv, s2101c4f0, ABISELECT(8,4), "S2101C4.s2101c4f0");
    check_field_offset(lv, s2101c4f1, ABISELECT(16,8), "S2101C4.s2101c4f1");
    check_field_offset(lv, s2101c4f2, ABISELECT(20,12), "S2101C4.s2101c4f2");
    check_field_offset(lv, s2101c4f3, ABISELECT(40,28), "S2101C4.s2101c4f3");
    test_class_info(&lv, &cd_S2101C4);
    dp->~S2101C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2101C4(Test_S2101C4, "S2101C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2101C4C1Ev();
extern void _ZN7S2101C4D1Ev();
Name_Map name_map_S2101C4[] = {
  NSPAIR(_ZN7S2101C4C1Ev),
  NSPAIR(_ZN7S2101C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2101C4[];
extern void _ZN7S2101C4D1Ev();
extern void _ZN7S2101C4D0Ev();
extern void _ZN7S2101C42v2Ev();
extern void _ZN7S2101C42v3Ev();
extern void _ZN7S2101C42v4Ev();
extern void _ZN7S2101C42v5Ev();
static  VTBL_ENTRY vtc_S2101C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2101C4[0]),
  (VTBL_ENTRY)&_ZN7S2101C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2101C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2101C4[];
extern  VTBL_ENTRY _ZTV7S2101C4[];
Class_Descriptor cd_S2101C4 = {  "S2101C4", // class name
  0,0,//no base classes
  &(vtc_S2101C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2101C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2101C4),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  S2101C3  : S2101C4 {
  int s2101c3f0[3];
  virtual  ~S2101C3(); // _ZN7S2101C3D1Ev
  virtual void  v6(); // _ZN7S2101C32v6Ev
  virtual void  v7(); // _ZN7S2101C32v7Ev
  virtual void  v8(); // _ZN7S2101C32v8Ev
  S2101C3(); // tgen
};
//SIG(-1 S2101C3) C1{ BC2{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v1 v2 v3 Fi[3]}


 S2101C3 ::~S2101C3(){ note_dtor("S2101C3", this);}
void  S2101C3 ::v6(){vfunc_called(this, "_ZN7S2101C32v6Ev");}
void  S2101C3 ::v7(){vfunc_called(this, "_ZN7S2101C32v7Ev");}
void  S2101C3 ::v8(){vfunc_called(this, "_ZN7S2101C32v8Ev");}
S2101C3 ::S2101C3(){ note_ctor("S2101C3", this);} // tgen

static void Test_S2101C3()
{
  extern Class_Descriptor cd_S2101C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2101C3, buf);
    S2101C3 *dp, &lv = *(dp=new (buf) S2101C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2101C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2101C3)");
    check_base_class_offset(lv, (S2101C4*), 0, "S2101C3");
    check_field_offset(lv, s2101c3f0, ABISELECT(48,32), "S2101C3.s2101c3f0");
    test_class_info(&lv, &cd_S2101C3);
    dp->~S2101C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2101C3(Test_S2101C3, "S2101C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2101C3C1Ev();
extern void _ZN7S2101C3D1Ev();
Name_Map name_map_S2101C3[] = {
  NSPAIR(_ZN7S2101C3C1Ev),
  NSPAIR(_ZN7S2101C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2101C4;
extern VTBL_ENTRY _ZTI7S2101C4[];
extern  VTBL_ENTRY _ZTV7S2101C4[];
static Base_Class bases_S2101C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2101C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2101C3[];
extern void _ZN7S2101C3D1Ev();
extern void _ZN7S2101C3D0Ev();
extern void _ZN7S2101C42v2Ev();
extern void _ZN7S2101C42v3Ev();
extern void _ZN7S2101C42v4Ev();
extern void _ZN7S2101C42v5Ev();
extern void _ZN7S2101C32v6Ev();
extern void _ZN7S2101C32v7Ev();
extern void _ZN7S2101C32v8Ev();
static  VTBL_ENTRY vtc_S2101C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2101C3[0]),
  (VTBL_ENTRY)&_ZN7S2101C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2101C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S2101C3[];
extern  VTBL_ENTRY _ZTV7S2101C3[];
Class_Descriptor cd_S2101C3 = {  "S2101C3", // class name
  bases_S2101C3, 1,
  &(vtc_S2101C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2101C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2101C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2101C2  : S2101C3 {
  int s2101c2f0[3];
  virtual  ~S2101C2(); // _ZN7S2101C2D1Ev
  virtual void  v9(); // _ZN7S2101C22v9Ev
  virtual void  v10(); // _ZN7S2101C23v10Ev
  virtual void  v11(); // _ZN7S2101C23v11Ev
  S2101C2(); // tgen
};
//SIG(-1 S2101C2) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v8 v9 v10 Fi[3]} vd v1 v2 v3 Fi[3]}


 S2101C2 ::~S2101C2(){ note_dtor("S2101C2", this);}
void  S2101C2 ::v9(){vfunc_called(this, "_ZN7S2101C22v9Ev");}
void  S2101C2 ::v10(){vfunc_called(this, "_ZN7S2101C23v10Ev");}
void  S2101C2 ::v11(){vfunc_called(this, "_ZN7S2101C23v11Ev");}
S2101C2 ::S2101C2(){ note_ctor("S2101C2", this);} // tgen

static void Test_S2101C2()
{
  extern Class_Descriptor cd_S2101C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2101C2, buf);
    S2101C2 *dp, &lv = *(dp=new (buf) S2101C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2101C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2101C2)");
    check_base_class_offset(lv, (S2101C4*)(S2101C3*), 0, "S2101C2");
    check_base_class_offset(lv, (S2101C3*), 0, "S2101C2");
    check_field_offset(lv, s2101c2f0, ABISELECT(60,44), "S2101C2.s2101c2f0");
    test_class_info(&lv, &cd_S2101C2);
    dp->~S2101C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2101C2(Test_S2101C2, "S2101C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2101C2C1Ev();
extern void _ZN7S2101C2D1Ev();
Name_Map name_map_S2101C2[] = {
  NSPAIR(_ZN7S2101C2C1Ev),
  NSPAIR(_ZN7S2101C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2101C4;
extern VTBL_ENTRY _ZTI7S2101C4[];
extern  VTBL_ENTRY _ZTV7S2101C4[];
extern Class_Descriptor cd_S2101C3;
extern VTBL_ENTRY _ZTI7S2101C3[];
extern  VTBL_ENTRY _ZTV7S2101C3[];
static Base_Class bases_S2101C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2101C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2101C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2101C2[];
extern void _ZN7S2101C2D1Ev();
extern void _ZN7S2101C2D0Ev();
extern void _ZN7S2101C42v2Ev();
extern void _ZN7S2101C42v3Ev();
extern void _ZN7S2101C42v4Ev();
extern void _ZN7S2101C42v5Ev();
extern void _ZN7S2101C32v6Ev();
extern void _ZN7S2101C32v7Ev();
extern void _ZN7S2101C32v8Ev();
extern void _ZN7S2101C22v9Ev();
extern void _ZN7S2101C23v10Ev();
extern void _ZN7S2101C23v11Ev();
static  VTBL_ENTRY vtc_S2101C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2101C2[0]),
  (VTBL_ENTRY)&_ZN7S2101C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2101C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2101C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2101C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2101C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S2101C2[];
extern  VTBL_ENTRY _ZTV7S2101C2[];
Class_Descriptor cd_S2101C2 = {  "S2101C2", // class name
  bases_S2101C2, 2,
  &(vtc_S2101C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2101C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2101C2),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  S2101C1  : S2101C2 {
  int s2101c1f0[9];
  ::S2200C5_nt s2101c1f1;
  int s2101c1f2[20];
  char s2101c1f3[6];
  int s2101c1f4[20];
  char s2101c1f5;
  int s2101c1f6[28];
  char s2101c1f7[11];
  virtual  ~S2101C1(); // _ZN7S2101C1D1Ev
  virtual void  v1(); // _ZN7S2101C12v1Ev
  S2101C1(); // tgen
};
//SIG(1 S2101C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp Fc Fi[4] Fp} vd v6 v7 v8 Fi[3]} vd v9 v10 v11 Fi[3]} vd v1 Fi[9] FC5{ m FL Fp} Fi[20] Fc[6] Fi[20] Fc Fi[28] Fc[11]}


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

static void Test_S2101C1()
{
  extern Class_Descriptor cd_S2101C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,101)];
    init_test(&cd_S2101C1, buf);
    S2101C1 *dp, &lv = *(dp=new (buf) S2101C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,400), "sizeof(S2101C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2101C1)");
    check_base_class_offset(lv, (S2101C4*)(S2101C3*)(S2101C2*), 0, "S2101C1");
    check_base_class_offset(lv, (S2101C3*)(S2101C2*), 0, "S2101C1");
    check_base_class_offset(lv, (S2101C2*), 0, "S2101C1");
    check_field_offset(lv, s2101c1f0, ABISELECT(72,56), "S2101C1.s2101c1f0");
    check_field_offset(lv, s2101c1f1, ABISELECT(112,92), "S2101C1.s2101c1f1");
    check_field_offset(lv, s2101c1f2, ABISELECT(128,104), "S2101C1.s2101c1f2");
    check_field_offset(lv, s2101c1f3, ABISELECT(208,184), "S2101C1.s2101c1f3");
    check_field_offset(lv, s2101c1f4, ABISELECT(216,192), "S2101C1.s2101c1f4");
    check_field_offset(lv, s2101c1f5, ABISELECT(296,272), "S2101C1.s2101c1f5");
    check_field_offset(lv, s2101c1f6, ABISELECT(300,276), "S2101C1.s2101c1f6");
    check_field_offset(lv, s2101c1f7, ABISELECT(412,388), "S2101C1.s2101c1f7");
    test_class_info(&lv, &cd_S2101C1);
    dp->~S2101C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2101C1(Test_S2101C1, "S2101C1", ABISELECT(424,400));

#else // __cplusplus

extern void _ZN7S2101C1C1Ev();
extern void _ZN7S2101C1D1Ev();
Name_Map name_map_S2101C1[] = {
  NSPAIR(_ZN7S2101C1C1Ev),
  NSPAIR(_ZN7S2101C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2101C4;
extern VTBL_ENTRY _ZTI7S2101C4[];
extern  VTBL_ENTRY _ZTV7S2101C4[];
extern Class_Descriptor cd_S2101C3;
extern VTBL_ENTRY _ZTI7S2101C3[];
extern  VTBL_ENTRY _ZTV7S2101C3[];
extern Class_Descriptor cd_S2101C2;
extern VTBL_ENTRY _ZTI7S2101C2[];
extern  VTBL_ENTRY _ZTV7S2101C2[];
static Base_Class bases_S2101C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2101C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2101C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2101C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2101C1[];
extern void _ZN7S2101C1D1Ev();
extern void _ZN7S2101C1D0Ev();
extern void _ZN7S2101C42v2Ev();
extern void _ZN7S2101C42v3Ev();
extern void _ZN7S2101C42v4Ev();
extern void _ZN7S2101C42v5Ev();
extern void _ZN7S2101C32v6Ev();
extern void _ZN7S2101C32v7Ev();
extern void _ZN7S2101C32v8Ev();
extern void _ZN7S2101C22v9Ev();
extern void _ZN7S2101C23v10Ev();
extern void _ZN7S2101C23v11Ev();
extern void _ZN7S2101C12v1Ev();
static  VTBL_ENTRY vtc_S2101C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2101C1[0]),
  (VTBL_ENTRY)&_ZN7S2101C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2101C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2101C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2101C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2101C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2101C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2101C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2101C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2101C1[];
extern  VTBL_ENTRY _ZTV7S2101C1[];
Class_Descriptor cd_S2101C1 = {  "S2101C1", // class name
  bases_S2101C1, 3,
  &(vtc_S2101C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,400), // object size
  NSPAIRA(_ZTI7S2101C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2101C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11911C2  {
  void *s11911c2f0[7];
  int s11911c2f1;
  char s11911c2f2[12];
  int s11911c2f3[4];
  char s11911c2f4[48];
  short s11911c2f5[36];
  int s11911c2f6;
  short s11911c2f7[19];
  char s11911c2f8[34];
  int s11911c2f9;
};
//SIG(-1 S11911C2) C1{ Fp[7] Fi Fc[12] Fi[4] Fc[48] Fs[36] Fi Fs[19] Fc[34] Fi}



static void Test_S11911C2()
{
  {
    init_simple_test("S11911C2");
    S11911C2 lv;
    check2(sizeof(lv), ABISELECT(288,260), "sizeof(S11911C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11911C2)");
    check_field_offset(lv, s11911c2f0, 0, "S11911C2.s11911c2f0");
    check_field_offset(lv, s11911c2f1, ABISELECT(56,28), "S11911C2.s11911c2f1");
    check_field_offset(lv, s11911c2f2, ABISELECT(60,32), "S11911C2.s11911c2f2");
    check_field_offset(lv, s11911c2f3, ABISELECT(72,44), "S11911C2.s11911c2f3");
    check_field_offset(lv, s11911c2f4, ABISELECT(88,60), "S11911C2.s11911c2f4");
    check_field_offset(lv, s11911c2f5, ABISELECT(136,108), "S11911C2.s11911c2f5");
    check_field_offset(lv, s11911c2f6, ABISELECT(208,180), "S11911C2.s11911c2f6");
    check_field_offset(lv, s11911c2f7, ABISELECT(212,184), "S11911C2.s11911c2f7");
    check_field_offset(lv, s11911c2f8, ABISELECT(250,222), "S11911C2.s11911c2f8");
    check_field_offset(lv, s11911c2f9, ABISELECT(284,256), "S11911C2.s11911c2f9");
  }
}
static Arrange_To_Call_Me vS11911C2(Test_S11911C2, "S11911C2", ABISELECT(288,260));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S11911C3  {
  long s11911c3f0;
  __tsi64 s11911c3f1;
  void *s11911c3f2;
};
//SIG(1 S11911C3) U1{ Fl FL Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S11911C5  {
  char s11911c5f0[4];
  char s11911c5f1;
  char s11911c5f2;
};
//SIG(-1 S11911C5) C1{ Fc[6]}



static void Test_S11911C5()
{
  {
    init_simple_test("S11911C5");
    S11911C5 lv;
    check2(sizeof(lv), 6, "sizeof(S11911C5)");
    check2(__alignof__(lv), 1, "__alignof__(S11911C5)");
    check_field_offset(lv, s11911c5f0, 0, "S11911C5.s11911c5f0");
    check_field_offset(lv, s11911c5f1, 4, "S11911C5.s11911c5f1");
    check_field_offset(lv, s11911c5f2, 5, "S11911C5.s11911c5f2");
  }
}
static Arrange_To_Call_Me vS11911C5(Test_S11911C5, "S11911C5", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11911C4  {
  void *s11911c4f0[10];
  void *s11911c4f1;
  int s11911c4f2;
  ::S11911C5 s11911c4f3;
  ::S11911C5 s11911c4f4;
  int s11911c4f5;
  int s11911c4f6;
  char s11911c4f7;
  char s11911c4f8[30];
  char s11911c4f9[3];
};
//SIG(-1 S11911C4) C1{ Fp[11] Fi FC2{ Fc[6]} FC2 Fi[2] Fc[34]}



static void Test_S11911C4()
{
  {
    init_simple_test("S11911C4");
    S11911C4 lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S11911C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11911C4)");
    check_field_offset(lv, s11911c4f0, 0, "S11911C4.s11911c4f0");
    check_field_offset(lv, s11911c4f1, ABISELECT(80,40), "S11911C4.s11911c4f1");
    check_field_offset(lv, s11911c4f2, ABISELECT(88,44), "S11911C4.s11911c4f2");
    check_field_offset(lv, s11911c4f3, ABISELECT(92,48), "S11911C4.s11911c4f3");
    check_field_offset(lv, s11911c4f4, ABISELECT(98,54), "S11911C4.s11911c4f4");
    check_field_offset(lv, s11911c4f5, ABISELECT(104,60), "S11911C4.s11911c4f5");
    check_field_offset(lv, s11911c4f6, ABISELECT(108,64), "S11911C4.s11911c4f6");
    check_field_offset(lv, s11911c4f7, ABISELECT(112,68), "S11911C4.s11911c4f7");
    check_field_offset(lv, s11911c4f8, ABISELECT(113,69), "S11911C4.s11911c4f8");
    check_field_offset(lv, s11911c4f9, ABISELECT(143,99), "S11911C4.s11911c4f9");
  }
}
static Arrange_To_Call_Me vS11911C4(Test_S11911C4, "S11911C4", ABISELECT(152,104));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11911C1  {
  ::S11911C2 s11911c1f0;
  ::S11911C2 s11911c1f1;
  ::S11911C3 s11911c1f2;
  ::S11911C4 s11911c1f3;
};
//SIG(1 S11911C1) C1{ FC2{ Fp[7] Fi Fc[12] Fi[4] Fc[48] Fs[36] Fi Fs[19] Fc[34] Fi} FC2 FU3{ Fl FL Fp} FC4{ Fp[10] Fp Fi FC5{ Fc[4] Fc Fc} FC5 Fi Fi Fc Fc[30] Fc[3]}}



static void Test_S11911C1()
{
  {
    init_simple_test("S11911C1");
    S11911C1 lv;
    check2(sizeof(lv), ABISELECT(736,632), "sizeof(S11911C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11911C1)");
    check_field_offset(lv, s11911c1f0, 0, "S11911C1.s11911c1f0");
    check_field_offset(lv, s11911c1f1, ABISELECT(288,260), "S11911C1.s11911c1f1");
    check_field_offset(lv, s11911c1f2, ABISELECT(576,520), "S11911C1.s11911c1f2");
    check_field_offset(lv, s11911c1f3, ABISELECT(584,528), "S11911C1.s11911c1f3");
  }
}
static Arrange_To_Call_Me vS11911C1(Test_S11911C1, "S11911C1", ABISELECT(736,632));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8379C2_nt  {
  void  mf8379c2(); // _ZN10S8379C2_nt8mf8379c2Ev
  virtual  ~S8379C2_nt(); // _ZN10S8379C2_ntD1Ev
  S8379C2_nt(); // tgen
};
//SIG(-1 S8379C2_nt) C1{ vd m}


void  S8379C2_nt ::mf8379c2(){}
 S8379C2_nt ::~S8379C2_nt(){ note_dtor("S8379C2_nt", this);}
S8379C2_nt ::S8379C2_nt(){ note_ctor("S8379C2_nt", this);} // tgen

//skip512 S8379C2_nt

#else // __cplusplus

extern void _ZN10S8379C2_ntC1Ev();
extern void _ZN10S8379C2_ntD1Ev();
Name_Map name_map_S8379C2_nt[] = {
  NSPAIR(_ZN10S8379C2_ntC1Ev),
  NSPAIR(_ZN10S8379C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern void _ZN10S8379C2_ntD1Ev();
extern void _ZN10S8379C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8379C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8379C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8379C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8379C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
VTBL_ENTRY *P__ZTI10S8379C2_nt = _ZTI10S8379C2_nt; 
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
Class_Descriptor cd_S8379C2_nt = {  "S8379C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8379C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8379C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8379C2_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  S8379C5  {
  void *s8379c5f0[3];
  int s8379c5f1[2];
  void *s8379c5f2;
  void  mf8379c5(); // _ZN7S8379C58mf8379c5Ev
};
//SIG(-1 S8379C5) C1{ m Fp[3] Fi[2] Fp}


void  S8379C5 ::mf8379c5(){}

static void Test_S8379C5()
{
  {
    init_simple_test("S8379C5");
    S8379C5 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S8379C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8379C5)");
    check_field_offset(lv, s8379c5f0, 0, "S8379C5.s8379c5f0");
    check_field_offset(lv, s8379c5f1, ABISELECT(24,12), "S8379C5.s8379c5f1");
    check_field_offset(lv, s8379c5f2, ABISELECT(32,20), "S8379C5.s8379c5f2");
  }
}
static Arrange_To_Call_Me vS8379C5(Test_S8379C5, "S8379C5", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S8379C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8379C7_nt  {
  int s8379c7f0[2];
  __tsi64 s8379c7f1;
  void  mf8379c7(); // _ZN10S8379C7_nt8mf8379c7Ev
};
//SIG(-1 S8379C7_nt) C1{ m Fi[2] FL}


void  S8379C7_nt ::mf8379c7(){}

//skip512 S8379C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8379C4  {
  ::S8379C5 s8379c4f0;
  ::S8379C6_nt s8379c4f1;
  ::S8379C7_nt s8379c4f2;
  void *s8379c4f3[2];
  int s8379c4f4[3];
  void  mf8379c4(); // _ZN7S8379C48mf8379c4Ev
  virtual  ~S8379C4(); // _ZN7S8379C4D1Ev
  S8379C4(); // tgen
};
//SIG(-1 S8379C4) C1{ vd m FC2{ m Fp[3] Fi[2] Fp} FC3{ Fi[2]} FC4{ m Fi[2] FL} Fp[2] Fi[3]}


void  S8379C4 ::mf8379c4(){}
 S8379C4 ::~S8379C4(){ note_dtor("S8379C4", this);}
S8379C4 ::S8379C4(){ note_ctor("S8379C4", this);} // tgen

static void Test_S8379C4()
{
  extern Class_Descriptor cd_S8379C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S8379C4, buf);
    S8379C4 *dp, &lv = *(dp=new (buf) S8379C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S8379C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8379C4)");
    check_field_offset(lv, s8379c4f0, ABISELECT(8,4), "S8379C4.s8379c4f0");
    check_field_offset(lv, s8379c4f1, ABISELECT(48,28), "S8379C4.s8379c4f1");
    check_field_offset(lv, s8379c4f2, ABISELECT(56,36), "S8379C4.s8379c4f2");
    check_field_offset(lv, s8379c4f3, ABISELECT(72,52), "S8379C4.s8379c4f3");
    check_field_offset(lv, s8379c4f4, ABISELECT(88,60), "S8379C4.s8379c4f4");
    test_class_info(&lv, &cd_S8379C4);
    dp->~S8379C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8379C4(Test_S8379C4, "S8379C4", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S8379C4C1Ev();
extern void _ZN7S8379C4D1Ev();
Name_Map name_map_S8379C4[] = {
  NSPAIR(_ZN7S8379C4C1Ev),
  NSPAIR(_ZN7S8379C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8379C4[];
extern void _ZN7S8379C4D1Ev();
extern void _ZN7S8379C4D0Ev();
static  VTBL_ENTRY vtc_S8379C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8379C4[0]),
  (VTBL_ENTRY)&_ZN7S8379C4D1Ev,
  (VTBL_ENTRY)&_ZN7S8379C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S8379C4[];
extern  VTBL_ENTRY _ZTV7S8379C4[];
Class_Descriptor cd_S8379C4 = {  "S8379C4", // class name
  0,0,//no base classes
  &(vtc_S8379C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S8379C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8379C4),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  S8379C3  : S8379C4 {
  int s8379c3f0[8];
  void *s8379c3f1;
  int s8379c3f2;
  ~S8379C3(); // tgen
  S8379C3(); // tgen
};
//SIG(-1 S8379C3) C1{ BC2{ vd m FC3{ m Fp[3] Fi[2] Fp} FC4{ Fi[2]} FC5{ m Fi[2] FL} Fp[2] Fi[3]} Fi[8] Fp Fi}


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

static void Test_S8379C3()
{
  extern Class_Descriptor cd_S8379C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S8379C3, buf);
    S8379C3 *dp, &lv = *(dp=new (buf) S8379C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S8379C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8379C3)");
    check_base_class_offset(lv, (S8379C4*), 0, "S8379C3");
    check_field_offset(lv, s8379c3f0, ABISELECT(100,72), "S8379C3.s8379c3f0");
    check_field_offset(lv, s8379c3f1, ABISELECT(136,104), "S8379C3.s8379c3f1");
    check_field_offset(lv, s8379c3f2, ABISELECT(144,108), "S8379C3.s8379c3f2");
    test_class_info(&lv, &cd_S8379C3);
    dp->~S8379C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8379C3(Test_S8379C3, "S8379C3", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S8379C3C1Ev();
extern void _ZN7S8379C3D1Ev();
Name_Map name_map_S8379C3[] = {
  NSPAIR(_ZN7S8379C3C1Ev),
  NSPAIR(_ZN7S8379C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C4;
extern VTBL_ENTRY _ZTI7S8379C4[];
extern  VTBL_ENTRY _ZTV7S8379C4[];
static Base_Class bases_S8379C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8379C3[];
extern void _ZN7S8379C3D1Ev();
extern void _ZN7S8379C3D0Ev();
static  VTBL_ENTRY vtc_S8379C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8379C3[0]),
  (VTBL_ENTRY)&_ZN7S8379C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8379C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S8379C3[];
extern  VTBL_ENTRY _ZTV7S8379C3[];
Class_Descriptor cd_S8379C3 = {  "S8379C3", // class name
  bases_S8379C3, 1,
  &(vtc_S8379C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S8379C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8379C3),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  S8379C8  : S8379C4 {
  int s8379c8f0[3];
  ~S8379C8(); // tgen
  S8379C8(); // tgen
};
//SIG(-1 S8379C8) C1{ BC2{ vd m FC3{ m Fp[3] Fi[2] Fp} FC4{ Fi[2]} FC5{ m Fi[2] FL} Fp[2] Fi[3]} Fi[3]}


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

static void Test_S8379C8()
{
  extern Class_Descriptor cd_S8379C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S8379C8, buf);
    S8379C8 *dp, &lv = *(dp=new (buf) S8379C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S8379C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8379C8)");
    check_base_class_offset(lv, (S8379C4*), 0, "S8379C8");
    check_field_offset(lv, s8379c8f0, ABISELECT(100,72), "S8379C8.s8379c8f0");
    test_class_info(&lv, &cd_S8379C8);
    dp->~S8379C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8379C8(Test_S8379C8, "S8379C8", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN7S8379C8C1Ev();
extern void _ZN7S8379C8D1Ev();
Name_Map name_map_S8379C8[] = {
  NSPAIR(_ZN7S8379C8C1Ev),
  NSPAIR(_ZN7S8379C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C4;
extern VTBL_ENTRY _ZTI7S8379C4[];
extern  VTBL_ENTRY _ZTV7S8379C4[];
static Base_Class bases_S8379C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8379C8[];
extern void _ZN7S8379C8D1Ev();
extern void _ZN7S8379C8D0Ev();
static  VTBL_ENTRY vtc_S8379C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8379C8[0]),
  (VTBL_ENTRY)&_ZN7S8379C8D1Ev,
  (VTBL_ENTRY)&_ZN7S8379C8D0Ev,
};
extern VTBL_ENTRY _ZTI7S8379C8[];
extern  VTBL_ENTRY _ZTV7S8379C8[];
Class_Descriptor cd_S8379C8 = {  "S8379C8", // class name
  bases_S8379C8, 1,
  &(vtc_S8379C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI7S8379C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8379C8),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  S8379C1  : S8379C2_nt {
  void *s8379c1f0[4];
  int s8379c1f1[3];
  ::S8379C3 s8379c1f2;
  ::S8379C8 s8379c1f3;
  ::S100C38_nt s8379c1f4;
  virtual  ~S8379C1(); // _ZN7S8379C1D1Ev
  S8379C1(); // tgen
};
//SIG(1 S8379C1) C1{ BC2{ vd m} vd Fp[4] Fi[3] FC3{ BC4{ vd m FC5{ m Fp[3] Fi[2] Fp} FC6{ Fi[2]} FC7{ m Fi[2] FL} Fp[2] Fi[3]} Fi[8] Fp Fi} FC8{ BC4 Fi[3]} FC9{ m Fp[2]}}


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

static void Test_S8379C1()
{
  extern Class_Descriptor cd_S8379C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,60)];
    init_test(&cd_S8379C1, buf);
    S8379C1 *dp, &lv = *(dp=new (buf) S8379C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,236), "sizeof(S8379C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8379C1)");
    check_base_class_offset(lv, (S8379C2_nt*), 0, "S8379C1");
    check_field_offset(lv, s8379c1f0, ABISELECT(8,4), "S8379C1.s8379c1f0");
    check_field_offset(lv, s8379c1f1, ABISELECT(40,20), "S8379C1.s8379c1f1");
    check_field_offset(lv, s8379c1f2, ABISELECT(56,32), "S8379C1.s8379c1f2");
    check_field_offset(lv, s8379c1f3, ABISELECT(208,144), "S8379C1.s8379c1f3");
    check_field_offset(lv, s8379c1f4, ABISELECT(320,228), "S8379C1.s8379c1f4");
    test_class_info(&lv, &cd_S8379C1);
    dp->~S8379C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8379C1(Test_S8379C1, "S8379C1", ABISELECT(336,236));

#else // __cplusplus

extern void _ZN7S8379C1C1Ev();
extern void _ZN7S8379C1D1Ev();
Name_Map name_map_S8379C1[] = {
  NSPAIR(_ZN7S8379C1C1Ev),
  NSPAIR(_ZN7S8379C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C2_nt;
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
static Base_Class bases_S8379C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8379C1[];
extern void _ZN7S8379C1D1Ev();
extern void _ZN7S8379C1D0Ev();
static  VTBL_ENTRY vtc_S8379C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8379C1[0]),
  (VTBL_ENTRY)&_ZN7S8379C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8379C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8379C1[];
extern  VTBL_ENTRY _ZTV7S8379C1[];
Class_Descriptor cd_S8379C1 = {  "S8379C1", // class name
  bases_S8379C1, 1,
  &(vtc_S8379C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,236), // object size
  NSPAIRA(_ZTI7S8379C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8379C1),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  S6160C5_nt  : S2382C30 {
  virtual  ~S6160C5_nt(); // _ZN10S6160C5_ntD1Ev
  virtual void  v10(); // _ZN10S6160C5_nt3v10Ev
  S6160C5_nt(); // tgen
};
//SIG(-1 S6160C5_nt) C1{ BC2{ m} vd v1}


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

//skip512 S6160C5_nt

#else // __cplusplus

extern void _ZN10S6160C5_ntC1Ev();
extern void _ZN10S6160C5_ntD1Ev();
Name_Map name_map_S6160C5_nt[] = {
  NSPAIR(_ZN10S6160C5_ntC1Ev),
  NSPAIR(_ZN10S6160C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
static Base_Class bases_S6160C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S6160C5_nt[];
extern void _ZN10S6160C5_ntD1Ev();
extern void _ZN10S6160C5_ntD0Ev();
extern void _ZN10S6160C5_nt3v10Ev();
static  VTBL_ENTRY vtc_S6160C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6160C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S6160C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6160C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6160C5_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S6160C5_nt[];
VTBL_ENTRY *P__ZTI10S6160C5_nt = _ZTI10S6160C5_nt; 
extern  VTBL_ENTRY _ZTV10S6160C5_nt[];
Class_Descriptor cd_S6160C5_nt = {  "S6160C5_nt", // class name
  bases_S6160C5_nt, 1,
  &(vtc_S6160C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6160C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S6160C5_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  S6160C4_nt  : S6160C5_nt {
  virtual  ~S6160C4_nt(); // _ZN10S6160C4_ntD1Ev
  virtual void  v11(); // _ZN10S6160C4_nt3v11Ev
  virtual void  v12(); // _ZN10S6160C4_nt3v12Ev
  virtual void  v13(); // _ZN10S6160C4_nt3v13Ev
  virtual void  v14(); // _ZN10S6160C4_nt3v14Ev
  virtual void  v15(); // _ZN10S6160C4_nt3v15Ev
  virtual void  v16(); // _ZN10S6160C4_nt3v16Ev
  virtual void  v17(); // _ZN10S6160C4_nt3v17Ev
  virtual void  v18(); // _ZN10S6160C4_nt3v18Ev
  S6160C4_nt(); // tgen
};
//SIG(-1 S6160C4_nt) C1{ BC2{ BC3{ m} vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S6160C4_nt ::~S6160C4_nt(){ note_dtor("S6160C4_nt", this);}
void  S6160C4_nt ::v11(){vfunc_called(this, "_ZN10S6160C4_nt3v11Ev");}
void  S6160C4_nt ::v12(){vfunc_called(this, "_ZN10S6160C4_nt3v12Ev");}
void  S6160C4_nt ::v13(){vfunc_called(this, "_ZN10S6160C4_nt3v13Ev");}
void  S6160C4_nt ::v14(){vfunc_called(this, "_ZN10S6160C4_nt3v14Ev");}
void  S6160C4_nt ::v15(){vfunc_called(this, "_ZN10S6160C4_nt3v15Ev");}
void  S6160C4_nt ::v16(){vfunc_called(this, "_ZN10S6160C4_nt3v16Ev");}
void  S6160C4_nt ::v17(){vfunc_called(this, "_ZN10S6160C4_nt3v17Ev");}
void  S6160C4_nt ::v18(){vfunc_called(this, "_ZN10S6160C4_nt3v18Ev");}
S6160C4_nt ::S6160C4_nt(){ note_ctor("S6160C4_nt", this);} // tgen

//skip512 S6160C4_nt

#else // __cplusplus

extern void _ZN10S6160C4_ntC1Ev();
extern void _ZN10S6160C4_ntD1Ev();
Name_Map name_map_S6160C4_nt[] = {
  NSPAIR(_ZN10S6160C4_ntC1Ev),
  NSPAIR(_ZN10S6160C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
extern Class_Descriptor cd_S6160C5_nt;
extern VTBL_ENTRY _ZTI10S6160C5_nt[];
extern  VTBL_ENTRY _ZTV10S6160C5_nt[];
static Base_Class bases_S6160C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S6160C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S6160C4_nt[];
extern void _ZN10S6160C4_ntD1Ev();
extern void _ZN10S6160C4_ntD0Ev();
extern void _ZN10S6160C5_nt3v10Ev();
extern void _ZN10S6160C4_nt3v11Ev();
extern void _ZN10S6160C4_nt3v12Ev();
extern void _ZN10S6160C4_nt3v13Ev();
extern void _ZN10S6160C4_nt3v14Ev();
extern void _ZN10S6160C4_nt3v15Ev();
extern void _ZN10S6160C4_nt3v16Ev();
extern void _ZN10S6160C4_nt3v17Ev();
extern void _ZN10S6160C4_nt3v18Ev();
static  VTBL_ENTRY vtc_S6160C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6160C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S6160C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6160C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S6160C4_nt[];
VTBL_ENTRY *P__ZTI10S6160C4_nt = _ZTI10S6160C4_nt; 
extern  VTBL_ENTRY _ZTV10S6160C4_nt[];
Class_Descriptor cd_S6160C4_nt = {  "S6160C4_nt", // class name
  bases_S6160C4_nt, 2,
  &(vtc_S6160C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6160C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S6160C4_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  S6160C7_nt  {
  short s6160c7f0;
  int s6160c7f1;
  void *s6160c7f2;
  int s6160c7f3;
};
//SIG(1 S6160C7_nt) C1{ Fs Fi Fp Fi}



//skip512 S6160C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S6160C6_nt  {
  short s6160c6f0[15];
  ::S6160C7_nt s6160c6f1;
};
//SIG(1 S6160C6_nt) U1{ Fs[15] FC2{ Fs Fi Fp Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S6160C3_nt  : S6160C4_nt {
  char s6160c3f0[2];
  ::S6160C6_nt s6160c3f1;
  virtual  ~S6160C3_nt(); // _ZN10S6160C3_ntD1Ev
  virtual void  v1(); // _ZN10S6160C3_nt2v1Ev
  virtual void  v2(); // _ZN10S6160C3_nt2v2Ev
  virtual void  v3(); // _ZN10S6160C3_nt2v3Ev
  virtual void  v4(); // _ZN10S6160C3_nt2v4Ev
  virtual void  v5(); // _ZN10S6160C3_nt2v5Ev
  virtual void  v6(); // _ZN10S6160C3_nt2v6Ev
  virtual void  v7(); // _ZN10S6160C3_nt2v7Ev
  virtual void  v8(); // _ZN10S6160C3_nt2v8Ev
  virtual void  v9(); // _ZN10S6160C3_nt2v9Ev
  S6160C3_nt(); // tgen
};
//SIG(-1 S6160C3_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}}}


 S6160C3_nt ::~S6160C3_nt(){ note_dtor("S6160C3_nt", this);}
void  S6160C3_nt ::v1(){vfunc_called(this, "_ZN10S6160C3_nt2v1Ev");}
void  S6160C3_nt ::v2(){vfunc_called(this, "_ZN10S6160C3_nt2v2Ev");}
void  S6160C3_nt ::v3(){vfunc_called(this, "_ZN10S6160C3_nt2v3Ev");}
void  S6160C3_nt ::v4(){vfunc_called(this, "_ZN10S6160C3_nt2v4Ev");}
void  S6160C3_nt ::v5(){vfunc_called(this, "_ZN10S6160C3_nt2v5Ev");}
void  S6160C3_nt ::v6(){vfunc_called(this, "_ZN10S6160C3_nt2v6Ev");}
void  S6160C3_nt ::v7(){vfunc_called(this, "_ZN10S6160C3_nt2v7Ev");}
void  S6160C3_nt ::v8(){vfunc_called(this, "_ZN10S6160C3_nt2v8Ev");}
void  S6160C3_nt ::v9(){vfunc_called(this, "_ZN10S6160C3_nt2v9Ev");}
S6160C3_nt ::S6160C3_nt(){ note_ctor("S6160C3_nt", this);} // tgen

//skip512 S6160C3_nt

#else // __cplusplus

extern void _ZN10S6160C3_ntC1Ev();
extern void _ZN10S6160C3_ntD1Ev();
Name_Map name_map_S6160C3_nt[] = {
  NSPAIR(_ZN10S6160C3_ntC1Ev),
  NSPAIR(_ZN10S6160C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
extern Class_Descriptor cd_S6160C5_nt;
extern VTBL_ENTRY _ZTI10S6160C5_nt[];
extern  VTBL_ENTRY _ZTV10S6160C5_nt[];
extern Class_Descriptor cd_S6160C4_nt;
extern VTBL_ENTRY _ZTI10S6160C4_nt[];
extern  VTBL_ENTRY _ZTV10S6160C4_nt[];
static Base_Class bases_S6160C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S6160C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6160C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S6160C3_nt[];
extern void _ZN10S6160C3_ntD1Ev();
extern void _ZN10S6160C3_ntD0Ev();
extern void _ZN10S6160C5_nt3v10Ev();
extern void _ZN10S6160C4_nt3v11Ev();
extern void _ZN10S6160C4_nt3v12Ev();
extern void _ZN10S6160C4_nt3v13Ev();
extern void _ZN10S6160C4_nt3v14Ev();
extern void _ZN10S6160C4_nt3v15Ev();
extern void _ZN10S6160C4_nt3v16Ev();
extern void _ZN10S6160C4_nt3v17Ev();
extern void _ZN10S6160C4_nt3v18Ev();
extern void _ZN10S6160C3_nt2v1Ev();
extern void _ZN10S6160C3_nt2v2Ev();
extern void _ZN10S6160C3_nt2v3Ev();
extern void _ZN10S6160C3_nt2v4Ev();
extern void _ZN10S6160C3_nt2v5Ev();
extern void _ZN10S6160C3_nt2v6Ev();
extern void _ZN10S6160C3_nt2v7Ev();
extern void _ZN10S6160C3_nt2v8Ev();
extern void _ZN10S6160C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S6160C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6160C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S6160C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6160C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6160C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S6160C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S6160C3_nt[];
VTBL_ENTRY *P__ZTI10S6160C3_nt = _ZTI10S6160C3_nt; 
extern  VTBL_ENTRY _ZTV10S6160C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6160C1  : S2382C30 {
  ::S6160C3_nt s6160c1f0;
  void *s6160c1f1;
};
//SIG(1 S6160C1) C1{ BC2{ m} FC3{ BC4{ BC5{ BC2 vd v10} vd v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc[2] FU6{ Fs[15] FC7{ Fs Fi Fp Fi}}} Fp}



static void Test_S6160C1()
{
  extern Class_Descriptor cd_S6160C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6160C1, buf);
    S6160C1 &lv = *(new (buf) S6160C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6160C1)");
    check_base_class_offset(lv, (S2382C30*), 0, "S6160C1");
    check_field_offset(lv, s6160c1f0, ABISELECT(8,4), "S6160C1.s6160c1f0");
    check_field_offset(lv, s6160c1f1, ABISELECT(56,44), "S6160C1.s6160c1f1");
    test_class_info(&lv, &cd_S6160C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6160C1(Test_S6160C1, "S6160C1", ABISELECT(64,48));

#else // __cplusplus

extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
static Base_Class bases_S6160C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6160C1 = {  "S6160C1", // class name
  bases_S6160C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,48), // 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  S10065C2_nt  {
  virtual  ~S10065C2_nt(); // _ZN11S10065C2_ntD1Ev
  virtual void  v6(); // _ZN11S10065C2_nt2v6Ev
  virtual void  v7(); // _ZN11S10065C2_nt2v7Ev
  virtual void  v8(); // _ZN11S10065C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10065C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10065C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10065C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10065C2_nt3v12Ev
  S10065C2_nt(); // tgen
};
//SIG(-1 S10065C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10065C2_nt ::~S10065C2_nt(){ note_dtor("S10065C2_nt", this);}
void  S10065C2_nt ::v6(){vfunc_called(this, "_ZN11S10065C2_nt2v6Ev");}
void  S10065C2_nt ::v7(){vfunc_called(this, "_ZN11S10065C2_nt2v7Ev");}
void  S10065C2_nt ::v8(){vfunc_called(this, "_ZN11S10065C2_nt2v8Ev");}
void  S10065C2_nt ::v9(){vfunc_called(this, "_ZN11S10065C2_nt2v9Ev");}
void  S10065C2_nt ::v10(){vfunc_called(this, "_ZN11S10065C2_nt3v10Ev");}
void  S10065C2_nt ::v11(){vfunc_called(this, "_ZN11S10065C2_nt3v11Ev");}
void  S10065C2_nt ::v12(){vfunc_called(this, "_ZN11S10065C2_nt3v12Ev");}
S10065C2_nt ::S10065C2_nt(){ note_ctor("S10065C2_nt", this);} // tgen

//skip512 S10065C2_nt

#else // __cplusplus

extern void _ZN11S10065C2_ntC1Ev();
extern void _ZN11S10065C2_ntD1Ev();
Name_Map name_map_S10065C2_nt[] = {
  NSPAIR(_ZN11S10065C2_ntC1Ev),
  NSPAIR(_ZN11S10065C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10065C2_nt[];
extern void _ZN11S10065C2_ntD1Ev();
extern void _ZN11S10065C2_ntD0Ev();
extern void _ZN11S10065C2_nt2v6Ev();
extern void _ZN11S10065C2_nt2v7Ev();
extern void _ZN11S10065C2_nt2v8Ev();
extern void _ZN11S10065C2_nt2v9Ev();
extern void _ZN11S10065C2_nt3v10Ev();
extern void _ZN11S10065C2_nt3v11Ev();
extern void _ZN11S10065C2_nt3v12Ev();
static  VTBL_ENTRY vtc_S10065C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10065C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10065C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S10065C2_nt[];
VTBL_ENTRY *P__ZTI11S10065C2_nt = _ZTI11S10065C2_nt; 
extern  VTBL_ENTRY _ZTV11S10065C2_nt[];
Class_Descriptor cd_S10065C2_nt = {  "S10065C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10065C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10065C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10065C2_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  S10065C8_nt  {
  int s10065c8f0;
};
//SIG(-1 S10065C8_nt) C1{ Fi}



//skip512 S10065C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10065C7_nt  {
  ::S10065C8_nt s10065c7f0;
};
//SIG(-1 S10065C7_nt) C1{ FC2{ Fi}}



//skip512 S10065C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10065C1  : S10065C2_nt {
  void *s10065c1f0[2];
  ::S2432C5_nt s10065c1f1[8];
  int s10065c1f2;
  char s10065c1f3;
  void *s10065c1f4;
  ::S2338C13_nt s10065c1f5;
  void *s10065c1f6;
  int s10065c1f7;
  ::S2338C13_nt s10065c1f8;
  ::S888C25_nt s10065c1f9[2];
  ::S10065C7_nt s10065c1f10;
  void *s10065c1f11;
  virtual  ~S10065C1(); // _ZN8S10065C1D1Ev
  virtual void  v1(); // _ZN8S10065C12v1Ev
  virtual void  v2(); // _ZN8S10065C12v2Ev
  virtual void  v3(); // _ZN8S10065C12v3Ev
  virtual void  v4(); // _ZN8S10065C12v4Ev
  virtual void  v5(); // _ZN8S10065C12v5Ev
  S10065C1(); // tgen
};
//SIG(1 S10065C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 Fp[2] FC3{ Fp}[8] Fi Fc Fp FC4{ m FC5{ Fl[4]}} Fp Fi FC4 FC6{ Fi[4]}[2] FC7{ FC8{ Fi}} Fp}


 S10065C1 ::~S10065C1(){ note_dtor("S10065C1", this);}
void  S10065C1 ::v1(){vfunc_called(this, "_ZN8S10065C12v1Ev");}
void  S10065C1 ::v2(){vfunc_called(this, "_ZN8S10065C12v2Ev");}
void  S10065C1 ::v3(){vfunc_called(this, "_ZN8S10065C12v3Ev");}
void  S10065C1 ::v4(){vfunc_called(this, "_ZN8S10065C12v4Ev");}
void  S10065C1 ::v5(){vfunc_called(this, "_ZN8S10065C12v5Ev");}
S10065C1 ::S10065C1(){ note_ctor("S10065C1", this);} // tgen

static void Test_S10065C1()
{
  extern Class_Descriptor cd_S10065C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,35)];
    init_test(&cd_S10065C1, buf);
    S10065C1 *dp, &lv = *(dp=new (buf) S10065C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,136), "sizeof(S10065C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10065C1)");
    check_base_class_offset(lv, (S10065C2_nt*), 0, "S10065C1");
    check_field_offset(lv, s10065c1f0, ABISELECT(8,4), "S10065C1.s10065c1f0");
    check_field_offset(lv, s10065c1f1, ABISELECT(24,12), "S10065C1.s10065c1f1");
    check_field_offset(lv, s10065c1f2, ABISELECT(88,44), "S10065C1.s10065c1f2");
    check_field_offset(lv, s10065c1f3, ABISELECT(92,48), "S10065C1.s10065c1f3");
    check_field_offset(lv, s10065c1f4, ABISELECT(96,52), "S10065C1.s10065c1f4");
    check_field_offset(lv, s10065c1f5, ABISELECT(104,56), "S10065C1.s10065c1f5");
    check_field_offset(lv, s10065c1f6, ABISELECT(136,72), "S10065C1.s10065c1f6");
    check_field_offset(lv, s10065c1f7, ABISELECT(144,76), "S10065C1.s10065c1f7");
    check_field_offset(lv, s10065c1f8, ABISELECT(152,80), "S10065C1.s10065c1f8");
    check_field_offset(lv, s10065c1f9, ABISELECT(184,96), "S10065C1.s10065c1f9");
    check_field_offset(lv, s10065c1f10, ABISELECT(216,128), "S10065C1.s10065c1f10");
    check_field_offset(lv, s10065c1f11, ABISELECT(224,132), "S10065C1.s10065c1f11");
    test_class_info(&lv, &cd_S10065C1);
    dp->~S10065C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10065C1(Test_S10065C1, "S10065C1", ABISELECT(232,136));

#else // __cplusplus

extern void _ZN8S10065C1C1Ev();
extern void _ZN8S10065C1D1Ev();
Name_Map name_map_S10065C1[] = {
  NSPAIR(_ZN8S10065C1C1Ev),
  NSPAIR(_ZN8S10065C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10065C2_nt;
extern VTBL_ENTRY _ZTI11S10065C2_nt[];
extern  VTBL_ENTRY _ZTV11S10065C2_nt[];
static Base_Class bases_S10065C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10065C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10065C1[];
extern void _ZN8S10065C1D1Ev();
extern void _ZN8S10065C1D0Ev();
extern void _ZN11S10065C2_nt2v6Ev();
extern void _ZN11S10065C2_nt2v7Ev();
extern void _ZN11S10065C2_nt2v8Ev();
extern void _ZN11S10065C2_nt2v9Ev();
extern void _ZN11S10065C2_nt3v10Ev();
extern void _ZN11S10065C2_nt3v11Ev();
extern void _ZN11S10065C2_nt3v12Ev();
extern void _ZN8S10065C12v1Ev();
extern void _ZN8S10065C12v2Ev();
extern void _ZN8S10065C12v3Ev();
extern void _ZN8S10065C12v4Ev();
extern void _ZN8S10065C12v5Ev();
static  VTBL_ENTRY vtc_S10065C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10065C1[0]),
  (VTBL_ENTRY)&_ZN8S10065C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10065C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10065C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S10065C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10065C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10065C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10065C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10065C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10065C1[];
extern  VTBL_ENTRY _ZTV8S10065C1[];
Class_Descriptor cd_S10065C1 = {  "S10065C1", // class name
  bases_S10065C1, 1,
  &(vtc_S10065C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,136), // object size
  NSPAIRA(_ZTI8S10065C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10065C1),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  S2091C4  {
  ::S2382C20_nt s2091c4f0;
  int s2091c4f1[2];
  char s2091c4f2;
  virtual  ~S2091C4(); // _ZN7S2091C4D1Ev
  virtual void  v2(); // _ZN7S2091C42v2Ev
  virtual void  v3(); // _ZN7S2091C42v3Ev
  virtual void  v4(); // _ZN7S2091C42v4Ev
  S2091C4(); // tgen
};
//SIG(-1 S2091C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2091C4 ::~S2091C4(){ note_dtor("S2091C4", this);}
void  S2091C4 ::v2(){vfunc_called(this, "_ZN7S2091C42v2Ev");}
void  S2091C4 ::v3(){vfunc_called(this, "_ZN7S2091C42v3Ev");}
void  S2091C4 ::v4(){vfunc_called(this, "_ZN7S2091C42v4Ev");}
S2091C4 ::S2091C4(){ note_ctor("S2091C4", this);} // tgen

static void Test_S2091C4()
{
  extern Class_Descriptor cd_S2091C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2091C4, buf);
    S2091C4 *dp, &lv = *(dp=new (buf) S2091C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2091C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2091C4)");
    check_field_offset(lv, s2091c4f0, ABISELECT(8,4), "S2091C4.s2091c4f0");
    check_field_offset(lv, s2091c4f1, ABISELECT(24,16), "S2091C4.s2091c4f1");
    check_field_offset(lv, s2091c4f2, ABISELECT(32,24), "S2091C4.s2091c4f2");
    test_class_info(&lv, &cd_S2091C4);
    dp->~S2091C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2091C4(Test_S2091C4, "S2091C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2091C4C1Ev();
extern void _ZN7S2091C4D1Ev();
Name_Map name_map_S2091C4[] = {
  NSPAIR(_ZN7S2091C4C1Ev),
  NSPAIR(_ZN7S2091C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2091C4[];
extern void _ZN7S2091C4D1Ev();
extern void _ZN7S2091C4D0Ev();
extern void _ZN7S2091C42v2Ev();
extern void _ZN7S2091C42v3Ev();
extern void _ZN7S2091C42v4Ev();
static  VTBL_ENTRY vtc_S2091C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2091C4[0]),
  (VTBL_ENTRY)&_ZN7S2091C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2091C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2091C4[];
extern  VTBL_ENTRY _ZTV7S2091C4[];
Class_Descriptor cd_S2091C4 = {  "S2091C4", // class name
  0,0,//no base classes
  &(vtc_S2091C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2091C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2091C4),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  S2091C3  : S2091C4 {
  void *s2091c3f0[2];
  int s2091c3f1[2];
  void *s2091c3f2;
  char s2091c3f3;
  void *s2091c3f4;
  virtual  ~S2091C3(); // _ZN7S2091C3D1Ev
  virtual void  v5(); // _ZN7S2091C32v5Ev
  virtual void  v6(); // _ZN7S2091C32v6Ev
  virtual void  v7(); // _ZN7S2091C32v7Ev
  virtual void  v8(); // _ZN7S2091C32v8Ev
  virtual void  v9(); // _ZN7S2091C32v9Ev
  virtual void  v10(); // _ZN7S2091C33v10Ev
  virtual void  v11(); // _ZN7S2091C33v11Ev
  S2091C3(); // tgen
};
//SIG(-1 S2091C3) C1{ BC2{ vd v8 v9 v10 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[2] Fp Fc Fp}


 S2091C3 ::~S2091C3(){ note_dtor("S2091C3", this);}
void  S2091C3 ::v5(){vfunc_called(this, "_ZN7S2091C32v5Ev");}
void  S2091C3 ::v6(){vfunc_called(this, "_ZN7S2091C32v6Ev");}
void  S2091C3 ::v7(){vfunc_called(this, "_ZN7S2091C32v7Ev");}
void  S2091C3 ::v8(){vfunc_called(this, "_ZN7S2091C32v8Ev");}
void  S2091C3 ::v9(){vfunc_called(this, "_ZN7S2091C32v9Ev");}
void  S2091C3 ::v10(){vfunc_called(this, "_ZN7S2091C33v10Ev");}
void  S2091C3 ::v11(){vfunc_called(this, "_ZN7S2091C33v11Ev");}
S2091C3 ::S2091C3(){ note_ctor("S2091C3", this);} // tgen

static void Test_S2091C3()
{
  extern Class_Descriptor cd_S2091C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2091C3, buf);
    S2091C3 *dp, &lv = *(dp=new (buf) S2091C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2091C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2091C3)");
    check_base_class_offset(lv, (S2091C4*), 0, "S2091C3");
    check_field_offset(lv, s2091c3f0, ABISELECT(40,28), "S2091C3.s2091c3f0");
    check_field_offset(lv, s2091c3f1, ABISELECT(56,36), "S2091C3.s2091c3f1");
    check_field_offset(lv, s2091c3f2, ABISELECT(64,44), "S2091C3.s2091c3f2");
    check_field_offset(lv, s2091c3f3, ABISELECT(72,48), "S2091C3.s2091c3f3");
    check_field_offset(lv, s2091c3f4, ABISELECT(80,52), "S2091C3.s2091c3f4");
    test_class_info(&lv, &cd_S2091C3);
    dp->~S2091C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2091C3(Test_S2091C3, "S2091C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2091C3C1Ev();
extern void _ZN7S2091C3D1Ev();
Name_Map name_map_S2091C3[] = {
  NSPAIR(_ZN7S2091C3C1Ev),
  NSPAIR(_ZN7S2091C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2091C4;
extern VTBL_ENTRY _ZTI7S2091C4[];
extern  VTBL_ENTRY _ZTV7S2091C4[];
static Base_Class bases_S2091C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2091C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2091C3[];
extern void _ZN7S2091C3D1Ev();
extern void _ZN7S2091C3D0Ev();
extern void _ZN7S2091C42v2Ev();
extern void _ZN7S2091C42v3Ev();
extern void _ZN7S2091C42v4Ev();
extern void _ZN7S2091C32v5Ev();
extern void _ZN7S2091C32v6Ev();
extern void _ZN7S2091C32v7Ev();
extern void _ZN7S2091C32v8Ev();
extern void _ZN7S2091C32v9Ev();
extern void _ZN7S2091C33v10Ev();
extern void _ZN7S2091C33v11Ev();
static  VTBL_ENTRY vtc_S2091C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2091C3[0]),
  (VTBL_ENTRY)&_ZN7S2091C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2091C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2091C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2091C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S2091C3[];
extern  VTBL_ENTRY _ZTV7S2091C3[];
Class_Descriptor cd_S2091C3 = {  "S2091C3", // class name
  bases_S2091C3, 1,
  &(vtc_S2091C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2091C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2091C3),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  S2091C2  : S2091C3 {
  void *s2091c2f0;
  int s2091c2f1;
  char s2091c2f2;
  void *s2091c2f3;
  char s2091c2f4;
  virtual void  v12(); // _ZN7S2091C23v12Ev
  virtual void  v13(); // _ZN7S2091C23v13Ev
  virtual void  v14(); // _ZN7S2091C23v14Ev
  ~S2091C2(); // tgen
  S2091C2(); // tgen
};
//SIG(-1 S2091C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[2] Fp Fc Fp} v1 v2 v3 Fp Fi Fc Fp Fc}


void  S2091C2 ::v12(){vfunc_called(this, "_ZN7S2091C23v12Ev");}
void  S2091C2 ::v13(){vfunc_called(this, "_ZN7S2091C23v13Ev");}
void  S2091C2 ::v14(){vfunc_called(this, "_ZN7S2091C23v14Ev");}
S2091C2 ::~S2091C2(){ note_dtor("S2091C2", this);} // tgen
S2091C2 ::S2091C2(){ note_ctor("S2091C2", this);} // tgen

static void Test_S2091C2()
{
  extern Class_Descriptor cd_S2091C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S2091C2, buf);
    S2091C2 *dp, &lv = *(dp=new (buf) S2091C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S2091C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2091C2)");
    check_base_class_offset(lv, (S2091C4*)(S2091C3*), 0, "S2091C2");
    check_base_class_offset(lv, (S2091C3*), 0, "S2091C2");
    check_field_offset(lv, s2091c2f0, ABISELECT(88,56), "S2091C2.s2091c2f0");
    check_field_offset(lv, s2091c2f1, ABISELECT(96,60), "S2091C2.s2091c2f1");
    check_field_offset(lv, s2091c2f2, ABISELECT(100,64), "S2091C2.s2091c2f2");
    check_field_offset(lv, s2091c2f3, ABISELECT(104,68), "S2091C2.s2091c2f3");
    check_field_offset(lv, s2091c2f4, ABISELECT(112,72), "S2091C2.s2091c2f4");
    test_class_info(&lv, &cd_S2091C2);
    dp->~S2091C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2091C2(Test_S2091C2, "S2091C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S2091C2C1Ev();
extern void _ZN7S2091C2D1Ev();
Name_Map name_map_S2091C2[] = {
  NSPAIR(_ZN7S2091C2C1Ev),
  NSPAIR(_ZN7S2091C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2091C4;
extern VTBL_ENTRY _ZTI7S2091C4[];
extern  VTBL_ENTRY _ZTV7S2091C4[];
extern Class_Descriptor cd_S2091C3;
extern VTBL_ENTRY _ZTI7S2091C3[];
extern  VTBL_ENTRY _ZTV7S2091C3[];
static Base_Class bases_S2091C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2091C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2091C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2091C2[];
extern void _ZN7S2091C2D1Ev();
extern void _ZN7S2091C2D0Ev();
extern void _ZN7S2091C42v2Ev();
extern void _ZN7S2091C42v3Ev();
extern void _ZN7S2091C42v4Ev();
extern void _ZN7S2091C32v5Ev();
extern void _ZN7S2091C32v6Ev();
extern void _ZN7S2091C32v7Ev();
extern void _ZN7S2091C32v8Ev();
extern void _ZN7S2091C32v9Ev();
extern void _ZN7S2091C33v10Ev();
extern void _ZN7S2091C33v11Ev();
extern void _ZN7S2091C23v12Ev();
extern void _ZN7S2091C23v13Ev();
extern void _ZN7S2091C23v14Ev();
static  VTBL_ENTRY vtc_S2091C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2091C2[0]),
  (VTBL_ENTRY)&_ZN7S2091C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2091C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2091C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2091C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2091C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2091C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2091C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S2091C2[];
extern  VTBL_ENTRY _ZTV7S2091C2[];
Class_Descriptor cd_S2091C2 = {  "S2091C2", // class name
  bases_S2091C2, 2,
  &(vtc_S2091C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S2091C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2091C2),17, //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  S2091C1  : S2091C2 {
  virtual void  v1(); // _ZN7S2091C12v1Ev
  ~S2091C1(); // tgen
  S2091C1(); // tgen
};
//SIG(1 S2091C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v5 v6 v7 v8 v9 v10 v11 Fp[2] Fi[2] Fp Fc Fp} v12 v13 v14 Fp Fi Fc Fp Fc} v1}


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

static void Test_S2091C1()
{
  extern Class_Descriptor cd_S2091C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S2091C1, buf);
    S2091C1 *dp, &lv = *(dp=new (buf) S2091C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S2091C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2091C1)");
    check_base_class_offset(lv, (S2091C4*)(S2091C3*)(S2091C2*), 0, "S2091C1");
    check_base_class_offset(lv, (S2091C3*)(S2091C2*), 0, "S2091C1");
    check_base_class_offset(lv, (S2091C2*), 0, "S2091C1");
    test_class_info(&lv, &cd_S2091C1);
    dp->~S2091C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2091C1(Test_S2091C1, "S2091C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S2091C1C1Ev();
extern void _ZN7S2091C1D1Ev();
Name_Map name_map_S2091C1[] = {
  NSPAIR(_ZN7S2091C1C1Ev),
  NSPAIR(_ZN7S2091C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2091C4;
extern VTBL_ENTRY _ZTI7S2091C4[];
extern  VTBL_ENTRY _ZTV7S2091C4[];
extern Class_Descriptor cd_S2091C3;
extern VTBL_ENTRY _ZTI7S2091C3[];
extern  VTBL_ENTRY _ZTV7S2091C3[];
extern Class_Descriptor cd_S2091C2;
extern VTBL_ENTRY _ZTI7S2091C2[];
extern  VTBL_ENTRY _ZTV7S2091C2[];
static Base_Class bases_S2091C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2091C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2091C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2091C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2091C1[];
extern void _ZN7S2091C1D1Ev();
extern void _ZN7S2091C1D0Ev();
extern void _ZN7S2091C42v2Ev();
extern void _ZN7S2091C42v3Ev();
extern void _ZN7S2091C42v4Ev();
extern void _ZN7S2091C32v5Ev();
extern void _ZN7S2091C32v6Ev();
extern void _ZN7S2091C32v7Ev();
extern void _ZN7S2091C32v8Ev();
extern void _ZN7S2091C32v9Ev();
extern void _ZN7S2091C33v10Ev();
extern void _ZN7S2091C33v11Ev();
extern void _ZN7S2091C23v12Ev();
extern void _ZN7S2091C23v13Ev();
extern void _ZN7S2091C23v14Ev();
extern void _ZN7S2091C12v1Ev();
static  VTBL_ENTRY vtc_S2091C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2091C1[0]),
  (VTBL_ENTRY)&_ZN7S2091C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2091C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2091C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2091C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2091C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2091C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2091C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2091C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2091C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2091C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2091C1[];
extern  VTBL_ENTRY _ZTV7S2091C1[];
Class_Descriptor cd_S2091C1 = {  "S2091C1", // class name
  bases_S2091C1, 3,
  &(vtc_S2091C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S2091C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2091C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5073C3  {
  ::S2382C20_nt s5073c3f0;
  int s5073c3f1[2];
  char s5073c3f2;
  virtual  ~S5073C3(); // _ZN7S5073C3D1Ev
  virtual void  v4(); // _ZN7S5073C32v4Ev
  virtual void  v5(); // _ZN7S5073C32v5Ev
  virtual void  v6(); // _ZN7S5073C32v6Ev
  S5073C3(); // tgen
};
//SIG(-1 S5073C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5073C3 ::~S5073C3(){ note_dtor("S5073C3", this);}
void  S5073C3 ::v4(){vfunc_called(this, "_ZN7S5073C32v4Ev");}
void  S5073C3 ::v5(){vfunc_called(this, "_ZN7S5073C32v5Ev");}
void  S5073C3 ::v6(){vfunc_called(this, "_ZN7S5073C32v6Ev");}
S5073C3 ::S5073C3(){ note_ctor("S5073C3", this);} // tgen

static void Test_S5073C3()
{
  extern Class_Descriptor cd_S5073C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5073C3, buf);
    S5073C3 *dp, &lv = *(dp=new (buf) S5073C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5073C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5073C3)");
    check_field_offset(lv, s5073c3f0, ABISELECT(8,4), "S5073C3.s5073c3f0");
    check_field_offset(lv, s5073c3f1, ABISELECT(24,16), "S5073C3.s5073c3f1");
    check_field_offset(lv, s5073c3f2, ABISELECT(32,24), "S5073C3.s5073c3f2");
    test_class_info(&lv, &cd_S5073C3);
    dp->~S5073C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5073C3(Test_S5073C3, "S5073C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5073C3C1Ev();
extern void _ZN7S5073C3D1Ev();
Name_Map name_map_S5073C3[] = {
  NSPAIR(_ZN7S5073C3C1Ev),
  NSPAIR(_ZN7S5073C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5073C3[];
extern void _ZN7S5073C3D1Ev();
extern void _ZN7S5073C3D0Ev();
extern void _ZN7S5073C32v4Ev();
extern void _ZN7S5073C32v5Ev();
extern void _ZN7S5073C32v6Ev();
static  VTBL_ENTRY vtc_S5073C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5073C3[0]),
  (VTBL_ENTRY)&_ZN7S5073C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5073C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5073C3[];
extern  VTBL_ENTRY _ZTV7S5073C3[];
Class_Descriptor cd_S5073C3 = {  "S5073C3", // class name
  0,0,//no base classes
  &(vtc_S5073C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5073C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5073C3),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  S5073C2  : S5073C3 {
  void *s5073c2f0;
  virtual void  v7(); // _ZN7S5073C22v7Ev
  virtual void  v8(); // _ZN7S5073C22v8Ev
  ~S5073C2(); // tgen
  S5073C2(); // tgen
};
//SIG(-1 S5073C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5073C2 ::v7(){vfunc_called(this, "_ZN7S5073C22v7Ev");}
void  S5073C2 ::v8(){vfunc_called(this, "_ZN7S5073C22v8Ev");}
S5073C2 ::~S5073C2(){ note_dtor("S5073C2", this);} // tgen
S5073C2 ::S5073C2(){ note_ctor("S5073C2", this);} // tgen

static void Test_S5073C2()
{
  extern Class_Descriptor cd_S5073C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5073C2, buf);
    S5073C2 *dp, &lv = *(dp=new (buf) S5073C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5073C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5073C2)");
    check_base_class_offset(lv, (S5073C3*), 0, "S5073C2");
    check_field_offset(lv, s5073c2f0, ABISELECT(40,28), "S5073C2.s5073c2f0");
    test_class_info(&lv, &cd_S5073C2);
    dp->~S5073C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5073C2(Test_S5073C2, "S5073C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5073C2C1Ev();
extern void _ZN7S5073C2D1Ev();
Name_Map name_map_S5073C2[] = {
  NSPAIR(_ZN7S5073C2C1Ev),
  NSPAIR(_ZN7S5073C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5073C3;
extern VTBL_ENTRY _ZTI7S5073C3[];
extern  VTBL_ENTRY _ZTV7S5073C3[];
static Base_Class bases_S5073C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5073C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5073C2[];
extern void _ZN7S5073C2D1Ev();
extern void _ZN7S5073C2D0Ev();
extern void _ZN7S5073C32v4Ev();
extern void _ZN7S5073C32v5Ev();
extern void _ZN7S5073C32v6Ev();
extern void _ZN7S5073C22v7Ev();
extern void _ZN7S5073C22v8Ev();
static  VTBL_ENTRY vtc_S5073C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5073C2[0]),
  (VTBL_ENTRY)&_ZN7S5073C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5073C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5073C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5073C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5073C2[];
extern  VTBL_ENTRY _ZTV7S5073C2[];
Class_Descriptor cd_S5073C2 = {  "S5073C2", // class name
  bases_S5073C2, 1,
  &(vtc_S5073C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5073C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5073C2),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  S5073C8_nt  {
  void *s5073c8f0[2];
  void  mf5073c8(); // _ZN10S5073C8_nt8mf5073c8Ev
};
//SIG(-1 S5073C8_nt) C1{ m Fp[2]}


void  S5073C8_nt ::mf5073c8(){}

//skip512 S5073C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5073C1  : S5073C2 {
  ::S2382C20_nt s5073c1f0;
  ::S2177C16 s5073c1f1;
  ::S100C38_nt s5073c1f2;
  int s5073c1f3;
  ::S2177C16 s5073c1f4;
  void *s5073c1f5[2];
  ::S5073C8_nt s5073c1f6;
  int s5073c1f7;
  ::S2382C20_nt s5073c1f8;
  virtual  ~S5073C1(); // _ZN7S5073C1D1Ev
  virtual void  v1(); // _ZN7S5073C12v1Ev
  virtual void  v2(); // _ZN7S5073C12v2Ev
  virtual void  v3(); // _ZN7S5073C12v3Ev
  S5073C1(); // tgen
};
//SIG(1 S5073C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC4 FC6{ m Fp} FC7{ m Fp[2]} Fi FC6 Fp[2] FC8{ m Fp[2]} Fi FC4}


 S5073C1 ::~S5073C1(){ note_dtor("S5073C1", this);}
void  S5073C1 ::v1(){vfunc_called(this, "_ZN7S5073C12v1Ev");}
void  S5073C1 ::v2(){vfunc_called(this, "_ZN7S5073C12v2Ev");}
void  S5073C1 ::v3(){vfunc_called(this, "_ZN7S5073C12v3Ev");}
S5073C1 ::S5073C1(){ note_ctor("S5073C1", this);} // tgen

static void Test_S5073C1()
{
  extern Class_Descriptor cd_S5073C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,25)];
    init_test(&cd_S5073C1, buf);
    S5073C1 *dp, &lv = *(dp=new (buf) S5073C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S5073C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5073C1)");
    check_base_class_offset(lv, (S5073C3*)(S5073C2*), 0, "S5073C1");
    check_base_class_offset(lv, (S5073C2*), 0, "S5073C1");
    check_field_offset(lv, s5073c1f0, ABISELECT(48,32), "S5073C1.s5073c1f0");
    check_field_offset(lv, s5073c1f1, ABISELECT(64,44), "S5073C1.s5073c1f1");
    check_field_offset(lv, s5073c1f2, ABISELECT(72,48), "S5073C1.s5073c1f2");
    check_field_offset(lv, s5073c1f3, ABISELECT(88,56), "S5073C1.s5073c1f3");
    check_field_offset(lv, s5073c1f4, ABISELECT(96,60), "S5073C1.s5073c1f4");
    check_field_offset(lv, s5073c1f5, ABISELECT(104,64), "S5073C1.s5073c1f5");
    check_field_offset(lv, s5073c1f6, ABISELECT(120,72), "S5073C1.s5073c1f6");
    check_field_offset(lv, s5073c1f7, ABISELECT(136,80), "S5073C1.s5073c1f7");
    check_field_offset(lv, s5073c1f8, ABISELECT(144,84), "S5073C1.s5073c1f8");
    test_class_info(&lv, &cd_S5073C1);
    dp->~S5073C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5073C1(Test_S5073C1, "S5073C1", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN7S5073C1C1Ev();
extern void _ZN7S5073C1D1Ev();
Name_Map name_map_S5073C1[] = {
  NSPAIR(_ZN7S5073C1C1Ev),
  NSPAIR(_ZN7S5073C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5073C3;
extern VTBL_ENTRY _ZTI7S5073C3[];
extern  VTBL_ENTRY _ZTV7S5073C3[];
extern Class_Descriptor cd_S5073C2;
extern VTBL_ENTRY _ZTI7S5073C2[];
extern  VTBL_ENTRY _ZTV7S5073C2[];
static Base_Class bases_S5073C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5073C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5073C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5073C1[];
extern void _ZN7S5073C1D1Ev();
extern void _ZN7S5073C1D0Ev();
extern void _ZN7S5073C32v4Ev();
extern void _ZN7S5073C32v5Ev();
extern void _ZN7S5073C32v6Ev();
extern void _ZN7S5073C22v7Ev();
extern void _ZN7S5073C22v8Ev();
extern void _ZN7S5073C12v1Ev();
extern void _ZN7S5073C12v2Ev();
extern void _ZN7S5073C12v3Ev();
static  VTBL_ENTRY vtc_S5073C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5073C1[0]),
  (VTBL_ENTRY)&_ZN7S5073C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5073C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5073C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5073C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5073C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5073C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5073C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5073C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5073C1[];
extern  VTBL_ENTRY _ZTV7S5073C1[];
Class_Descriptor cd_S5073C1 = {  "S5073C1", // class name
  bases_S5073C1, 2,
  &(vtc_S5073C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI7S5073C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5073C1),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  S10067C2  {
  virtual  ~S10067C2(); // _ZN8S10067C2D1Ev
  virtual void  v6(); // _ZN8S10067C22v6Ev
  virtual void  v7(); // _ZN8S10067C22v7Ev
  virtual void  v8(); // _ZN8S10067C22v8Ev
  virtual void  v9(); // _ZN8S10067C22v9Ev
  virtual void  v10(); // _ZN8S10067C23v10Ev
  virtual void  v11(); // _ZN8S10067C23v11Ev
  virtual void  v12(); // _ZN8S10067C23v12Ev
  S10067C2(); // tgen
};
//SIG(-1 S10067C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10067C2 ::~S10067C2(){ note_dtor("S10067C2", this);}
void  S10067C2 ::v6(){vfunc_called(this, "_ZN8S10067C22v6Ev");}
void  S10067C2 ::v7(){vfunc_called(this, "_ZN8S10067C22v7Ev");}
void  S10067C2 ::v8(){vfunc_called(this, "_ZN8S10067C22v8Ev");}
void  S10067C2 ::v9(){vfunc_called(this, "_ZN8S10067C22v9Ev");}
void  S10067C2 ::v10(){vfunc_called(this, "_ZN8S10067C23v10Ev");}
void  S10067C2 ::v11(){vfunc_called(this, "_ZN8S10067C23v11Ev");}
void  S10067C2 ::v12(){vfunc_called(this, "_ZN8S10067C23v12Ev");}
S10067C2 ::S10067C2(){ note_ctor("S10067C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10067C2C1Ev();
extern void _ZN8S10067C2D1Ev();
Name_Map name_map_S10067C2[] = {
  NSPAIR(_ZN8S10067C2C1Ev),
  NSPAIR(_ZN8S10067C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10067C2[];
extern void _ZN8S10067C2D1Ev();
extern void _ZN8S10067C2D0Ev();
extern void _ZN8S10067C22v6Ev();
extern void _ZN8S10067C22v7Ev();
extern void _ZN8S10067C22v8Ev();
extern void _ZN8S10067C22v9Ev();
extern void _ZN8S10067C23v10Ev();
extern void _ZN8S10067C23v11Ev();
extern void _ZN8S10067C23v12Ev();
static  VTBL_ENTRY vtc_S10067C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10067C2[0]),
  (VTBL_ENTRY)&_ZN8S10067C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10067C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10067C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10067C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10067C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10067C2[];
extern  VTBL_ENTRY _ZTV8S10067C2[];
Class_Descriptor cd_S10067C2 = {  "S10067C2", // class name
  0,0,//no base classes
  &(vtc_S10067C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10067C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10067C2),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  S10067C1  : S10067C2 {
  void *s10067c1f0[2];
  ::S2432C5_nt s10067c1f1[8];
  int s10067c1f2;
  char s10067c1f3;
  void *s10067c1f4;
  ::S2403C17_nt s10067c1f5;
  void *s10067c1f6;
  int s10067c1f7;
  ::S2403C17_nt s10067c1f8;
  ::S888C25_nt s10067c1f9[2];
  ::S10065C7_nt s10067c1f10;
  void *s10067c1f11;
  virtual  ~S10067C1(); // _ZN8S10067C1D1Ev
  virtual void  v1(); // _ZN8S10067C12v1Ev
  virtual void  v2(); // _ZN8S10067C12v2Ev
  virtual void  v3(); // _ZN8S10067C12v3Ev
  virtual void  v4(); // _ZN8S10067C12v4Ev
  virtual void  v5(); // _ZN8S10067C12v5Ev
  S10067C1(); // tgen
};
//SIG(1 S10067C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 Fp[2] FC3{ Fp}[8] Fi Fc Fp FC4{ m FL[4]} Fp Fi FC4 FC5{ Fi[4]}[2] FC6{ FC7{ Fi}} Fp}


 S10067C1 ::~S10067C1(){ note_dtor("S10067C1", this);}
void  S10067C1 ::v1(){vfunc_called(this, "_ZN8S10067C12v1Ev");}
void  S10067C1 ::v2(){vfunc_called(this, "_ZN8S10067C12v2Ev");}
void  S10067C1 ::v3(){vfunc_called(this, "_ZN8S10067C12v3Ev");}
void  S10067C1 ::v4(){vfunc_called(this, "_ZN8S10067C12v4Ev");}
void  S10067C1 ::v5(){vfunc_called(this, "_ZN8S10067C12v5Ev");}
S10067C1 ::S10067C1(){ note_ctor("S10067C1", this);} // tgen

static void Test_S10067C1()
{
  extern Class_Descriptor cd_S10067C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,43)];
    init_test(&cd_S10067C1, buf);
    S10067C1 *dp, &lv = *(dp=new (buf) S10067C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,168), "sizeof(S10067C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10067C1)");
    check_base_class_offset(lv, (S10067C2*), 0, "S10067C1");
    check_field_offset(lv, s10067c1f0, ABISELECT(8,4), "S10067C1.s10067c1f0");
    check_field_offset(lv, s10067c1f1, ABISELECT(24,12), "S10067C1.s10067c1f1");
    check_field_offset(lv, s10067c1f2, ABISELECT(88,44), "S10067C1.s10067c1f2");
    check_field_offset(lv, s10067c1f3, ABISELECT(92,48), "S10067C1.s10067c1f3");
    check_field_offset(lv, s10067c1f4, ABISELECT(96,52), "S10067C1.s10067c1f4");
    check_field_offset(lv, s10067c1f5, ABISELECT(104,56), "S10067C1.s10067c1f5");
    check_field_offset(lv, s10067c1f6, ABISELECT(136,88), "S10067C1.s10067c1f6");
    check_field_offset(lv, s10067c1f7, ABISELECT(144,92), "S10067C1.s10067c1f7");
    check_field_offset(lv, s10067c1f8, ABISELECT(152,96), "S10067C1.s10067c1f8");
    check_field_offset(lv, s10067c1f9, ABISELECT(184,128), "S10067C1.s10067c1f9");
    check_field_offset(lv, s10067c1f10, ABISELECT(216,160), "S10067C1.s10067c1f10");
    check_field_offset(lv, s10067c1f11, ABISELECT(224,164), "S10067C1.s10067c1f11");
    test_class_info(&lv, &cd_S10067C1);
    dp->~S10067C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10067C1(Test_S10067C1, "S10067C1", ABISELECT(232,168));

#else // __cplusplus

extern void _ZN8S10067C1C1Ev();
extern void _ZN8S10067C1D1Ev();
Name_Map name_map_S10067C1[] = {
  NSPAIR(_ZN8S10067C1C1Ev),
  NSPAIR(_ZN8S10067C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10067C2;
extern VTBL_ENTRY _ZTI8S10067C2[];
extern  VTBL_ENTRY _ZTV8S10067C2[];
static Base_Class bases_S10067C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10067C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10067C1[];
extern void _ZN8S10067C1D1Ev();
extern void _ZN8S10067C1D0Ev();
extern void _ZN8S10067C22v6Ev();
extern void _ZN8S10067C22v7Ev();
extern void _ZN8S10067C22v8Ev();
extern void _ZN8S10067C22v9Ev();
extern void _ZN8S10067C23v10Ev();
extern void _ZN8S10067C23v11Ev();
extern void _ZN8S10067C23v12Ev();
extern void _ZN8S10067C12v1Ev();
extern void _ZN8S10067C12v2Ev();
extern void _ZN8S10067C12v3Ev();
extern void _ZN8S10067C12v4Ev();
extern void _ZN8S10067C12v5Ev();
static  VTBL_ENTRY vtc_S10067C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10067C1[0]),
  (VTBL_ENTRY)&_ZN8S10067C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10067C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10067C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10067C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10067C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10067C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10067C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10067C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10067C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10067C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10067C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10067C1[];
extern  VTBL_ENTRY _ZTV8S10067C1[];
Class_Descriptor cd_S10067C1 = {  "S10067C1", // class name
  bases_S10067C1, 1,
  &(vtc_S10067C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,168), // object size
  NSPAIRA(_ZTI8S10067C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10067C1),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  S2089C4  {
  ::S2382C20_nt s2089c4f0;
  int s2089c4f1[2];
  char s2089c4f2;
  virtual  ~S2089C4(); // _ZN7S2089C4D1Ev
  virtual void  v2(); // _ZN7S2089C42v2Ev
  virtual void  v3(); // _ZN7S2089C42v3Ev
  virtual void  v4(); // _ZN7S2089C42v4Ev
  S2089C4(); // tgen
};
//SIG(-1 S2089C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2089C4 ::~S2089C4(){ note_dtor("S2089C4", this);}
void  S2089C4 ::v2(){vfunc_called(this, "_ZN7S2089C42v2Ev");}
void  S2089C4 ::v3(){vfunc_called(this, "_ZN7S2089C42v3Ev");}
void  S2089C4 ::v4(){vfunc_called(this, "_ZN7S2089C42v4Ev");}
S2089C4 ::S2089C4(){ note_ctor("S2089C4", this);} // tgen

static void Test_S2089C4()
{
  extern Class_Descriptor cd_S2089C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2089C4, buf);
    S2089C4 *dp, &lv = *(dp=new (buf) S2089C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2089C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2089C4)");
    check_field_offset(lv, s2089c4f0, ABISELECT(8,4), "S2089C4.s2089c4f0");
    check_field_offset(lv, s2089c4f1, ABISELECT(24,16), "S2089C4.s2089c4f1");
    check_field_offset(lv, s2089c4f2, ABISELECT(32,24), "S2089C4.s2089c4f2");
    test_class_info(&lv, &cd_S2089C4);
    dp->~S2089C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2089C4(Test_S2089C4, "S2089C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2089C4C1Ev();
extern void _ZN7S2089C4D1Ev();
Name_Map name_map_S2089C4[] = {
  NSPAIR(_ZN7S2089C4C1Ev),
  NSPAIR(_ZN7S2089C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2089C4[];
extern void _ZN7S2089C4D1Ev();
extern void _ZN7S2089C4D0Ev();
extern void _ZN7S2089C42v2Ev();
extern void _ZN7S2089C42v3Ev();
extern void _ZN7S2089C42v4Ev();
static  VTBL_ENTRY vtc_S2089C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2089C4[0]),
  (VTBL_ENTRY)&_ZN7S2089C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2089C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2089C4[];
extern  VTBL_ENTRY _ZTV7S2089C4[];
Class_Descriptor cd_S2089C4 = {  "S2089C4", // class name
  0,0,//no base classes
  &(vtc_S2089C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2089C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2089C4),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  S2089C3  : S2089C4 {
  void *s2089c3f0[2];
  int s2089c3f1[2];
  void *s2089c3f2;
  char s2089c3f3;
  void *s2089c3f4;
  virtual  ~S2089C3(); // _ZN7S2089C3D1Ev
  virtual void  v5(); // _ZN7S2089C32v5Ev
  virtual void  v6(); // _ZN7S2089C32v6Ev
  virtual void  v7(); // _ZN7S2089C32v7Ev
  virtual void  v8(); // _ZN7S2089C32v8Ev
  virtual void  v9(); // _ZN7S2089C32v9Ev
  virtual void  v10(); // _ZN7S2089C33v10Ev
  virtual void  v11(); // _ZN7S2089C33v11Ev
  S2089C3(); // tgen
};
//SIG(-1 S2089C3) C1{ BC2{ vd v8 v9 v10 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[2] Fp Fc Fp}


 S2089C3 ::~S2089C3(){ note_dtor("S2089C3", this);}
void  S2089C3 ::v5(){vfunc_called(this, "_ZN7S2089C32v5Ev");}
void  S2089C3 ::v6(){vfunc_called(this, "_ZN7S2089C32v6Ev");}
void  S2089C3 ::v7(){vfunc_called(this, "_ZN7S2089C32v7Ev");}
void  S2089C3 ::v8(){vfunc_called(this, "_ZN7S2089C32v8Ev");}
void  S2089C3 ::v9(){vfunc_called(this, "_ZN7S2089C32v9Ev");}
void  S2089C3 ::v10(){vfunc_called(this, "_ZN7S2089C33v10Ev");}
void  S2089C3 ::v11(){vfunc_called(this, "_ZN7S2089C33v11Ev");}
S2089C3 ::S2089C3(){ note_ctor("S2089C3", this);} // tgen

static void Test_S2089C3()
{
  extern Class_Descriptor cd_S2089C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2089C3, buf);
    S2089C3 *dp, &lv = *(dp=new (buf) S2089C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2089C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2089C3)");
    check_base_class_offset(lv, (S2089C4*), 0, "S2089C3");
    check_field_offset(lv, s2089c3f0, ABISELECT(40,28), "S2089C3.s2089c3f0");
    check_field_offset(lv, s2089c3f1, ABISELECT(56,36), "S2089C3.s2089c3f1");
    check_field_offset(lv, s2089c3f2, ABISELECT(64,44), "S2089C3.s2089c3f2");
    check_field_offset(lv, s2089c3f3, ABISELECT(72,48), "S2089C3.s2089c3f3");
    check_field_offset(lv, s2089c3f4, ABISELECT(80,52), "S2089C3.s2089c3f4");
    test_class_info(&lv, &cd_S2089C3);
    dp->~S2089C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2089C3(Test_S2089C3, "S2089C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2089C3C1Ev();
extern void _ZN7S2089C3D1Ev();
Name_Map name_map_S2089C3[] = {
  NSPAIR(_ZN7S2089C3C1Ev),
  NSPAIR(_ZN7S2089C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2089C4;
extern VTBL_ENTRY _ZTI7S2089C4[];
extern  VTBL_ENTRY _ZTV7S2089C4[];
static Base_Class bases_S2089C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2089C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2089C3[];
extern void _ZN7S2089C3D1Ev();
extern void _ZN7S2089C3D0Ev();
extern void _ZN7S2089C42v2Ev();
extern void _ZN7S2089C42v3Ev();
extern void _ZN7S2089C42v4Ev();
extern void _ZN7S2089C32v5Ev();
extern void _ZN7S2089C32v6Ev();
extern void _ZN7S2089C32v7Ev();
extern void _ZN7S2089C32v8Ev();
extern void _ZN7S2089C32v9Ev();
extern void _ZN7S2089C33v10Ev();
extern void _ZN7S2089C33v11Ev();
static  VTBL_ENTRY vtc_S2089C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2089C3[0]),
  (VTBL_ENTRY)&_ZN7S2089C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2089C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2089C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2089C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S2089C3[];
extern  VTBL_ENTRY _ZTV7S2089C3[];
Class_Descriptor cd_S2089C3 = {  "S2089C3", // class name
  bases_S2089C3, 1,
  &(vtc_S2089C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2089C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2089C3),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  S2089C2  : S2089C3 {
  char s2089c2f0;
  void *s2089c2f1;
  char s2089c2f2;
  virtual void  v12(); // _ZN7S2089C23v12Ev
  virtual void  v13(); // _ZN7S2089C23v13Ev
  virtual void  v14(); // _ZN7S2089C23v14Ev
  ~S2089C2(); // tgen
  S2089C2(); // tgen
};
//SIG(-1 S2089C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[2] Fp Fc Fp} v1 v2 v3 Fc Fp Fc}


void  S2089C2 ::v12(){vfunc_called(this, "_ZN7S2089C23v12Ev");}
void  S2089C2 ::v13(){vfunc_called(this, "_ZN7S2089C23v13Ev");}
void  S2089C2 ::v14(){vfunc_called(this, "_ZN7S2089C23v14Ev");}
S2089C2 ::~S2089C2(){ note_dtor("S2089C2", this);} // tgen
S2089C2 ::S2089C2(){ note_ctor("S2089C2", this);} // tgen

static void Test_S2089C2()
{
  extern Class_Descriptor cd_S2089C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S2089C2, buf);
    S2089C2 *dp, &lv = *(dp=new (buf) S2089C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S2089C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2089C2)");
    check_base_class_offset(lv, (S2089C4*)(S2089C3*), 0, "S2089C2");
    check_base_class_offset(lv, (S2089C3*), 0, "S2089C2");
    check_field_offset(lv, s2089c2f0, ABISELECT(88,56), "S2089C2.s2089c2f0");
    check_field_offset(lv, s2089c2f1, ABISELECT(96,60), "S2089C2.s2089c2f1");
    check_field_offset(lv, s2089c2f2, ABISELECT(104,64), "S2089C2.s2089c2f2");
    test_class_info(&lv, &cd_S2089C2);
    dp->~S2089C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2089C2(Test_S2089C2, "S2089C2", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S2089C2C1Ev();
extern void _ZN7S2089C2D1Ev();
Name_Map name_map_S2089C2[] = {
  NSPAIR(_ZN7S2089C2C1Ev),
  NSPAIR(_ZN7S2089C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2089C4;
extern VTBL_ENTRY _ZTI7S2089C4[];
extern  VTBL_ENTRY _ZTV7S2089C4[];
extern Class_Descriptor cd_S2089C3;
extern VTBL_ENTRY _ZTI7S2089C3[];
extern  VTBL_ENTRY _ZTV7S2089C3[];
static Base_Class bases_S2089C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2089C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2089C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2089C2[];
extern void _ZN7S2089C2D1Ev();
extern void _ZN7S2089C2D0Ev();
extern void _ZN7S2089C42v2Ev();
extern void _ZN7S2089C42v3Ev();
extern void _ZN7S2089C42v4Ev();
extern void _ZN7S2089C32v5Ev();
extern void _ZN7S2089C32v6Ev();
extern void _ZN7S2089C32v7Ev();
extern void _ZN7S2089C32v8Ev();
extern void _ZN7S2089C32v9Ev();
extern void _ZN7S2089C33v10Ev();
extern void _ZN7S2089C33v11Ev();
extern void _ZN7S2089C23v12Ev();
extern void _ZN7S2089C23v13Ev();
extern void _ZN7S2089C23v14Ev();
static  VTBL_ENTRY vtc_S2089C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2089C2[0]),
  (VTBL_ENTRY)&_ZN7S2089C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2089C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2089C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2089C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2089C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2089C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2089C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S2089C2[];
extern  VTBL_ENTRY _ZTV7S2089C2[];
Class_Descriptor cd_S2089C2 = {  "S2089C2", // class name
  bases_S2089C2, 2,
  &(vtc_S2089C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S2089C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2089C2),17, //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  S2089C1  : S2089C2 {
  virtual  ~S2089C1(); // _ZN7S2089C1D1Ev
  virtual void  v1(); // _ZN7S2089C12v1Ev
  S2089C1(); // tgen
};
//SIG(1 S2089C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v5 v6 v7 v8 v9 v10 v11 Fp[2] Fi[2] Fp Fc Fp} v12 v13 v14 Fc Fp Fc} vd v1}


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

static void Test_S2089C1()
{
  extern Class_Descriptor cd_S2089C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S2089C1, buf);
    S2089C1 *dp, &lv = *(dp=new (buf) S2089C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S2089C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2089C1)");
    check_base_class_offset(lv, (S2089C4*)(S2089C3*)(S2089C2*), 0, "S2089C1");
    check_base_class_offset(lv, (S2089C3*)(S2089C2*), 0, "S2089C1");
    check_base_class_offset(lv, (S2089C2*), 0, "S2089C1");
    test_class_info(&lv, &cd_S2089C1);
    dp->~S2089C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2089C1(Test_S2089C1, "S2089C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S2089C1C1Ev();
extern void _ZN7S2089C1D1Ev();
Name_Map name_map_S2089C1[] = {
  NSPAIR(_ZN7S2089C1C1Ev),
  NSPAIR(_ZN7S2089C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2089C4;
extern VTBL_ENTRY _ZTI7S2089C4[];
extern  VTBL_ENTRY _ZTV7S2089C4[];
extern Class_Descriptor cd_S2089C3;
extern VTBL_ENTRY _ZTI7S2089C3[];
extern  VTBL_ENTRY _ZTV7S2089C3[];
extern Class_Descriptor cd_S2089C2;
extern VTBL_ENTRY _ZTI7S2089C2[];
extern  VTBL_ENTRY _ZTV7S2089C2[];
static Base_Class bases_S2089C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2089C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2089C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2089C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2089C1[];
extern void _ZN7S2089C1D1Ev();
extern void _ZN7S2089C1D0Ev();
extern void _ZN7S2089C42v2Ev();
extern void _ZN7S2089C42v3Ev();
extern void _ZN7S2089C42v4Ev();
extern void _ZN7S2089C32v5Ev();
extern void _ZN7S2089C32v6Ev();
extern void _ZN7S2089C32v7Ev();
extern void _ZN7S2089C32v8Ev();
extern void _ZN7S2089C32v9Ev();
extern void _ZN7S2089C33v10Ev();
extern void _ZN7S2089C33v11Ev();
extern void _ZN7S2089C23v12Ev();
extern void _ZN7S2089C23v13Ev();
extern void _ZN7S2089C23v14Ev();
extern void _ZN7S2089C12v1Ev();
static  VTBL_ENTRY vtc_S2089C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2089C1[0]),
  (VTBL_ENTRY)&_ZN7S2089C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2089C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2089C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2089C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2089C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2089C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2089C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2089C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2089C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2089C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2089C1[];
extern  VTBL_ENTRY _ZTV7S2089C1[];
Class_Descriptor cd_S2089C1 = {  "S2089C1", // class name
  bases_S2089C1, 3,
  &(vtc_S2089C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S2089C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2089C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


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

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

#else // __cplusplus

extern void _ZN8S19274C3C1Ev();
extern void _ZN8S19274C3D1Ev();
Name_Map name_map_S19274C3[] = {
  NSPAIR(_ZN8S19274C3C1Ev),
  NSPAIR(_ZN8S19274C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19274C3[];
extern void _ZN8S19274C32v1Ev();
static  VTBL_ENTRY vtc_S19274C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19274C3[0]),
  (VTBL_ENTRY)&_ZN8S19274C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19274C3[];
extern  VTBL_ENTRY _ZTV8S19274C3[];
Class_Descriptor cd_S19274C3 = {  "S19274C3", // class name
  0,0,//no base classes
  &(vtc_S19274C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19274C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19274C3),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  S19274C4  : S19274C3 {
  void *s19274c4f0;
  int s19274c4f1[2];
  char s19274c4f2[2];
  virtual  ~S19274C4(); // _ZN8S19274C4D1Ev
  S19274C4(); // tgen
};
//SIG(-1 S19274C4) C1{ BC2{ v1} vd Fp Fi[2] Fc[2]}


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

static void Test_S19274C4()
{
  extern Class_Descriptor cd_S19274C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19274C4, buf);
    S19274C4 *dp, &lv = *(dp=new (buf) S19274C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19274C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19274C4)");
    check_base_class_offset(lv, (S19274C3*), 0, "S19274C4");
    check_field_offset(lv, s19274c4f0, ABISELECT(8,4), "S19274C4.s19274c4f0");
    check_field_offset(lv, s19274c4f1, ABISELECT(16,8), "S19274C4.s19274c4f1");
    check_field_offset(lv, s19274c4f2, ABISELECT(24,16), "S19274C4.s19274c4f2");
    test_class_info(&lv, &cd_S19274C4);
    dp->~S19274C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19274C4(Test_S19274C4, "S19274C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19274C4C1Ev();
extern void _ZN8S19274C4D1Ev();
Name_Map name_map_S19274C4[] = {
  NSPAIR(_ZN8S19274C4C1Ev),
  NSPAIR(_ZN8S19274C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19274C3;
extern VTBL_ENTRY _ZTI8S19274C3[];
extern  VTBL_ENTRY _ZTV8S19274C3[];
static Base_Class bases_S19274C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19274C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19274C4[];
extern void _ZN8S19274C32v1Ev();
extern void _ZN8S19274C4D1Ev();
extern void _ZN8S19274C4D0Ev();
static  VTBL_ENTRY vtc_S19274C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19274C4[0]),
  (VTBL_ENTRY)&_ZN8S19274C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19274C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19274C4D0Ev,
};
extern VTBL_ENTRY _ZTI8S19274C4[];
extern  VTBL_ENTRY _ZTV8S19274C4[];
Class_Descriptor cd_S19274C4 = {  "S19274C4", // class name
  bases_S19274C4, 1,
  &(vtc_S19274C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19274C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19274C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19274C2  : S19274C3 , S19274C4 {
  int s19274c2f0;
  char s19274c2f1;
  virtual  ~S19274C2(); // _ZN8S19274C2D1Ev
  virtual void  v2(); // _ZN8S19274C22v2Ev
  virtual void  v3(); // _ZN8S19274C22v3Ev
  S19274C2(); // tgen
};
//SIG(-1 S19274C2) C1{ BC2{ v3} BC3{ BC2 vd Fp Fi[2] Fc[2]} vd v1 v2 Fi Fc}


 S19274C2 ::~S19274C2(){ note_dtor("S19274C2", this);}
void  S19274C2 ::v2(){vfunc_called(this, "_ZN8S19274C22v2Ev");}
void  S19274C2 ::v3(){vfunc_called(this, "_ZN8S19274C22v3Ev");}
S19274C2 ::S19274C2(){ note_ctor("S19274C2", this);} // tgen

static void Test_S19274C2()
{
  extern Class_Descriptor cd_S19274C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19274C2, buf);
    S19274C2 *dp, &lv = *(dp=new (buf) S19274C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19274C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19274C2)");
    /*is_ambiguous_... S19274C2::S19274C3 */ AMB_check_base_class_offset(lv, (S19274C3*), 0, "S19274C2");
    check_base_class_offset(lv, (S19274C3*)(S19274C4*), ABISELECT(8,4), "S19274C2");
    check_base_class_offset(lv, (S19274C4*), ABISELECT(8,4), "S19274C2");
    check_field_offset(lv, s19274c2f0, ABISELECT(36,24), "S19274C2.s19274c2f0");
    check_field_offset(lv, s19274c2f1, ABISELECT(40,28), "S19274C2.s19274c2f1");
    test_class_info(&lv, &cd_S19274C2);
    dp->~S19274C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19274C2(Test_S19274C2, "S19274C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S19274C2C1Ev();
extern void _ZN8S19274C2D1Ev();
Name_Map name_map_S19274C2[] = {
  NSPAIR(_ZN8S19274C2C1Ev),
  NSPAIR(_ZN8S19274C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19274C3;
extern VTBL_ENTRY _ZTI8S19274C3[];
extern  VTBL_ENTRY _ZTV8S19274C3[];
extern Class_Descriptor cd_S19274C3;
extern VTBL_ENTRY _ZTI8S19274C3[];
extern  VTBL_ENTRY _ZTV8S19274C3[];
extern Class_Descriptor cd_S19274C4;
extern VTBL_ENTRY _ZTI8S19274C4[];
extern  VTBL_ENTRY _ZTV8S19274C4[];
static Base_Class bases_S19274C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19274C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19274C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19274C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19274C2[];
extern void _ZN8S19274C32v1Ev();
extern void _ZN8S19274C2D1Ev();
extern void _ZN8S19274C2D0Ev();
extern void _ZN8S19274C22v2Ev();
extern void _ZN8S19274C22v3Ev();
extern void _ZN8S19274C32v1Ev();
extern void ABISELECT(_ZThn8_N8S19274C2D1Ev,_ZThn4_N8S19274C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S19274C2D0Ev,_ZThn4_N8S19274C2D0Ev)();
static  VTBL_ENTRY vtc_S19274C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19274C2[0]),
  (VTBL_ENTRY)&_ZN8S19274C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19274C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19274C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19274C22v2Ev,
  (VTBL_ENTRY)&_ZN8S19274C22v3Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19274C2[0]),
  (VTBL_ENTRY)&_ZN8S19274C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19274C2D1Ev,_ZThn4_N8S19274C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19274C2D0Ev,_ZThn4_N8S19274C2D0Ev),
};
extern VTBL_ENTRY _ZTI8S19274C2[];
extern  VTBL_ENTRY _ZTV8S19274C2[];
Class_Descriptor cd_S19274C2 = {  "S19274C2", // class name
  bases_S19274C2, 3,
  &(vtc_S19274C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S19274C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19274C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19274C1  : virtual S19274C2 , virtual S19274C3 {
  ::S7568C6 s19274c1f0;
  long double s19274c1f1;
  virtual  ~S19274C1(); // _ZN8S19274C1D2Ev
  S19274C1(); // tgen
};
//SIG(1 S19274C1) C1{ VBC2{ BC3{ v1} BC4{ BC3 vd Fp Fi[2] Fc[2]} vd v2 v3 Fi Fc} VBC3 vd FC5{ VBC6{ BC7{ v4} BC8{ BC7 vd Fp Fi[2] Fc[2]} vd v5 v6 Fi Fc} BC9{ BC8 v7 v8 v9 FC10{ VBC7 VBC8 FD[5] Fs[3] Fi}} BC8} FD}


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

static void Test_S19274C1()
{
  extern Class_Descriptor cd_S19274C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,55)];
    init_test(&cd_S19274C1, buf);
    S19274C1 *dp, &lv = *(dp=new (buf) S19274C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,216), "sizeof(S19274C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19274C1)");
    /*is_ambiguous_... S19274C2::S19274C3 */ AMB_check_base_class_offset(lv, (S19274C3*)(S19274C2*), ABISELECT(288,184), "S19274C1");
    check_base_class_offset(lv, (S19274C3*)(S19274C4*)(S19274C2*), ABISELECT(296,188), "S19274C1");
    check_base_class_offset(lv, (S19274C4*)(S19274C2*), ABISELECT(296,188), "S19274C1");
    check_base_class_offset(lv, (S19274C2*), ABISELECT(288,184), "S19274C1");
    /*is_ambiguous_... S19274C1::S19274C3 */ AMB_check_base_class_offset(lv, (S19274C3*), 0, "S19274C1");
    check_field_offset(lv, s19274c1f0, ABISELECT(16,4), "S19274C1.s19274c1f0");
    check_field_offset(lv, s19274c1f1, ABISELECT(272,172), "S19274C1.s19274c1f1");
    test_class_info(&lv, &cd_S19274C1);
    dp->~S19274C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19274C1(Test_S19274C1, "S19274C1", ABISELECT(336,216));

#else // __cplusplus

extern void _ZN8S19274C1C1Ev();
extern void _ZN8S19274C1D2Ev();
Name_Map name_map_S19274C1[] = {
  NSPAIR(_ZN8S19274C1C1Ev),
  NSPAIR(_ZN8S19274C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19274C3;
extern VTBL_ENTRY _ZTI8S19274C3[];
extern  VTBL_ENTRY _ZTV8S19274C3[];
extern Class_Descriptor cd_S19274C3;
extern VTBL_ENTRY _ZTI8S19274C3[];
extern  VTBL_ENTRY _ZTV8S19274C3[];
extern Class_Descriptor cd_S19274C4;
extern VTBL_ENTRY _ZTI8S19274C4[];
extern  VTBL_ENTRY _ZTV8S19274C4[];
extern Class_Descriptor cd_S19274C2;
extern VTBL_ENTRY _ZTI8S19274C2[];
extern  VTBL_ENTRY _ZTV8S19274C2[];
extern Class_Descriptor cd_S19274C3;
extern VTBL_ENTRY _ZTI8S19274C3[];
extern  VTBL_ENTRY _ZTV8S19274C3[];
static Base_Class bases_S19274C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19274C3,    ABISELECT(288,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19274C3,    ABISELECT(296,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19274C4,    ABISELECT(296,188), //bcp->offset
    19, //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19274C2,    ABISELECT(288,184), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19274C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19274C1[];
extern void _ZN8S19274C32v1Ev();
extern void _ZN8S19274C1D1Ev();
extern void _ZN8S19274C1D0Ev();
extern void _ZN8S19274C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19274C1D1Ev,_ZTv0_n16_N8S19274C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S19274C1D1Ev,_ZThn184_N8S19274C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19274C1D0Ev,_ZTv0_n16_N8S19274C1D0Ev)();
extern void ABISELECT(_ZThn288_N8S19274C1D0Ev,_ZThn184_N8S19274C1D0Ev)() __attribute__((weak));
extern void _ZN8S19274C22v2Ev();
extern void _ZN8S19274C22v3Ev();
extern void _ZN8S19274C32v1Ev();
extern void ABISELECT(_ZTvn8_n32_N8S19274C1D1Ev,_ZTvn4_n16_N8S19274C1D1Ev)();
extern void ABISELECT(_ZTvn8_n32_N8S19274C1D0Ev,_ZTvn4_n16_N8S19274C1D0Ev)();
static  VTBL_ENTRY vtc_S19274C1[] = {
  0,
  ABISELECT(288,184),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19274C1[0]),
  (VTBL_ENTRY)&_ZN8S19274C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19274C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19274C1D0Ev,
  0,
  0,
  ABISELECT(-288,-184),
  0,
  ABISELECT(-288,-184),
  (VTBL_ENTRY)&(_ZTI8S19274C1[0]),
  (VTBL_ENTRY)&_ZN8S19274C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19274C1D1Ev,_ZTv0_n16_N8S19274C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19274C1D0Ev,_ZTv0_n16_N8S19274C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19274C22v2Ev,
  (VTBL_ENTRY)&_ZN8S19274C22v3Ev,
  ABISELECT(-296,-188),
  (VTBL_ENTRY)&(_ZTI8S19274C1[0]),
  (VTBL_ENTRY)&_ZN8S19274C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N8S19274C1D1Ev,_ZTvn4_n16_N8S19274C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n32_N8S19274C1D0Ev,_ZTvn4_n16_N8S19274C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19274C1[];
static  VTT_ENTRY vtt_S19274C1[] = {
  {&(_ZTV8S19274C1[5]),  5,24},
  {&(_ZTV8S19274C1[14]),  14,24},
  {&(_ZTV8S19274C1[21]),  21,24},
  {&(_ZTV8S19274C1[5]),  5,24},
};
extern VTBL_ENTRY _ZTI8S19274C1[];
extern  VTBL_ENTRY _ZTV8S19274C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19274C1[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19274C1D0Ev,_ZTv0_n16_N8S19274C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19274C1D0Ev,_ZThn184_N8S19274C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19274C1D1Ev,_ZTv0_n16_N8S19274C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19274C1D1Ev,_ZThn184_N8S19274C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19274C1 = {  "S19274C1", // class name
  bases_S19274C1, 5,
  &(vtc_S19274C1[0]), // expected_vtbl_contents
  &(vtt_S19274C1[0]), // expected_vtt_contents
  ABISELECT(336,216), // object size
  NSPAIRA(_ZTI8S19274C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19274C1),24, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19274C1),4, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2088C4  {
  ::S2382C20_nt s2088c4f0;
  int s2088c4f1[2];
  char s2088c4f2;
  virtual  ~S2088C4(); // _ZN7S2088C4D1Ev
  virtual void  v2(); // _ZN7S2088C42v2Ev
  virtual void  v3(); // _ZN7S2088C42v3Ev
  virtual void  v4(); // _ZN7S2088C42v4Ev
  S2088C4(); // tgen
};
//SIG(-1 S2088C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2088C4 ::~S2088C4(){ note_dtor("S2088C4", this);}
void  S2088C4 ::v2(){vfunc_called(this, "_ZN7S2088C42v2Ev");}
void  S2088C4 ::v3(){vfunc_called(this, "_ZN7S2088C42v3Ev");}
void  S2088C4 ::v4(){vfunc_called(this, "_ZN7S2088C42v4Ev");}
S2088C4 ::S2088C4(){ note_ctor("S2088C4", this);} // tgen

static void Test_S2088C4()
{
  extern Class_Descriptor cd_S2088C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2088C4, buf);
    S2088C4 *dp, &lv = *(dp=new (buf) S2088C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2088C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2088C4)");
    check_field_offset(lv, s2088c4f0, ABISELECT(8,4), "S2088C4.s2088c4f0");
    check_field_offset(lv, s2088c4f1, ABISELECT(24,16), "S2088C4.s2088c4f1");
    check_field_offset(lv, s2088c4f2, ABISELECT(32,24), "S2088C4.s2088c4f2");
    test_class_info(&lv, &cd_S2088C4);
    dp->~S2088C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2088C4(Test_S2088C4, "S2088C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2088C4C1Ev();
extern void _ZN7S2088C4D1Ev();
Name_Map name_map_S2088C4[] = {
  NSPAIR(_ZN7S2088C4C1Ev),
  NSPAIR(_ZN7S2088C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2088C4[];
extern void _ZN7S2088C4D1Ev();
extern void _ZN7S2088C4D0Ev();
extern void _ZN7S2088C42v2Ev();
extern void _ZN7S2088C42v3Ev();
extern void _ZN7S2088C42v4Ev();
static  VTBL_ENTRY vtc_S2088C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2088C4[0]),
  (VTBL_ENTRY)&_ZN7S2088C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2088C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2088C4[];
extern  VTBL_ENTRY _ZTV7S2088C4[];
Class_Descriptor cd_S2088C4 = {  "S2088C4", // class name
  0,0,//no base classes
  &(vtc_S2088C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2088C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2088C4),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  S2088C3  : S2088C4 {
  void *s2088c3f0[2];
  int s2088c3f1[2];
  void *s2088c3f2;
  char s2088c3f3;
  void *s2088c3f4;
  virtual  ~S2088C3(); // _ZN7S2088C3D1Ev
  virtual void  v5(); // _ZN7S2088C32v5Ev
  virtual void  v6(); // _ZN7S2088C32v6Ev
  virtual void  v7(); // _ZN7S2088C32v7Ev
  virtual void  v8(); // _ZN7S2088C32v8Ev
  virtual void  v9(); // _ZN7S2088C32v9Ev
  virtual void  v10(); // _ZN7S2088C33v10Ev
  virtual void  v11(); // _ZN7S2088C33v11Ev
  S2088C3(); // tgen
};
//SIG(-1 S2088C3) C1{ BC2{ vd v8 v9 v10 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[2] Fp Fc Fp}


 S2088C3 ::~S2088C3(){ note_dtor("S2088C3", this);}
void  S2088C3 ::v5(){vfunc_called(this, "_ZN7S2088C32v5Ev");}
void  S2088C3 ::v6(){vfunc_called(this, "_ZN7S2088C32v6Ev");}
void  S2088C3 ::v7(){vfunc_called(this, "_ZN7S2088C32v7Ev");}
void  S2088C3 ::v8(){vfunc_called(this, "_ZN7S2088C32v8Ev");}
void  S2088C3 ::v9(){vfunc_called(this, "_ZN7S2088C32v9Ev");}
void  S2088C3 ::v10(){vfunc_called(this, "_ZN7S2088C33v10Ev");}
void  S2088C3 ::v11(){vfunc_called(this, "_ZN7S2088C33v11Ev");}
S2088C3 ::S2088C3(){ note_ctor("S2088C3", this);} // tgen

static void Test_S2088C3()
{
  extern Class_Descriptor cd_S2088C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2088C3, buf);
    S2088C3 *dp, &lv = *(dp=new (buf) S2088C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2088C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2088C3)");
    check_base_class_offset(lv, (S2088C4*), 0, "S2088C3");
    check_field_offset(lv, s2088c3f0, ABISELECT(40,28), "S2088C3.s2088c3f0");
    check_field_offset(lv, s2088c3f1, ABISELECT(56,36), "S2088C3.s2088c3f1");
    check_field_offset(lv, s2088c3f2, ABISELECT(64,44), "S2088C3.s2088c3f2");
    check_field_offset(lv, s2088c3f3, ABISELECT(72,48), "S2088C3.s2088c3f3");
    check_field_offset(lv, s2088c3f4, ABISELECT(80,52), "S2088C3.s2088c3f4");
    test_class_info(&lv, &cd_S2088C3);
    dp->~S2088C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2088C3(Test_S2088C3, "S2088C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2088C3C1Ev();
extern void _ZN7S2088C3D1Ev();
Name_Map name_map_S2088C3[] = {
  NSPAIR(_ZN7S2088C3C1Ev),
  NSPAIR(_ZN7S2088C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2088C4;
extern VTBL_ENTRY _ZTI7S2088C4[];
extern  VTBL_ENTRY _ZTV7S2088C4[];
static Base_Class bases_S2088C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2088C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2088C3[];
extern void _ZN7S2088C3D1Ev();
extern void _ZN7S2088C3D0Ev();
extern void _ZN7S2088C42v2Ev();
extern void _ZN7S2088C42v3Ev();
extern void _ZN7S2088C42v4Ev();
extern void _ZN7S2088C32v5Ev();
extern void _ZN7S2088C32v6Ev();
extern void _ZN7S2088C32v7Ev();
extern void _ZN7S2088C32v8Ev();
extern void _ZN7S2088C32v9Ev();
extern void _ZN7S2088C33v10Ev();
extern void _ZN7S2088C33v11Ev();
static  VTBL_ENTRY vtc_S2088C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2088C3[0]),
  (VTBL_ENTRY)&_ZN7S2088C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2088C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2088C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2088C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S2088C3[];
extern  VTBL_ENTRY _ZTV7S2088C3[];
Class_Descriptor cd_S2088C3 = {  "S2088C3", // class name
  bases_S2088C3, 1,
  &(vtc_S2088C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2088C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2088C3),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  S2088C2  : S2088C3 {
  char s2088c2f0;
  void *s2088c2f1;
  char s2088c2f2;
  virtual void  v12(); // _ZN7S2088C23v12Ev
  virtual void  v13(); // _ZN7S2088C23v13Ev
  virtual void  v14(); // _ZN7S2088C23v14Ev
  ~S2088C2(); // tgen
  S2088C2(); // tgen
};
//SIG(-1 S2088C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[2] Fp Fc Fp} v1 v2 v3 Fc Fp Fc}


void  S2088C2 ::v12(){vfunc_called(this, "_ZN7S2088C23v12Ev");}
void  S2088C2 ::v13(){vfunc_called(this, "_ZN7S2088C23v13Ev");}
void  S2088C2 ::v14(){vfunc_called(this, "_ZN7S2088C23v14Ev");}
S2088C2 ::~S2088C2(){ note_dtor("S2088C2", this);} // tgen
S2088C2 ::S2088C2(){ note_ctor("S2088C2", this);} // tgen

static void Test_S2088C2()
{
  extern Class_Descriptor cd_S2088C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S2088C2, buf);
    S2088C2 *dp, &lv = *(dp=new (buf) S2088C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S2088C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2088C2)");
    check_base_class_offset(lv, (S2088C4*)(S2088C3*), 0, "S2088C2");
    check_base_class_offset(lv, (S2088C3*), 0, "S2088C2");
    check_field_offset(lv, s2088c2f0, ABISELECT(88,56), "S2088C2.s2088c2f0");
    check_field_offset(lv, s2088c2f1, ABISELECT(96,60), "S2088C2.s2088c2f1");
    check_field_offset(lv, s2088c2f2, ABISELECT(104,64), "S2088C2.s2088c2f2");
    test_class_info(&lv, &cd_S2088C2);
    dp->~S2088C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2088C2(Test_S2088C2, "S2088C2", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S2088C2C1Ev();
extern void _ZN7S2088C2D1Ev();
Name_Map name_map_S2088C2[] = {
  NSPAIR(_ZN7S2088C2C1Ev),
  NSPAIR(_ZN7S2088C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2088C4;
extern VTBL_ENTRY _ZTI7S2088C4[];
extern  VTBL_ENTRY _ZTV7S2088C4[];
extern Class_Descriptor cd_S2088C3;
extern VTBL_ENTRY _ZTI7S2088C3[];
extern  VTBL_ENTRY _ZTV7S2088C3[];
static Base_Class bases_S2088C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2088C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2088C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2088C2[];
extern void _ZN7S2088C2D1Ev();
extern void _ZN7S2088C2D0Ev();
extern void _ZN7S2088C42v2Ev();
extern void _ZN7S2088C42v3Ev();
extern void _ZN7S2088C42v4Ev();
extern void _ZN7S2088C32v5Ev();
extern void _ZN7S2088C32v6Ev();
extern void _ZN7S2088C32v7Ev();
extern void _ZN7S2088C32v8Ev();
extern void _ZN7S2088C32v9Ev();
extern void _ZN7S2088C33v10Ev();
extern void _ZN7S2088C33v11Ev();
extern void _ZN7S2088C23v12Ev();
extern void _ZN7S2088C23v13Ev();
extern void _ZN7S2088C23v14Ev();
static  VTBL_ENTRY vtc_S2088C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2088C2[0]),
  (VTBL_ENTRY)&_ZN7S2088C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2088C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2088C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2088C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2088C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2088C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2088C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S2088C2[];
extern  VTBL_ENTRY _ZTV7S2088C2[];
Class_Descriptor cd_S2088C2 = {  "S2088C2", // class name
  bases_S2088C2, 2,
  &(vtc_S2088C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S2088C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2088C2),17, //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  S2088C1  : S2088C2 {
  virtual void  v1(); // _ZN7S2088C12v1Ev
  ~S2088C1(); // tgen
  S2088C1(); // tgen
};
//SIG(1 S2088C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v5 v6 v7 v8 v9 v10 v11 Fp[2] Fi[2] Fp Fc Fp} v12 v13 v14 Fc Fp Fc} v1}


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

static void Test_S2088C1()
{
  extern Class_Descriptor cd_S2088C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S2088C1, buf);
    S2088C1 *dp, &lv = *(dp=new (buf) S2088C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S2088C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2088C1)");
    check_base_class_offset(lv, (S2088C4*)(S2088C3*)(S2088C2*), 0, "S2088C1");
    check_base_class_offset(lv, (S2088C3*)(S2088C2*), 0, "S2088C1");
    check_base_class_offset(lv, (S2088C2*), 0, "S2088C1");
    test_class_info(&lv, &cd_S2088C1);
    dp->~S2088C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2088C1(Test_S2088C1, "S2088C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S2088C1C1Ev();
extern void _ZN7S2088C1D1Ev();
Name_Map name_map_S2088C1[] = {
  NSPAIR(_ZN7S2088C1C1Ev),
  NSPAIR(_ZN7S2088C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2088C4;
extern VTBL_ENTRY _ZTI7S2088C4[];
extern  VTBL_ENTRY _ZTV7S2088C4[];
extern Class_Descriptor cd_S2088C3;
extern VTBL_ENTRY _ZTI7S2088C3[];
extern  VTBL_ENTRY _ZTV7S2088C3[];
extern Class_Descriptor cd_S2088C2;
extern VTBL_ENTRY _ZTI7S2088C2[];
extern  VTBL_ENTRY _ZTV7S2088C2[];
static Base_Class bases_S2088C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2088C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2088C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2088C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2088C1[];
extern void _ZN7S2088C1D1Ev();
extern void _ZN7S2088C1D0Ev();
extern void _ZN7S2088C42v2Ev();
extern void _ZN7S2088C42v3Ev();
extern void _ZN7S2088C42v4Ev();
extern void _ZN7S2088C32v5Ev();
extern void _ZN7S2088C32v6Ev();
extern void _ZN7S2088C32v7Ev();
extern void _ZN7S2088C32v8Ev();
extern void _ZN7S2088C32v9Ev();
extern void _ZN7S2088C33v10Ev();
extern void _ZN7S2088C33v11Ev();
extern void _ZN7S2088C23v12Ev();
extern void _ZN7S2088C23v13Ev();
extern void _ZN7S2088C23v14Ev();
extern void _ZN7S2088C12v1Ev();
static  VTBL_ENTRY vtc_S2088C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2088C1[0]),
  (VTBL_ENTRY)&_ZN7S2088C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2088C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2088C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2088C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2088C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2088C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2088C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2088C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2088C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2088C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2088C1[];
extern  VTBL_ENTRY _ZTV7S2088C1[];
Class_Descriptor cd_S2088C1 = {  "S2088C1", // class name
  bases_S2088C1, 3,
  &(vtc_S2088C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S2088C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2088C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2090C4  {
  ::S2382C20_nt s2090c4f0;
  int s2090c4f1[2];
  char s2090c4f2;
  virtual  ~S2090C4(); // _ZN7S2090C4D1Ev
  virtual void  v2(); // _ZN7S2090C42v2Ev
  virtual void  v3(); // _ZN7S2090C42v3Ev
  virtual void  v4(); // _ZN7S2090C42v4Ev
  S2090C4(); // tgen
};
//SIG(-1 S2090C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2090C4 ::~S2090C4(){ note_dtor("S2090C4", this);}
void  S2090C4 ::v2(){vfunc_called(this, "_ZN7S2090C42v2Ev");}
void  S2090C4 ::v3(){vfunc_called(this, "_ZN7S2090C42v3Ev");}
void  S2090C4 ::v4(){vfunc_called(this, "_ZN7S2090C42v4Ev");}
S2090C4 ::S2090C4(){ note_ctor("S2090C4", this);} // tgen

static void Test_S2090C4()
{
  extern Class_Descriptor cd_S2090C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2090C4, buf);
    S2090C4 *dp, &lv = *(dp=new (buf) S2090C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2090C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2090C4)");
    check_field_offset(lv, s2090c4f0, ABISELECT(8,4), "S2090C4.s2090c4f0");
    check_field_offset(lv, s2090c4f1, ABISELECT(24,16), "S2090C4.s2090c4f1");
    check_field_offset(lv, s2090c4f2, ABISELECT(32,24), "S2090C4.s2090c4f2");
    test_class_info(&lv, &cd_S2090C4);
    dp->~S2090C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2090C4(Test_S2090C4, "S2090C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2090C4C1Ev();
extern void _ZN7S2090C4D1Ev();
Name_Map name_map_S2090C4[] = {
  NSPAIR(_ZN7S2090C4C1Ev),
  NSPAIR(_ZN7S2090C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2090C4[];
extern void _ZN7S2090C4D1Ev();
extern void _ZN7S2090C4D0Ev();
extern void _ZN7S2090C42v2Ev();
extern void _ZN7S2090C42v3Ev();
extern void _ZN7S2090C42v4Ev();
static  VTBL_ENTRY vtc_S2090C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2090C4[0]),
  (VTBL_ENTRY)&_ZN7S2090C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2090C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2090C4[];
extern  VTBL_ENTRY _ZTV7S2090C4[];
Class_Descriptor cd_S2090C4 = {  "S2090C4", // class name
  0,0,//no base classes
  &(vtc_S2090C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2090C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2090C4),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  S2090C3  : S2090C4 {
  void *s2090c3f0[2];
  int s2090c3f1[2];
  void *s2090c3f2;
  char s2090c3f3;
  void *s2090c3f4;
  virtual  ~S2090C3(); // _ZN7S2090C3D1Ev
  virtual void  v5(); // _ZN7S2090C32v5Ev
  virtual void  v6(); // _ZN7S2090C32v6Ev
  virtual void  v7(); // _ZN7S2090C32v7Ev
  virtual void  v8(); // _ZN7S2090C32v8Ev
  virtual void  v9(); // _ZN7S2090C32v9Ev
  virtual void  v10(); // _ZN7S2090C33v10Ev
  virtual void  v11(); // _ZN7S2090C33v11Ev
  S2090C3(); // tgen
};
//SIG(-1 S2090C3) C1{ BC2{ vd v8 v9 v10 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[2] Fp Fc Fp}


 S2090C3 ::~S2090C3(){ note_dtor("S2090C3", this);}
void  S2090C3 ::v5(){vfunc_called(this, "_ZN7S2090C32v5Ev");}
void  S2090C3 ::v6(){vfunc_called(this, "_ZN7S2090C32v6Ev");}
void  S2090C3 ::v7(){vfunc_called(this, "_ZN7S2090C32v7Ev");}
void  S2090C3 ::v8(){vfunc_called(this, "_ZN7S2090C32v8Ev");}
void  S2090C3 ::v9(){vfunc_called(this, "_ZN7S2090C32v9Ev");}
void  S2090C3 ::v10(){vfunc_called(this, "_ZN7S2090C33v10Ev");}
void  S2090C3 ::v11(){vfunc_called(this, "_ZN7S2090C33v11Ev");}
S2090C3 ::S2090C3(){ note_ctor("S2090C3", this);} // tgen

static void Test_S2090C3()
{
  extern Class_Descriptor cd_S2090C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2090C3, buf);
    S2090C3 *dp, &lv = *(dp=new (buf) S2090C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2090C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2090C3)");
    check_base_class_offset(lv, (S2090C4*), 0, "S2090C3");
    check_field_offset(lv, s2090c3f0, ABISELECT(40,28), "S2090C3.s2090c3f0");
    check_field_offset(lv, s2090c3f1, ABISELECT(56,36), "S2090C3.s2090c3f1");
    check_field_offset(lv, s2090c3f2, ABISELECT(64,44), "S2090C3.s2090c3f2");
    check_field_offset(lv, s2090c3f3, ABISELECT(72,48), "S2090C3.s2090c3f3");
    check_field_offset(lv, s2090c3f4, ABISELECT(80,52), "S2090C3.s2090c3f4");
    test_class_info(&lv, &cd_S2090C3);
    dp->~S2090C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2090C3(Test_S2090C3, "S2090C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2090C3C1Ev();
extern void _ZN7S2090C3D1Ev();
Name_Map name_map_S2090C3[] = {
  NSPAIR(_ZN7S2090C3C1Ev),
  NSPAIR(_ZN7S2090C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2090C4;
extern VTBL_ENTRY _ZTI7S2090C4[];
extern  VTBL_ENTRY _ZTV7S2090C4[];
static Base_Class bases_S2090C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2090C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2090C3[];
extern void _ZN7S2090C3D1Ev();
extern void _ZN7S2090C3D0Ev();
extern void _ZN7S2090C42v2Ev();
extern void _ZN7S2090C42v3Ev();
extern void _ZN7S2090C42v4Ev();
extern void _ZN7S2090C32v5Ev();
extern void _ZN7S2090C32v6Ev();
extern void _ZN7S2090C32v7Ev();
extern void _ZN7S2090C32v8Ev();
extern void _ZN7S2090C32v9Ev();
extern void _ZN7S2090C33v10Ev();
extern void _ZN7S2090C33v11Ev();
static  VTBL_ENTRY vtc_S2090C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2090C3[0]),
  (VTBL_ENTRY)&_ZN7S2090C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2090C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2090C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2090C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S2090C3[];
extern  VTBL_ENTRY _ZTV7S2090C3[];
Class_Descriptor cd_S2090C3 = {  "S2090C3", // class name
  bases_S2090C3, 1,
  &(vtc_S2090C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2090C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2090C3),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  S2090C2  : S2090C3 {
  int s2090c2f0[2];
  virtual void  v12(); // _ZN7S2090C23v12Ev
  virtual void  v13(); // _ZN7S2090C23v13Ev
  virtual void  v14(); // _ZN7S2090C23v14Ev
  ~S2090C2(); // tgen
  S2090C2(); // tgen
};
//SIG(-1 S2090C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[2] Fp Fc Fp} v1 v2 v3 Fi[2]}


void  S2090C2 ::v12(){vfunc_called(this, "_ZN7S2090C23v12Ev");}
void  S2090C2 ::v13(){vfunc_called(this, "_ZN7S2090C23v13Ev");}
void  S2090C2 ::v14(){vfunc_called(this, "_ZN7S2090C23v14Ev");}
S2090C2 ::~S2090C2(){ note_dtor("S2090C2", this);} // tgen
S2090C2 ::S2090C2(){ note_ctor("S2090C2", this);} // tgen

static void Test_S2090C2()
{
  extern Class_Descriptor cd_S2090C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S2090C2, buf);
    S2090C2 *dp, &lv = *(dp=new (buf) S2090C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S2090C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2090C2)");
    check_base_class_offset(lv, (S2090C4*)(S2090C3*), 0, "S2090C2");
    check_base_class_offset(lv, (S2090C3*), 0, "S2090C2");
    check_field_offset(lv, s2090c2f0, ABISELECT(88,56), "S2090C2.s2090c2f0");
    test_class_info(&lv, &cd_S2090C2);
    dp->~S2090C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2090C2(Test_S2090C2, "S2090C2", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S2090C2C1Ev();
extern void _ZN7S2090C2D1Ev();
Name_Map name_map_S2090C2[] = {
  NSPAIR(_ZN7S2090C2C1Ev),
  NSPAIR(_ZN7S2090C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2090C4;
extern VTBL_ENTRY _ZTI7S2090C4[];
extern  VTBL_ENTRY _ZTV7S2090C4[];
extern Class_Descriptor cd_S2090C3;
extern VTBL_ENTRY _ZTI7S2090C3[];
extern  VTBL_ENTRY _ZTV7S2090C3[];
static Base_Class bases_S2090C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2090C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2090C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2090C2[];
extern void _ZN7S2090C2D1Ev();
extern void _ZN7S2090C2D0Ev();
extern void _ZN7S2090C42v2Ev();
extern void _ZN7S2090C42v3Ev();
extern void _ZN7S2090C42v4Ev();
extern void _ZN7S2090C32v5Ev();
extern void _ZN7S2090C32v6Ev();
extern void _ZN7S2090C32v7Ev();
extern void _ZN7S2090C32v8Ev();
extern void _ZN7S2090C32v9Ev();
extern void _ZN7S2090C33v10Ev();
extern void _ZN7S2090C33v11Ev();
extern void _ZN7S2090C23v12Ev();
extern void _ZN7S2090C23v13Ev();
extern void _ZN7S2090C23v14Ev();
static  VTBL_ENTRY vtc_S2090C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2090C2[0]),
  (VTBL_ENTRY)&_ZN7S2090C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2090C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2090C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2090C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2090C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2090C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2090C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S2090C2[];
extern  VTBL_ENTRY _ZTV7S2090C2[];
Class_Descriptor cd_S2090C2 = {  "S2090C2", // class name
  bases_S2090C2, 2,
  &(vtc_S2090C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S2090C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2090C2),17, //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  S2090C1  : S2090C2 {
  virtual void  v1(); // _ZN7S2090C12v1Ev
  ~S2090C1(); // tgen
  S2090C1(); // tgen
};
//SIG(1 S2090C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v5 v6 v7 v8 v9 v10 v11 Fp[2] Fi[2] Fp Fc Fp} v12 v13 v14 Fi[2]} v1}


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

static void Test_S2090C1()
{
  extern Class_Descriptor cd_S2090C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S2090C1, buf);
    S2090C1 *dp, &lv = *(dp=new (buf) S2090C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S2090C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2090C1)");
    check_base_class_offset(lv, (S2090C4*)(S2090C3*)(S2090C2*), 0, "S2090C1");
    check_base_class_offset(lv, (S2090C3*)(S2090C2*), 0, "S2090C1");
    check_base_class_offset(lv, (S2090C2*), 0, "S2090C1");
    test_class_info(&lv, &cd_S2090C1);
    dp->~S2090C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2090C1(Test_S2090C1, "S2090C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S2090C1C1Ev();
extern void _ZN7S2090C1D1Ev();
Name_Map name_map_S2090C1[] = {
  NSPAIR(_ZN7S2090C1C1Ev),
  NSPAIR(_ZN7S2090C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2090C4;
extern VTBL_ENTRY _ZTI7S2090C4[];
extern  VTBL_ENTRY _ZTV7S2090C4[];
extern Class_Descriptor cd_S2090C3;
extern VTBL_ENTRY _ZTI7S2090C3[];
extern  VTBL_ENTRY _ZTV7S2090C3[];
extern Class_Descriptor cd_S2090C2;
extern VTBL_ENTRY _ZTI7S2090C2[];
extern  VTBL_ENTRY _ZTV7S2090C2[];
static Base_Class bases_S2090C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2090C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2090C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2090C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2090C1[];
extern void _ZN7S2090C1D1Ev();
extern void _ZN7S2090C1D0Ev();
extern void _ZN7S2090C42v2Ev();
extern void _ZN7S2090C42v3Ev();
extern void _ZN7S2090C42v4Ev();
extern void _ZN7S2090C32v5Ev();
extern void _ZN7S2090C32v6Ev();
extern void _ZN7S2090C32v7Ev();
extern void _ZN7S2090C32v8Ev();
extern void _ZN7S2090C32v9Ev();
extern void _ZN7S2090C33v10Ev();
extern void _ZN7S2090C33v11Ev();
extern void _ZN7S2090C23v12Ev();
extern void _ZN7S2090C23v13Ev();
extern void _ZN7S2090C23v14Ev();
extern void _ZN7S2090C12v1Ev();
static  VTBL_ENTRY vtc_S2090C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2090C1[0]),
  (VTBL_ENTRY)&_ZN7S2090C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2090C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2090C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2090C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2090C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2090C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2090C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2090C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2090C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2090C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2090C1[];
extern  VTBL_ENTRY _ZTV7S2090C1[];
Class_Descriptor cd_S2090C1 = {  "S2090C1", // class name
  bases_S2090C1, 3,
  &(vtc_S2090C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S2090C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2090C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8375C3  : S8379C4 {
  int s8375c3f0[3];
  virtual  ~S8375C3(); // _ZN7S8375C3D1Ev
  S8375C3(); // tgen
};
//SIG(-1 S8375C3) C1{ BC2{ vd m FC3{ m Fp[3] Fi[2] Fp} FC4{ Fi[2]} FC5{ m Fi[2] FL} Fp[2] Fi[3]} vd Fi[3]}


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

static void Test_S8375C3()
{
  extern Class_Descriptor cd_S8375C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S8375C3, buf);
    S8375C3 *dp, &lv = *(dp=new (buf) S8375C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S8375C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8375C3)");
    check_base_class_offset(lv, (S8379C4*), 0, "S8375C3");
    check_field_offset(lv, s8375c3f0, ABISELECT(100,72), "S8375C3.s8375c3f0");
    test_class_info(&lv, &cd_S8375C3);
    dp->~S8375C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8375C3(Test_S8375C3, "S8375C3", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN7S8375C3C1Ev();
extern void _ZN7S8375C3D1Ev();
Name_Map name_map_S8375C3[] = {
  NSPAIR(_ZN7S8375C3C1Ev),
  NSPAIR(_ZN7S8375C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C4;
extern VTBL_ENTRY _ZTI7S8379C4[];
extern  VTBL_ENTRY _ZTV7S8379C4[];
static Base_Class bases_S8375C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8375C3[];
extern void _ZN7S8375C3D1Ev();
extern void _ZN7S8375C3D0Ev();
static  VTBL_ENTRY vtc_S8375C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8375C3[0]),
  (VTBL_ENTRY)&_ZN7S8375C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8375C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S8375C3[];
extern  VTBL_ENTRY _ZTV7S8375C3[];
Class_Descriptor cd_S8375C3 = {  "S8375C3", // class name
  bases_S8375C3, 1,
  &(vtc_S8375C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI7S8375C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8375C3),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  S8375C1  : S8379C2_nt {
  void *s8375c1f0[3];
  ::S8375C3 s8375c1f1;
  char s8375c1f2;
  ::S5073C8_nt s8375c1f3;
  virtual  ~S8375C1(); // _ZN7S8375C1D1Ev
  S8375C1(); // tgen
};
//SIG(1 S8375C1) C1{ BC2{ vd m} vd Fp[3] FC3{ BC4{ vd m FC5{ m Fp[3] Fi[2] Fp} FC6{ Fi[2]} FC7{ m Fi[2] FL} Fp[2] Fi[3]} vd Fi[3]} Fc FC8{ m Fp[2]}}


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

static void Test_S8375C1()
{
  extern Class_Descriptor cd_S8375C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,29)];
    init_test(&cd_S8375C1, buf);
    S8375C1 *dp, &lv = *(dp=new (buf) S8375C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,112), "sizeof(S8375C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8375C1)");
    check_base_class_offset(lv, (S8379C2_nt*), 0, "S8375C1");
    check_field_offset(lv, s8375c1f0, ABISELECT(8,4), "S8375C1.s8375c1f0");
    check_field_offset(lv, s8375c1f1, ABISELECT(32,16), "S8375C1.s8375c1f1");
    check_field_offset(lv, s8375c1f2, ABISELECT(144,100), "S8375C1.s8375c1f2");
    check_field_offset(lv, s8375c1f3, ABISELECT(152,104), "S8375C1.s8375c1f3");
    test_class_info(&lv, &cd_S8375C1);
    dp->~S8375C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8375C1(Test_S8375C1, "S8375C1", ABISELECT(168,112));

#else // __cplusplus

extern void _ZN7S8375C1C1Ev();
extern void _ZN7S8375C1D1Ev();
Name_Map name_map_S8375C1[] = {
  NSPAIR(_ZN7S8375C1C1Ev),
  NSPAIR(_ZN7S8375C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C2_nt;
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
static Base_Class bases_S8375C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8375C1[];
extern void _ZN7S8375C1D1Ev();
extern void _ZN7S8375C1D0Ev();
static  VTBL_ENTRY vtc_S8375C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8375C1[0]),
  (VTBL_ENTRY)&_ZN7S8375C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8375C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8375C1[];
extern  VTBL_ENTRY _ZTV7S8375C1[];
Class_Descriptor cd_S8375C1 = {  "S8375C1", // class name
  bases_S8375C1, 1,
  &(vtc_S8375C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI7S8375C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8375C1),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  S4311C3  {
  char s4311c3f0;
  int s4311c3f1;
  virtual  ~S4311C3(); // _ZN7S4311C3D1Ev
  virtual void  v2(); // _ZN7S4311C32v2Ev
  S4311C3(); // tgen
};
//SIG(-1 S4311C3) C1{ vd v1 Fc Fi}


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

static void Test_S4311C3()
{
  extern Class_Descriptor cd_S4311C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4311C3, buf);
    S4311C3 *dp, &lv = *(dp=new (buf) S4311C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4311C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4311C3)");
    check_field_offset(lv, s4311c3f0, ABISELECT(8,4), "S4311C3.s4311c3f0");
    check_field_offset(lv, s4311c3f1, ABISELECT(12,8), "S4311C3.s4311c3f1");
    test_class_info(&lv, &cd_S4311C3);
    dp->~S4311C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4311C3(Test_S4311C3, "S4311C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4311C3C1Ev();
extern void _ZN7S4311C3D1Ev();
Name_Map name_map_S4311C3[] = {
  NSPAIR(_ZN7S4311C3C1Ev),
  NSPAIR(_ZN7S4311C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4311C3[];
extern void _ZN7S4311C3D1Ev();
extern void _ZN7S4311C3D0Ev();
extern void _ZN7S4311C32v2Ev();
static  VTBL_ENTRY vtc_S4311C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4311C3[0]),
  (VTBL_ENTRY)&_ZN7S4311C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4311C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4311C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4311C3[];
extern  VTBL_ENTRY _ZTV7S4311C3[];
Class_Descriptor cd_S4311C3 = {  "S4311C3", // class name
  0,0,//no base classes
  &(vtc_S4311C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4311C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4311C3),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  S4311C2  : S4311C3 {
  int s4311c2f0[2];
  char s4311c2f1;
  ::S2432C5_nt s4311c2f2;
  ::S2432C6 s4311c2f3;
  virtual  ~S4311C2(); // _ZN7S4311C2D1Ev
  virtual void  v3(); // _ZN7S4311C22v3Ev
  S4311C2(); // tgen
};
//SIG(-1 S4311C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ FL[4]}}}


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

static void Test_S4311C2()
{
  extern Class_Descriptor cd_S4311C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S4311C2, buf);
    S4311C2 *dp, &lv = *(dp=new (buf) S4311C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S4311C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4311C2)");
    check_base_class_offset(lv, (S4311C3*), 0, "S4311C2");
    check_field_offset(lv, s4311c2f0, ABISELECT(16,12), "S4311C2.s4311c2f0");
    check_field_offset(lv, s4311c2f1, ABISELECT(24,20), "S4311C2.s4311c2f1");
    check_field_offset(lv, s4311c2f2, ABISELECT(32,24), "S4311C2.s4311c2f2");
    check_field_offset(lv, s4311c2f3, ABISELECT(40,28), "S4311C2.s4311c2f3");
    test_class_info(&lv, &cd_S4311C2);
    dp->~S4311C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4311C2(Test_S4311C2, "S4311C2", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S4311C2C1Ev();
extern void _ZN7S4311C2D1Ev();
Name_Map name_map_S4311C2[] = {
  NSPAIR(_ZN7S4311C2C1Ev),
  NSPAIR(_ZN7S4311C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4311C3;
extern VTBL_ENTRY _ZTI7S4311C3[];
extern  VTBL_ENTRY _ZTV7S4311C3[];
static Base_Class bases_S4311C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4311C2[];
extern void _ZN7S4311C2D1Ev();
extern void _ZN7S4311C2D0Ev();
extern void _ZN7S4311C32v2Ev();
extern void _ZN7S4311C22v3Ev();
static  VTBL_ENTRY vtc_S4311C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4311C2[0]),
  (VTBL_ENTRY)&_ZN7S4311C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4311C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4311C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4311C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4311C2[];
extern  VTBL_ENTRY _ZTV7S4311C2[];
Class_Descriptor cd_S4311C2 = {  "S4311C2", // class name
  bases_S4311C2, 1,
  &(vtc_S4311C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S4311C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4311C2),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  S4311C1  : S4311C2 {
  int s4311c1f0[3];
  void *s4311c1f1[2];
  int s4311c1f2;
  void *s4311c1f3[2];
  int s4311c1f4;
  void *s4311c1f5;
  char s4311c1f6[31];
  virtual  ~S4311C1(); // _ZN7S4311C1D1Ev
  virtual void  v1(); // _ZN7S4311C12v1Ev
  S4311C1(); // tgen
};
//SIG(1 S4311C1) C1{ BC2{ BC3{ vd v2 Fc Fi} vd v3 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v6 Fc Fi} vd v4 v5 FC7{ FL[4]}}} vd v1 Fi[3] Fp[2] Fi Fp[2] Fi Fp Fc[31]}


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

static void Test_S4311C1()
{
  extern Class_Descriptor cd_S4311C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,37)];
    init_test(&cd_S4311C1, buf);
    S4311C1 *dp, &lv = *(dp=new (buf) S4311C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,144), "sizeof(S4311C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4311C1)");
    check_base_class_offset(lv, (S4311C3*)(S4311C2*), 0, "S4311C1");
    check_base_class_offset(lv, (S4311C2*), 0, "S4311C1");
    check_field_offset(lv, s4311c1f0, ABISELECT(88,72), "S4311C1.s4311c1f0");
    check_field_offset(lv, s4311c1f1, ABISELECT(104,84), "S4311C1.s4311c1f1");
    check_field_offset(lv, s4311c1f2, ABISELECT(120,92), "S4311C1.s4311c1f2");
    check_field_offset(lv, s4311c1f3, ABISELECT(128,96), "S4311C1.s4311c1f3");
    check_field_offset(lv, s4311c1f4, ABISELECT(144,104), "S4311C1.s4311c1f4");
    check_field_offset(lv, s4311c1f5, ABISELECT(152,108), "S4311C1.s4311c1f5");
    check_field_offset(lv, s4311c1f6, ABISELECT(160,112), "S4311C1.s4311c1f6");
    test_class_info(&lv, &cd_S4311C1);
    dp->~S4311C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4311C1(Test_S4311C1, "S4311C1", ABISELECT(192,144));

#else // __cplusplus

extern void _ZN7S4311C1C1Ev();
extern void _ZN7S4311C1D1Ev();
Name_Map name_map_S4311C1[] = {
  NSPAIR(_ZN7S4311C1C1Ev),
  NSPAIR(_ZN7S4311C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4311C3;
extern VTBL_ENTRY _ZTI7S4311C3[];
extern  VTBL_ENTRY _ZTV7S4311C3[];
extern Class_Descriptor cd_S4311C2;
extern VTBL_ENTRY _ZTI7S4311C2[];
extern  VTBL_ENTRY _ZTV7S4311C2[];
static Base_Class bases_S4311C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4311C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4311C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4311C1[];
extern void _ZN7S4311C1D1Ev();
extern void _ZN7S4311C1D0Ev();
extern void _ZN7S4311C32v2Ev();
extern void _ZN7S4311C22v3Ev();
extern void _ZN7S4311C12v1Ev();
static  VTBL_ENTRY vtc_S4311C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4311C1[0]),
  (VTBL_ENTRY)&_ZN7S4311C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4311C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4311C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4311C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4311C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4311C1[];
extern  VTBL_ENTRY _ZTV7S4311C1[];
Class_Descriptor cd_S4311C1 = {  "S4311C1", // class name
  bases_S4311C1, 2,
  &(vtc_S4311C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,144), // object size
  NSPAIRA(_ZTI7S4311C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4311C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4310C3  {
  char s4310c3f0;
  int s4310c3f1;
  virtual  ~S4310C3(); // _ZN7S4310C3D1Ev
  virtual void  v2(); // _ZN7S4310C32v2Ev
  S4310C3(); // tgen
};
//SIG(-1 S4310C3) C1{ vd v1 Fc Fi}


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

static void Test_S4310C3()
{
  extern Class_Descriptor cd_S4310C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4310C3, buf);
    S4310C3 *dp, &lv = *(dp=new (buf) S4310C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4310C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4310C3)");
    check_field_offset(lv, s4310c3f0, ABISELECT(8,4), "S4310C3.s4310c3f0");
    check_field_offset(lv, s4310c3f1, ABISELECT(12,8), "S4310C3.s4310c3f1");
    test_class_info(&lv, &cd_S4310C3);
    dp->~S4310C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4310C3(Test_S4310C3, "S4310C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4310C3C1Ev();
extern void _ZN7S4310C3D1Ev();
Name_Map name_map_S4310C3[] = {
  NSPAIR(_ZN7S4310C3C1Ev),
  NSPAIR(_ZN7S4310C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4310C3[];
extern void _ZN7S4310C3D1Ev();
extern void _ZN7S4310C3D0Ev();
extern void _ZN7S4310C32v2Ev();
static  VTBL_ENTRY vtc_S4310C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4310C3[0]),
  (VTBL_ENTRY)&_ZN7S4310C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4310C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4310C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4310C3[];
extern  VTBL_ENTRY _ZTV7S4310C3[];
Class_Descriptor cd_S4310C3 = {  "S4310C3", // class name
  0,0,//no base classes
  &(vtc_S4310C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4310C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4310C3),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  S4310C2  : S4310C3 {
  int s4310c2f0[2];
  char s4310c2f1;
  ::S2432C5_nt s4310c2f2;
  ::S2431C6 s4310c2f3;
  virtual  ~S4310C2(); // _ZN7S4310C2D1Ev
  virtual void  v3(); // _ZN7S4310C22v3Ev
  S4310C2(); // tgen
};
//SIG(-1 S4310C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ Fl[4]}}}


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

static void Test_S4310C2()
{
  extern Class_Descriptor cd_S4310C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S4310C2, buf);
    S4310C2 *dp, &lv = *(dp=new (buf) S4310C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S4310C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4310C2)");
    check_base_class_offset(lv, (S4310C3*), 0, "S4310C2");
    check_field_offset(lv, s4310c2f0, ABISELECT(16,12), "S4310C2.s4310c2f0");
    check_field_offset(lv, s4310c2f1, ABISELECT(24,20), "S4310C2.s4310c2f1");
    check_field_offset(lv, s4310c2f2, ABISELECT(32,24), "S4310C2.s4310c2f2");
    check_field_offset(lv, s4310c2f3, ABISELECT(40,28), "S4310C2.s4310c2f3");
    test_class_info(&lv, &cd_S4310C2);
    dp->~S4310C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4310C2(Test_S4310C2, "S4310C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S4310C2C1Ev();
extern void _ZN7S4310C2D1Ev();
Name_Map name_map_S4310C2[] = {
  NSPAIR(_ZN7S4310C2C1Ev),
  NSPAIR(_ZN7S4310C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4310C3;
extern VTBL_ENTRY _ZTI7S4310C3[];
extern  VTBL_ENTRY _ZTV7S4310C3[];
static Base_Class bases_S4310C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4310C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4310C2[];
extern void _ZN7S4310C2D1Ev();
extern void _ZN7S4310C2D0Ev();
extern void _ZN7S4310C32v2Ev();
extern void _ZN7S4310C22v3Ev();
static  VTBL_ENTRY vtc_S4310C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4310C2[0]),
  (VTBL_ENTRY)&_ZN7S4310C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4310C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4310C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4310C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4310C2[];
extern  VTBL_ENTRY _ZTV7S4310C2[];
Class_Descriptor cd_S4310C2 = {  "S4310C2", // class name
  bases_S4310C2, 1,
  &(vtc_S4310C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S4310C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4310C2),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  S4310C1  : S4310C2 {
  int s4310c1f0[3];
  void *s4310c1f1[2];
  int s4310c1f2;
  void *s4310c1f3[2];
  int s4310c1f4;
  void *s4310c1f5;
  char s4310c1f6[31];
  virtual  ~S4310C1(); // _ZN7S4310C1D1Ev
  virtual void  v1(); // _ZN7S4310C12v1Ev
  S4310C1(); // tgen
};
//SIG(1 S4310C1) C1{ BC2{ BC3{ vd v2 Fc Fi} vd v3 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v6 Fc Fi} vd v4 v5 FC7{ Fl[4]}}} vd v1 Fi[3] Fp[2] Fi Fp[2] Fi Fp Fc[31]}


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

static void Test_S4310C1()
{
  extern Class_Descriptor cd_S4310C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,33)];
    init_test(&cd_S4310C1, buf);
    S4310C1 *dp, &lv = *(dp=new (buf) S4310C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S4310C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4310C1)");
    check_base_class_offset(lv, (S4310C3*)(S4310C2*), 0, "S4310C1");
    check_base_class_offset(lv, (S4310C2*), 0, "S4310C1");
    check_field_offset(lv, s4310c1f0, ABISELECT(88,56), "S4310C1.s4310c1f0");
    check_field_offset(lv, s4310c1f1, ABISELECT(104,68), "S4310C1.s4310c1f1");
    check_field_offset(lv, s4310c1f2, ABISELECT(120,76), "S4310C1.s4310c1f2");
    check_field_offset(lv, s4310c1f3, ABISELECT(128,80), "S4310C1.s4310c1f3");
    check_field_offset(lv, s4310c1f4, ABISELECT(144,88), "S4310C1.s4310c1f4");
    check_field_offset(lv, s4310c1f5, ABISELECT(152,92), "S4310C1.s4310c1f5");
    check_field_offset(lv, s4310c1f6, ABISELECT(160,96), "S4310C1.s4310c1f6");
    test_class_info(&lv, &cd_S4310C1);
    dp->~S4310C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4310C1(Test_S4310C1, "S4310C1", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S4310C1C1Ev();
extern void _ZN7S4310C1D1Ev();
Name_Map name_map_S4310C1[] = {
  NSPAIR(_ZN7S4310C1C1Ev),
  NSPAIR(_ZN7S4310C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4310C3;
extern VTBL_ENTRY _ZTI7S4310C3[];
extern  VTBL_ENTRY _ZTV7S4310C3[];
extern Class_Descriptor cd_S4310C2;
extern VTBL_ENTRY _ZTI7S4310C2[];
extern  VTBL_ENTRY _ZTV7S4310C2[];
static Base_Class bases_S4310C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4310C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4310C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4310C1[];
extern void _ZN7S4310C1D1Ev();
extern void _ZN7S4310C1D0Ev();
extern void _ZN7S4310C32v2Ev();
extern void _ZN7S4310C22v3Ev();
extern void _ZN7S4310C12v1Ev();
static  VTBL_ENTRY vtc_S4310C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4310C1[0]),
  (VTBL_ENTRY)&_ZN7S4310C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4310C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4310C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4310C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4310C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4310C1[];
extern  VTBL_ENTRY _ZTV7S4310C1[];
Class_Descriptor cd_S4310C1 = {  "S4310C1", // class name
  bases_S4310C1, 2,
  &(vtc_S4310C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S4310C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4310C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7659C3  {
  __tsi64 s7659c3f0;
  virtual void  v7(); // _ZN7S7659C32v7Ev
  virtual void  v8(); // _ZN7S7659C32v8Ev
  virtual void  v9(); // _ZN7S7659C32v9Ev
  virtual void  v10(); // _ZN7S7659C33v10Ev
  virtual void  v11(); // _ZN7S7659C33v11Ev
  virtual void  v12(); // _ZN7S7659C33v12Ev
  virtual void  v13(); // _ZN7S7659C33v13Ev
  virtual void  v14(); // _ZN7S7659C33v14Ev
  ~S7659C3(); // tgen
  S7659C3(); // tgen
};
//SIG(-1 S7659C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S7659C3 ::v7(){vfunc_called(this, "_ZN7S7659C32v7Ev");}
void  S7659C3 ::v8(){vfunc_called(this, "_ZN7S7659C32v8Ev");}
void  S7659C3 ::v9(){vfunc_called(this, "_ZN7S7659C32v9Ev");}
void  S7659C3 ::v10(){vfunc_called(this, "_ZN7S7659C33v10Ev");}
void  S7659C3 ::v11(){vfunc_called(this, "_ZN7S7659C33v11Ev");}
void  S7659C3 ::v12(){vfunc_called(this, "_ZN7S7659C33v12Ev");}
void  S7659C3 ::v13(){vfunc_called(this, "_ZN7S7659C33v13Ev");}
void  S7659C3 ::v14(){vfunc_called(this, "_ZN7S7659C33v14Ev");}
S7659C3 ::~S7659C3(){ note_dtor("S7659C3", this);} // tgen
S7659C3 ::S7659C3(){ note_ctor("S7659C3", this);} // tgen

static void Test_S7659C3()
{
  extern Class_Descriptor cd_S7659C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7659C3, buf);
    S7659C3 *dp, &lv = *(dp=new (buf) S7659C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7659C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7659C3)");
    check_field_offset(lv, s7659c3f0, ABISELECT(8,4), "S7659C3.s7659c3f0");
    test_class_info(&lv, &cd_S7659C3);
    dp->~S7659C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7659C3(Test_S7659C3, "S7659C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7659C3C1Ev();
extern void _ZN7S7659C3D1Ev();
Name_Map name_map_S7659C3[] = {
  NSPAIR(_ZN7S7659C3C1Ev),
  NSPAIR(_ZN7S7659C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7659C3[];
extern void _ZN7S7659C32v7Ev();
extern void _ZN7S7659C32v8Ev();
extern void _ZN7S7659C32v9Ev();
extern void _ZN7S7659C33v10Ev();
extern void _ZN7S7659C33v11Ev();
extern void _ZN7S7659C33v12Ev();
extern void _ZN7S7659C33v13Ev();
extern void _ZN7S7659C33v14Ev();
static  VTBL_ENTRY vtc_S7659C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7659C3[0]),
  (VTBL_ENTRY)&_ZN7S7659C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S7659C3[];
extern  VTBL_ENTRY _ZTV7S7659C3[];
Class_Descriptor cd_S7659C3 = {  "S7659C3", // class name
  0,0,//no base classes
  &(vtc_S7659C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7659C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7659C3),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  S7659C2  : virtual S7659C3 {
  ::S7659C3 s7659c2f0;
  int s7659c2f1;
  void *s7659c2f2;
  virtual void  v15(); // _ZN7S7659C23v15Ev
  virtual void  v16(); // _ZN7S7659C23v16Ev
  virtual void  v17(); // _ZN7S7659C23v17Ev
  virtual void  v18(); // _ZN7S7659C23v18Ev
  virtual void  v19(); // _ZN7S7659C23v19Ev
  virtual void  v20(); // _ZN7S7659C23v20Ev
  ~S7659C2(); // tgen
  S7659C2(); // tgen
};
//SIG(-1 S7659C2) C1{ VBC2{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v1 v2 v3 v4 v5 v6 FC2 Fi Fp}


void  S7659C2 ::v15(){vfunc_called(this, "_ZN7S7659C23v15Ev");}
void  S7659C2 ::v16(){vfunc_called(this, "_ZN7S7659C23v16Ev");}
void  S7659C2 ::v17(){vfunc_called(this, "_ZN7S7659C23v17Ev");}
void  S7659C2 ::v18(){vfunc_called(this, "_ZN7S7659C23v18Ev");}
void  S7659C2 ::v19(){vfunc_called(this, "_ZN7S7659C23v19Ev");}
void  S7659C2 ::v20(){vfunc_called(this, "_ZN7S7659C23v20Ev");}
S7659C2 ::~S7659C2(){ note_dtor("S7659C2", this);} // tgen
S7659C2 ::S7659C2(){ note_ctor("S7659C2", this);} // tgen

static void Test_S7659C2()
{
  extern Class_Descriptor cd_S7659C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7659C2, buf);
    S7659C2 *dp, &lv = *(dp=new (buf) S7659C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7659C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7659C2)");
    check_base_class_offset(lv, (S7659C3*), ABISELECT(40,24), "S7659C2");
    check_field_offset(lv, s7659c2f0, ABISELECT(8,4), "S7659C2.s7659c2f0");
    check_field_offset(lv, s7659c2f1, ABISELECT(24,16), "S7659C2.s7659c2f1");
    check_field_offset(lv, s7659c2f2, ABISELECT(32,20), "S7659C2.s7659c2f2");
    test_class_info(&lv, &cd_S7659C2);
    dp->~S7659C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7659C2(Test_S7659C2, "S7659C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S7659C2C1Ev();
extern void _ZN7S7659C2D1Ev();
Name_Map name_map_S7659C2[] = {
  NSPAIR(_ZN7S7659C2C1Ev),
  NSPAIR(_ZN7S7659C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7659C3;
extern VTBL_ENTRY _ZTI7S7659C3[];
extern  VTBL_ENTRY _ZTV7S7659C3[];
static Base_Class bases_S7659C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7659C3,    ABISELECT(40,24), //bcp->offset
    9, //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 _ZTI7S7659C2[];
extern void _ZN7S7659C23v15Ev();
extern void _ZN7S7659C23v16Ev();
extern void _ZN7S7659C23v17Ev();
extern void _ZN7S7659C23v18Ev();
extern void _ZN7S7659C23v19Ev();
extern void _ZN7S7659C23v20Ev();
extern void _ZN7S7659C32v7Ev();
extern void _ZN7S7659C32v8Ev();
extern void _ZN7S7659C32v9Ev();
extern void _ZN7S7659C33v10Ev();
extern void _ZN7S7659C33v11Ev();
extern void _ZN7S7659C33v12Ev();
extern void _ZN7S7659C33v13Ev();
extern void _ZN7S7659C33v14Ev();
static  VTBL_ENTRY vtc_S7659C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7659C2[0]),
  (VTBL_ENTRY)&_ZN7S7659C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7659C2[0]),
  (VTBL_ENTRY)&_ZN7S7659C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v14Ev,
};
extern VTBL_ENTRY _ZTV7S7659C2[];
static  VTT_ENTRY vtt_S7659C2[] = {
  {&(_ZTV7S7659C2[3]),  3,27},
  {&(_ZTV7S7659C2[19]),  19,27},
};
extern VTBL_ENTRY _ZTI7S7659C2[];
extern  VTBL_ENTRY _ZTV7S7659C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7659C2[];
Class_Descriptor cd_S7659C2 = {  "S7659C2", // class name
  bases_S7659C2, 1,
  &(vtc_S7659C2[0]), // expected_vtbl_contents
  &(vtt_S7659C2[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S7659C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7659C2),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7659C2),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  S7659C1  : S7659C2 {
  ::S7659C3 s7659c1f0;
  ::S7659C2 s7659c1f1;
  void *s7659c1f2;
  ::S7511C9_nt s7659c1f3;
  virtual void  v1(); // _ZN7S7659C12v1Ev
  virtual void  v2(); // _ZN7S7659C12v2Ev
  virtual void  v3(); // _ZN7S7659C12v3Ev
  virtual void  v4(); // _ZN7S7659C12v4Ev
  virtual void  v5(); // _ZN7S7659C12v5Ev
  virtual void  v6(); // _ZN7S7659C12v6Ev
  ~S7659C1(); // tgen
  S7659C1(); // tgen
};
//SIG(1 S7659C1) C1{ BC2{ VBC3{ v7 v8 v9 v10 v11 v12 v13 v14 FL} v15 v16 v17 v18 v19 v20 FC3 Fi Fp} v1 v2 v3 v4 v5 v6 FC3 FC2 Fp FC4{}}


void  S7659C1 ::v1(){vfunc_called(this, "_ZN7S7659C12v1Ev");}
void  S7659C1 ::v2(){vfunc_called(this, "_ZN7S7659C12v2Ev");}
void  S7659C1 ::v3(){vfunc_called(this, "_ZN7S7659C12v3Ev");}
void  S7659C1 ::v4(){vfunc_called(this, "_ZN7S7659C12v4Ev");}
void  S7659C1 ::v5(){vfunc_called(this, "_ZN7S7659C12v5Ev");}
void  S7659C1 ::v6(){vfunc_called(this, "_ZN7S7659C12v6Ev");}
S7659C1 ::~S7659C1(){ note_dtor("S7659C1", this);} // tgen
S7659C1 ::S7659C1(){ note_ctor("S7659C1", this);} // tgen

static void Test_S7659C1()
{
  extern Class_Descriptor cd_S7659C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S7659C1, buf);
    S7659C1 *dp, &lv = *(dp=new (buf) S7659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S7659C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7659C1)");
    check_base_class_offset(lv, (S7659C3*)(S7659C2*), ABISELECT(128,80), "S7659C1");
    check_base_class_offset(lv, (S7659C2*), 0, "S7659C1");
    check_field_offset(lv, s7659c1f0, ABISELECT(40,24), "S7659C1.s7659c1f0");
    check_field_offset(lv, s7659c1f1, ABISELECT(56,36), "S7659C1.s7659c1f1");
    check_field_offset(lv, s7659c1f2, ABISELECT(112,72), "S7659C1.s7659c1f2");
    check_field_offset(lv, s7659c1f3, ABISELECT(120,76), "S7659C1.s7659c1f3");
    test_class_info(&lv, &cd_S7659C1);
    dp->~S7659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7659C1(Test_S7659C1, "S7659C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN7S7659C1C1Ev();
extern void _ZN7S7659C1D1Ev();
Name_Map name_map_S7659C1[] = {
  NSPAIR(_ZN7S7659C1C1Ev),
  NSPAIR(_ZN7S7659C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7659C3;
extern VTBL_ENTRY _ZTI7S7659C3[];
extern  VTBL_ENTRY _ZTV7S7659C3[];
extern Class_Descriptor cd_S7659C2;
extern VTBL_ENTRY _ZTI7S7659C2[];
extern  VTBL_ENTRY _ZTV7S7659C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7659C2[];
static Base_Class bases_S7659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7659C3,    ABISELECT(128,80), //bcp->offset
    15, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7659C2,    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 _ZTI7S7659C1[];
extern void _ZN7S7659C23v15Ev();
extern void _ZN7S7659C23v16Ev();
extern void _ZN7S7659C23v17Ev();
extern void _ZN7S7659C23v18Ev();
extern void _ZN7S7659C23v19Ev();
extern void _ZN7S7659C23v20Ev();
extern void _ZN7S7659C12v1Ev();
extern void _ZN7S7659C12v2Ev();
extern void _ZN7S7659C12v3Ev();
extern void _ZN7S7659C12v4Ev();
extern void _ZN7S7659C12v5Ev();
extern void _ZN7S7659C12v6Ev();
extern void _ZN7S7659C32v7Ev();
extern void _ZN7S7659C32v8Ev();
extern void _ZN7S7659C32v9Ev();
extern void _ZN7S7659C33v10Ev();
extern void _ZN7S7659C33v11Ev();
extern void _ZN7S7659C33v12Ev();
extern void _ZN7S7659C33v13Ev();
extern void _ZN7S7659C33v14Ev();
static  VTBL_ENTRY vtc_S7659C1[] = {
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7659C1[0]),
  (VTBL_ENTRY)&_ZN7S7659C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7659C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7659C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7659C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7659C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7659C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7659C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S7659C1[0]),
  (VTBL_ENTRY)&_ZN7S7659C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v14Ev,
};
extern VTBL_ENTRY _ZTV7S7659C1[];
extern void _ZN7S7659C23v15Ev();
extern void _ZN7S7659C23v16Ev();
extern void _ZN7S7659C23v17Ev();
extern void _ZN7S7659C23v18Ev();
extern void _ZN7S7659C23v19Ev();
extern void _ZN7S7659C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7659C2__7S7659C1[] = {
  ABISELECT(128,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7659C2[0]),
  (VTBL_ENTRY)&_ZN7S7659C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7659C23v20Ev,
};
extern void _ZN7S7659C32v7Ev();
extern void _ZN7S7659C32v8Ev();
extern void _ZN7S7659C32v9Ev();
extern void _ZN7S7659C33v10Ev();
extern void _ZN7S7659C33v11Ev();
extern void _ZN7S7659C33v12Ev();
extern void _ZN7S7659C33v13Ev();
extern void _ZN7S7659C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7659C3__7S7659C2__7S7659C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S7659C2[0]),
  (VTBL_ENTRY)&_ZN7S7659C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7659C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7659C33v14Ev,
};
static  VTT_ENTRY vtt_S7659C1[] = {
  {&(_ZTV7S7659C1[3]),  3,33},
  {&(_tg__ZTV7S7659C2__7S7659C1[3]),  3,9},
  {&(_tg__ZTV7S7659C3__7S7659C2__7S7659C1[10]),  10,18},
  {&(_ZTV7S7659C1[25]),  25,33},
};
extern VTBL_ENTRY _ZTI7S7659C1[];
extern  VTBL_ENTRY _ZTV7S7659C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7659C1[];
Class_Descriptor cd_S7659C1 = {  "S7659C1", // class name
  bases_S7659C1, 2,
  &(vtc_S7659C1[0]), // expected_vtbl_contents
  &(vtt_S7659C1[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI7S7659C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7659C1),33, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7659C1),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  S4679C3  {
  char s4679c3f0;
  int s4679c3f1;
  virtual  ~S4679C3(); // _ZN7S4679C3D1Ev
  virtual void  v3(); // _ZN7S4679C32v3Ev
  S4679C3(); // tgen
};
//SIG(-1 S4679C3) C1{ vd v1 Fc Fi}


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

static void Test_S4679C3()
{
  extern Class_Descriptor cd_S4679C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4679C3, buf);
    S4679C3 *dp, &lv = *(dp=new (buf) S4679C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4679C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4679C3)");
    check_field_offset(lv, s4679c3f0, ABISELECT(8,4), "S4679C3.s4679c3f0");
    check_field_offset(lv, s4679c3f1, ABISELECT(12,8), "S4679C3.s4679c3f1");
    test_class_info(&lv, &cd_S4679C3);
    dp->~S4679C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4679C3(Test_S4679C3, "S4679C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4679C3C1Ev();
extern void _ZN7S4679C3D1Ev();
Name_Map name_map_S4679C3[] = {
  NSPAIR(_ZN7S4679C3C1Ev),
  NSPAIR(_ZN7S4679C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4679C3[];
extern void _ZN7S4679C3D1Ev();
extern void _ZN7S4679C3D0Ev();
extern void _ZN7S4679C32v3Ev();
static  VTBL_ENTRY vtc_S4679C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4679C3[0]),
  (VTBL_ENTRY)&_ZN7S4679C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4679C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4679C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4679C3[];
extern  VTBL_ENTRY _ZTV7S4679C3[];
Class_Descriptor cd_S4679C3 = {  "S4679C3", // class name
  0,0,//no base classes
  &(vtc_S4679C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4679C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4679C3),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  S4679C2  : S4679C3 {
  int s4679c2f0[2];
  char s4679c2f1;
  ::S2432C5_nt s4679c2f2;
  ::S2432C6 s4679c2f3;
  virtual  ~S4679C2(); // _ZN7S4679C2D1Ev
  virtual void  v4(); // _ZN7S4679C22v4Ev
  S4679C2(); // tgen
};
//SIG(-1 S4679C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ FL[4]}}}


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

static void Test_S4679C2()
{
  extern Class_Descriptor cd_S4679C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S4679C2, buf);
    S4679C2 *dp, &lv = *(dp=new (buf) S4679C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S4679C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4679C2)");
    check_base_class_offset(lv, (S4679C3*), 0, "S4679C2");
    check_field_offset(lv, s4679c2f0, ABISELECT(16,12), "S4679C2.s4679c2f0");
    check_field_offset(lv, s4679c2f1, ABISELECT(24,20), "S4679C2.s4679c2f1");
    check_field_offset(lv, s4679c2f2, ABISELECT(32,24), "S4679C2.s4679c2f2");
    check_field_offset(lv, s4679c2f3, ABISELECT(40,28), "S4679C2.s4679c2f3");
    test_class_info(&lv, &cd_S4679C2);
    dp->~S4679C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4679C2(Test_S4679C2, "S4679C2", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S4679C2C1Ev();
extern void _ZN7S4679C2D1Ev();
Name_Map name_map_S4679C2[] = {
  NSPAIR(_ZN7S4679C2C1Ev),
  NSPAIR(_ZN7S4679C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4679C3;
extern VTBL_ENTRY _ZTI7S4679C3[];
extern  VTBL_ENTRY _ZTV7S4679C3[];
static Base_Class bases_S4679C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4679C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4679C2[];
extern void _ZN7S4679C2D1Ev();
extern void _ZN7S4679C2D0Ev();
extern void _ZN7S4679C32v3Ev();
extern void _ZN7S4679C22v4Ev();
static  VTBL_ENTRY vtc_S4679C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4679C2[0]),
  (VTBL_ENTRY)&_ZN7S4679C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4679C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4679C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4679C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4679C2[];
extern  VTBL_ENTRY _ZTV7S4679C2[];
Class_Descriptor cd_S4679C2 = {  "S4679C2", // class name
  bases_S4679C2, 1,
  &(vtc_S4679C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S4679C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4679C2),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  S4679C7_nt  : S4679C3 {
  void *s4679c7f0;
  char s4679c7f1[2];
  virtual  ~S4679C7_nt(); // _ZN10S4679C7_ntD1Ev
  virtual void  v5(); // _ZN10S4679C7_nt2v5Ev
  S4679C7_nt(); // tgen
};
//SIG(-1 S4679C7_nt) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


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

//skip512 S4679C7_nt

#else // __cplusplus

extern void _ZN10S4679C7_ntC1Ev();
extern void _ZN10S4679C7_ntD1Ev();
Name_Map name_map_S4679C7_nt[] = {
  NSPAIR(_ZN10S4679C7_ntC1Ev),
  NSPAIR(_ZN10S4679C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4679C3;
extern VTBL_ENTRY _ZTI7S4679C3[];
extern  VTBL_ENTRY _ZTV7S4679C3[];
static Base_Class bases_S4679C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4679C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4679C7_nt[];
extern void _ZN10S4679C7_ntD1Ev();
extern void _ZN10S4679C7_ntD0Ev();
extern void _ZN7S4679C32v3Ev();
extern void _ZN10S4679C7_nt2v5Ev();
static  VTBL_ENTRY vtc_S4679C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4679C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4679C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4679C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4679C32v3Ev,
  (VTBL_ENTRY)&_ZN10S4679C7_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4679C7_nt[];
VTBL_ENTRY *P__ZTI10S4679C7_nt = _ZTI10S4679C7_nt; 
extern  VTBL_ENTRY _ZTV10S4679C7_nt[];
Class_Descriptor cd_S4679C7_nt = {  "S4679C7_nt", // class name
  bases_S4679C7_nt, 1,
  &(vtc_S4679C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S4679C7_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4679C7_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  S4679C1  : S4679C2 , S4679C7_nt {
  void *s4679c1f0;
  int s4679c1f1;
  virtual  ~S4679C1(); // _ZN7S4679C1D1Ev
  virtual void  v1(); // _ZN7S4679C12v1Ev
  virtual void  v2(); // _ZN7S4679C12v2Ev
  S4679C1(); // tgen
};
//SIG(1 S4679C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v8 Fc Fi} vd v6 v7 FC7{ FL[4]}}} BC8{ BC3 vd v5 Fp Fc[2]} vd v1 v2 Fp Fi}


 S4679C1 ::~S4679C1(){ note_dtor("S4679C1", this);}
void  S4679C1 ::v1(){vfunc_called(this, "_ZN7S4679C12v1Ev");}
void  S4679C1 ::v2(){vfunc_called(this, "_ZN7S4679C12v2Ev");}
S4679C1 ::S4679C1(){ note_ctor("S4679C1", this);} // tgen

static void Test_S4679C1()
{
  extern Class_Descriptor cd_S4679C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,26)];
    init_test(&cd_S4679C1, buf);
    S4679C1 *dp, &lv = *(dp=new (buf) S4679C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,100), "sizeof(S4679C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4679C1)");
    check_base_class_offset(lv, (S4679C3*)(S4679C2*), 0, "S4679C1");
    check_base_class_offset(lv, (S4679C2*), 0, "S4679C1");
    check_base_class_offset(lv, (S4679C3*)(S4679C7_nt*), ABISELECT(88,72), "S4679C1");
    check_base_class_offset(lv, (S4679C7_nt*), ABISELECT(88,72), "S4679C1");
    check_field_offset(lv, s4679c1f0, ABISELECT(120,92), "S4679C1.s4679c1f0");
    check_field_offset(lv, s4679c1f1, ABISELECT(128,96), "S4679C1.s4679c1f1");
    test_class_info(&lv, &cd_S4679C1);
    dp->~S4679C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4679C1(Test_S4679C1, "S4679C1", ABISELECT(136,100));

#else // __cplusplus

extern void _ZN7S4679C1C1Ev();
extern void _ZN7S4679C1D1Ev();
Name_Map name_map_S4679C1[] = {
  NSPAIR(_ZN7S4679C1C1Ev),
  NSPAIR(_ZN7S4679C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4679C3;
extern VTBL_ENTRY _ZTI7S4679C3[];
extern  VTBL_ENTRY _ZTV7S4679C3[];
extern Class_Descriptor cd_S4679C2;
extern VTBL_ENTRY _ZTI7S4679C2[];
extern  VTBL_ENTRY _ZTV7S4679C2[];
extern Class_Descriptor cd_S4679C3;
extern VTBL_ENTRY _ZTI7S4679C3[];
extern  VTBL_ENTRY _ZTV7S4679C3[];
extern Class_Descriptor cd_S4679C7_nt;
extern VTBL_ENTRY _ZTI10S4679C7_nt[];
extern  VTBL_ENTRY _ZTV10S4679C7_nt[];
static Base_Class bases_S4679C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4679C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4679C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4679C3,    ABISELECT(88,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4679C7_nt,    ABISELECT(88,72), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4679C1[];
extern void _ZN7S4679C1D1Ev();
extern void _ZN7S4679C1D0Ev();
extern void _ZN7S4679C32v3Ev();
extern void _ZN7S4679C22v4Ev();
extern void _ZN7S4679C12v1Ev();
extern void _ZN7S4679C12v2Ev();
extern void ABISELECT(_ZThn88_N7S4679C1D1Ev,_ZThn72_N7S4679C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S4679C1D0Ev,_ZThn72_N7S4679C1D0Ev)();
extern void _ZN7S4679C32v3Ev();
extern void _ZN10S4679C7_nt2v5Ev();
static  VTBL_ENTRY vtc_S4679C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4679C1[0]),
  (VTBL_ENTRY)&_ZN7S4679C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4679C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4679C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4679C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4679C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4679C12v2Ev,
  ABISELECT(-88,-72),
  (VTBL_ENTRY)&(_ZTI7S4679C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S4679C1D1Ev,_ZThn72_N7S4679C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S4679C1D0Ev,_ZThn72_N7S4679C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4679C32v3Ev,
  (VTBL_ENTRY)&_ZN10S4679C7_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI7S4679C1[];
extern  VTBL_ENTRY _ZTV7S4679C1[];
Class_Descriptor cd_S4679C1 = {  "S4679C1", // class name
  bases_S4679C1, 4,
  &(vtc_S4679C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,100), // object size
  NSPAIRA(_ZTI7S4679C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4679C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4678C3  {
  char s4678c3f0;
  int s4678c3f1;
  virtual  ~S4678C3(); // _ZN7S4678C3D1Ev
  virtual void  v3(); // _ZN7S4678C32v3Ev
  S4678C3(); // tgen
};
//SIG(-1 S4678C3) C1{ vd v1 Fc Fi}


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

static void Test_S4678C3()
{
  extern Class_Descriptor cd_S4678C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4678C3, buf);
    S4678C3 *dp, &lv = *(dp=new (buf) S4678C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4678C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4678C3)");
    check_field_offset(lv, s4678c3f0, ABISELECT(8,4), "S4678C3.s4678c3f0");
    check_field_offset(lv, s4678c3f1, ABISELECT(12,8), "S4678C3.s4678c3f1");
    test_class_info(&lv, &cd_S4678C3);
    dp->~S4678C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4678C3(Test_S4678C3, "S4678C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4678C3C1Ev();
extern void _ZN7S4678C3D1Ev();
Name_Map name_map_S4678C3[] = {
  NSPAIR(_ZN7S4678C3C1Ev),
  NSPAIR(_ZN7S4678C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4678C3[];
extern void _ZN7S4678C3D1Ev();
extern void _ZN7S4678C3D0Ev();
extern void _ZN7S4678C32v3Ev();
static  VTBL_ENTRY vtc_S4678C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4678C3[0]),
  (VTBL_ENTRY)&_ZN7S4678C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4678C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4678C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4678C3[];
extern  VTBL_ENTRY _ZTV7S4678C3[];
Class_Descriptor cd_S4678C3 = {  "S4678C3", // class name
  0,0,//no base classes
  &(vtc_S4678C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4678C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4678C3),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  S4678C2  : S4678C3 {
  int s4678c2f0[2];
  char s4678c2f1;
  ::S2432C5_nt s4678c2f2;
  ::S2431C6 s4678c2f3;
  virtual  ~S4678C2(); // _ZN7S4678C2D1Ev
  virtual void  v4(); // _ZN7S4678C22v4Ev
  S4678C2(); // tgen
};
//SIG(-1 S4678C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ Fl[4]}}}


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

static void Test_S4678C2()
{
  extern Class_Descriptor cd_S4678C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S4678C2, buf);
    S4678C2 *dp, &lv = *(dp=new (buf) S4678C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S4678C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4678C2)");
    check_base_class_offset(lv, (S4678C3*), 0, "S4678C2");
    check_field_offset(lv, s4678c2f0, ABISELECT(16,12), "S4678C2.s4678c2f0");
    check_field_offset(lv, s4678c2f1, ABISELECT(24,20), "S4678C2.s4678c2f1");
    check_field_offset(lv, s4678c2f2, ABISELECT(32,24), "S4678C2.s4678c2f2");
    check_field_offset(lv, s4678c2f3, ABISELECT(40,28), "S4678C2.s4678c2f3");
    test_class_info(&lv, &cd_S4678C2);
    dp->~S4678C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4678C2(Test_S4678C2, "S4678C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S4678C2C1Ev();
extern void _ZN7S4678C2D1Ev();
Name_Map name_map_S4678C2[] = {
  NSPAIR(_ZN7S4678C2C1Ev),
  NSPAIR(_ZN7S4678C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4678C3;
extern VTBL_ENTRY _ZTI7S4678C3[];
extern  VTBL_ENTRY _ZTV7S4678C3[];
static Base_Class bases_S4678C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4678C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4678C2[];
extern void _ZN7S4678C2D1Ev();
extern void _ZN7S4678C2D0Ev();
extern void _ZN7S4678C32v3Ev();
extern void _ZN7S4678C22v4Ev();
static  VTBL_ENTRY vtc_S4678C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4678C2[0]),
  (VTBL_ENTRY)&_ZN7S4678C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4678C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4678C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4678C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4678C2[];
extern  VTBL_ENTRY _ZTV7S4678C2[];
Class_Descriptor cd_S4678C2 = {  "S4678C2", // class name
  bases_S4678C2, 1,
  &(vtc_S4678C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S4678C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4678C2),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  S4678C7  : S4678C3 {
  void *s4678c7f0;
  char s4678c7f1[2];
  virtual  ~S4678C7(); // _ZN7S4678C7D1Ev
  virtual void  v5(); // _ZN7S4678C72v5Ev
  S4678C7(); // tgen
};
//SIG(-1 S4678C7) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


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

static void Test_S4678C7()
{
  extern Class_Descriptor cd_S4678C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4678C7, buf);
    S4678C7 *dp, &lv = *(dp=new (buf) S4678C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4678C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4678C7)");
    check_base_class_offset(lv, (S4678C3*), 0, "S4678C7");
    check_field_offset(lv, s4678c7f0, ABISELECT(16,12), "S4678C7.s4678c7f0");
    check_field_offset(lv, s4678c7f1, ABISELECT(24,16), "S4678C7.s4678c7f1");
    test_class_info(&lv, &cd_S4678C7);
    dp->~S4678C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4678C7(Test_S4678C7, "S4678C7", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4678C7C1Ev();
extern void _ZN7S4678C7D1Ev();
Name_Map name_map_S4678C7[] = {
  NSPAIR(_ZN7S4678C7C1Ev),
  NSPAIR(_ZN7S4678C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4678C3;
extern VTBL_ENTRY _ZTI7S4678C3[];
extern  VTBL_ENTRY _ZTV7S4678C3[];
static Base_Class bases_S4678C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4678C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4678C7[];
extern void _ZN7S4678C7D1Ev();
extern void _ZN7S4678C7D0Ev();
extern void _ZN7S4678C32v3Ev();
extern void _ZN7S4678C72v5Ev();
static  VTBL_ENTRY vtc_S4678C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4678C7[0]),
  (VTBL_ENTRY)&_ZN7S4678C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4678C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4678C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4678C72v5Ev,
};
extern VTBL_ENTRY _ZTI7S4678C7[];
extern  VTBL_ENTRY _ZTV7S4678C7[];
Class_Descriptor cd_S4678C7 = {  "S4678C7", // class name
  bases_S4678C7, 1,
  &(vtc_S4678C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4678C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4678C7),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  S4678C1  : S4678C2 , S4678C7 {
  void *s4678c1f0;
  int s4678c1f1;
  virtual  ~S4678C1(); // _ZN7S4678C1D1Ev
  virtual void  v1(); // _ZN7S4678C12v1Ev
  virtual void  v2(); // _ZN7S4678C12v2Ev
  S4678C1(); // tgen
};
//SIG(1 S4678C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v8 Fc Fi} vd v6 v7 FC7{ Fl[4]}}} BC8{ BC3 vd v5 Fp Fc[2]} vd v1 v2 Fp Fi}


 S4678C1 ::~S4678C1(){ note_dtor("S4678C1", this);}
void  S4678C1 ::v1(){vfunc_called(this, "_ZN7S4678C12v1Ev");}
void  S4678C1 ::v2(){vfunc_called(this, "_ZN7S4678C12v2Ev");}
S4678C1 ::S4678C1(){ note_ctor("S4678C1", this);} // tgen

static void Test_S4678C1()
{
  extern Class_Descriptor cd_S4678C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S4678C1, buf);
    S4678C1 *dp, &lv = *(dp=new (buf) S4678C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S4678C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4678C1)");
    check_base_class_offset(lv, (S4678C3*)(S4678C2*), 0, "S4678C1");
    check_base_class_offset(lv, (S4678C2*), 0, "S4678C1");
    check_base_class_offset(lv, (S4678C3*)(S4678C7*), ABISELECT(88,56), "S4678C1");
    check_base_class_offset(lv, (S4678C7*), ABISELECT(88,56), "S4678C1");
    check_field_offset(lv, s4678c1f0, ABISELECT(120,76), "S4678C1.s4678c1f0");
    check_field_offset(lv, s4678c1f1, ABISELECT(128,80), "S4678C1.s4678c1f1");
    test_class_info(&lv, &cd_S4678C1);
    dp->~S4678C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4678C1(Test_S4678C1, "S4678C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S4678C1C1Ev();
extern void _ZN7S4678C1D1Ev();
Name_Map name_map_S4678C1[] = {
  NSPAIR(_ZN7S4678C1C1Ev),
  NSPAIR(_ZN7S4678C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4678C3;
extern VTBL_ENTRY _ZTI7S4678C3[];
extern  VTBL_ENTRY _ZTV7S4678C3[];
extern Class_Descriptor cd_S4678C2;
extern VTBL_ENTRY _ZTI7S4678C2[];
extern  VTBL_ENTRY _ZTV7S4678C2[];
extern Class_Descriptor cd_S4678C3;
extern VTBL_ENTRY _ZTI7S4678C3[];
extern  VTBL_ENTRY _ZTV7S4678C3[];
extern Class_Descriptor cd_S4678C7;
extern VTBL_ENTRY _ZTI7S4678C7[];
extern  VTBL_ENTRY _ZTV7S4678C7[];
static Base_Class bases_S4678C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4678C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4678C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4678C3,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4678C7,    ABISELECT(88,56), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4678C1[];
extern void _ZN7S4678C1D1Ev();
extern void _ZN7S4678C1D0Ev();
extern void _ZN7S4678C32v3Ev();
extern void _ZN7S4678C22v4Ev();
extern void _ZN7S4678C12v1Ev();
extern void _ZN7S4678C12v2Ev();
extern void ABISELECT(_ZThn88_N7S4678C1D1Ev,_ZThn56_N7S4678C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S4678C1D0Ev,_ZThn56_N7S4678C1D0Ev)();
extern void _ZN7S4678C32v3Ev();
extern void _ZN7S4678C72v5Ev();
static  VTBL_ENTRY vtc_S4678C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4678C1[0]),
  (VTBL_ENTRY)&_ZN7S4678C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4678C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4678C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4678C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4678C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4678C12v2Ev,
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S4678C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S4678C1D1Ev,_ZThn56_N7S4678C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S4678C1D0Ev,_ZThn56_N7S4678C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4678C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4678C72v5Ev,
};
extern VTBL_ENTRY _ZTI7S4678C1[];
extern  VTBL_ENTRY _ZTV7S4678C1[];
Class_Descriptor cd_S4678C1 = {  "S4678C1", // class name
  bases_S4678C1, 4,
  &(vtc_S4678C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S4678C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4678C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11910C4  {
  void *s11910c4f0;
  int s11910c4f1;
  int s11910c4f2;
  char s11910c4f3;
  char s11910c4f4;
  char s11910c4f5;
  char s11910c4f6;
};
//SIG(-1 S11910C4) C1{ Fp Fi[2] Fc[4]}



static void Test_S11910C4()
{
  {
    init_simple_test("S11910C4");
    S11910C4 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S11910C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11910C4)");
    check_field_offset(lv, s11910c4f0, 0, "S11910C4.s11910c4f0");
    check_field_offset(lv, s11910c4f1, ABISELECT(8,4), "S11910C4.s11910c4f1");
    check_field_offset(lv, s11910c4f2, ABISELECT(12,8), "S11910C4.s11910c4f2");
    check_field_offset(lv, s11910c4f3, ABISELECT(16,12), "S11910C4.s11910c4f3");
    check_field_offset(lv, s11910c4f4, ABISELECT(17,13), "S11910C4.s11910c4f4");
    check_field_offset(lv, s11910c4f5, ABISELECT(18,14), "S11910C4.s11910c4f5");
    check_field_offset(lv, s11910c4f6, ABISELECT(19,15), "S11910C4.s11910c4f6");
  }
}
static Arrange_To_Call_Me vS11910C4(Test_S11910C4, "S11910C4", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11910C1  {
  ::S11911C2 s11910c1f0;
  ::S11911C2 s11910c1f1;
  ::S11911C3 s11910c1f2;
  ::S11910C4 s11910c1f3;
};
//SIG(1 S11910C1) C1{ FC2{ Fp[7] Fi Fc[12] Fi[4] Fc[48] Fs[36] Fi Fs[19] Fc[34] Fi} FC2 FU3{ Fl FL Fp} FC4{ Fp Fi Fi Fc Fc Fc Fc}}



static void Test_S11910C1()
{
  {
    init_simple_test("S11910C1");
    S11910C1 lv;
    check2(sizeof(lv), ABISELECT(608,544), "sizeof(S11910C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11910C1)");
    check_field_offset(lv, s11910c1f0, 0, "S11910C1.s11910c1f0");
    check_field_offset(lv, s11910c1f1, ABISELECT(288,260), "S11910C1.s11910c1f1");
    check_field_offset(lv, s11910c1f2, ABISELECT(576,520), "S11910C1.s11910c1f2");
    check_field_offset(lv, s11910c1f3, ABISELECT(584,528), "S11910C1.s11910c1f3");
  }
}
static Arrange_To_Call_Me vS11910C1(Test_S11910C1, "S11910C1", ABISELECT(608,544));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4813C3  {
  ::S2382C20_nt s4813c3f0;
  int s4813c3f1[2];
  char s4813c3f2;
  virtual  ~S4813C3(); // _ZN7S4813C3D1Ev
  virtual void  v3(); // _ZN7S4813C32v3Ev
  virtual void  v4(); // _ZN7S4813C32v4Ev
  virtual void  v5(); // _ZN7S4813C32v5Ev
  S4813C3(); // tgen
};
//SIG(-1 S4813C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4813C3 ::~S4813C3(){ note_dtor("S4813C3", this);}
void  S4813C3 ::v3(){vfunc_called(this, "_ZN7S4813C32v3Ev");}
void  S4813C3 ::v4(){vfunc_called(this, "_ZN7S4813C32v4Ev");}
void  S4813C3 ::v5(){vfunc_called(this, "_ZN7S4813C32v5Ev");}
S4813C3 ::S4813C3(){ note_ctor("S4813C3", this);} // tgen

static void Test_S4813C3()
{
  extern Class_Descriptor cd_S4813C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4813C3, buf);
    S4813C3 *dp, &lv = *(dp=new (buf) S4813C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4813C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4813C3)");
    check_field_offset(lv, s4813c3f0, ABISELECT(8,4), "S4813C3.s4813c3f0");
    check_field_offset(lv, s4813c3f1, ABISELECT(24,16), "S4813C3.s4813c3f1");
    check_field_offset(lv, s4813c3f2, ABISELECT(32,24), "S4813C3.s4813c3f2");
    test_class_info(&lv, &cd_S4813C3);
    dp->~S4813C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4813C3(Test_S4813C3, "S4813C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4813C3C1Ev();
extern void _ZN7S4813C3D1Ev();
Name_Map name_map_S4813C3[] = {
  NSPAIR(_ZN7S4813C3C1Ev),
  NSPAIR(_ZN7S4813C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4813C3[];
extern void _ZN7S4813C3D1Ev();
extern void _ZN7S4813C3D0Ev();
extern void _ZN7S4813C32v3Ev();
extern void _ZN7S4813C32v4Ev();
extern void _ZN7S4813C32v5Ev();
static  VTBL_ENTRY vtc_S4813C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4813C3[0]),
  (VTBL_ENTRY)&_ZN7S4813C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4813C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4813C3[];
extern  VTBL_ENTRY _ZTV7S4813C3[];
Class_Descriptor cd_S4813C3 = {  "S4813C3", // class name
  0,0,//no base classes
  &(vtc_S4813C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4813C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4813C3),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  S4813C2  : S4813C3 {
  char s4813c2f0[2];
  int s4813c2f1[3];
  void *s4813c2f2[2];
  __tsi64 s4813c2f3;
  void *s4813c2f4;
  virtual  ~S4813C2(); // _ZN7S4813C2D1Ev
  virtual void  v6(); // _ZN7S4813C22v6Ev
  virtual void  v7(); // _ZN7S4813C22v7Ev
  S4813C2(); // tgen
};
//SIG(-1 S4813C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[2] Fi[3] Fp[2] FL Fp}


 S4813C2 ::~S4813C2(){ note_dtor("S4813C2", this);}
void  S4813C2 ::v6(){vfunc_called(this, "_ZN7S4813C22v6Ev");}
void  S4813C2 ::v7(){vfunc_called(this, "_ZN7S4813C22v7Ev");}
S4813C2 ::S4813C2(){ note_ctor("S4813C2", this);} // tgen

static void Test_S4813C2()
{
  extern Class_Descriptor cd_S4813C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S4813C2, buf);
    S4813C2 *dp, &lv = *(dp=new (buf) S4813C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S4813C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4813C2)");
    check_base_class_offset(lv, (S4813C3*), 0, "S4813C2");
    check_field_offset(lv, s4813c2f0, ABISELECT(33,25), "S4813C2.s4813c2f0");
    check_field_offset(lv, s4813c2f1, ABISELECT(36,28), "S4813C2.s4813c2f1");
    check_field_offset(lv, s4813c2f2, ABISELECT(48,40), "S4813C2.s4813c2f2");
    check_field_offset(lv, s4813c2f3, ABISELECT(64,48), "S4813C2.s4813c2f3");
    check_field_offset(lv, s4813c2f4, ABISELECT(72,56), "S4813C2.s4813c2f4");
    test_class_info(&lv, &cd_S4813C2);
    dp->~S4813C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4813C2(Test_S4813C2, "S4813C2", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S4813C2C1Ev();
extern void _ZN7S4813C2D1Ev();
Name_Map name_map_S4813C2[] = {
  NSPAIR(_ZN7S4813C2C1Ev),
  NSPAIR(_ZN7S4813C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4813C3;
extern VTBL_ENTRY _ZTI7S4813C3[];
extern  VTBL_ENTRY _ZTV7S4813C3[];
static Base_Class bases_S4813C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4813C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4813C2[];
extern void _ZN7S4813C2D1Ev();
extern void _ZN7S4813C2D0Ev();
extern void _ZN7S4813C32v3Ev();
extern void _ZN7S4813C32v4Ev();
extern void _ZN7S4813C32v5Ev();
extern void _ZN7S4813C22v6Ev();
extern void _ZN7S4813C22v7Ev();
static  VTBL_ENTRY vtc_S4813C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4813C2[0]),
  (VTBL_ENTRY)&_ZN7S4813C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4813C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4813C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4813C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4813C2[];
extern  VTBL_ENTRY _ZTV7S4813C2[];
Class_Descriptor cd_S4813C2 = {  "S4813C2", // class name
  bases_S4813C2, 1,
  &(vtc_S4813C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S4813C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4813C2),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  S4813C1  : S4813C2 {
  ::S2382C20_nt s4813c1f0;
  char s4813c1f1;
  __tsi64 s4813c1f2;
  virtual  ~S4813C1(); // _ZN7S4813C1D1Ev
  virtual void  v1(); // _ZN7S4813C12v1Ev
  virtual void  v2(); // _ZN7S4813C12v2Ev
  S4813C1(); // tgen
};
//SIG(1 S4813C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 Fc[2] Fi[3] Fp[2] FL Fp} vd v1 v2 FC4 Fc FL}


 S4813C1 ::~S4813C1(){ note_dtor("S4813C1", this);}
void  S4813C1 ::v1(){vfunc_called(this, "_ZN7S4813C12v1Ev");}
void  S4813C1 ::v2(){vfunc_called(this, "_ZN7S4813C12v2Ev");}
S4813C1 ::S4813C1(){ note_ctor("S4813C1", this);} // tgen

static void Test_S4813C1()
{
  extern Class_Descriptor cd_S4813C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S4813C1, buf);
    S4813C1 *dp, &lv = *(dp=new (buf) S4813C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S4813C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4813C1)");
    check_base_class_offset(lv, (S4813C3*)(S4813C2*), 0, "S4813C1");
    check_base_class_offset(lv, (S4813C2*), 0, "S4813C1");
    check_field_offset(lv, s4813c1f0, ABISELECT(80,60), "S4813C1.s4813c1f0");
    check_field_offset(lv, s4813c1f1, ABISELECT(96,72), "S4813C1.s4813c1f1");
    check_field_offset(lv, s4813c1f2, ABISELECT(104,76), "S4813C1.s4813c1f2");
    test_class_info(&lv, &cd_S4813C1);
    dp->~S4813C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4813C1(Test_S4813C1, "S4813C1", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN7S4813C1C1Ev();
extern void _ZN7S4813C1D1Ev();
Name_Map name_map_S4813C1[] = {
  NSPAIR(_ZN7S4813C1C1Ev),
  NSPAIR(_ZN7S4813C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4813C3;
extern VTBL_ENTRY _ZTI7S4813C3[];
extern  VTBL_ENTRY _ZTV7S4813C3[];
extern Class_Descriptor cd_S4813C2;
extern VTBL_ENTRY _ZTI7S4813C2[];
extern  VTBL_ENTRY _ZTV7S4813C2[];
static Base_Class bases_S4813C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4813C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4813C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4813C1[];
extern void _ZN7S4813C1D1Ev();
extern void _ZN7S4813C1D0Ev();
extern void _ZN7S4813C32v3Ev();
extern void _ZN7S4813C32v4Ev();
extern void _ZN7S4813C32v5Ev();
extern void _ZN7S4813C22v6Ev();
extern void _ZN7S4813C22v7Ev();
extern void _ZN7S4813C12v1Ev();
extern void _ZN7S4813C12v2Ev();
static  VTBL_ENTRY vtc_S4813C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4813C1[0]),
  (VTBL_ENTRY)&_ZN7S4813C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4813C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4813C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4813C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4813C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4813C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4813C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4813C1[];
extern  VTBL_ENTRY _ZTV7S4813C1[];
Class_Descriptor cd_S4813C1 = {  "S4813C1", // class name
  bases_S4813C1, 2,
  &(vtc_S4813C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI7S4813C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4813C1),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  S9720C2  {
  ::S2382C20_nt s9720c2f0;
  int s9720c2f1[2];
  char s9720c2f2;
  virtual  ~S9720C2(); // _ZN7S9720C2D1Ev
  virtual void  v4(); // _ZN7S9720C22v4Ev
  virtual void  v5(); // _ZN7S9720C22v5Ev
  virtual void  v6(); // _ZN7S9720C22v6Ev
  S9720C2(); // tgen
};
//SIG(-1 S9720C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9720C2 ::~S9720C2(){ note_dtor("S9720C2", this);}
void  S9720C2 ::v4(){vfunc_called(this, "_ZN7S9720C22v4Ev");}
void  S9720C2 ::v5(){vfunc_called(this, "_ZN7S9720C22v5Ev");}
void  S9720C2 ::v6(){vfunc_called(this, "_ZN7S9720C22v6Ev");}
S9720C2 ::S9720C2(){ note_ctor("S9720C2", this);} // tgen

static void Test_S9720C2()
{
  extern Class_Descriptor cd_S9720C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9720C2, buf);
    S9720C2 *dp, &lv = *(dp=new (buf) S9720C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9720C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9720C2)");
    check_field_offset(lv, s9720c2f0, ABISELECT(8,4), "S9720C2.s9720c2f0");
    check_field_offset(lv, s9720c2f1, ABISELECT(24,16), "S9720C2.s9720c2f1");
    check_field_offset(lv, s9720c2f2, ABISELECT(32,24), "S9720C2.s9720c2f2");
    test_class_info(&lv, &cd_S9720C2);
    dp->~S9720C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9720C2(Test_S9720C2, "S9720C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9720C2C1Ev();
extern void _ZN7S9720C2D1Ev();
Name_Map name_map_S9720C2[] = {
  NSPAIR(_ZN7S9720C2C1Ev),
  NSPAIR(_ZN7S9720C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9720C2[];
extern void _ZN7S9720C2D1Ev();
extern void _ZN7S9720C2D0Ev();
extern void _ZN7S9720C22v4Ev();
extern void _ZN7S9720C22v5Ev();
extern void _ZN7S9720C22v6Ev();
static  VTBL_ENTRY vtc_S9720C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9720C2[0]),
  (VTBL_ENTRY)&_ZN7S9720C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9720C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9720C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9720C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9720C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9720C2[];
extern  VTBL_ENTRY _ZTV7S9720C2[];
Class_Descriptor cd_S9720C2 = {  "S9720C2", // class name
  0,0,//no base classes
  &(vtc_S9720C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9720C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9720C2),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  S9720C1  : S9720C2 {
  void *s9720c1f0[2];
  int s9720c1f1[2];
  char s9720c1f2[256];
  int s9720c1f3[2];
  char s9720c1f4;
  ::S2403C17_nt s9720c1f5;
  virtual  ~S9720C1(); // _ZN7S9720C1D1Ev
  virtual void  v1(); // _ZN7S9720C12v1Ev
  virtual void  v2(); // _ZN7S9720C12v2Ev
  virtual void  v3(); // _ZN7S9720C12v3Ev
  S9720C1(); // tgen
};
//SIG(1 S9720C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp[2] Fi[2] Fc[256] Fi[2] Fc FC5{ m FL[4]}}


 S9720C1 ::~S9720C1(){ note_dtor("S9720C1", this);}
void  S9720C1 ::v1(){vfunc_called(this, "_ZN7S9720C12v1Ev");}
void  S9720C1 ::v2(){vfunc_called(this, "_ZN7S9720C12v2Ev");}
void  S9720C1 ::v3(){vfunc_called(this, "_ZN7S9720C12v3Ev");}
S9720C1 ::S9720C1(){ note_ctor("S9720C1", this);} // tgen

static void Test_S9720C1()
{
  extern Class_Descriptor cd_S9720C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,87)];
    init_test(&cd_S9720C1, buf);
    S9720C1 *dp, &lv = *(dp=new (buf) S9720C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,344), "sizeof(S9720C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9720C1)");
    check_base_class_offset(lv, (S9720C2*), 0, "S9720C1");
    check_field_offset(lv, s9720c1f0, ABISELECT(40,28), "S9720C1.s9720c1f0");
    check_field_offset(lv, s9720c1f1, ABISELECT(56,36), "S9720C1.s9720c1f1");
    check_field_offset(lv, s9720c1f2, ABISELECT(64,44), "S9720C1.s9720c1f2");
    check_field_offset(lv, s9720c1f3, ABISELECT(320,300), "S9720C1.s9720c1f3");
    check_field_offset(lv, s9720c1f4, ABISELECT(328,308), "S9720C1.s9720c1f4");
    check_field_offset(lv, s9720c1f5, ABISELECT(336,312), "S9720C1.s9720c1f5");
    test_class_info(&lv, &cd_S9720C1);
    dp->~S9720C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9720C1(Test_S9720C1, "S9720C1", ABISELECT(368,344));

#else // __cplusplus

extern void _ZN7S9720C1C1Ev();
extern void _ZN7S9720C1D1Ev();
Name_Map name_map_S9720C1[] = {
  NSPAIR(_ZN7S9720C1C1Ev),
  NSPAIR(_ZN7S9720C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9720C2;
extern VTBL_ENTRY _ZTI7S9720C2[];
extern  VTBL_ENTRY _ZTV7S9720C2[];
static Base_Class bases_S9720C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9720C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9720C1[];
extern void _ZN7S9720C1D1Ev();
extern void _ZN7S9720C1D0Ev();
extern void _ZN7S9720C22v4Ev();
extern void _ZN7S9720C22v5Ev();
extern void _ZN7S9720C22v6Ev();
extern void _ZN7S9720C12v1Ev();
extern void _ZN7S9720C12v2Ev();
extern void _ZN7S9720C12v3Ev();
static  VTBL_ENTRY vtc_S9720C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9720C1[0]),
  (VTBL_ENTRY)&_ZN7S9720C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9720C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9720C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9720C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9720C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9720C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9720C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9720C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9720C1[];
extern  VTBL_ENTRY _ZTV7S9720C1[];
Class_Descriptor cd_S9720C1 = {  "S9720C1", // class name
  bases_S9720C1, 1,
  &(vtc_S9720C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,344), // object size
  NSPAIRA(_ZTI7S9720C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9720C1),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  S4814C3  {
  ::S2382C20_nt s4814c3f0;
  int s4814c3f1[2];
  char s4814c3f2;
  virtual  ~S4814C3(); // _ZN7S4814C3D1Ev
  virtual void  v3(); // _ZN7S4814C32v3Ev
  virtual void  v4(); // _ZN7S4814C32v4Ev
  virtual void  v5(); // _ZN7S4814C32v5Ev
  S4814C3(); // tgen
};
//SIG(-1 S4814C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4814C3 ::~S4814C3(){ note_dtor("S4814C3", this);}
void  S4814C3 ::v3(){vfunc_called(this, "_ZN7S4814C32v3Ev");}
void  S4814C3 ::v4(){vfunc_called(this, "_ZN7S4814C32v4Ev");}
void  S4814C3 ::v5(){vfunc_called(this, "_ZN7S4814C32v5Ev");}
S4814C3 ::S4814C3(){ note_ctor("S4814C3", this);} // tgen

static void Test_S4814C3()
{
  extern Class_Descriptor cd_S4814C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4814C3, buf);
    S4814C3 *dp, &lv = *(dp=new (buf) S4814C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4814C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4814C3)");
    check_field_offset(lv, s4814c3f0, ABISELECT(8,4), "S4814C3.s4814c3f0");
    check_field_offset(lv, s4814c3f1, ABISELECT(24,16), "S4814C3.s4814c3f1");
    check_field_offset(lv, s4814c3f2, ABISELECT(32,24), "S4814C3.s4814c3f2");
    test_class_info(&lv, &cd_S4814C3);
    dp->~S4814C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4814C3(Test_S4814C3, "S4814C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4814C3C1Ev();
extern void _ZN7S4814C3D1Ev();
Name_Map name_map_S4814C3[] = {
  NSPAIR(_ZN7S4814C3C1Ev),
  NSPAIR(_ZN7S4814C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4814C3[];
extern void _ZN7S4814C3D1Ev();
extern void _ZN7S4814C3D0Ev();
extern void _ZN7S4814C32v3Ev();
extern void _ZN7S4814C32v4Ev();
extern void _ZN7S4814C32v5Ev();
static  VTBL_ENTRY vtc_S4814C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4814C3[0]),
  (VTBL_ENTRY)&_ZN7S4814C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4814C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4814C3[];
extern  VTBL_ENTRY _ZTV7S4814C3[];
Class_Descriptor cd_S4814C3 = {  "S4814C3", // class name
  0,0,//no base classes
  &(vtc_S4814C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4814C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4814C3),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  S4814C2  : S4814C3 {
  char s4814c2f0[2];
  int s4814c2f1[3];
  void *s4814c2f2[2];
  __tsi64 s4814c2f3;
  void *s4814c2f4;
  virtual  ~S4814C2(); // _ZN7S4814C2D1Ev
  virtual void  v6(); // _ZN7S4814C22v6Ev
  virtual void  v7(); // _ZN7S4814C22v7Ev
  S4814C2(); // tgen
};
//SIG(-1 S4814C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[2] Fi[3] Fp[2] FL Fp}


 S4814C2 ::~S4814C2(){ note_dtor("S4814C2", this);}
void  S4814C2 ::v6(){vfunc_called(this, "_ZN7S4814C22v6Ev");}
void  S4814C2 ::v7(){vfunc_called(this, "_ZN7S4814C22v7Ev");}
S4814C2 ::S4814C2(){ note_ctor("S4814C2", this);} // tgen

static void Test_S4814C2()
{
  extern Class_Descriptor cd_S4814C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S4814C2, buf);
    S4814C2 *dp, &lv = *(dp=new (buf) S4814C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S4814C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4814C2)");
    check_base_class_offset(lv, (S4814C3*), 0, "S4814C2");
    check_field_offset(lv, s4814c2f0, ABISELECT(33,25), "S4814C2.s4814c2f0");
    check_field_offset(lv, s4814c2f1, ABISELECT(36,28), "S4814C2.s4814c2f1");
    check_field_offset(lv, s4814c2f2, ABISELECT(48,40), "S4814C2.s4814c2f2");
    check_field_offset(lv, s4814c2f3, ABISELECT(64,48), "S4814C2.s4814c2f3");
    check_field_offset(lv, s4814c2f4, ABISELECT(72,56), "S4814C2.s4814c2f4");
    test_class_info(&lv, &cd_S4814C2);
    dp->~S4814C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4814C2(Test_S4814C2, "S4814C2", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S4814C2C1Ev();
extern void _ZN7S4814C2D1Ev();
Name_Map name_map_S4814C2[] = {
  NSPAIR(_ZN7S4814C2C1Ev),
  NSPAIR(_ZN7S4814C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4814C3;
extern VTBL_ENTRY _ZTI7S4814C3[];
extern  VTBL_ENTRY _ZTV7S4814C3[];
static Base_Class bases_S4814C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4814C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4814C2[];
extern void _ZN7S4814C2D1Ev();
extern void _ZN7S4814C2D0Ev();
extern void _ZN7S4814C32v3Ev();
extern void _ZN7S4814C32v4Ev();
extern void _ZN7S4814C32v5Ev();
extern void _ZN7S4814C22v6Ev();
extern void _ZN7S4814C22v7Ev();
static  VTBL_ENTRY vtc_S4814C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4814C2[0]),
  (VTBL_ENTRY)&_ZN7S4814C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4814C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4814C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4814C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4814C2[];
extern  VTBL_ENTRY _ZTV7S4814C2[];
Class_Descriptor cd_S4814C2 = {  "S4814C2", // class name
  bases_S4814C2, 1,
  &(vtc_S4814C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S4814C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4814C2),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  S4814C1  : S4814C2 {
  ::S2382C20_nt s4814c1f0;
  ::S2382C20_nt s4814c1f1;
  virtual  ~S4814C1(); // _ZN7S4814C1D1Ev
  virtual void  v1(); // _ZN7S4814C12v1Ev
  virtual void  v2(); // _ZN7S4814C12v2Ev
  S4814C1(); // tgen
};
//SIG(1 S4814C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 Fc[2] Fi[3] Fp[2] FL Fp} vd v1 v2 FC4 FC4}


 S4814C1 ::~S4814C1(){ note_dtor("S4814C1", this);}
void  S4814C1 ::v1(){vfunc_called(this, "_ZN7S4814C12v1Ev");}
void  S4814C1 ::v2(){vfunc_called(this, "_ZN7S4814C12v2Ev");}
S4814C1 ::S4814C1(){ note_ctor("S4814C1", this);} // tgen

static void Test_S4814C1()
{
  extern Class_Descriptor cd_S4814C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S4814C1, buf);
    S4814C1 *dp, &lv = *(dp=new (buf) S4814C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S4814C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4814C1)");
    check_base_class_offset(lv, (S4814C3*)(S4814C2*), 0, "S4814C1");
    check_base_class_offset(lv, (S4814C2*), 0, "S4814C1");
    check_field_offset(lv, s4814c1f0, ABISELECT(80,60), "S4814C1.s4814c1f0");
    check_field_offset(lv, s4814c1f1, ABISELECT(96,72), "S4814C1.s4814c1f1");
    test_class_info(&lv, &cd_S4814C1);
    dp->~S4814C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4814C1(Test_S4814C1, "S4814C1", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN7S4814C1C1Ev();
extern void _ZN7S4814C1D1Ev();
Name_Map name_map_S4814C1[] = {
  NSPAIR(_ZN7S4814C1C1Ev),
  NSPAIR(_ZN7S4814C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4814C3;
extern VTBL_ENTRY _ZTI7S4814C3[];
extern  VTBL_ENTRY _ZTV7S4814C3[];
extern Class_Descriptor cd_S4814C2;
extern VTBL_ENTRY _ZTI7S4814C2[];
extern  VTBL_ENTRY _ZTV7S4814C2[];
static Base_Class bases_S4814C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4814C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4814C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4814C1[];
extern void _ZN7S4814C1D1Ev();
extern void _ZN7S4814C1D0Ev();
extern void _ZN7S4814C32v3Ev();
extern void _ZN7S4814C32v4Ev();
extern void _ZN7S4814C32v5Ev();
extern void _ZN7S4814C22v6Ev();
extern void _ZN7S4814C22v7Ev();
extern void _ZN7S4814C12v1Ev();
extern void _ZN7S4814C12v2Ev();
static  VTBL_ENTRY vtc_S4814C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4814C1[0]),
  (VTBL_ENTRY)&_ZN7S4814C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4814C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4814C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4814C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4814C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4814C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4814C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4814C1[];
extern  VTBL_ENTRY _ZTV7S4814C1[];
Class_Descriptor cd_S4814C1 = {  "S4814C1", // class name
  bases_S4814C1, 2,
  &(vtc_S4814C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI7S4814C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4814C1),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  S20930C3  {
  __tsi64 s20930c3f0;
  virtual void  v8(); // _ZN8S20930C32v8Ev
  virtual void  v9(); // _ZN8S20930C32v9Ev
  virtual void  v10(); // _ZN8S20930C33v10Ev
  virtual void  v11(); // _ZN8S20930C33v11Ev
  virtual void  v12(); // _ZN8S20930C33v12Ev
  virtual void  v13(); // _ZN8S20930C33v13Ev
  virtual void  v14(); // _ZN8S20930C33v14Ev
  virtual void  v15(); // _ZN8S20930C33v15Ev
  ~S20930C3(); // tgen
  S20930C3(); // tgen
};
//SIG(-1 S20930C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S20930C3 ::v8(){vfunc_called(this, "_ZN8S20930C32v8Ev");}
void  S20930C3 ::v9(){vfunc_called(this, "_ZN8S20930C32v9Ev");}
void  S20930C3 ::v10(){vfunc_called(this, "_ZN8S20930C33v10Ev");}
void  S20930C3 ::v11(){vfunc_called(this, "_ZN8S20930C33v11Ev");}
void  S20930C3 ::v12(){vfunc_called(this, "_ZN8S20930C33v12Ev");}
void  S20930C3 ::v13(){vfunc_called(this, "_ZN8S20930C33v13Ev");}
void  S20930C3 ::v14(){vfunc_called(this, "_ZN8S20930C33v14Ev");}
void  S20930C3 ::v15(){vfunc_called(this, "_ZN8S20930C33v15Ev");}
S20930C3 ::~S20930C3(){ note_dtor("S20930C3", this);} // tgen
S20930C3 ::S20930C3(){ note_ctor("S20930C3", this);} // tgen

static void Test_S20930C3()
{
  extern Class_Descriptor cd_S20930C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20930C3, buf);
    S20930C3 *dp, &lv = *(dp=new (buf) S20930C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20930C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20930C3)");
    check_field_offset(lv, s20930c3f0, ABISELECT(8,4), "S20930C3.s20930c3f0");
    test_class_info(&lv, &cd_S20930C3);
    dp->~S20930C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20930C3(Test_S20930C3, "S20930C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20930C3C1Ev();
extern void _ZN8S20930C3D1Ev();
Name_Map name_map_S20930C3[] = {
  NSPAIR(_ZN8S20930C3C1Ev),
  NSPAIR(_ZN8S20930C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20930C3[];
extern void _ZN8S20930C32v8Ev();
extern void _ZN8S20930C32v9Ev();
extern void _ZN8S20930C33v10Ev();
extern void _ZN8S20930C33v11Ev();
extern void _ZN8S20930C33v12Ev();
extern void _ZN8S20930C33v13Ev();
extern void _ZN8S20930C33v14Ev();
extern void _ZN8S20930C33v15Ev();
static  VTBL_ENTRY vtc_S20930C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20930C3[0]),
  (VTBL_ENTRY)&_ZN8S20930C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20930C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v15Ev,
};
extern VTBL_ENTRY _ZTI8S20930C3[];
extern  VTBL_ENTRY _ZTV8S20930C3[];
Class_Descriptor cd_S20930C3 = {  "S20930C3", // class name
  0,0,//no base classes
  &(vtc_S20930C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20930C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20930C3),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  S20930C2  : virtual S20930C3 {
  virtual  ~S20930C2(); // _ZN8S20930C2D2Ev
  virtual void  v16(); // _ZN8S20930C23v16Ev
  virtual void  v17(); // _ZN8S20930C23v17Ev
  virtual void  v18(); // _ZN8S20930C23v18Ev
  virtual void  v19(); // _ZN8S20930C23v19Ev
  virtual void  v20(); // _ZN8S20930C23v20Ev
  S20930C2(); // tgen
};
//SIG(-1 S20930C2) C1{ VBC2{ v6 v7 v8 v9 v10 v11 v12 v13 FL} vd v1 v2 v3 v4 v5}


 S20930C2 ::~S20930C2(){ note_dtor("S20930C2", this);}
void  S20930C2 ::v16(){vfunc_called(this, "_ZN8S20930C23v16Ev");}
void  S20930C2 ::v17(){vfunc_called(this, "_ZN8S20930C23v17Ev");}
void  S20930C2 ::v18(){vfunc_called(this, "_ZN8S20930C23v18Ev");}
void  S20930C2 ::v19(){vfunc_called(this, "_ZN8S20930C23v19Ev");}
void  S20930C2 ::v20(){vfunc_called(this, "_ZN8S20930C23v20Ev");}
S20930C2 ::S20930C2(){ note_ctor("S20930C2", this);} // tgen

static void Test_S20930C2()
{
  extern Class_Descriptor cd_S20930C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20930C2, buf);
    S20930C2 *dp, &lv = *(dp=new (buf) S20930C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20930C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20930C2)");
    check_base_class_offset(lv, (S20930C3*), ABISELECT(8,4), "S20930C2");
    test_class_info(&lv, &cd_S20930C2);
    dp->~S20930C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20930C2(Test_S20930C2, "S20930C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20930C2C1Ev();
extern void _ZN8S20930C2D2Ev();
Name_Map name_map_S20930C2[] = {
  NSPAIR(_ZN8S20930C2C1Ev),
  NSPAIR(_ZN8S20930C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20930C3;
extern VTBL_ENTRY _ZTI8S20930C3[];
extern  VTBL_ENTRY _ZTV8S20930C3[];
static Base_Class bases_S20930C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20930C3,    ABISELECT(8,4), //bcp->offset
    10, //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 _ZTI8S20930C2[];
extern void _ZN8S20930C2D1Ev();
extern void _ZN8S20930C2D0Ev();
extern void _ZN8S20930C23v16Ev();
extern void _ZN8S20930C23v17Ev();
extern void _ZN8S20930C23v18Ev();
extern void _ZN8S20930C23v19Ev();
extern void _ZN8S20930C23v20Ev();
extern void _ZN8S20930C32v8Ev();
extern void _ZN8S20930C32v9Ev();
extern void _ZN8S20930C33v10Ev();
extern void _ZN8S20930C33v11Ev();
extern void _ZN8S20930C33v12Ev();
extern void _ZN8S20930C33v13Ev();
extern void _ZN8S20930C33v14Ev();
extern void _ZN8S20930C33v15Ev();
static  VTBL_ENTRY vtc_S20930C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20930C2[0]),
  (VTBL_ENTRY)&_ZN8S20930C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20930C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20930C2[0]),
  (VTBL_ENTRY)&_ZN8S20930C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20930C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v15Ev,
};
extern VTBL_ENTRY _ZTV8S20930C2[];
static  VTT_ENTRY vtt_S20930C2[] = {
  {&(_ZTV8S20930C2[3]),  3,28},
  {&(_ZTV8S20930C2[20]),  20,28},
};
extern VTBL_ENTRY _ZTI8S20930C2[];
extern  VTBL_ENTRY _ZTV8S20930C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20930C2[];
Class_Descriptor cd_S20930C2 = {  "S20930C2", // class name
  bases_S20930C2, 1,
  &(vtc_S20930C2[0]), // expected_vtbl_contents
  &(vtt_S20930C2[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20930C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20930C2),28, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20930C2),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  S20930C1  : virtual S20930C2 {
  long s20930c1f0[7];
  void *s20930c1f1;
  virtual void  v1(); // _ZN8S20930C12v1Ev
  virtual void  v2(); // _ZN8S20930C12v2Ev
  virtual void  v3(); // _ZN8S20930C12v3Ev
  virtual void  v4(); // _ZN8S20930C12v4Ev
  virtual void  v5(); // _ZN8S20930C12v5Ev
  virtual void  v6(); // _ZN8S20930C12v6Ev
  virtual void  v7(); // _ZN8S20930C12v7Ev
  ~S20930C1(); // tgen
  S20930C1(); // tgen
};
//SIG(1 S20930C1) C1{ VBC2{ VBC3{ v8 v9 v10 v11 v12 v13 v14 v15 FL} vd v16 v17 v18 v19 v20} v1 v2 v3 v4 v5 v6 v7 Fl[7] Fp}


void  S20930C1 ::v1(){vfunc_called(this, "_ZN8S20930C12v1Ev");}
void  S20930C1 ::v2(){vfunc_called(this, "_ZN8S20930C12v2Ev");}
void  S20930C1 ::v3(){vfunc_called(this, "_ZN8S20930C12v3Ev");}
void  S20930C1 ::v4(){vfunc_called(this, "_ZN8S20930C12v4Ev");}
void  S20930C1 ::v5(){vfunc_called(this, "_ZN8S20930C12v5Ev");}
void  S20930C1 ::v6(){vfunc_called(this, "_ZN8S20930C12v6Ev");}
void  S20930C1 ::v7(){vfunc_called(this, "_ZN8S20930C12v7Ev");}
S20930C1 ::~S20930C1(){ note_dtor("S20930C1", this);} // tgen
S20930C1 ::S20930C1(){ note_ctor("S20930C1", this);} // tgen

static void Test_S20930C1()
{
  extern Class_Descriptor cd_S20930C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20930C1, buf);
    S20930C1 *dp, &lv = *(dp=new (buf) S20930C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20930C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20930C1)");
    check_base_class_offset(lv, (S20930C3*)(S20930C2*), ABISELECT(72,36), "S20930C1");
    check_base_class_offset(lv, (S20930C2*), 0, "S20930C1");
    check_field_offset(lv, s20930c1f0, ABISELECT(8,4), "S20930C1.s20930c1f0");
    check_field_offset(lv, s20930c1f1, ABISELECT(64,32), "S20930C1.s20930c1f1");
    test_class_info(&lv, &cd_S20930C1);
    dp->~S20930C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20930C1(Test_S20930C1, "S20930C1", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20930C1C1Ev();
extern void _ZN8S20930C1D1Ev();
Name_Map name_map_S20930C1[] = {
  NSPAIR(_ZN8S20930C1C1Ev),
  NSPAIR(_ZN8S20930C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20930C3;
extern VTBL_ENTRY _ZTI8S20930C3[];
extern  VTBL_ENTRY _ZTV8S20930C3[];
extern Class_Descriptor cd_S20930C2;
extern VTBL_ENTRY _ZTI8S20930C2[];
extern  VTBL_ENTRY _ZTV8S20930C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20930C2[];
static Base_Class bases_S20930C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20930C3,    ABISELECT(72,36), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //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_S20930C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S20930C1[];
extern void _ZN8S20930C1D1Ev();
extern void _ZN8S20930C1D0Ev();
extern void _ZN8S20930C23v16Ev();
extern void _ZN8S20930C23v17Ev();
extern void _ZN8S20930C23v18Ev();
extern void _ZN8S20930C23v19Ev();
extern void _ZN8S20930C23v20Ev();
extern void _ZN8S20930C12v1Ev();
extern void _ZN8S20930C12v2Ev();
extern void _ZN8S20930C12v3Ev();
extern void _ZN8S20930C12v4Ev();
extern void _ZN8S20930C12v5Ev();
extern void _ZN8S20930C12v6Ev();
extern void _ZN8S20930C12v7Ev();
extern void _ZN8S20930C32v8Ev();
extern void _ZN8S20930C32v9Ev();
extern void _ZN8S20930C33v10Ev();
extern void _ZN8S20930C33v11Ev();
extern void _ZN8S20930C33v12Ev();
extern void _ZN8S20930C33v13Ev();
extern void _ZN8S20930C33v14Ev();
extern void _ZN8S20930C33v15Ev();
static  VTBL_ENTRY vtc_S20930C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20930C1[0]),
  (VTBL_ENTRY)&_ZN8S20930C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20930C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v20Ev,
  (VTBL_ENTRY)&_ZN8S20930C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20930C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20930C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20930C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20930C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20930C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20930C12v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20930C1[0]),
  (VTBL_ENTRY)&_ZN8S20930C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20930C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v15Ev,
};
extern VTBL_ENTRY _ZTV8S20930C1[];
extern void _ZN8S20930C2D1Ev();
extern void _ZN8S20930C2D0Ev();
extern void _ZN8S20930C23v16Ev();
extern void _ZN8S20930C23v17Ev();
extern void _ZN8S20930C23v18Ev();
extern void _ZN8S20930C23v19Ev();
extern void _ZN8S20930C23v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20930C2__8S20930C1[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20930C2[0]),
  (VTBL_ENTRY)&_ZN8S20930C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20930C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20930C23v20Ev,
};
extern void _ZN8S20930C32v8Ev();
extern void _ZN8S20930C32v9Ev();
extern void _ZN8S20930C33v10Ev();
extern void _ZN8S20930C33v11Ev();
extern void _ZN8S20930C33v12Ev();
extern void _ZN8S20930C33v13Ev();
extern void _ZN8S20930C33v14Ev();
extern void _ZN8S20930C33v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20930C3__8S20930C2__8S20930C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20930C2[0]),
  (VTBL_ENTRY)&_ZN8S20930C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20930C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20930C33v15Ev,
};
static  VTT_ENTRY vtt_S20930C1[] = {
  {&(_ZTV8S20930C1[10]),  10,42},
  {&(_ZTV8S20930C1[10]),  10,42},
  {&(_ZTV8S20930C1[34]),  34,42},
  {&(_tg__ZTV8S20930C2__8S20930C1[3]),  3,10},
  {&(_tg__ZTV8S20930C3__8S20930C2__8S20930C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20930C1[];
extern  VTBL_ENTRY _ZTV8S20930C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20930C1[];
Class_Descriptor cd_S20930C1 = {  "S20930C1", // class name
  bases_S20930C1, 2,
  &(vtc_S20930C1[0]), // expected_vtbl_contents
  &(vtt_S20930C1[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20930C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20930C1),42, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20930C1),5, //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  S9934C2  {
  virtual  ~S9934C2(); // _ZN7S9934C2D1Ev
  virtual void  v5(); // _ZN7S9934C22v5Ev
  virtual void  v6(); // _ZN7S9934C22v6Ev
  virtual void  v7(); // _ZN7S9934C22v7Ev
  virtual void  v8(); // _ZN7S9934C22v8Ev
  virtual void  v9(); // _ZN7S9934C22v9Ev
  S9934C2(); // tgen
};
//SIG(-1 S9934C2) C1{ vd v1 v2 v3 v4 v5}


 S9934C2 ::~S9934C2(){ note_dtor("S9934C2", this);}
void  S9934C2 ::v5(){vfunc_called(this, "_ZN7S9934C22v5Ev");}
void  S9934C2 ::v6(){vfunc_called(this, "_ZN7S9934C22v6Ev");}
void  S9934C2 ::v7(){vfunc_called(this, "_ZN7S9934C22v7Ev");}
void  S9934C2 ::v8(){vfunc_called(this, "_ZN7S9934C22v8Ev");}
void  S9934C2 ::v9(){vfunc_called(this, "_ZN7S9934C22v9Ev");}
S9934C2 ::S9934C2(){ note_ctor("S9934C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9934C2C1Ev();
extern void _ZN7S9934C2D1Ev();
Name_Map name_map_S9934C2[] = {
  NSPAIR(_ZN7S9934C2C1Ev),
  NSPAIR(_ZN7S9934C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9934C2[];
extern void _ZN7S9934C2D1Ev();
extern void _ZN7S9934C2D0Ev();
extern void _ZN7S9934C22v5Ev();
extern void _ZN7S9934C22v6Ev();
extern void _ZN7S9934C22v7Ev();
extern void _ZN7S9934C22v8Ev();
extern void _ZN7S9934C22v9Ev();
static  VTBL_ENTRY vtc_S9934C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9934C2[0]),
  (VTBL_ENTRY)&_ZN7S9934C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9934C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9934C2[];
extern  VTBL_ENTRY _ZTV7S9934C2[];
Class_Descriptor cd_S9934C2 = {  "S9934C2", // class name
  0,0,//no base classes
  &(vtc_S9934C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9934C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9934C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9934C5_nt  : S7511C9_nt {
  ::S4257C17_nt s9934c5f0;
};
//SIG(-1 S9934C5_nt) C1{ BC2{} FC3{ BC2}}



//skip512 S9934C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S7511C9_nt;
static Base_Class bases_S9934C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S9934C5_nt = {  "S9934C5_nt", // class name
  bases_S9934C5_nt, 1,
  0, // no vftv
  0, //no vtt
  2, // 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  S9934C4_nt  : S9934C5_nt {
  void *s9934c4f0[3];
};
//SIG(-1 S9934C4_nt) C1{ BC2{ BC3{} FC4{ BC3}} Fp[3]}



//skip512 S9934C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S7511C9_nt;
extern Class_Descriptor cd_S9934C5_nt;
static Base_Class bases_S9934C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S9934C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S9934C1  : S9934C2 {
  int s9934c1f0[2];
  ::S100C8_nt s9934c1f1;
  ::S9934C4_nt s9934c1f2;
  int s9934c1f3;
  char s9934c1f4[2];
  int s9934c1f5;
  virtual void  v1(); // _ZN7S9934C12v1Ev
  virtual void  v2(); // _ZN7S9934C12v2Ev
  virtual void  v3(); // _ZN7S9934C12v3Ev
  virtual void  v4(); // _ZN7S9934C12v4Ev
  ~S9934C1(); // tgen
  S9934C1(); // tgen
};
//SIG(1 S9934C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[2] FC3{ m Fi[2]} FC4{ BC5{ BC6{} FC7{ BC6}} Fp[3]} Fi Fc[2] Fi}


void  S9934C1 ::v1(){vfunc_called(this, "_ZN7S9934C12v1Ev");}
void  S9934C1 ::v2(){vfunc_called(this, "_ZN7S9934C12v2Ev");}
void  S9934C1 ::v3(){vfunc_called(this, "_ZN7S9934C12v3Ev");}
void  S9934C1 ::v4(){vfunc_called(this, "_ZN7S9934C12v4Ev");}
S9934C1 ::~S9934C1(){ note_dtor("S9934C1", this);} // tgen
S9934C1 ::S9934C1(){ note_ctor("S9934C1", this);} // tgen

static void Test_S9934C1()
{
  extern Class_Descriptor cd_S9934C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S9934C1, buf);
    S9934C1 *dp, &lv = *(dp=new (buf) S9934C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S9934C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9934C1)");
    check_base_class_offset(lv, (S9934C2*), 0, "S9934C1");
    check_field_offset(lv, s9934c1f0, ABISELECT(8,4), "S9934C1.s9934c1f0");
    check_field_offset(lv, s9934c1f1, ABISELECT(16,12), "S9934C1.s9934c1f1");
    check_field_offset(lv, s9934c1f2, ABISELECT(24,20), "S9934C1.s9934c1f2");
    check_field_offset(lv, s9934c1f3, ABISELECT(56,36), "S9934C1.s9934c1f3");
    check_field_offset(lv, s9934c1f4, ABISELECT(60,40), "S9934C1.s9934c1f4");
    check_field_offset(lv, s9934c1f5, ABISELECT(64,44), "S9934C1.s9934c1f5");
    test_class_info(&lv, &cd_S9934C1);
    dp->~S9934C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9934C1(Test_S9934C1, "S9934C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S9934C1C1Ev();
extern void _ZN7S9934C1D1Ev();
Name_Map name_map_S9934C1[] = {
  NSPAIR(_ZN7S9934C1C1Ev),
  NSPAIR(_ZN7S9934C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9934C2;
extern VTBL_ENTRY _ZTI7S9934C2[];
extern  VTBL_ENTRY _ZTV7S9934C2[];
static Base_Class bases_S9934C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9934C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9934C1[];
extern void _ZN7S9934C1D1Ev();
extern void _ZN7S9934C1D0Ev();
extern void _ZN7S9934C22v5Ev();
extern void _ZN7S9934C22v6Ev();
extern void _ZN7S9934C22v7Ev();
extern void _ZN7S9934C22v8Ev();
extern void _ZN7S9934C22v9Ev();
extern void _ZN7S9934C12v1Ev();
extern void _ZN7S9934C12v2Ev();
extern void _ZN7S9934C12v3Ev();
extern void _ZN7S9934C12v4Ev();
static  VTBL_ENTRY vtc_S9934C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9934C1[0]),
  (VTBL_ENTRY)&_ZN7S9934C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9934C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9934C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9934C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9934C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9934C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9934C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9934C1[];
extern  VTBL_ENTRY _ZTV7S9934C1[];
Class_Descriptor cd_S9934C1 = {  "S9934C1", // class name
  bases_S9934C1, 1,
  &(vtc_S9934C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S9934C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9934C1),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  S19412C3  {
  virtual void  v8(); // _ZN8S19412C32v8Ev
  virtual void  v9(); // _ZN8S19412C32v9Ev
  virtual void  v10(); // _ZN8S19412C33v10Ev
  virtual void  v11(); // _ZN8S19412C33v11Ev
  virtual void  v12(); // _ZN8S19412C33v12Ev
  virtual void  v13(); // _ZN8S19412C33v13Ev
  virtual void  v14(); // _ZN8S19412C33v14Ev
  ~S19412C3(); // tgen
  S19412C3(); // tgen
};
//SIG(-1 S19412C3) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S19412C3 ::v8(){vfunc_called(this, "_ZN8S19412C32v8Ev");}
void  S19412C3 ::v9(){vfunc_called(this, "_ZN8S19412C32v9Ev");}
void  S19412C3 ::v10(){vfunc_called(this, "_ZN8S19412C33v10Ev");}
void  S19412C3 ::v11(){vfunc_called(this, "_ZN8S19412C33v11Ev");}
void  S19412C3 ::v12(){vfunc_called(this, "_ZN8S19412C33v12Ev");}
void  S19412C3 ::v13(){vfunc_called(this, "_ZN8S19412C33v13Ev");}
void  S19412C3 ::v14(){vfunc_called(this, "_ZN8S19412C33v14Ev");}
S19412C3 ::~S19412C3(){ note_dtor("S19412C3", this);} // tgen
S19412C3 ::S19412C3(){ note_ctor("S19412C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19412C3C1Ev();
extern void _ZN8S19412C3D1Ev();
Name_Map name_map_S19412C3[] = {
  NSPAIR(_ZN8S19412C3C1Ev),
  NSPAIR(_ZN8S19412C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19412C3[];
extern void _ZN8S19412C32v8Ev();
extern void _ZN8S19412C32v9Ev();
extern void _ZN8S19412C33v10Ev();
extern void _ZN8S19412C33v11Ev();
extern void _ZN8S19412C33v12Ev();
extern void _ZN8S19412C33v13Ev();
extern void _ZN8S19412C33v14Ev();
static  VTBL_ENTRY vtc_S19412C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19412C3[0]),
  (VTBL_ENTRY)&_ZN8S19412C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19412C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v14Ev,
};
extern VTBL_ENTRY _ZTI8S19412C3[];
extern  VTBL_ENTRY _ZTV8S19412C3[];
Class_Descriptor cd_S19412C3 = {  "S19412C3", // class name
  0,0,//no base classes
  &(vtc_S19412C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19412C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19412C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19412C2  : S19412C3 {
  virtual void  v15(); // _ZN8S19412C23v15Ev
  ~S19412C2(); // tgen
  S19412C2(); // tgen
};
//SIG(-1 S19412C2) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


void  S19412C2 ::v15(){vfunc_called(this, "_ZN8S19412C23v15Ev");}
S19412C2 ::~S19412C2(){ note_dtor("S19412C2", this);} // tgen
S19412C2 ::S19412C2(){ note_ctor("S19412C2", this);} // tgen

static void Test_S19412C2()
{
  extern Class_Descriptor cd_S19412C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19412C2, buf);
    S19412C2 *dp, &lv = *(dp=new (buf) S19412C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19412C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19412C2)");
    check_base_class_offset(lv, (S19412C3*), 0, "S19412C2");
    test_class_info(&lv, &cd_S19412C2);
    dp->~S19412C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19412C2(Test_S19412C2, "S19412C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19412C2C1Ev();
extern void _ZN8S19412C2D1Ev();
Name_Map name_map_S19412C2[] = {
  NSPAIR(_ZN8S19412C2C1Ev),
  NSPAIR(_ZN8S19412C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19412C3;
extern VTBL_ENTRY _ZTI8S19412C3[];
extern  VTBL_ENTRY _ZTV8S19412C3[];
static Base_Class bases_S19412C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19412C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19412C2[];
extern void _ZN8S19412C32v8Ev();
extern void _ZN8S19412C32v9Ev();
extern void _ZN8S19412C33v10Ev();
extern void _ZN8S19412C33v11Ev();
extern void _ZN8S19412C33v12Ev();
extern void _ZN8S19412C33v13Ev();
extern void _ZN8S19412C33v14Ev();
extern void _ZN8S19412C23v15Ev();
static  VTBL_ENTRY vtc_S19412C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19412C2[0]),
  (VTBL_ENTRY)&_ZN8S19412C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19412C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19412C23v15Ev,
};
extern VTBL_ENTRY _ZTI8S19412C2[];
extern  VTBL_ENTRY _ZTV8S19412C2[];
Class_Descriptor cd_S19412C2 = {  "S19412C2", // class name
  bases_S19412C2, 1,
  &(vtc_S19412C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19412C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19412C2),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  S19412C1  : virtual S19412C2 {
  __tsi64 s19412c1f0:4;
  ::S20111C9 s19412c1f1;
  virtual void  v1(); // _ZN8S19412C12v1Ev
  virtual void  v2(); // _ZN8S19412C12v2Ev
  virtual void  v3(); // _ZN8S19412C12v3Ev
  virtual void  v4(); // _ZN8S19412C12v4Ev
  virtual void  v5(); // _ZN8S19412C12v5Ev
  virtual void  v6(); // _ZN8S19412C12v6Ev
  virtual void  v7(); // _ZN8S19412C12v7Ev
  ~S19412C1(); // tgen
  S19412C1(); // tgen
};
//SIG(1 S19412C1) C1{ VBC2{ BC3{ v8 v9 v10 v11 v12 v13 v14} v15} v1 v2 v3 v4 v5 v6 v7 FL:4 FC4{ vd v16 v17 v18 v19 v20}}


void  S19412C1 ::v1(){vfunc_called(this, "_ZN8S19412C12v1Ev");}
void  S19412C1 ::v2(){vfunc_called(this, "_ZN8S19412C12v2Ev");}
void  S19412C1 ::v3(){vfunc_called(this, "_ZN8S19412C12v3Ev");}
void  S19412C1 ::v4(){vfunc_called(this, "_ZN8S19412C12v4Ev");}
void  S19412C1 ::v5(){vfunc_called(this, "_ZN8S19412C12v5Ev");}
void  S19412C1 ::v6(){vfunc_called(this, "_ZN8S19412C12v6Ev");}
void  S19412C1 ::v7(){vfunc_called(this, "_ZN8S19412C12v7Ev");}
S19412C1 ::~S19412C1(){ note_dtor("S19412C1", this);} // tgen
S19412C1 ::S19412C1(){ note_ctor("S19412C1", this);} // tgen

static void Test_S19412C1()
{
  extern Class_Descriptor cd_S19412C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S19412C1, buf);
    S19412C1 *dp, &lv = *(dp=new (buf) S19412C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19412C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19412C1)");
    check_base_class_offset(lv, (S19412C3*)(S19412C2*), 0, "S19412C1");
    check_base_class_offset(lv, (S19412C2*), 0, "S19412C1");
    set_bf_and_test(lv, s19412c1f0, ABISELECT(8,4), 0, 4, 1, "S19412C1");
    set_bf_and_test(lv, s19412c1f0, ABISELECT(8,4), 0, 4, hide_sll(1LL<<3), "S19412C1");
    check_field_offset(lv, s19412c1f1, ABISELECT(16,8), "S19412C1.s19412c1f1");
    test_class_info(&lv, &cd_S19412C1);
    dp->~S19412C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19412C1(Test_S19412C1, "S19412C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19412C1C1Ev();
extern void _ZN8S19412C1D1Ev();
Name_Map name_map_S19412C1[] = {
  NSPAIR(_ZN8S19412C1C1Ev),
  NSPAIR(_ZN8S19412C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19412C3;
extern VTBL_ENTRY _ZTI8S19412C3[];
extern  VTBL_ENTRY _ZTV8S19412C3[];
extern Class_Descriptor cd_S19412C2;
extern VTBL_ENTRY _ZTI8S19412C2[];
extern  VTBL_ENTRY _ZTV8S19412C2[];
static Base_Class bases_S19412C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19412C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19412C2,    0, //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19412C1[];
extern void _ZN8S19412C32v8Ev();
extern void _ZN8S19412C32v9Ev();
extern void _ZN8S19412C33v10Ev();
extern void _ZN8S19412C33v11Ev();
extern void _ZN8S19412C33v12Ev();
extern void _ZN8S19412C33v13Ev();
extern void _ZN8S19412C33v14Ev();
extern void _ZN8S19412C23v15Ev();
extern void _ZN8S19412C12v1Ev();
extern void _ZN8S19412C12v2Ev();
extern void _ZN8S19412C12v3Ev();
extern void _ZN8S19412C12v4Ev();
extern void _ZN8S19412C12v5Ev();
extern void _ZN8S19412C12v6Ev();
extern void _ZN8S19412C12v7Ev();
static  VTBL_ENTRY vtc_S19412C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19412C1[0]),
  (VTBL_ENTRY)&_ZN8S19412C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19412C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19412C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19412C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19412C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19412C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19412C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19412C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19412C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19412C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19412C12v7Ev,
};
extern VTBL_ENTRY _ZTV8S19412C1[];
static  VTT_ENTRY vtt_S19412C1[] = {
  {&(_ZTV8S19412C1[11]),  11,26},
  {&(_ZTV8S19412C1[11]),  11,26},
};
extern VTBL_ENTRY _ZTI8S19412C1[];
extern  VTBL_ENTRY _ZTV8S19412C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19412C1[];
Class_Descriptor cd_S19412C1 = {  "S19412C1", // class name
  bases_S19412C1, 2,
  &(vtc_S19412C1[0]), // expected_vtbl_contents
  &(vtt_S19412C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19412C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19412C1),26, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19412C1),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  S19411C3  {
  virtual void  v8(); // _ZN8S19411C32v8Ev
  virtual void  v9(); // _ZN8S19411C32v9Ev
  virtual void  v10(); // _ZN8S19411C33v10Ev
  virtual void  v11(); // _ZN8S19411C33v11Ev
  virtual void  v12(); // _ZN8S19411C33v12Ev
  virtual void  v13(); // _ZN8S19411C33v13Ev
  virtual void  v14(); // _ZN8S19411C33v14Ev
  ~S19411C3(); // tgen
  S19411C3(); // tgen
};
//SIG(-1 S19411C3) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S19411C3 ::v8(){vfunc_called(this, "_ZN8S19411C32v8Ev");}
void  S19411C3 ::v9(){vfunc_called(this, "_ZN8S19411C32v9Ev");}
void  S19411C3 ::v10(){vfunc_called(this, "_ZN8S19411C33v10Ev");}
void  S19411C3 ::v11(){vfunc_called(this, "_ZN8S19411C33v11Ev");}
void  S19411C3 ::v12(){vfunc_called(this, "_ZN8S19411C33v12Ev");}
void  S19411C3 ::v13(){vfunc_called(this, "_ZN8S19411C33v13Ev");}
void  S19411C3 ::v14(){vfunc_called(this, "_ZN8S19411C33v14Ev");}
S19411C3 ::~S19411C3(){ note_dtor("S19411C3", this);} // tgen
S19411C3 ::S19411C3(){ note_ctor("S19411C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19411C3C1Ev();
extern void _ZN8S19411C3D1Ev();
Name_Map name_map_S19411C3[] = {
  NSPAIR(_ZN8S19411C3C1Ev),
  NSPAIR(_ZN8S19411C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19411C3[];
extern void _ZN8S19411C32v8Ev();
extern void _ZN8S19411C32v9Ev();
extern void _ZN8S19411C33v10Ev();
extern void _ZN8S19411C33v11Ev();
extern void _ZN8S19411C33v12Ev();
extern void _ZN8S19411C33v13Ev();
extern void _ZN8S19411C33v14Ev();
static  VTBL_ENTRY vtc_S19411C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19411C3[0]),
  (VTBL_ENTRY)&_ZN8S19411C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19411C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v14Ev,
};
extern VTBL_ENTRY _ZTI8S19411C3[];
extern  VTBL_ENTRY _ZTV8S19411C3[];
Class_Descriptor cd_S19411C3 = {  "S19411C3", // class name
  0,0,//no base classes
  &(vtc_S19411C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19411C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19411C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19411C2  : S19411C3 {
  virtual void  v15(); // _ZN8S19411C23v15Ev
  ~S19411C2(); // tgen
  S19411C2(); // tgen
};
//SIG(-1 S19411C2) C1{ BC2{ v2 v3 v4 v5 v6 v7 v8} v1}


void  S19411C2 ::v15(){vfunc_called(this, "_ZN8S19411C23v15Ev");}
S19411C2 ::~S19411C2(){ note_dtor("S19411C2", this);} // tgen
S19411C2 ::S19411C2(){ note_ctor("S19411C2", this);} // tgen

static void Test_S19411C2()
{
  extern Class_Descriptor cd_S19411C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19411C2, buf);
    S19411C2 *dp, &lv = *(dp=new (buf) S19411C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19411C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19411C2)");
    check_base_class_offset(lv, (S19411C3*), 0, "S19411C2");
    test_class_info(&lv, &cd_S19411C2);
    dp->~S19411C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19411C2(Test_S19411C2, "S19411C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19411C2C1Ev();
extern void _ZN8S19411C2D1Ev();
Name_Map name_map_S19411C2[] = {
  NSPAIR(_ZN8S19411C2C1Ev),
  NSPAIR(_ZN8S19411C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19411C3;
extern VTBL_ENTRY _ZTI8S19411C3[];
extern  VTBL_ENTRY _ZTV8S19411C3[];
static Base_Class bases_S19411C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19411C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19411C2[];
extern void _ZN8S19411C32v8Ev();
extern void _ZN8S19411C32v9Ev();
extern void _ZN8S19411C33v10Ev();
extern void _ZN8S19411C33v11Ev();
extern void _ZN8S19411C33v12Ev();
extern void _ZN8S19411C33v13Ev();
extern void _ZN8S19411C33v14Ev();
extern void _ZN8S19411C23v15Ev();
static  VTBL_ENTRY vtc_S19411C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19411C2[0]),
  (VTBL_ENTRY)&_ZN8S19411C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19411C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19411C23v15Ev,
};
extern VTBL_ENTRY _ZTI8S19411C2[];
extern  VTBL_ENTRY _ZTV8S19411C2[];
Class_Descriptor cd_S19411C2 = {  "S19411C2", // class name
  bases_S19411C2, 1,
  &(vtc_S19411C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19411C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19411C2),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  S19411C1  : virtual S19411C2 {
  int s19411c1f0:4;
  ::S20111C9 s19411c1f1;
  virtual void  v1(); // _ZN8S19411C12v1Ev
  virtual void  v2(); // _ZN8S19411C12v2Ev
  virtual void  v3(); // _ZN8S19411C12v3Ev
  virtual void  v4(); // _ZN8S19411C12v4Ev
  virtual void  v5(); // _ZN8S19411C12v5Ev
  virtual void  v6(); // _ZN8S19411C12v6Ev
  virtual void  v7(); // _ZN8S19411C12v7Ev
  ~S19411C1(); // tgen
  S19411C1(); // tgen
};
//SIG(1 S19411C1) C1{ VBC2{ BC3{ v8 v9 v10 v11 v12 v13 v14} v15} v1 v2 v3 v4 v5 v6 v7 Fi:4 FC4{ vd v16 v17 v18 v19 v20}}


void  S19411C1 ::v1(){vfunc_called(this, "_ZN8S19411C12v1Ev");}
void  S19411C1 ::v2(){vfunc_called(this, "_ZN8S19411C12v2Ev");}
void  S19411C1 ::v3(){vfunc_called(this, "_ZN8S19411C12v3Ev");}
void  S19411C1 ::v4(){vfunc_called(this, "_ZN8S19411C12v4Ev");}
void  S19411C1 ::v5(){vfunc_called(this, "_ZN8S19411C12v5Ev");}
void  S19411C1 ::v6(){vfunc_called(this, "_ZN8S19411C12v6Ev");}
void  S19411C1 ::v7(){vfunc_called(this, "_ZN8S19411C12v7Ev");}
S19411C1 ::~S19411C1(){ note_dtor("S19411C1", this);} // tgen
S19411C1 ::S19411C1(){ note_ctor("S19411C1", this);} // tgen

static void Test_S19411C1()
{
  extern Class_Descriptor cd_S19411C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19411C1, buf);
    S19411C1 *dp, &lv = *(dp=new (buf) S19411C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19411C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19411C1)");
    check_base_class_offset(lv, (S19411C3*)(S19411C2*), 0, "S19411C1");
    check_base_class_offset(lv, (S19411C2*), 0, "S19411C1");
    set_bf_and_test(lv, s19411c1f0, ABISELECT(8,4), 0, 4, 1, "S19411C1");
    set_bf_and_test(lv, s19411c1f0, ABISELECT(8,4), 0, 4, hide_sll(1LL<<3), "S19411C1");
    check_field_offset(lv, s19411c1f1, ABISELECT(16,8), "S19411C1.s19411c1f1");
    test_class_info(&lv, &cd_S19411C1);
    dp->~S19411C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19411C1(Test_S19411C1, "S19411C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19411C1C1Ev();
extern void _ZN8S19411C1D1Ev();
Name_Map name_map_S19411C1[] = {
  NSPAIR(_ZN8S19411C1C1Ev),
  NSPAIR(_ZN8S19411C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19411C3;
extern VTBL_ENTRY _ZTI8S19411C3[];
extern  VTBL_ENTRY _ZTV8S19411C3[];
extern Class_Descriptor cd_S19411C2;
extern VTBL_ENTRY _ZTI8S19411C2[];
extern  VTBL_ENTRY _ZTV8S19411C2[];
static Base_Class bases_S19411C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19411C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19411C2,    0, //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19411C1[];
extern void _ZN8S19411C32v8Ev();
extern void _ZN8S19411C32v9Ev();
extern void _ZN8S19411C33v10Ev();
extern void _ZN8S19411C33v11Ev();
extern void _ZN8S19411C33v12Ev();
extern void _ZN8S19411C33v13Ev();
extern void _ZN8S19411C33v14Ev();
extern void _ZN8S19411C23v15Ev();
extern void _ZN8S19411C12v1Ev();
extern void _ZN8S19411C12v2Ev();
extern void _ZN8S19411C12v3Ev();
extern void _ZN8S19411C12v4Ev();
extern void _ZN8S19411C12v5Ev();
extern void _ZN8S19411C12v6Ev();
extern void _ZN8S19411C12v7Ev();
static  VTBL_ENTRY vtc_S19411C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19411C1[0]),
  (VTBL_ENTRY)&_ZN8S19411C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19411C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19411C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19411C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19411C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19411C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19411C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19411C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19411C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19411C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19411C12v7Ev,
};
extern VTBL_ENTRY _ZTV8S19411C1[];
static  VTT_ENTRY vtt_S19411C1[] = {
  {&(_ZTV8S19411C1[11]),  11,26},
  {&(_ZTV8S19411C1[11]),  11,26},
};
extern VTBL_ENTRY _ZTI8S19411C1[];
extern  VTBL_ENTRY _ZTV8S19411C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19411C1[];
Class_Descriptor cd_S19411C1 = {  "S19411C1", // class name
  bases_S19411C1, 2,
  &(vtc_S19411C1[0]), // expected_vtbl_contents
  &(vtt_S19411C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19411C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19411C1),26, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19411C1),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  S4388C3  {
  ::S2382C20_nt s4388c3f0;
  int s4388c3f1[2];
  char s4388c3f2;
  virtual  ~S4388C3(); // _ZN7S4388C3D1Ev
  virtual void  v2(); // _ZN7S4388C32v2Ev
  virtual void  v3(); // _ZN7S4388C32v3Ev
  virtual void  v4(); // _ZN7S4388C32v4Ev
  S4388C3(); // tgen
};
//SIG(-1 S4388C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4388C3 ::~S4388C3(){ note_dtor("S4388C3", this);}
void  S4388C3 ::v2(){vfunc_called(this, "_ZN7S4388C32v2Ev");}
void  S4388C3 ::v3(){vfunc_called(this, "_ZN7S4388C32v3Ev");}
void  S4388C3 ::v4(){vfunc_called(this, "_ZN7S4388C32v4Ev");}
S4388C3 ::S4388C3(){ note_ctor("S4388C3", this);} // tgen

static void Test_S4388C3()
{
  extern Class_Descriptor cd_S4388C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4388C3, buf);
    S4388C3 *dp, &lv = *(dp=new (buf) S4388C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4388C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4388C3)");
    check_field_offset(lv, s4388c3f0, ABISELECT(8,4), "S4388C3.s4388c3f0");
    check_field_offset(lv, s4388c3f1, ABISELECT(24,16), "S4388C3.s4388c3f1");
    check_field_offset(lv, s4388c3f2, ABISELECT(32,24), "S4388C3.s4388c3f2");
    test_class_info(&lv, &cd_S4388C3);
    dp->~S4388C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4388C3(Test_S4388C3, "S4388C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4388C3C1Ev();
extern void _ZN7S4388C3D1Ev();
Name_Map name_map_S4388C3[] = {
  NSPAIR(_ZN7S4388C3C1Ev),
  NSPAIR(_ZN7S4388C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4388C3[];
extern void _ZN7S4388C3D1Ev();
extern void _ZN7S4388C3D0Ev();
extern void _ZN7S4388C32v2Ev();
extern void _ZN7S4388C32v3Ev();
extern void _ZN7S4388C32v4Ev();
static  VTBL_ENTRY vtc_S4388C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4388C3[0]),
  (VTBL_ENTRY)&_ZN7S4388C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4388C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4388C3[];
extern  VTBL_ENTRY _ZTV7S4388C3[];
Class_Descriptor cd_S4388C3 = {  "S4388C3", // class name
  0,0,//no base classes
  &(vtc_S4388C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4388C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4388C3),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  S4388C2  : S4388C3 {
  void *s4388c2f0;
  virtual void  v5(); // _ZN7S4388C22v5Ev
  virtual void  v6(); // _ZN7S4388C22v6Ev
  ~S4388C2(); // tgen
  S4388C2(); // tgen
};
//SIG(-1 S4388C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4388C2 ::v5(){vfunc_called(this, "_ZN7S4388C22v5Ev");}
void  S4388C2 ::v6(){vfunc_called(this, "_ZN7S4388C22v6Ev");}
S4388C2 ::~S4388C2(){ note_dtor("S4388C2", this);} // tgen
S4388C2 ::S4388C2(){ note_ctor("S4388C2", this);} // tgen

static void Test_S4388C2()
{
  extern Class_Descriptor cd_S4388C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4388C2, buf);
    S4388C2 *dp, &lv = *(dp=new (buf) S4388C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4388C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4388C2)");
    check_base_class_offset(lv, (S4388C3*), 0, "S4388C2");
    check_field_offset(lv, s4388c2f0, ABISELECT(40,28), "S4388C2.s4388c2f0");
    test_class_info(&lv, &cd_S4388C2);
    dp->~S4388C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4388C2(Test_S4388C2, "S4388C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4388C2C1Ev();
extern void _ZN7S4388C2D1Ev();
Name_Map name_map_S4388C2[] = {
  NSPAIR(_ZN7S4388C2C1Ev),
  NSPAIR(_ZN7S4388C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4388C3;
extern VTBL_ENTRY _ZTI7S4388C3[];
extern  VTBL_ENTRY _ZTV7S4388C3[];
static Base_Class bases_S4388C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4388C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4388C2[];
extern void _ZN7S4388C2D1Ev();
extern void _ZN7S4388C2D0Ev();
extern void _ZN7S4388C32v2Ev();
extern void _ZN7S4388C32v3Ev();
extern void _ZN7S4388C32v4Ev();
extern void _ZN7S4388C22v5Ev();
extern void _ZN7S4388C22v6Ev();
static  VTBL_ENTRY vtc_S4388C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4388C2[0]),
  (VTBL_ENTRY)&_ZN7S4388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4388C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4388C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4388C2[];
extern  VTBL_ENTRY _ZTV7S4388C2[];
Class_Descriptor cd_S4388C2 = {  "S4388C2", // class name
  bases_S4388C2, 1,
  &(vtc_S4388C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4388C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4388C2),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  S4388C1  : S4388C2 {
  ::S2177C16 s4388c1f0;
  ::S2382C20_nt s4388c1f1;
  void *s4388c1f2;
  ::S5073C8_nt s4388c1f3;
  virtual void  v1(); // _ZN7S4388C12v1Ev
  ~S4388C1(); // tgen
  S4388C1(); // tgen
};
//SIG(1 S4388C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp} FC4 Fp FC7{ m Fp[2]}}


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

static void Test_S4388C1()
{
  extern Class_Descriptor cd_S4388C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S4388C1, buf);
    S4388C1 *dp, &lv = *(dp=new (buf) S4388C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S4388C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4388C1)");
    check_base_class_offset(lv, (S4388C3*)(S4388C2*), 0, "S4388C1");
    check_base_class_offset(lv, (S4388C2*), 0, "S4388C1");
    check_field_offset(lv, s4388c1f0, ABISELECT(48,32), "S4388C1.s4388c1f0");
    check_field_offset(lv, s4388c1f1, ABISELECT(56,36), "S4388C1.s4388c1f1");
    check_field_offset(lv, s4388c1f2, ABISELECT(72,48), "S4388C1.s4388c1f2");
    check_field_offset(lv, s4388c1f3, ABISELECT(80,52), "S4388C1.s4388c1f3");
    test_class_info(&lv, &cd_S4388C1);
    dp->~S4388C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4388C1(Test_S4388C1, "S4388C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S4388C1C1Ev();
extern void _ZN7S4388C1D1Ev();
Name_Map name_map_S4388C1[] = {
  NSPAIR(_ZN7S4388C1C1Ev),
  NSPAIR(_ZN7S4388C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4388C3;
extern VTBL_ENTRY _ZTI7S4388C3[];
extern  VTBL_ENTRY _ZTV7S4388C3[];
extern Class_Descriptor cd_S4388C2;
extern VTBL_ENTRY _ZTI7S4388C2[];
extern  VTBL_ENTRY _ZTV7S4388C2[];
static Base_Class bases_S4388C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4388C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4388C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4388C1[];
extern void _ZN7S4388C1D1Ev();
extern void _ZN7S4388C1D0Ev();
extern void _ZN7S4388C32v2Ev();
extern void _ZN7S4388C32v3Ev();
extern void _ZN7S4388C32v4Ev();
extern void _ZN7S4388C22v5Ev();
extern void _ZN7S4388C22v6Ev();
extern void _ZN7S4388C12v1Ev();
static  VTBL_ENTRY vtc_S4388C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4388C1[0]),
  (VTBL_ENTRY)&_ZN7S4388C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4388C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4388C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4388C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4388C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4388C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4388C1[];
extern  VTBL_ENTRY _ZTV7S4388C1[];
Class_Descriptor cd_S4388C1 = {  "S4388C1", // class name
  bases_S4388C1, 2,
  &(vtc_S4388C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S4388C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4388C1),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  S10295C2_nt  {
  virtual  ~S10295C2_nt(); // _ZN11S10295C2_ntD1Ev
  virtual void  v9(); // _ZN11S10295C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10295C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10295C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10295C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10295C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10295C2_nt3v14Ev
  virtual void  v15(); // _ZN11S10295C2_nt3v15Ev
  virtual void  v16(); // _ZN11S10295C2_nt3v16Ev
  virtual void  v17(); // _ZN11S10295C2_nt3v17Ev
  virtual void  v18(); // _ZN11S10295C2_nt3v18Ev
  S10295C2_nt(); // tgen
};
//SIG(-1 S10295C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S10295C2_nt ::~S10295C2_nt(){ note_dtor("S10295C2_nt", this);}
void  S10295C2_nt ::v9(){vfunc_called(this, "_ZN11S10295C2_nt2v9Ev");}
void  S10295C2_nt ::v10(){vfunc_called(this, "_ZN11S10295C2_nt3v10Ev");}
void  S10295C2_nt ::v11(){vfunc_called(this, "_ZN11S10295C2_nt3v11Ev");}
void  S10295C2_nt ::v12(){vfunc_called(this, "_ZN11S10295C2_nt3v12Ev");}
void  S10295C2_nt ::v13(){vfunc_called(this, "_ZN11S10295C2_nt3v13Ev");}
void  S10295C2_nt ::v14(){vfunc_called(this, "_ZN11S10295C2_nt3v14Ev");}
void  S10295C2_nt ::v15(){vfunc_called(this, "_ZN11S10295C2_nt3v15Ev");}
void  S10295C2_nt ::v16(){vfunc_called(this, "_ZN11S10295C2_nt3v16Ev");}
void  S10295C2_nt ::v17(){vfunc_called(this, "_ZN11S10295C2_nt3v17Ev");}
void  S10295C2_nt ::v18(){vfunc_called(this, "_ZN11S10295C2_nt3v18Ev");}
S10295C2_nt ::S10295C2_nt(){ note_ctor("S10295C2_nt", this);} // tgen

//skip512 S10295C2_nt

#else // __cplusplus

extern void _ZN11S10295C2_ntC1Ev();
extern void _ZN11S10295C2_ntD1Ev();
Name_Map name_map_S10295C2_nt[] = {
  NSPAIR(_ZN11S10295C2_ntC1Ev),
  NSPAIR(_ZN11S10295C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10295C2_nt[];
extern void _ZN11S10295C2_ntD1Ev();
extern void _ZN11S10295C2_ntD0Ev();
extern void _ZN11S10295C2_nt2v9Ev();
extern void _ZN11S10295C2_nt3v10Ev();
extern void _ZN11S10295C2_nt3v11Ev();
extern void _ZN11S10295C2_nt3v12Ev();
extern void _ZN11S10295C2_nt3v13Ev();
extern void _ZN11S10295C2_nt3v14Ev();
extern void _ZN11S10295C2_nt3v15Ev();
extern void _ZN11S10295C2_nt3v16Ev();
extern void _ZN11S10295C2_nt3v17Ev();
extern void _ZN11S10295C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S10295C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10295C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10295C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S10295C2_nt[];
VTBL_ENTRY *P__ZTI11S10295C2_nt = _ZTI11S10295C2_nt; 
extern  VTBL_ENTRY _ZTV11S10295C2_nt[];
Class_Descriptor cd_S10295C2_nt = {  "S10295C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10295C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10295C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10295C2_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10295C3_nt  {
  void *s10295c3f0;
  void  mf10295c3(); // _ZN11S10295C3_nt9mf10295c3Ev
  virtual  ~S10295C3_nt(); // _ZN11S10295C3_ntD1Ev
  S10295C3_nt(); // tgen
};
//SIG(-1 S10295C3_nt) C1{ vd m Fp}


void  S10295C3_nt ::mf10295c3(){}
 S10295C3_nt ::~S10295C3_nt(){ note_dtor("S10295C3_nt", this);}
S10295C3_nt ::S10295C3_nt(){ note_ctor("S10295C3_nt", this);} // tgen

//skip512 S10295C3_nt

#else // __cplusplus

extern void _ZN11S10295C3_ntC1Ev();
extern void _ZN11S10295C3_ntD1Ev();
Name_Map name_map_S10295C3_nt[] = {
  NSPAIR(_ZN11S10295C3_ntC1Ev),
  NSPAIR(_ZN11S10295C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10295C3_nt[];
extern void _ZN11S10295C3_ntD1Ev();
extern void _ZN11S10295C3_ntD0Ev();
static  VTBL_ENTRY vtc_S10295C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10295C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S10295C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10295C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S10295C3_nt[];
VTBL_ENTRY *P__ZTI11S10295C3_nt = _ZTI11S10295C3_nt; 
extern  VTBL_ENTRY _ZTV11S10295C3_nt[];
Class_Descriptor cd_S10295C3_nt = {  "S10295C3_nt", // class name
  0,0,//no base classes
  &(vtc_S10295C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S10295C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10295C3_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  S10295C1  : S10295C2_nt , S10295C3_nt {
  void *s10295c1f0;
  virtual  ~S10295C1(); // _ZN8S10295C1D1Ev
  virtual void  v1(); // _ZN8S10295C12v1Ev
  virtual void  v2(); // _ZN8S10295C12v2Ev
  virtual void  v3(); // _ZN8S10295C12v3Ev
  virtual void  v4(); // _ZN8S10295C12v4Ev
  virtual void  v5(); // _ZN8S10295C12v5Ev
  virtual void  v6(); // _ZN8S10295C12v6Ev
  virtual void  v7(); // _ZN8S10295C12v7Ev
  virtual void  v8(); // _ZN8S10295C12v8Ev
  S10295C1(); // tgen
};
//SIG(1 S10295C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18} BC3{ vd m Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp}


 S10295C1 ::~S10295C1(){ note_dtor("S10295C1", this);}
void  S10295C1 ::v1(){vfunc_called(this, "_ZN8S10295C12v1Ev");}
void  S10295C1 ::v2(){vfunc_called(this, "_ZN8S10295C12v2Ev");}
void  S10295C1 ::v3(){vfunc_called(this, "_ZN8S10295C12v3Ev");}
void  S10295C1 ::v4(){vfunc_called(this, "_ZN8S10295C12v4Ev");}
void  S10295C1 ::v5(){vfunc_called(this, "_ZN8S10295C12v5Ev");}
void  S10295C1 ::v6(){vfunc_called(this, "_ZN8S10295C12v6Ev");}
void  S10295C1 ::v7(){vfunc_called(this, "_ZN8S10295C12v7Ev");}
void  S10295C1 ::v8(){vfunc_called(this, "_ZN8S10295C12v8Ev");}
S10295C1 ::S10295C1(){ note_ctor("S10295C1", this);} // tgen

static void Test_S10295C1()
{
  extern Class_Descriptor cd_S10295C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10295C1, buf);
    S10295C1 *dp, &lv = *(dp=new (buf) S10295C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10295C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10295C1)");
    check_base_class_offset(lv, (S10295C2_nt*), 0, "S10295C1");
    check_base_class_offset(lv, (S10295C3_nt*), ABISELECT(8,4), "S10295C1");
    check_field_offset(lv, s10295c1f0, ABISELECT(24,12), "S10295C1.s10295c1f0");
    test_class_info(&lv, &cd_S10295C1);
    dp->~S10295C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10295C1(Test_S10295C1, "S10295C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10295C1C1Ev();
extern void _ZN8S10295C1D1Ev();
Name_Map name_map_S10295C1[] = {
  NSPAIR(_ZN8S10295C1C1Ev),
  NSPAIR(_ZN8S10295C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10295C2_nt;
extern VTBL_ENTRY _ZTI11S10295C2_nt[];
extern  VTBL_ENTRY _ZTV11S10295C2_nt[];
extern Class_Descriptor cd_S10295C3_nt;
extern VTBL_ENTRY _ZTI11S10295C3_nt[];
extern  VTBL_ENTRY _ZTV11S10295C3_nt[];
static Base_Class bases_S10295C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10295C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S10295C3_nt,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10295C1[];
extern void _ZN8S10295C1D1Ev();
extern void _ZN8S10295C1D0Ev();
extern void _ZN11S10295C2_nt2v9Ev();
extern void _ZN11S10295C2_nt3v10Ev();
extern void _ZN11S10295C2_nt3v11Ev();
extern void _ZN11S10295C2_nt3v12Ev();
extern void _ZN11S10295C2_nt3v13Ev();
extern void _ZN11S10295C2_nt3v14Ev();
extern void _ZN11S10295C2_nt3v15Ev();
extern void _ZN11S10295C2_nt3v16Ev();
extern void _ZN11S10295C2_nt3v17Ev();
extern void _ZN11S10295C2_nt3v18Ev();
extern void _ZN8S10295C12v1Ev();
extern void _ZN8S10295C12v2Ev();
extern void _ZN8S10295C12v3Ev();
extern void _ZN8S10295C12v4Ev();
extern void _ZN8S10295C12v5Ev();
extern void _ZN8S10295C12v6Ev();
extern void _ZN8S10295C12v7Ev();
extern void _ZN8S10295C12v8Ev();
extern void ABISELECT(_ZThn8_N8S10295C1D1Ev,_ZThn4_N8S10295C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S10295C1D0Ev,_ZThn4_N8S10295C1D0Ev)();
static  VTBL_ENTRY vtc_S10295C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10295C1[0]),
  (VTBL_ENTRY)&_ZN8S10295C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10295C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10295C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10295C12v8Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S10295C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10295C1D1Ev,_ZThn4_N8S10295C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10295C1D0Ev,_ZThn4_N8S10295C1D0Ev),
};
extern VTBL_ENTRY _ZTI8S10295C1[];
extern  VTBL_ENTRY _ZTV8S10295C1[];
Class_Descriptor cd_S10295C1 = {  "S10295C1", // class name
  bases_S10295C1, 2,
  &(vtc_S10295C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10295C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10295C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10055C2  {
  virtual  ~S10055C2(); // _ZN8S10055C2D1Ev
  virtual void  v6(); // _ZN8S10055C22v6Ev
  virtual void  v7(); // _ZN8S10055C22v7Ev
  virtual void  v8(); // _ZN8S10055C22v8Ev
  virtual void  v9(); // _ZN8S10055C22v9Ev
  virtual void  v10(); // _ZN8S10055C23v10Ev
  virtual void  v11(); // _ZN8S10055C23v11Ev
  virtual void  v12(); // _ZN8S10055C23v12Ev
  S10055C2(); // tgen
};
//SIG(-1 S10055C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10055C2 ::~S10055C2(){ note_dtor("S10055C2", this);}
void  S10055C2 ::v6(){vfunc_called(this, "_ZN8S10055C22v6Ev");}
void  S10055C2 ::v7(){vfunc_called(this, "_ZN8S10055C22v7Ev");}
void  S10055C2 ::v8(){vfunc_called(this, "_ZN8S10055C22v8Ev");}
void  S10055C2 ::v9(){vfunc_called(this, "_ZN8S10055C22v9Ev");}
void  S10055C2 ::v10(){vfunc_called(this, "_ZN8S10055C23v10Ev");}
void  S10055C2 ::v11(){vfunc_called(this, "_ZN8S10055C23v11Ev");}
void  S10055C2 ::v12(){vfunc_called(this, "_ZN8S10055C23v12Ev");}
S10055C2 ::S10055C2(){ note_ctor("S10055C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10055C2C1Ev();
extern void _ZN8S10055C2D1Ev();
Name_Map name_map_S10055C2[] = {
  NSPAIR(_ZN8S10055C2C1Ev),
  NSPAIR(_ZN8S10055C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10055C2[];
extern void _ZN8S10055C2D1Ev();
extern void _ZN8S10055C2D0Ev();
extern void _ZN8S10055C22v6Ev();
extern void _ZN8S10055C22v7Ev();
extern void _ZN8S10055C22v8Ev();
extern void _ZN8S10055C22v9Ev();
extern void _ZN8S10055C23v10Ev();
extern void _ZN8S10055C23v11Ev();
extern void _ZN8S10055C23v12Ev();
static  VTBL_ENTRY vtc_S10055C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10055C2[0]),
  (VTBL_ENTRY)&_ZN8S10055C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10055C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10055C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10055C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10055C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10055C2[];
extern  VTBL_ENTRY _ZTV8S10055C2[];
Class_Descriptor cd_S10055C2 = {  "S10055C2", // class name
  0,0,//no base classes
  &(vtc_S10055C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10055C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10055C2),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  S10055C3_nt  {
  void *s10055c3f0[5];
  void  mf10055c3(); // _ZN11S10055C3_nt9mf10055c3Ev
};
//SIG(-1 S10055C3_nt) C1{ m Fp[5]}


void  S10055C3_nt ::mf10055c3(){}

//skip512 S10055C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10055C1  : S10055C2 {
  int s10055c1f0[3];
  void *s10055c1f1[2];
  int s10055c1f2;
  void *s10055c1f3;
  int s10055c1f4[3];
  ::S10055C3_nt s10055c1f5;
  virtual  ~S10055C1(); // _ZN8S10055C1D1Ev
  virtual void  v1(); // _ZN8S10055C12v1Ev
  virtual void  v2(); // _ZN8S10055C12v2Ev
  virtual void  v3(); // _ZN8S10055C12v3Ev
  virtual void  v4(); // _ZN8S10055C12v4Ev
  virtual void  v5(); // _ZN8S10055C12v5Ev
  S10055C1(); // tgen
};
//SIG(1 S10055C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 Fi[3] Fp[2] Fi Fp Fi[3] FC3{ m Fp[5]}}


 S10055C1 ::~S10055C1(){ note_dtor("S10055C1", this);}
void  S10055C1 ::v1(){vfunc_called(this, "_ZN8S10055C12v1Ev");}
void  S10055C1 ::v2(){vfunc_called(this, "_ZN8S10055C12v2Ev");}
void  S10055C1 ::v3(){vfunc_called(this, "_ZN8S10055C12v3Ev");}
void  S10055C1 ::v4(){vfunc_called(this, "_ZN8S10055C12v4Ev");}
void  S10055C1 ::v5(){vfunc_called(this, "_ZN8S10055C12v5Ev");}
S10055C1 ::S10055C1(){ note_ctor("S10055C1", this);} // tgen

static void Test_S10055C1()
{
  extern Class_Descriptor cd_S10055C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S10055C1, buf);
    S10055C1 *dp, &lv = *(dp=new (buf) S10055C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S10055C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10055C1)");
    check_base_class_offset(lv, (S10055C2*), 0, "S10055C1");
    check_field_offset(lv, s10055c1f0, ABISELECT(8,4), "S10055C1.s10055c1f0");
    check_field_offset(lv, s10055c1f1, ABISELECT(24,16), "S10055C1.s10055c1f1");
    check_field_offset(lv, s10055c1f2, ABISELECT(40,24), "S10055C1.s10055c1f2");
    check_field_offset(lv, s10055c1f3, ABISELECT(48,28), "S10055C1.s10055c1f3");
    check_field_offset(lv, s10055c1f4, ABISELECT(56,32), "S10055C1.s10055c1f4");
    check_field_offset(lv, s10055c1f5, ABISELECT(72,44), "S10055C1.s10055c1f5");
    test_class_info(&lv, &cd_S10055C1);
    dp->~S10055C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10055C1(Test_S10055C1, "S10055C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S10055C1C1Ev();
extern void _ZN8S10055C1D1Ev();
Name_Map name_map_S10055C1[] = {
  NSPAIR(_ZN8S10055C1C1Ev),
  NSPAIR(_ZN8S10055C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10055C2;
extern VTBL_ENTRY _ZTI8S10055C2[];
extern  VTBL_ENTRY _ZTV8S10055C2[];
static Base_Class bases_S10055C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10055C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10055C1[];
extern void _ZN8S10055C1D1Ev();
extern void _ZN8S10055C1D0Ev();
extern void _ZN8S10055C22v6Ev();
extern void _ZN8S10055C22v7Ev();
extern void _ZN8S10055C22v8Ev();
extern void _ZN8S10055C22v9Ev();
extern void _ZN8S10055C23v10Ev();
extern void _ZN8S10055C23v11Ev();
extern void _ZN8S10055C23v12Ev();
extern void _ZN8S10055C12v1Ev();
extern void _ZN8S10055C12v2Ev();
extern void _ZN8S10055C12v3Ev();
extern void _ZN8S10055C12v4Ev();
extern void _ZN8S10055C12v5Ev();
static  VTBL_ENTRY vtc_S10055C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10055C1[0]),
  (VTBL_ENTRY)&_ZN8S10055C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10055C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10055C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10055C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10055C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10055C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10055C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10055C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10055C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10055C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10055C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10055C1[];
extern  VTBL_ENTRY _ZTV8S10055C1[];
Class_Descriptor cd_S10055C1 = {  "S10055C1", // class name
  bases_S10055C1, 1,
  &(vtc_S10055C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S10055C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10055C1),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  S1974C3_nt  : S8379C2_nt {
  short s1974c3f0[2];
  virtual  ~S1974C3_nt(); // _ZN10S1974C3_ntD1Ev
  virtual void  v8(); // _ZN10S1974C3_nt2v8Ev
  S1974C3_nt(); // tgen
};
//SIG(-1 S1974C3_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


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

//skip512 S1974C3_nt

#else // __cplusplus

extern void _ZN10S1974C3_ntC1Ev();
extern void _ZN10S1974C3_ntD1Ev();
Name_Map name_map_S1974C3_nt[] = {
  NSPAIR(_ZN10S1974C3_ntC1Ev),
  NSPAIR(_ZN10S1974C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C2_nt;
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
static Base_Class bases_S1974C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1974C3_nt[];
extern void _ZN10S1974C3_ntD1Ev();
extern void _ZN10S1974C3_ntD0Ev();
extern void _ZN10S1974C3_nt2v8Ev();
static  VTBL_ENTRY vtc_S1974C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1974C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1974C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1974C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1974C3_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S1974C3_nt[];
VTBL_ENTRY *P__ZTI10S1974C3_nt = _ZTI10S1974C3_nt; 
extern  VTBL_ENTRY _ZTV10S1974C3_nt[];
Class_Descriptor cd_S1974C3_nt = {  "S1974C3_nt", // class name
  bases_S1974C3_nt, 1,
  &(vtc_S1974C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1974C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1974C3_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1974C2  : S1974C3_nt {
  virtual void  v9(); // _ZN7S1974C22v9Ev
  virtual void  v10(); // _ZN7S1974C23v10Ev
  virtual void  v11(); // _ZN7S1974C23v11Ev
  virtual void  v12(); // _ZN7S1974C23v12Ev
  virtual void  v13(); // _ZN7S1974C23v13Ev
  virtual void  v14(); // _ZN7S1974C23v14Ev
  virtual void  v15(); // _ZN7S1974C23v15Ev
  virtual void  v16(); // _ZN7S1974C23v16Ev
  ~S1974C2(); // tgen
  S1974C2(); // tgen
};
//SIG(-1 S1974C2) C1{ BC2{ BC3{ vd m} vd v9 Fs[2]} v1 v2 v3 v4 v5 v6 v7 v8}


void  S1974C2 ::v9(){vfunc_called(this, "_ZN7S1974C22v9Ev");}
void  S1974C2 ::v10(){vfunc_called(this, "_ZN7S1974C23v10Ev");}
void  S1974C2 ::v11(){vfunc_called(this, "_ZN7S1974C23v11Ev");}
void  S1974C2 ::v12(){vfunc_called(this, "_ZN7S1974C23v12Ev");}
void  S1974C2 ::v13(){vfunc_called(this, "_ZN7S1974C23v13Ev");}
void  S1974C2 ::v14(){vfunc_called(this, "_ZN7S1974C23v14Ev");}
void  S1974C2 ::v15(){vfunc_called(this, "_ZN7S1974C23v15Ev");}
void  S1974C2 ::v16(){vfunc_called(this, "_ZN7S1974C23v16Ev");}
S1974C2 ::~S1974C2(){ note_dtor("S1974C2", this);} // tgen
S1974C2 ::S1974C2(){ note_ctor("S1974C2", this);} // tgen

static void Test_S1974C2()
{
  extern Class_Descriptor cd_S1974C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1974C2, buf);
    S1974C2 *dp, &lv = *(dp=new (buf) S1974C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1974C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1974C2)");
    check_base_class_offset(lv, (S8379C2_nt*)(S1974C3_nt*), 0, "S1974C2");
    check_base_class_offset(lv, (S1974C3_nt*), 0, "S1974C2");
    test_class_info(&lv, &cd_S1974C2);
    dp->~S1974C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1974C2(Test_S1974C2, "S1974C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1974C2C1Ev();
extern void _ZN7S1974C2D1Ev();
Name_Map name_map_S1974C2[] = {
  NSPAIR(_ZN7S1974C2C1Ev),
  NSPAIR(_ZN7S1974C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C2_nt;
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
extern Class_Descriptor cd_S1974C3_nt;
extern VTBL_ENTRY _ZTI10S1974C3_nt[];
extern  VTBL_ENTRY _ZTV10S1974C3_nt[];
static Base_Class bases_S1974C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1974C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1974C2[];
extern void _ZN7S1974C2D1Ev();
extern void _ZN7S1974C2D0Ev();
extern void _ZN10S1974C3_nt2v8Ev();
extern void _ZN7S1974C22v9Ev();
extern void _ZN7S1974C23v10Ev();
extern void _ZN7S1974C23v11Ev();
extern void _ZN7S1974C23v12Ev();
extern void _ZN7S1974C23v13Ev();
extern void _ZN7S1974C23v14Ev();
extern void _ZN7S1974C23v15Ev();
extern void _ZN7S1974C23v16Ev();
static  VTBL_ENTRY vtc_S1974C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1974C2[0]),
  (VTBL_ENTRY)&_ZN7S1974C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1974C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1974C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1974C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S1974C2[];
extern  VTBL_ENTRY _ZTV7S1974C2[];
Class_Descriptor cd_S1974C2 = {  "S1974C2", // class name
  bases_S1974C2, 2,
  &(vtc_S1974C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1974C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1974C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1974C1  : S1974C2 {
  void *s1974c1f0;
  virtual void  v1(); // _ZN7S1974C12v1Ev
  virtual void  v2(); // _ZN7S1974C12v2Ev
  virtual void  v3(); // _ZN7S1974C12v3Ev
  virtual void  v4(); // _ZN7S1974C12v4Ev
  virtual void  v5(); // _ZN7S1974C12v5Ev
  virtual void  v6(); // _ZN7S1974C12v6Ev
  virtual void  v7(); // _ZN7S1974C12v7Ev
  ~S1974C1(); // tgen
  S1974C1(); // tgen
};
//SIG(1 S1974C1) C1{ BC2{ BC3{ BC4{ vd m} vd v8 Fs[2]} v9 v10 v11 v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S1974C1 ::v1(){vfunc_called(this, "_ZN7S1974C12v1Ev");}
void  S1974C1 ::v2(){vfunc_called(this, "_ZN7S1974C12v2Ev");}
void  S1974C1 ::v3(){vfunc_called(this, "_ZN7S1974C12v3Ev");}
void  S1974C1 ::v4(){vfunc_called(this, "_ZN7S1974C12v4Ev");}
void  S1974C1 ::v5(){vfunc_called(this, "_ZN7S1974C12v5Ev");}
void  S1974C1 ::v6(){vfunc_called(this, "_ZN7S1974C12v6Ev");}
void  S1974C1 ::v7(){vfunc_called(this, "_ZN7S1974C12v7Ev");}
S1974C1 ::~S1974C1(){ note_dtor("S1974C1", this);} // tgen
S1974C1 ::S1974C1(){ note_ctor("S1974C1", this);} // tgen

static void Test_S1974C1()
{
  extern Class_Descriptor cd_S1974C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1974C1, buf);
    S1974C1 *dp, &lv = *(dp=new (buf) S1974C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1974C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1974C1)");
    check_base_class_offset(lv, (S8379C2_nt*)(S1974C3_nt*)(S1974C2*), 0, "S1974C1");
    check_base_class_offset(lv, (S1974C3_nt*)(S1974C2*), 0, "S1974C1");
    check_base_class_offset(lv, (S1974C2*), 0, "S1974C1");
    check_field_offset(lv, s1974c1f0, ABISELECT(16,8), "S1974C1.s1974c1f0");
    test_class_info(&lv, &cd_S1974C1);
    dp->~S1974C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1974C1(Test_S1974C1, "S1974C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1974C1C1Ev();
extern void _ZN7S1974C1D1Ev();
Name_Map name_map_S1974C1[] = {
  NSPAIR(_ZN7S1974C1C1Ev),
  NSPAIR(_ZN7S1974C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C2_nt;
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
extern Class_Descriptor cd_S1974C3_nt;
extern VTBL_ENTRY _ZTI10S1974C3_nt[];
extern  VTBL_ENTRY _ZTV10S1974C3_nt[];
extern Class_Descriptor cd_S1974C2;
extern VTBL_ENTRY _ZTI7S1974C2[];
extern  VTBL_ENTRY _ZTV7S1974C2[];
static Base_Class bases_S1974C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1974C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1974C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1974C1[];
extern void _ZN7S1974C1D1Ev();
extern void _ZN7S1974C1D0Ev();
extern void _ZN10S1974C3_nt2v8Ev();
extern void _ZN7S1974C22v9Ev();
extern void _ZN7S1974C23v10Ev();
extern void _ZN7S1974C23v11Ev();
extern void _ZN7S1974C23v12Ev();
extern void _ZN7S1974C23v13Ev();
extern void _ZN7S1974C23v14Ev();
extern void _ZN7S1974C23v15Ev();
extern void _ZN7S1974C23v16Ev();
extern void _ZN7S1974C12v1Ev();
extern void _ZN7S1974C12v2Ev();
extern void _ZN7S1974C12v3Ev();
extern void _ZN7S1974C12v4Ev();
extern void _ZN7S1974C12v5Ev();
extern void _ZN7S1974C12v6Ev();
extern void _ZN7S1974C12v7Ev();
static  VTBL_ENTRY vtc_S1974C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1974C1[0]),
  (VTBL_ENTRY)&_ZN7S1974C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1974C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1974C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1974C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1974C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1974C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1974C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1974C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1974C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1974C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1974C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1974C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1974C1[];
extern  VTBL_ENTRY _ZTV7S1974C1[];
Class_Descriptor cd_S1974C1 = {  "S1974C1", // class name
  bases_S1974C1, 3,
  &(vtc_S1974C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1974C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1974C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11914C3  {
  short s11914c3f0[5];
  int s11914c3f1[3];
  char s11914c3f2[18];
};
//SIG(-1 S11914C3) C1{ Fs[5] Fi[3] Fc[18]}



static void Test_S11914C3()
{
  {
    init_simple_test("S11914C3");
    S11914C3 lv;
    check2(sizeof(lv), 44, "sizeof(S11914C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11914C3)");
    check_field_offset(lv, s11914c3f0, 0, "S11914C3.s11914c3f0");
    check_field_offset(lv, s11914c3f1, 12, "S11914C3.s11914c3f1");
    check_field_offset(lv, s11914c3f2, 24, "S11914C3.s11914c3f2");
  }
}
static Arrange_To_Call_Me vS11914C3(Test_S11914C3, "S11914C3", 44);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11914C1  {
  ::S11911C2 s11914c1f0;
  ::S11914C3 s11914c1f1;
};
//SIG(1 S11914C1) C1{ FC2{ Fp[7] Fi Fc[12] Fi[4] Fc[48] Fs[36] Fi Fs[19] Fc[34] Fi} FC3{ Fs[5] Fi[3] Fc[18]}}



static void Test_S11914C1()
{
  {
    init_simple_test("S11914C1");
    S11914C1 lv;
    check2(sizeof(lv), ABISELECT(336,304), "sizeof(S11914C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11914C1)");
    check_field_offset(lv, s11914c1f0, 0, "S11914C1.s11914c1f0");
    check_field_offset(lv, s11914c1f1, ABISELECT(288,260), "S11914C1.s11914c1f1");
  }
}
static Arrange_To_Call_Me vS11914C1(Test_S11914C1, "S11914C1", ABISELECT(336,304));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4313C3  {
  char s4313c3f0;
  int s4313c3f1;
  virtual  ~S4313C3(); // _ZN7S4313C3D1Ev
  virtual void  v2(); // _ZN7S4313C32v2Ev
  S4313C3(); // tgen
};
//SIG(-1 S4313C3) C1{ vd v1 Fc Fi}


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

static void Test_S4313C3()
{
  extern Class_Descriptor cd_S4313C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4313C3, buf);
    S4313C3 *dp, &lv = *(dp=new (buf) S4313C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4313C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4313C3)");
    check_field_offset(lv, s4313c3f0, ABISELECT(8,4), "S4313C3.s4313c3f0");
    check_field_offset(lv, s4313c3f1, ABISELECT(12,8), "S4313C3.s4313c3f1");
    test_class_info(&lv, &cd_S4313C3);
    dp->~S4313C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4313C3(Test_S4313C3, "S4313C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4313C3C1Ev();
extern void _ZN7S4313C3D1Ev();
Name_Map name_map_S4313C3[] = {
  NSPAIR(_ZN7S4313C3C1Ev),
  NSPAIR(_ZN7S4313C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4313C3[];
extern void _ZN7S4313C3D1Ev();
extern void _ZN7S4313C3D0Ev();
extern void _ZN7S4313C32v2Ev();
static  VTBL_ENTRY vtc_S4313C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4313C3[0]),
  (VTBL_ENTRY)&_ZN7S4313C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4313C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4313C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4313C3[];
extern  VTBL_ENTRY _ZTV7S4313C3[];
Class_Descriptor cd_S4313C3 = {  "S4313C3", // class name
  0,0,//no base classes
  &(vtc_S4313C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4313C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4313C3),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  S4313C2  : S4313C3 {
  int s4313c2f0[2];
  char s4313c2f1;
  ::S2432C5_nt s4313c2f2;
  ::S2432C6 s4313c2f3;
  virtual  ~S4313C2(); // _ZN7S4313C2D1Ev
  virtual void  v3(); // _ZN7S4313C22v3Ev
  S4313C2(); // tgen
};
//SIG(-1 S4313C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ FL[4]}}}


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

static void Test_S4313C2()
{
  extern Class_Descriptor cd_S4313C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S4313C2, buf);
    S4313C2 *dp, &lv = *(dp=new (buf) S4313C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S4313C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4313C2)");
    check_base_class_offset(lv, (S4313C3*), 0, "S4313C2");
    check_field_offset(lv, s4313c2f0, ABISELECT(16,12), "S4313C2.s4313c2f0");
    check_field_offset(lv, s4313c2f1, ABISELECT(24,20), "S4313C2.s4313c2f1");
    check_field_offset(lv, s4313c2f2, ABISELECT(32,24), "S4313C2.s4313c2f2");
    check_field_offset(lv, s4313c2f3, ABISELECT(40,28), "S4313C2.s4313c2f3");
    test_class_info(&lv, &cd_S4313C2);
    dp->~S4313C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4313C2(Test_S4313C2, "S4313C2", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S4313C2C1Ev();
extern void _ZN7S4313C2D1Ev();
Name_Map name_map_S4313C2[] = {
  NSPAIR(_ZN7S4313C2C1Ev),
  NSPAIR(_ZN7S4313C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4313C3;
extern VTBL_ENTRY _ZTI7S4313C3[];
extern  VTBL_ENTRY _ZTV7S4313C3[];
static Base_Class bases_S4313C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4313C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4313C2[];
extern void _ZN7S4313C2D1Ev();
extern void _ZN7S4313C2D0Ev();
extern void _ZN7S4313C32v2Ev();
extern void _ZN7S4313C22v3Ev();
static  VTBL_ENTRY vtc_S4313C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4313C2[0]),
  (VTBL_ENTRY)&_ZN7S4313C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4313C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4313C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4313C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4313C2[];
extern  VTBL_ENTRY _ZTV7S4313C2[];
Class_Descriptor cd_S4313C2 = {  "S4313C2", // class name
  bases_S4313C2, 1,
  &(vtc_S4313C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S4313C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4313C2),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  S4313C1  : S4313C2 {
  void *s4313c1f0[3];
  virtual  ~S4313C1(); // _ZN7S4313C1D1Ev
  virtual void  v1(); // _ZN7S4313C12v1Ev
  S4313C1(); // tgen
};
//SIG(1 S4313C1) C1{ BC2{ BC3{ vd v2 Fc Fi} vd v3 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v6 Fc Fi} vd v4 v5 FC7{ FL[4]}}} vd v1 Fp[3]}


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

static void Test_S4313C1()
{
  extern Class_Descriptor cd_S4313C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S4313C1, buf);
    S4313C1 *dp, &lv = *(dp=new (buf) S4313C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S4313C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4313C1)");
    check_base_class_offset(lv, (S4313C3*)(S4313C2*), 0, "S4313C1");
    check_base_class_offset(lv, (S4313C2*), 0, "S4313C1");
    check_field_offset(lv, s4313c1f0, ABISELECT(88,72), "S4313C1.s4313c1f0");
    test_class_info(&lv, &cd_S4313C1);
    dp->~S4313C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4313C1(Test_S4313C1, "S4313C1", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN7S4313C1C1Ev();
extern void _ZN7S4313C1D1Ev();
Name_Map name_map_S4313C1[] = {
  NSPAIR(_ZN7S4313C1C1Ev),
  NSPAIR(_ZN7S4313C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4313C3;
extern VTBL_ENTRY _ZTI7S4313C3[];
extern  VTBL_ENTRY _ZTV7S4313C3[];
extern Class_Descriptor cd_S4313C2;
extern VTBL_ENTRY _ZTI7S4313C2[];
extern  VTBL_ENTRY _ZTV7S4313C2[];
static Base_Class bases_S4313C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4313C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4313C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4313C1[];
extern void _ZN7S4313C1D1Ev();
extern void _ZN7S4313C1D0Ev();
extern void _ZN7S4313C32v2Ev();
extern void _ZN7S4313C22v3Ev();
extern void _ZN7S4313C12v1Ev();
static  VTBL_ENTRY vtc_S4313C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4313C1[0]),
  (VTBL_ENTRY)&_ZN7S4313C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4313C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4313C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4313C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4313C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4313C1[];
extern  VTBL_ENTRY _ZTV7S4313C1[];
Class_Descriptor cd_S4313C1 = {  "S4313C1", // class name
  bases_S4313C1, 2,
  &(vtc_S4313C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI7S4313C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4313C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4312C3  {
  char s4312c3f0;
  int s4312c3f1;
  virtual  ~S4312C3(); // _ZN7S4312C3D1Ev
  virtual void  v2(); // _ZN7S4312C32v2Ev
  S4312C3(); // tgen
};
//SIG(-1 S4312C3) C1{ vd v1 Fc Fi}


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

static void Test_S4312C3()
{
  extern Class_Descriptor cd_S4312C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4312C3, buf);
    S4312C3 *dp, &lv = *(dp=new (buf) S4312C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4312C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4312C3)");
    check_field_offset(lv, s4312c3f0, ABISELECT(8,4), "S4312C3.s4312c3f0");
    check_field_offset(lv, s4312c3f1, ABISELECT(12,8), "S4312C3.s4312c3f1");
    test_class_info(&lv, &cd_S4312C3);
    dp->~S4312C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4312C3(Test_S4312C3, "S4312C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4312C3C1Ev();
extern void _ZN7S4312C3D1Ev();
Name_Map name_map_S4312C3[] = {
  NSPAIR(_ZN7S4312C3C1Ev),
  NSPAIR(_ZN7S4312C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4312C3[];
extern void _ZN7S4312C3D1Ev();
extern void _ZN7S4312C3D0Ev();
extern void _ZN7S4312C32v2Ev();
static  VTBL_ENTRY vtc_S4312C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4312C3[0]),
  (VTBL_ENTRY)&_ZN7S4312C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4312C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4312C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4312C3[];
extern  VTBL_ENTRY _ZTV7S4312C3[];
Class_Descriptor cd_S4312C3 = {  "S4312C3", // class name
  0,0,//no base classes
  &(vtc_S4312C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4312C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4312C3),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  S4312C2  : S4312C3 {
  int s4312c2f0[2];
  char s4312c2f1;
  ::S2432C5_nt s4312c2f2;
  ::S2431C6 s4312c2f3;
  virtual  ~S4312C2(); // _ZN7S4312C2D1Ev
  virtual void  v3(); // _ZN7S4312C22v3Ev
  S4312C2(); // tgen
};
//SIG(-1 S4312C2) C1{ BC2{ vd v2 Fc Fi} vd v1 Fi[2] Fc FC3{ Fp} FC4{ BC5{ vd v5 Fc Fi} vd v3 v4 FC6{ Fl[4]}}}


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

static void Test_S4312C2()
{
  extern Class_Descriptor cd_S4312C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S4312C2, buf);
    S4312C2 *dp, &lv = *(dp=new (buf) S4312C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S4312C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4312C2)");
    check_base_class_offset(lv, (S4312C3*), 0, "S4312C2");
    check_field_offset(lv, s4312c2f0, ABISELECT(16,12), "S4312C2.s4312c2f0");
    check_field_offset(lv, s4312c2f1, ABISELECT(24,20), "S4312C2.s4312c2f1");
    check_field_offset(lv, s4312c2f2, ABISELECT(32,24), "S4312C2.s4312c2f2");
    check_field_offset(lv, s4312c2f3, ABISELECT(40,28), "S4312C2.s4312c2f3");
    test_class_info(&lv, &cd_S4312C2);
    dp->~S4312C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4312C2(Test_S4312C2, "S4312C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S4312C2C1Ev();
extern void _ZN7S4312C2D1Ev();
Name_Map name_map_S4312C2[] = {
  NSPAIR(_ZN7S4312C2C1Ev),
  NSPAIR(_ZN7S4312C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4312C3;
extern VTBL_ENTRY _ZTI7S4312C3[];
extern  VTBL_ENTRY _ZTV7S4312C3[];
static Base_Class bases_S4312C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4312C2[];
extern void _ZN7S4312C2D1Ev();
extern void _ZN7S4312C2D0Ev();
extern void _ZN7S4312C32v2Ev();
extern void _ZN7S4312C22v3Ev();
static  VTBL_ENTRY vtc_S4312C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4312C2[0]),
  (VTBL_ENTRY)&_ZN7S4312C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4312C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4312C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4312C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4312C2[];
extern  VTBL_ENTRY _ZTV7S4312C2[];
Class_Descriptor cd_S4312C2 = {  "S4312C2", // class name
  bases_S4312C2, 1,
  &(vtc_S4312C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S4312C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4312C2),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  S4312C1  : S4312C2 {
  void *s4312c1f0[3];
  virtual  ~S4312C1(); // _ZN7S4312C1D1Ev
  virtual void  v1(); // _ZN7S4312C12v1Ev
  S4312C1(); // tgen
};
//SIG(1 S4312C1) C1{ BC2{ BC3{ vd v2 Fc Fi} vd v3 Fi[2] Fc FC4{ Fp} FC5{ BC6{ vd v6 Fc Fi} vd v4 v5 FC7{ Fl[4]}}} vd v1 Fp[3]}


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

static void Test_S4312C1()
{
  extern Class_Descriptor cd_S4312C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S4312C1, buf);
    S4312C1 *dp, &lv = *(dp=new (buf) S4312C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S4312C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4312C1)");
    check_base_class_offset(lv, (S4312C3*)(S4312C2*), 0, "S4312C1");
    check_base_class_offset(lv, (S4312C2*), 0, "S4312C1");
    check_field_offset(lv, s4312c1f0, ABISELECT(88,56), "S4312C1.s4312c1f0");
    test_class_info(&lv, &cd_S4312C1);
    dp->~S4312C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4312C1(Test_S4312C1, "S4312C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S4312C1C1Ev();
extern void _ZN7S4312C1D1Ev();
Name_Map name_map_S4312C1[] = {
  NSPAIR(_ZN7S4312C1C1Ev),
  NSPAIR(_ZN7S4312C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4312C3;
extern VTBL_ENTRY _ZTI7S4312C3[];
extern  VTBL_ENTRY _ZTV7S4312C3[];
extern Class_Descriptor cd_S4312C2;
extern VTBL_ENTRY _ZTI7S4312C2[];
extern  VTBL_ENTRY _ZTV7S4312C2[];
static Base_Class bases_S4312C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4312C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4312C1[];
extern void _ZN7S4312C1D1Ev();
extern void _ZN7S4312C1D0Ev();
extern void _ZN7S4312C32v2Ev();
extern void _ZN7S4312C22v3Ev();
extern void _ZN7S4312C12v1Ev();
static  VTBL_ENTRY vtc_S4312C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4312C1[0]),
  (VTBL_ENTRY)&_ZN7S4312C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4312C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4312C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4312C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4312C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4312C1[];
extern  VTBL_ENTRY _ZTV7S4312C1[];
Class_Descriptor cd_S4312C1 = {  "S4312C1", // class name
  bases_S4312C1, 2,
  &(vtc_S4312C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S4312C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4312C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11912C3  {
  int s11912c3f0[16];
  char s11912c3f1[20];
};
//SIG(-1 S11912C3) C1{ Fi[16] Fc[20]}



static void Test_S11912C3()
{
  {
    init_simple_test("S11912C3");
    S11912C3 lv;
    check2(sizeof(lv), 84, "sizeof(S11912C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11912C3)");
    check_field_offset(lv, s11912c3f0, 0, "S11912C3.s11912c3f0");
    check_field_offset(lv, s11912c3f1, 64, "S11912C3.s11912c3f1");
  }
}
static Arrange_To_Call_Me vS11912C3(Test_S11912C3, "S11912C3", 84);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11912C1  {
  ::S11911C2 s11912c1f0;
  ::S11912C3 s11912c1f1;
};
//SIG(1 S11912C1) C1{ FC2{ Fp[7] Fi Fc[12] Fi[4] Fc[48] Fs[36] Fi Fs[19] Fc[34] Fi} FC3{ Fi[16] Fc[20]}}



static void Test_S11912C1()
{
  {
    init_simple_test("S11912C1");
    S11912C1 lv;
    check2(sizeof(lv), ABISELECT(376,344), "sizeof(S11912C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11912C1)");
    check_field_offset(lv, s11912c1f0, 0, "S11912C1.s11912c1f0");
    check_field_offset(lv, s11912c1f1, ABISELECT(288,260), "S11912C1.s11912c1f1");
  }
}
static Arrange_To_Call_Me vS11912C1(Test_S11912C1, "S11912C1", ABISELECT(376,344));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11913C3  {
  void *s11913c3f0[20];
  char s11913c3f1[2];
};
//SIG(-1 S11913C3) C1{ Fp[20] Fc[2]}



static void Test_S11913C3()
{
  {
    init_simple_test("S11913C3");
    S11913C3 lv;
    check2(sizeof(lv), ABISELECT(168,84), "sizeof(S11913C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11913C3)");
    check_field_offset(lv, s11913c3f0, 0, "S11913C3.s11913c3f0");
    check_field_offset(lv, s11913c3f1, ABISELECT(160,80), "S11913C3.s11913c3f1");
  }
}
static Arrange_To_Call_Me vS11913C3(Test_S11913C3, "S11913C3", ABISELECT(168,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11913C1  {
  ::S11911C2 s11913c1f0;
  ::S11913C3 s11913c1f1;
};
//SIG(1 S11913C1) C1{ FC2{ Fp[7] Fi Fc[12] Fi[4] Fc[48] Fs[36] Fi Fs[19] Fc[34] Fi} FC3{ Fp[20] Fc[2]}}



static void Test_S11913C1()
{
  {
    init_simple_test("S11913C1");
    S11913C1 lv;
    check2(sizeof(lv), ABISELECT(456,344), "sizeof(S11913C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11913C1)");
    check_field_offset(lv, s11913c1f0, 0, "S11913C1.s11913c1f0");
    check_field_offset(lv, s11913c1f1, ABISELECT(288,260), "S11913C1.s11913c1f1");
  }
}
static Arrange_To_Call_Me vS11913C1(Test_S11913C1, "S11913C1", ABISELECT(456,344));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4805C3  {
  ::S2382C20_nt s4805c3f0;
  int s4805c3f1[2];
  char s4805c3f2;
  virtual  ~S4805C3(); // _ZN7S4805C3D1Ev
  virtual void  v3(); // _ZN7S4805C32v3Ev
  virtual void  v4(); // _ZN7S4805C32v4Ev
  virtual void  v5(); // _ZN7S4805C32v5Ev
  S4805C3(); // tgen
};
//SIG(-1 S4805C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4805C3 ::~S4805C3(){ note_dtor("S4805C3", this);}
void  S4805C3 ::v3(){vfunc_called(this, "_ZN7S4805C32v3Ev");}
void  S4805C3 ::v4(){vfunc_called(this, "_ZN7S4805C32v4Ev");}
void  S4805C3 ::v5(){vfunc_called(this, "_ZN7S4805C32v5Ev");}
S4805C3 ::S4805C3(){ note_ctor("S4805C3", this);} // tgen

static void Test_S4805C3()
{
  extern Class_Descriptor cd_S4805C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4805C3, buf);
    S4805C3 *dp, &lv = *(dp=new (buf) S4805C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4805C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4805C3)");
    check_field_offset(lv, s4805c3f0, ABISELECT(8,4), "S4805C3.s4805c3f0");
    check_field_offset(lv, s4805c3f1, ABISELECT(24,16), "S4805C3.s4805c3f1");
    check_field_offset(lv, s4805c3f2, ABISELECT(32,24), "S4805C3.s4805c3f2");
    test_class_info(&lv, &cd_S4805C3);
    dp->~S4805C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4805C3(Test_S4805C3, "S4805C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4805C3C1Ev();
extern void _ZN7S4805C3D1Ev();
Name_Map name_map_S4805C3[] = {
  NSPAIR(_ZN7S4805C3C1Ev),
  NSPAIR(_ZN7S4805C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4805C3[];
extern void _ZN7S4805C3D1Ev();
extern void _ZN7S4805C3D0Ev();
extern void _ZN7S4805C32v3Ev();
extern void _ZN7S4805C32v4Ev();
extern void _ZN7S4805C32v5Ev();
static  VTBL_ENTRY vtc_S4805C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4805C3[0]),
  (VTBL_ENTRY)&_ZN7S4805C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4805C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4805C3[];
extern  VTBL_ENTRY _ZTV7S4805C3[];
Class_Descriptor cd_S4805C3 = {  "S4805C3", // class name
  0,0,//no base classes
  &(vtc_S4805C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4805C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4805C3),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  S4805C2  : S4805C3 {
  void *s4805c2f0;
  virtual void  v6(); // _ZN7S4805C22v6Ev
  virtual void  v7(); // _ZN7S4805C22v7Ev
  ~S4805C2(); // tgen
  S4805C2(); // tgen
};
//SIG(-1 S4805C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4805C2 ::v6(){vfunc_called(this, "_ZN7S4805C22v6Ev");}
void  S4805C2 ::v7(){vfunc_called(this, "_ZN7S4805C22v7Ev");}
S4805C2 ::~S4805C2(){ note_dtor("S4805C2", this);} // tgen
S4805C2 ::S4805C2(){ note_ctor("S4805C2", this);} // tgen

static void Test_S4805C2()
{
  extern Class_Descriptor cd_S4805C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4805C2, buf);
    S4805C2 *dp, &lv = *(dp=new (buf) S4805C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4805C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4805C2)");
    check_base_class_offset(lv, (S4805C3*), 0, "S4805C2");
    check_field_offset(lv, s4805c2f0, ABISELECT(40,28), "S4805C2.s4805c2f0");
    test_class_info(&lv, &cd_S4805C2);
    dp->~S4805C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4805C2(Test_S4805C2, "S4805C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4805C2C1Ev();
extern void _ZN7S4805C2D1Ev();
Name_Map name_map_S4805C2[] = {
  NSPAIR(_ZN7S4805C2C1Ev),
  NSPAIR(_ZN7S4805C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4805C3;
extern VTBL_ENTRY _ZTI7S4805C3[];
extern  VTBL_ENTRY _ZTV7S4805C3[];
static Base_Class bases_S4805C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4805C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4805C2[];
extern void _ZN7S4805C2D1Ev();
extern void _ZN7S4805C2D0Ev();
extern void _ZN7S4805C32v3Ev();
extern void _ZN7S4805C32v4Ev();
extern void _ZN7S4805C32v5Ev();
extern void _ZN7S4805C22v6Ev();
extern void _ZN7S4805C22v7Ev();
static  VTBL_ENTRY vtc_S4805C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4805C2[0]),
  (VTBL_ENTRY)&_ZN7S4805C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4805C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4805C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4805C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4805C2[];
extern  VTBL_ENTRY _ZTV7S4805C2[];
Class_Descriptor cd_S4805C2 = {  "S4805C2", // class name
  bases_S4805C2, 1,
  &(vtc_S4805C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4805C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4805C2),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  S4805C1  : S4805C2 {
  void *s4805c1f0[3];
  int s4805c1f1;
  virtual  ~S4805C1(); // _ZN7S4805C1D1Ev
  virtual void  v1(); // _ZN7S4805C12v1Ev
  virtual void  v2(); // _ZN7S4805C12v2Ev
  S4805C1(); // tgen
};
//SIG(1 S4805C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp[3] Fi}


 S4805C1 ::~S4805C1(){ note_dtor("S4805C1", this);}
void  S4805C1 ::v1(){vfunc_called(this, "_ZN7S4805C12v1Ev");}
void  S4805C1 ::v2(){vfunc_called(this, "_ZN7S4805C12v2Ev");}
S4805C1 ::S4805C1(){ note_ctor("S4805C1", this);} // tgen

static void Test_S4805C1()
{
  extern Class_Descriptor cd_S4805C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S4805C1, buf);
    S4805C1 *dp, &lv = *(dp=new (buf) S4805C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S4805C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4805C1)");
    check_base_class_offset(lv, (S4805C3*)(S4805C2*), 0, "S4805C1");
    check_base_class_offset(lv, (S4805C2*), 0, "S4805C1");
    check_field_offset(lv, s4805c1f0, ABISELECT(48,32), "S4805C1.s4805c1f0");
    check_field_offset(lv, s4805c1f1, ABISELECT(72,44), "S4805C1.s4805c1f1");
    test_class_info(&lv, &cd_S4805C1);
    dp->~S4805C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4805C1(Test_S4805C1, "S4805C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S4805C1C1Ev();
extern void _ZN7S4805C1D1Ev();
Name_Map name_map_S4805C1[] = {
  NSPAIR(_ZN7S4805C1C1Ev),
  NSPAIR(_ZN7S4805C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4805C3;
extern VTBL_ENTRY _ZTI7S4805C3[];
extern  VTBL_ENTRY _ZTV7S4805C3[];
extern Class_Descriptor cd_S4805C2;
extern VTBL_ENTRY _ZTI7S4805C2[];
extern  VTBL_ENTRY _ZTV7S4805C2[];
static Base_Class bases_S4805C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4805C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4805C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4805C1[];
extern void _ZN7S4805C1D1Ev();
extern void _ZN7S4805C1D0Ev();
extern void _ZN7S4805C32v3Ev();
extern void _ZN7S4805C32v4Ev();
extern void _ZN7S4805C32v5Ev();
extern void _ZN7S4805C22v6Ev();
extern void _ZN7S4805C22v7Ev();
extern void _ZN7S4805C12v1Ev();
extern void _ZN7S4805C12v2Ev();
static  VTBL_ENTRY vtc_S4805C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4805C1[0]),
  (VTBL_ENTRY)&_ZN7S4805C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4805C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4805C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4805C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4805C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4805C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4805C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4805C1[];
extern  VTBL_ENTRY _ZTV7S4805C1[];
Class_Descriptor cd_S4805C1 = {  "S4805C1", // class name
  bases_S4805C1, 2,
  &(vtc_S4805C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S4805C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4805C1),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  S15517C3  {
  int s15517c3f0[3];
  char s15517c3f1[40];
};
//SIG(-1 S15517C3) C1{ Fi[3] Fc[40]}



static void Test_S15517C3()
{
  {
    init_simple_test("S15517C3");
    S15517C3 lv;
    check2(sizeof(lv), 52, "sizeof(S15517C3)");
    check2(__alignof__(lv), 4, "__alignof__(S15517C3)");
    check_field_offset(lv, s15517c3f0, 0, "S15517C3.s15517c3f0");
    check_field_offset(lv, s15517c3f1, 12, "S15517C3.s15517c3f1");
  }
}
static Arrange_To_Call_Me vS15517C3(Test_S15517C3, "S15517C3", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15517C2  {
  char s15517c2f0[4];
  int s15517c2f1[3];
  char s15517c2f2[8];
  short s15517c2f3[2];
  int s15517c2f4;
  short s15517c2f5[2];
  ::S15517C3 s15517c2f6;
  int s15517c2f7;
  char s15517c2f8[36];
};
//SIG(-1 S15517C2) C1{ Fc[4] Fi[3] Fc[8] Fs[2] Fi Fs[2] FC2{ Fi[3] Fc[40]} Fi Fc[36]}



static void Test_S15517C2()
{
  {
    init_simple_test("S15517C2");
    S15517C2 lv;
    check2(sizeof(lv), 128, "sizeof(S15517C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15517C2)");
    check_field_offset(lv, s15517c2f0, 0, "S15517C2.s15517c2f0");
    check_field_offset(lv, s15517c2f1, 4, "S15517C2.s15517c2f1");
    check_field_offset(lv, s15517c2f2, 16, "S15517C2.s15517c2f2");
    check_field_offset(lv, s15517c2f3, 24, "S15517C2.s15517c2f3");
    check_field_offset(lv, s15517c2f4, 28, "S15517C2.s15517c2f4");
    check_field_offset(lv, s15517c2f5, 32, "S15517C2.s15517c2f5");
    check_field_offset(lv, s15517c2f6, 36, "S15517C2.s15517c2f6");
    check_field_offset(lv, s15517c2f7, 88, "S15517C2.s15517c2f7");
    check_field_offset(lv, s15517c2f8, 92, "S15517C2.s15517c2f8");
  }
}
static Arrange_To_Call_Me vS15517C2(Test_S15517C2, "S15517C2", 128);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15517C1  {
  ::S15517C2 s15517c1f0;
  __tsi64 s15517c1f1;
  unsigned char s15517c1f2:1;
  void  mf15517c1(); // _ZN8S15517C19mf15517c1Ev
};
//SIG(1 S15517C1) C1{ m FC2{ Fc[4] Fi[3] Fc[8] Fs[2] Fi Fs[2] FC3{ Fi[3] Fc[40]} Fi Fc[36]} FL Fc:1}


void  S15517C1 ::mf15517c1(){}

static void Test_S15517C1()
{
  {
    init_simple_test("S15517C1");
    static S15517C1 lv;
    check2(sizeof(lv), ABISELECT(144,140), "sizeof(S15517C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15517C1)");
    check_field_offset(lv, s15517c1f0, 0, "S15517C1.s15517c1f0");
    check_field_offset(lv, s15517c1f1, 128, "S15517C1.s15517c1f1");
    set_bf_and_test(lv, s15517c1f2, 136, 0, 1, 1, "S15517C1");
  }
}
static Arrange_To_Call_Me vS15517C1(Test_S15517C1, "S15517C1", ABISELECT(144,140));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8398C2  {
  char s8398c2f0;
  int s8398c2f1;
  virtual  ~S8398C2(); // _ZN7S8398C2D1Ev
  virtual void  v1(); // _ZN7S8398C22v1Ev
  S8398C2(); // tgen
};
//SIG(-1 S8398C2) C1{ vd v1 Fc Fi}


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

static void Test_S8398C2()
{
  extern Class_Descriptor cd_S8398C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8398C2, buf);
    S8398C2 *dp, &lv = *(dp=new (buf) S8398C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8398C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8398C2)");
    check_field_offset(lv, s8398c2f0, ABISELECT(8,4), "S8398C2.s8398c2f0");
    check_field_offset(lv, s8398c2f1, ABISELECT(12,8), "S8398C2.s8398c2f1");
    test_class_info(&lv, &cd_S8398C2);
    dp->~S8398C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8398C2(Test_S8398C2, "S8398C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8398C2C1Ev();
extern void _ZN7S8398C2D1Ev();
Name_Map name_map_S8398C2[] = {
  NSPAIR(_ZN7S8398C2C1Ev),
  NSPAIR(_ZN7S8398C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8398C2[];
extern void _ZN7S8398C2D1Ev();
extern void _ZN7S8398C2D0Ev();
extern void _ZN7S8398C22v1Ev();
static  VTBL_ENTRY vtc_S8398C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8398C2[0]),
  (VTBL_ENTRY)&_ZN7S8398C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8398C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8398C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8398C2[];
extern  VTBL_ENTRY _ZTV7S8398C2[];
Class_Descriptor cd_S8398C2 = {  "S8398C2", // class name
  0,0,//no base classes
  &(vtc_S8398C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8398C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8398C2),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  S8398C3  : S8398C2 {
  void *s8398c3f0;
  int s8398c3f1[2];
  char s8398c3f2;
  void *s8398c3f3;
  virtual  ~S8398C3(); // _ZN7S8398C3D1Ev
  S8398C3(); // tgen
};
//SIG(-1 S8398C3) C1{ BC2{ vd v1 Fc Fi} vd Fp Fi[2] Fc Fp}


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

static void Test_S8398C3()
{
  extern Class_Descriptor cd_S8398C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S8398C3, buf);
    S8398C3 *dp, &lv = *(dp=new (buf) S8398C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S8398C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8398C3)");
    check_base_class_offset(lv, (S8398C2*), 0, "S8398C3");
    check_field_offset(lv, s8398c3f0, ABISELECT(16,12), "S8398C3.s8398c3f0");
    check_field_offset(lv, s8398c3f1, ABISELECT(24,16), "S8398C3.s8398c3f1");
    check_field_offset(lv, s8398c3f2, ABISELECT(32,24), "S8398C3.s8398c3f2");
    check_field_offset(lv, s8398c3f3, ABISELECT(40,28), "S8398C3.s8398c3f3");
    test_class_info(&lv, &cd_S8398C3);
    dp->~S8398C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8398C3(Test_S8398C3, "S8398C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S8398C3C1Ev();
extern void _ZN7S8398C3D1Ev();
Name_Map name_map_S8398C3[] = {
  NSPAIR(_ZN7S8398C3C1Ev),
  NSPAIR(_ZN7S8398C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8398C2;
extern VTBL_ENTRY _ZTI7S8398C2[];
extern  VTBL_ENTRY _ZTV7S8398C2[];
static Base_Class bases_S8398C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8398C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8398C3[];
extern void _ZN7S8398C3D1Ev();
extern void _ZN7S8398C3D0Ev();
extern void _ZN7S8398C22v1Ev();
static  VTBL_ENTRY vtc_S8398C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8398C3[0]),
  (VTBL_ENTRY)&_ZN7S8398C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8398C3D0Ev,
  (VTBL_ENTRY)&_ZN7S8398C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8398C3[];
extern  VTBL_ENTRY _ZTV7S8398C3[];
Class_Descriptor cd_S8398C3 = {  "S8398C3", // class name
  bases_S8398C3, 1,
  &(vtc_S8398C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S8398C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8398C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8398C1  : S8398C2 {
  ::S8398C3 s8398c1f0;
  ::S2432C6 s8398c1f1;
  virtual  ~S8398C1(); // _ZN7S8398C1D1Ev
  S8398C1(); // tgen
};
//SIG(1 S8398C1) C1{ BC2{ vd v1 Fc Fi} vd FC3{ BC2 vd Fp Fi[2] Fc Fp} FC4{ BC5{ vd v4 Fc Fi} vd v2 v3 FC6{ FL[4]}}}


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

static void Test_S8398C1()
{
  extern Class_Descriptor cd_S8398C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S8398C1, buf);
    S8398C1 *dp, &lv = *(dp=new (buf) S8398C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S8398C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8398C1)");
    check_base_class_offset(lv, (S8398C2*), 0, "S8398C1");
    check_field_offset(lv, s8398c1f0, ABISELECT(16,12), "S8398C1.s8398c1f0");
    check_field_offset(lv, s8398c1f1, ABISELECT(64,44), "S8398C1.s8398c1f1");
    test_class_info(&lv, &cd_S8398C1);
    dp->~S8398C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8398C1(Test_S8398C1, "S8398C1", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN7S8398C1C1Ev();
extern void _ZN7S8398C1D1Ev();
Name_Map name_map_S8398C1[] = {
  NSPAIR(_ZN7S8398C1C1Ev),
  NSPAIR(_ZN7S8398C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8398C2;
extern VTBL_ENTRY _ZTI7S8398C2[];
extern  VTBL_ENTRY _ZTV7S8398C2[];
static Base_Class bases_S8398C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8398C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8398C1[];
extern void _ZN7S8398C1D1Ev();
extern void _ZN7S8398C1D0Ev();
extern void _ZN7S8398C22v1Ev();
static  VTBL_ENTRY vtc_S8398C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8398C1[0]),
  (VTBL_ENTRY)&_ZN7S8398C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8398C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8398C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8398C1[];
extern  VTBL_ENTRY _ZTV7S8398C1[];
Class_Descriptor cd_S8398C1 = {  "S8398C1", // class name
  bases_S8398C1, 1,
  &(vtc_S8398C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI7S8398C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8398C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8397C2  {
  char s8397c2f0;
  int s8397c2f1;
  virtual  ~S8397C2(); // _ZN7S8397C2D1Ev
  virtual void  v1(); // _ZN7S8397C22v1Ev
  S8397C2(); // tgen
};
//SIG(-1 S8397C2) C1{ vd v1 Fc Fi}


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

static void Test_S8397C2()
{
  extern Class_Descriptor cd_S8397C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8397C2, buf);
    S8397C2 *dp, &lv = *(dp=new (buf) S8397C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8397C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8397C2)");
    check_field_offset(lv, s8397c2f0, ABISELECT(8,4), "S8397C2.s8397c2f0");
    check_field_offset(lv, s8397c2f1, ABISELECT(12,8), "S8397C2.s8397c2f1");
    test_class_info(&lv, &cd_S8397C2);
    dp->~S8397C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8397C2(Test_S8397C2, "S8397C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8397C2C1Ev();
extern void _ZN7S8397C2D1Ev();
Name_Map name_map_S8397C2[] = {
  NSPAIR(_ZN7S8397C2C1Ev),
  NSPAIR(_ZN7S8397C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8397C2[];
extern void _ZN7S8397C2D1Ev();
extern void _ZN7S8397C2D0Ev();
extern void _ZN7S8397C22v1Ev();
static  VTBL_ENTRY vtc_S8397C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8397C2[0]),
  (VTBL_ENTRY)&_ZN7S8397C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8397C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8397C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8397C2[];
extern  VTBL_ENTRY _ZTV7S8397C2[];
Class_Descriptor cd_S8397C2 = {  "S8397C2", // class name
  0,0,//no base classes
  &(vtc_S8397C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8397C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8397C2),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  S8397C1  : S8397C2 {
  ::S8398C3 s8397c1f0;
  ::S2431C6 s8397c1f1;
  virtual  ~S8397C1(); // _ZN7S8397C1D1Ev
  S8397C1(); // tgen
};
//SIG(1 S8397C1) C1{ BC2{ vd v1 Fc Fi} vd FC3{ BC4{ vd v2 Fc Fi} vd Fp Fi[2] Fc Fp} FC5{ BC6{ vd v5 Fc Fi} vd v3 v4 FC7{ Fl[4]}}}


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

static void Test_S8397C1()
{
  extern Class_Descriptor cd_S8397C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S8397C1, buf);
    S8397C1 *dp, &lv = *(dp=new (buf) S8397C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S8397C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8397C1)");
    check_base_class_offset(lv, (S8397C2*), 0, "S8397C1");
    check_field_offset(lv, s8397c1f0, ABISELECT(16,12), "S8397C1.s8397c1f0");
    check_field_offset(lv, s8397c1f1, ABISELECT(64,44), "S8397C1.s8397c1f1");
    test_class_info(&lv, &cd_S8397C1);
    dp->~S8397C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8397C1(Test_S8397C1, "S8397C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S8397C1C1Ev();
extern void _ZN7S8397C1D1Ev();
Name_Map name_map_S8397C1[] = {
  NSPAIR(_ZN7S8397C1C1Ev),
  NSPAIR(_ZN7S8397C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8397C2;
extern VTBL_ENTRY _ZTI7S8397C2[];
extern  VTBL_ENTRY _ZTV7S8397C2[];
static Base_Class bases_S8397C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8397C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8397C1[];
extern void _ZN7S8397C1D1Ev();
extern void _ZN7S8397C1D0Ev();
extern void _ZN7S8397C22v1Ev();
static  VTBL_ENTRY vtc_S8397C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8397C1[0]),
  (VTBL_ENTRY)&_ZN7S8397C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8397C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8397C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8397C1[];
extern  VTBL_ENTRY _ZTV7S8397C1[];
Class_Descriptor cd_S8397C1 = {  "S8397C1", // class name
  bases_S8397C1, 1,
  &(vtc_S8397C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S8397C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8397C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20406C2  {
  __tsi64 s20406c2f0;
  virtual void  v9(); // _ZN8S20406C22v9Ev
  virtual void  v10(); // _ZN8S20406C23v10Ev
  virtual void  v11(); // _ZN8S20406C23v11Ev
  virtual void  v12(); // _ZN8S20406C23v12Ev
  virtual void  v13(); // _ZN8S20406C23v13Ev
  virtual void  v14(); // _ZN8S20406C23v14Ev
  virtual void  v15(); // _ZN8S20406C23v15Ev
  virtual void  v16(); // _ZN8S20406C23v16Ev
  ~S20406C2(); // tgen
  S20406C2(); // tgen
};
//SIG(-1 S20406C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S20406C2 ::v9(){vfunc_called(this, "_ZN8S20406C22v9Ev");}
void  S20406C2 ::v10(){vfunc_called(this, "_ZN8S20406C23v10Ev");}
void  S20406C2 ::v11(){vfunc_called(this, "_ZN8S20406C23v11Ev");}
void  S20406C2 ::v12(){vfunc_called(this, "_ZN8S20406C23v12Ev");}
void  S20406C2 ::v13(){vfunc_called(this, "_ZN8S20406C23v13Ev");}
void  S20406C2 ::v14(){vfunc_called(this, "_ZN8S20406C23v14Ev");}
void  S20406C2 ::v15(){vfunc_called(this, "_ZN8S20406C23v15Ev");}
void  S20406C2 ::v16(){vfunc_called(this, "_ZN8S20406C23v16Ev");}
S20406C2 ::~S20406C2(){ note_dtor("S20406C2", this);} // tgen
S20406C2 ::S20406C2(){ note_ctor("S20406C2", this);} // tgen

static void Test_S20406C2()
{
  extern Class_Descriptor cd_S20406C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20406C2, buf);
    S20406C2 *dp, &lv = *(dp=new (buf) S20406C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20406C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20406C2)");
    check_field_offset(lv, s20406c2f0, ABISELECT(8,4), "S20406C2.s20406c2f0");
    test_class_info(&lv, &cd_S20406C2);
    dp->~S20406C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20406C2(Test_S20406C2, "S20406C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20406C2C1Ev();
extern void _ZN8S20406C2D1Ev();
Name_Map name_map_S20406C2[] = {
  NSPAIR(_ZN8S20406C2C1Ev),
  NSPAIR(_ZN8S20406C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20406C2[];
extern void _ZN8S20406C22v9Ev();
extern void _ZN8S20406C23v10Ev();
extern void _ZN8S20406C23v11Ev();
extern void _ZN8S20406C23v12Ev();
extern void _ZN8S20406C23v13Ev();
extern void _ZN8S20406C23v14Ev();
extern void _ZN8S20406C23v15Ev();
extern void _ZN8S20406C23v16Ev();
static  VTBL_ENTRY vtc_S20406C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20406C2[0]),
  (VTBL_ENTRY)&_ZN8S20406C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v16Ev,
};
extern VTBL_ENTRY _ZTI8S20406C2[];
extern  VTBL_ENTRY _ZTV8S20406C2[];
Class_Descriptor cd_S20406C2 = {  "S20406C2", // class name
  0,0,//no base classes
  &(vtc_S20406C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20406C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20406C2),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  S20406C1  : virtual S20406C2 {
  __tsi64 s20406c1f0:30;
  void *s20406c1f1;
  virtual void  v1(); // _ZN8S20406C12v1Ev
  virtual void  v2(); // _ZN8S20406C12v2Ev
  virtual void  v3(); // _ZN8S20406C12v3Ev
  virtual void  v4(); // _ZN8S20406C12v4Ev
  virtual void  v5(); // _ZN8S20406C12v5Ev
  virtual void  v6(); // _ZN8S20406C12v6Ev
  virtual void  v7(); // _ZN8S20406C12v7Ev
  virtual void  v8(); // _ZN8S20406C12v8Ev
  ~S20406C1(); // tgen
  S20406C1(); // tgen
};
//SIG(1 S20406C1) C1{ VBC2{ v9 v10 v11 v12 v13 v14 v15 v16 FL} v1 v2 v3 v4 v5 v6 v7 v8 FL:30 Fp}


void  S20406C1 ::v1(){vfunc_called(this, "_ZN8S20406C12v1Ev");}
void  S20406C1 ::v2(){vfunc_called(this, "_ZN8S20406C12v2Ev");}
void  S20406C1 ::v3(){vfunc_called(this, "_ZN8S20406C12v3Ev");}
void  S20406C1 ::v4(){vfunc_called(this, "_ZN8S20406C12v4Ev");}
void  S20406C1 ::v5(){vfunc_called(this, "_ZN8S20406C12v5Ev");}
void  S20406C1 ::v6(){vfunc_called(this, "_ZN8S20406C12v6Ev");}
void  S20406C1 ::v7(){vfunc_called(this, "_ZN8S20406C12v7Ev");}
void  S20406C1 ::v8(){vfunc_called(this, "_ZN8S20406C12v8Ev");}
S20406C1 ::~S20406C1(){ note_dtor("S20406C1", this);} // tgen
S20406C1 ::S20406C1(){ note_ctor("S20406C1", this);} // tgen

static void Test_S20406C1()
{
  extern Class_Descriptor cd_S20406C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S20406C1, buf);
    S20406C1 *dp, &lv = *(dp=new (buf) S20406C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S20406C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20406C1)");
    check_base_class_offset(lv, (S20406C2*), ABISELECT(24,12), "S20406C1");
    set_bf_and_test(lv, s20406c1f0, ABISELECT(8,4), 0, 30, 1, "S20406C1");
    set_bf_and_test(lv, s20406c1f0, ABISELECT(8,4), 0, 30, hide_sll(1LL<<29), "S20406C1");
    check_field_offset(lv, s20406c1f1, ABISELECT(16,8), "S20406C1.s20406c1f1");
    test_class_info(&lv, &cd_S20406C1);
    dp->~S20406C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20406C1(Test_S20406C1, "S20406C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S20406C1C1Ev();
extern void _ZN8S20406C1D1Ev();
Name_Map name_map_S20406C1[] = {
  NSPAIR(_ZN8S20406C1C1Ev),
  NSPAIR(_ZN8S20406C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20406C2;
extern VTBL_ENTRY _ZTI8S20406C2[];
extern  VTBL_ENTRY _ZTV8S20406C2[];
static Base_Class bases_S20406C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20406C2,    ABISELECT(24,12), //bcp->offset
    11, //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 _ZTI8S20406C1[];
extern void _ZN8S20406C12v1Ev();
extern void _ZN8S20406C12v2Ev();
extern void _ZN8S20406C12v3Ev();
extern void _ZN8S20406C12v4Ev();
extern void _ZN8S20406C12v5Ev();
extern void _ZN8S20406C12v6Ev();
extern void _ZN8S20406C12v7Ev();
extern void _ZN8S20406C12v8Ev();
extern void _ZN8S20406C22v9Ev();
extern void _ZN8S20406C23v10Ev();
extern void _ZN8S20406C23v11Ev();
extern void _ZN8S20406C23v12Ev();
extern void _ZN8S20406C23v13Ev();
extern void _ZN8S20406C23v14Ev();
extern void _ZN8S20406C23v15Ev();
extern void _ZN8S20406C23v16Ev();
static  VTBL_ENTRY vtc_S20406C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20406C1[0]),
  (VTBL_ENTRY)&_ZN8S20406C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20406C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20406C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20406C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20406C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20406C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20406C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20406C12v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20406C1[0]),
  (VTBL_ENTRY)&_ZN8S20406C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20406C23v16Ev,
};
extern VTBL_ENTRY _ZTV8S20406C1[];
static  VTT_ENTRY vtt_S20406C1[] = {
  {&(_ZTV8S20406C1[3]),  3,29},
  {&(_ZTV8S20406C1[21]),  21,29},
};
extern VTBL_ENTRY _ZTI8S20406C1[];
extern  VTBL_ENTRY _ZTV8S20406C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20406C1[];
Class_Descriptor cd_S20406C1 = {  "S20406C1", // class name
  bases_S20406C1, 1,
  &(vtc_S20406C1[0]), // expected_vtbl_contents
  &(vtt_S20406C1[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S20406C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20406C1),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20406C1),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  S8399C2  {
  char s8399c2f0;
  int s8399c2f1;
  virtual  ~S8399C2(); // _ZN7S8399C2D1Ev
  virtual void  v1(); // _ZN7S8399C22v1Ev
  S8399C2(); // tgen
};
//SIG(-1 S8399C2) C1{ vd v1 Fc Fi}


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

static void Test_S8399C2()
{
  extern Class_Descriptor cd_S8399C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8399C2, buf);
    S8399C2 *dp, &lv = *(dp=new (buf) S8399C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8399C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8399C2)");
    check_field_offset(lv, s8399c2f0, ABISELECT(8,4), "S8399C2.s8399c2f0");
    check_field_offset(lv, s8399c2f1, ABISELECT(12,8), "S8399C2.s8399c2f1");
    test_class_info(&lv, &cd_S8399C2);
    dp->~S8399C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8399C2(Test_S8399C2, "S8399C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8399C2C1Ev();
extern void _ZN7S8399C2D1Ev();
Name_Map name_map_S8399C2[] = {
  NSPAIR(_ZN7S8399C2C1Ev),
  NSPAIR(_ZN7S8399C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8399C2[];
extern void _ZN7S8399C2D1Ev();
extern void _ZN7S8399C2D0Ev();
extern void _ZN7S8399C22v1Ev();
static  VTBL_ENTRY vtc_S8399C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8399C2[0]),
  (VTBL_ENTRY)&_ZN7S8399C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8399C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8399C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8399C2[];
extern  VTBL_ENTRY _ZTV7S8399C2[];
Class_Descriptor cd_S8399C2 = {  "S8399C2", // class name
  0,0,//no base classes
  &(vtc_S8399C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8399C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8399C2),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  S8399C4_nt  : S8399C2 {
  __tsi64 s8399c4f0[4];
  virtual  ~S8399C4_nt(); // _ZN10S8399C4_ntD1Ev
  virtual void  v2(); // _ZN10S8399C4_nt2v2Ev
  virtual void  v3(); // _ZN10S8399C4_nt2v3Ev
  S8399C4_nt(); // tgen
};
//SIG(-1 S8399C4_nt) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 FL[4]}


 S8399C4_nt ::~S8399C4_nt(){ note_dtor("S8399C4_nt", this);}
void  S8399C4_nt ::v2(){vfunc_called(this, "_ZN10S8399C4_nt2v2Ev");}
void  S8399C4_nt ::v3(){vfunc_called(this, "_ZN10S8399C4_nt2v3Ev");}
S8399C4_nt ::S8399C4_nt(){ note_ctor("S8399C4_nt", this);} // tgen

//skip512 S8399C4_nt

#else // __cplusplus

extern void _ZN10S8399C4_ntC1Ev();
extern void _ZN10S8399C4_ntD1Ev();
Name_Map name_map_S8399C4_nt[] = {
  NSPAIR(_ZN10S8399C4_ntC1Ev),
  NSPAIR(_ZN10S8399C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8399C2;
extern VTBL_ENTRY _ZTI7S8399C2[];
extern  VTBL_ENTRY _ZTV7S8399C2[];
static Base_Class bases_S8399C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8399C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S8399C4_nt[];
extern void _ZN10S8399C4_ntD1Ev();
extern void _ZN10S8399C4_ntD0Ev();
extern void _ZN7S8399C22v1Ev();
extern void _ZN10S8399C4_nt2v2Ev();
extern void _ZN10S8399C4_nt2v3Ev();
static  VTBL_ENTRY vtc_S8399C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8399C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S8399C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8399C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S8399C22v1Ev,
  (VTBL_ENTRY)&_ZN10S8399C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8399C4_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S8399C4_nt[];
VTBL_ENTRY *P__ZTI10S8399C4_nt = _ZTI10S8399C4_nt; 
extern  VTBL_ENTRY _ZTV10S8399C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8399C1  : S8399C2 {
  ::S8398C3 s8399c1f0;
  ::S8399C4_nt s8399c1f1;
  virtual  ~S8399C1(); // _ZN7S8399C1D1Ev
  S8399C1(); // tgen
};
//SIG(1 S8399C1) C1{ BC2{ vd v1 Fc Fi} vd FC3{ BC4{ vd v2 Fc Fi} vd Fp Fi[2] Fc Fp} FC5{ BC2 vd v3 v4 FL[4]}}


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

static void Test_S8399C1()
{
  extern Class_Descriptor cd_S8399C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S8399C1, buf);
    S8399C1 *dp, &lv = *(dp=new (buf) S8399C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S8399C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8399C1)");
    check_base_class_offset(lv, (S8399C2*), 0, "S8399C1");
    check_field_offset(lv, s8399c1f0, ABISELECT(16,12), "S8399C1.s8399c1f0");
    check_field_offset(lv, s8399c1f1, ABISELECT(64,44), "S8399C1.s8399c1f1");
    test_class_info(&lv, &cd_S8399C1);
    dp->~S8399C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8399C1(Test_S8399C1, "S8399C1", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN7S8399C1C1Ev();
extern void _ZN7S8399C1D1Ev();
Name_Map name_map_S8399C1[] = {
  NSPAIR(_ZN7S8399C1C1Ev),
  NSPAIR(_ZN7S8399C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8399C2;
extern VTBL_ENTRY _ZTI7S8399C2[];
extern  VTBL_ENTRY _ZTV7S8399C2[];
static Base_Class bases_S8399C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8399C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8399C1[];
extern void _ZN7S8399C1D1Ev();
extern void _ZN7S8399C1D0Ev();
extern void _ZN7S8399C22v1Ev();
static  VTBL_ENTRY vtc_S8399C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8399C1[0]),
  (VTBL_ENTRY)&_ZN7S8399C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8399C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8399C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8399C1[];
extern  VTBL_ENTRY _ZTV7S8399C1[];
Class_Descriptor cd_S8399C1 = {  "S8399C1", // class name
  bases_S8399C1, 1,
  &(vtc_S8399C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI7S8399C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8399C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15643C2_nt  {
  char s15643c2f0;
  void  mf15643c2(); // _ZN11S15643C2_nt9mf15643c2Ev
};
//SIG(-1 S15643C2_nt) C1{ m Fc}


void  S15643C2_nt ::mf15643c2(){}

//skip512 S15643C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15643C4_nt  {
  char s15643c4f0;
  char s15643c4f1[15];
  void  mf15643c4(); // _ZN11S15643C4_nt9mf15643c4Ev
};
//SIG(-1 S15643C4_nt) C1{ m Fc[16]}


void  S15643C4_nt ::mf15643c4(){}

//skip512 S15643C4_nt

#else // __cplusplus

Class_Descriptor cd_S15643C4_nt = {  "S15643C4_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  S15643C1  {
  ::S15643C2_nt s15643c1f0;
  ::S15643C2_nt s15643c1f1;
  int s15643c1f2[2];
  ::S15643C4_nt s15643c1f3;
  ::S15643C4_nt s15643c1f4;
  ::S15643C4_nt s15643c1f5;
  ::S15643C4_nt s15643c1f6;
  ::S15643C4_nt s15643c1f7;
  ::S15643C4_nt s15643c1f8;
  ::S15643C4_nt s15643c1f9;
  void  mf15643c1(); // _ZN8S15643C19mf15643c1Ev
};
//SIG(1 S15643C1) C1{ m FC2{ m Fc} FC2 Fi[2] FC3{ m Fc[16]} FC3 FC3 FC3 FC3 FC3 FC3}


void  S15643C1 ::mf15643c1(){}

static void Test_S15643C1()
{
  {
    init_simple_test("S15643C1");
    S15643C1 lv;
    check2(sizeof(lv), 124, "sizeof(S15643C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15643C1)");
    check_field_offset(lv, s15643c1f0, 0, "S15643C1.s15643c1f0");
    check_field_offset(lv, s15643c1f1, 1, "S15643C1.s15643c1f1");
    check_field_offset(lv, s15643c1f2, 4, "S15643C1.s15643c1f2");
    check_field_offset(lv, s15643c1f3, 12, "S15643C1.s15643c1f3");
    check_field_offset(lv, s15643c1f4, 28, "S15643C1.s15643c1f4");
    check_field_offset(lv, s15643c1f5, 44, "S15643C1.s15643c1f5");
    check_field_offset(lv, s15643c1f6, 60, "S15643C1.s15643c1f6");
    check_field_offset(lv, s15643c1f7, 76, "S15643C1.s15643c1f7");
    check_field_offset(lv, s15643c1f8, 92, "S15643C1.s15643c1f8");
    check_field_offset(lv, s15643c1f9, 108, "S15643C1.s15643c1f9");
  }
}
static Arrange_To_Call_Me vS15643C1(Test_S15643C1, "S15643C1", 124);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21393C2_nt  {
  ::S2432C7_nt s21393c2f0;
  void  mf21393c2(); // _ZN11S21393C2_nt9mf21393c2Ev
};
//SIG(-1 S21393C2_nt) C1{ m FC2{ FL[4]}}


void  S21393C2_nt ::mf21393c2(){}

//skip512 S21393C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21393C4  {
  int s21393c4f0;
  ::S2382C26 s21393c4f1;
  void  mf21393c4(); // _ZN8S21393C49mf21393c4Ev
  virtual  ~S21393C4(); // _ZN8S21393C4D1Ev
  S21393C4(); // tgen
};
//SIG(-1 S21393C4) C1{ vd m Fi FC2{ m Fp Fi FC3{ m} FC3}}


void  S21393C4 ::mf21393c4(){}
 S21393C4 ::~S21393C4(){ note_dtor("S21393C4", this);}
S21393C4 ::S21393C4(){ note_ctor("S21393C4", this);} // tgen

static void Test_S21393C4()
{
  extern Class_Descriptor cd_S21393C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21393C4, buf);
    S21393C4 *dp, &lv = *(dp=new (buf) S21393C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21393C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21393C4)");
    check_field_offset(lv, s21393c4f0, ABISELECT(8,4), "S21393C4.s21393c4f0");
    check_field_offset(lv, s21393c4f1, ABISELECT(16,8), "S21393C4.s21393c4f1");
    test_class_info(&lv, &cd_S21393C4);
    dp->~S21393C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21393C4(Test_S21393C4, "S21393C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S21393C4C1Ev();
extern void _ZN8S21393C4D1Ev();
Name_Map name_map_S21393C4[] = {
  NSPAIR(_ZN8S21393C4C1Ev),
  NSPAIR(_ZN8S21393C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21393C4[];
extern void _ZN8S21393C4D1Ev();
extern void _ZN8S21393C4D0Ev();
static  VTBL_ENTRY vtc_S21393C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21393C4[0]),
  (VTBL_ENTRY)&_ZN8S21393C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21393C4D0Ev,
};
extern VTBL_ENTRY _ZTI8S21393C4[];
extern  VTBL_ENTRY _ZTV8S21393C4[];
Class_Descriptor cd_S21393C4 = {  "S21393C4", // class name
  0,0,//no base classes
  &(vtc_S21393C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S21393C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21393C4),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  S21393C1  {
  ::S21393C2_nt s21393c1f0;
  int s21393c1f1[2];
  ::S21393C4 s21393c1f2;
  void  mf21393c1(); // _ZN8S21393C19mf21393c1Ev
  virtual  ~S21393C1(); // _ZN8S21393C1D1Ev
  S21393C1(); // tgen
};
//SIG(1 S21393C1) C1{ vd m FC2{ m FC3{ FL[4]}} Fi[2] FC4{ vd m Fi FC5{ m Fp Fi FC6{ m} FC6}}}


void  S21393C1 ::mf21393c1(){}
 S21393C1 ::~S21393C1(){ note_dtor("S21393C1", this);}
S21393C1 ::S21393C1(){ note_ctor("S21393C1", this);} // tgen

static void Test_S21393C1()
{
  extern Class_Descriptor cd_S21393C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,17)];
    init_test(&cd_S21393C1, buf);
    S21393C1 *dp, &lv = *(dp=new (buf) S21393C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S21393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21393C1)");
    check_field_offset(lv, s21393c1f0, ABISELECT(8,4), "S21393C1.s21393c1f0");
    check_field_offset(lv, s21393c1f1, ABISELECT(40,36), "S21393C1.s21393c1f1");
    check_field_offset(lv, s21393c1f2, ABISELECT(48,44), "S21393C1.s21393c1f2");
    test_class_info(&lv, &cd_S21393C1);
    dp->~S21393C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21393C1(Test_S21393C1, "S21393C1", ABISELECT(80,64));

#else // __cplusplus

extern void _ZN8S21393C1C1Ev();
extern void _ZN8S21393C1D1Ev();
Name_Map name_map_S21393C1[] = {
  NSPAIR(_ZN8S21393C1C1Ev),
  NSPAIR(_ZN8S21393C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21393C1[];
extern void _ZN8S21393C1D1Ev();
extern void _ZN8S21393C1D0Ev();
static  VTBL_ENTRY vtc_S21393C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21393C1[0]),
  (VTBL_ENTRY)&_ZN8S21393C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21393C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21393C1[];
extern  VTBL_ENTRY _ZTV8S21393C1[];
Class_Descriptor cd_S21393C1 = {  "S21393C1", // class name
  0,0,//no base classes
  &(vtc_S21393C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,64), // object size
  NSPAIRA(_ZTI8S21393C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21393C1),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  S21392C1  {
  ::S2338C13_nt s21392c1f0;
  int s21392c1f1[2];
  ::S21393C4 s21392c1f2;
  void  mf21392c1(); // _ZN8S21392C19mf21392c1Ev
  virtual  ~S21392C1(); // _ZN8S21392C1D1Ev
  S21392C1(); // tgen
};
//SIG(1 S21392C1) C1{ vd m FC2{ m FC3{ Fl[4]}} Fi[2] FC4{ vd m Fi FC5{ m Fp Fi FC6{ m} FC6}}}


void  S21392C1 ::mf21392c1(){}
 S21392C1 ::~S21392C1(){ note_dtor("S21392C1", this);}
S21392C1 ::S21392C1(){ note_ctor("S21392C1", this);} // tgen

static void Test_S21392C1()
{
  extern Class_Descriptor cd_S21392C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S21392C1, buf);
    S21392C1 *dp, &lv = *(dp=new (buf) S21392C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S21392C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21392C1)");
    check_field_offset(lv, s21392c1f0, ABISELECT(8,4), "S21392C1.s21392c1f0");
    check_field_offset(lv, s21392c1f1, ABISELECT(40,20), "S21392C1.s21392c1f1");
    check_field_offset(lv, s21392c1f2, ABISELECT(48,28), "S21392C1.s21392c1f2");
    test_class_info(&lv, &cd_S21392C1);
    dp->~S21392C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21392C1(Test_S21392C1, "S21392C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S21392C1C1Ev();
extern void _ZN8S21392C1D1Ev();
Name_Map name_map_S21392C1[] = {
  NSPAIR(_ZN8S21392C1C1Ev),
  NSPAIR(_ZN8S21392C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21392C1[];
extern void _ZN8S21392C1D1Ev();
extern void _ZN8S21392C1D0Ev();
static  VTBL_ENTRY vtc_S21392C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21392C1[0]),
  (VTBL_ENTRY)&_ZN8S21392C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21392C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21392C1[];
extern  VTBL_ENTRY _ZTV8S21392C1[];
Class_Descriptor cd_S21392C1 = {  "S21392C1", // class name
  0,0,//no base classes
  &(vtc_S21392C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S21392C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21392C1),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  S11633C2  {
  int s11633c2f0[4];
  __tsi64 s11633c2f1;
  int s11633c2f2[2];
  __tsi64 s11633c2f3;
  int s11633c2f4[2];
  void *s11633c2f5[8];
  __tsi64 s11633c2f6;
  int s11633c2f7[2];
  __tsi64 s11633c2f8;
  int s11633c2f9[2];
};
//SIG(-1 S11633C2) C1{ Fi[4] FL Fi[2] FL Fi[2] Fp[8] FL Fi[2] FL Fi[2]}



static void Test_S11633C2()
{
  {
    init_simple_test("S11633C2");
    S11633C2 lv;
    check2(sizeof(lv), ABISELECT(144,112), "sizeof(S11633C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11633C2)");
    check_field_offset(lv, s11633c2f0, 0, "S11633C2.s11633c2f0");
    check_field_offset(lv, s11633c2f1, 16, "S11633C2.s11633c2f1");
    check_field_offset(lv, s11633c2f2, 24, "S11633C2.s11633c2f2");
    check_field_offset(lv, s11633c2f3, 32, "S11633C2.s11633c2f3");
    check_field_offset(lv, s11633c2f4, 40, "S11633C2.s11633c2f4");
    check_field_offset(lv, s11633c2f5, 48, "S11633C2.s11633c2f5");
    check_field_offset(lv, s11633c2f6, ABISELECT(112,80), "S11633C2.s11633c2f6");
    check_field_offset(lv, s11633c2f7, ABISELECT(120,88), "S11633C2.s11633c2f7");
    check_field_offset(lv, s11633c2f8, ABISELECT(128,96), "S11633C2.s11633c2f8");
    check_field_offset(lv, s11633c2f9, ABISELECT(136,104), "S11633C2.s11633c2f9");
  }
}
static Arrange_To_Call_Me vS11633C2(Test_S11633C2, "S11633C2", ABISELECT(144,112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11633C1  {
  ::S11633C2 s11633c1f0;
  ::S11911C3 s11633c1f1;
};
//SIG(1 S11633C1) C1{ FC2{ Fi[4] FL Fi[2] FL Fi[2] Fp[8] FL Fi[2] FL Fi[2]} FU3{ Fl FL Fp}}



static void Test_S11633C1()
{
  {
    init_simple_test("S11633C1");
    S11633C1 lv;
    check2(sizeof(lv), ABISELECT(152,120), "sizeof(S11633C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11633C1)");
    check_field_offset(lv, s11633c1f0, 0, "S11633C1.s11633c1f0");
    check_field_offset(lv, s11633c1f1, ABISELECT(144,112), "S11633C1.s11633c1f1");
  }
}
static Arrange_To_Call_Me vS11633C1(Test_S11633C1, "S11633C1", ABISELECT(152,120));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15341C1  {
  ::S195C23_nt s15341c1f0;
  ::S100C8_nt s15341c1f1;
  int s15341c1f2;
  ::S100C8_nt s15341c1f3;
  int s15341c1f4;
  ::S100C44 s15341c1f5;
  void  mf15341c1(); // _ZN8S15341C19mf15341c1Ev
};
//SIG(1 S15341C1) C1{ m FC2{ BC3{ BC4{ m Fp Fi[2]}}} FC5{ m Fi[2]} Fi FC5 Fi FC6{ BC7{ BC4}}}


void  S15341C1 ::mf15341c1(){}

static void Test_S15341C1()
{
  {
    init_simple_test("S15341C1");
    S15341C1 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S15341C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15341C1)");
    check_field_offset(lv, s15341c1f0, 0, "S15341C1.s15341c1f0");
    check_field_offset(lv, s15341c1f1, ABISELECT(16,12), "S15341C1.s15341c1f1");
    check_field_offset(lv, s15341c1f2, ABISELECT(24,20), "S15341C1.s15341c1f2");
    check_field_offset(lv, s15341c1f3, ABISELECT(28,24), "S15341C1.s15341c1f3");
    check_field_offset(lv, s15341c1f4, ABISELECT(36,32), "S15341C1.s15341c1f4");
    check_field_offset(lv, s15341c1f5, ABISELECT(40,36), "S15341C1.s15341c1f5");
  }
}
static Arrange_To_Call_Me vS15341C1(Test_S15341C1, "S15341C1", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9613C2  {
  virtual  ~S9613C2(); // _ZN7S9613C2D1Ev
  virtual void  v3(); // _ZN7S9613C22v3Ev
  virtual void  v4(); // _ZN7S9613C22v4Ev
  S9613C2(); // tgen
};
//SIG(-1 S9613C2) C1{ vd v1 v2}


 S9613C2 ::~S9613C2(){ note_dtor("S9613C2", this);}
void  S9613C2 ::v3(){vfunc_called(this, "_ZN7S9613C22v3Ev");}
void  S9613C2 ::v4(){vfunc_called(this, "_ZN7S9613C22v4Ev");}
S9613C2 ::S9613C2(){ note_ctor("S9613C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9613C2C1Ev();
extern void _ZN7S9613C2D1Ev();
Name_Map name_map_S9613C2[] = {
  NSPAIR(_ZN7S9613C2C1Ev),
  NSPAIR(_ZN7S9613C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9613C2[];
extern void _ZN7S9613C2D1Ev();
extern void _ZN7S9613C2D0Ev();
extern void _ZN7S9613C22v3Ev();
extern void _ZN7S9613C22v4Ev();
static  VTBL_ENTRY vtc_S9613C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9613C2[0]),
  (VTBL_ENTRY)&_ZN7S9613C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9613C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9613C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9613C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9613C2[];
extern  VTBL_ENTRY _ZTV7S9613C2[];
Class_Descriptor cd_S9613C2 = {  "S9613C2", // class name
  0,0,//no base classes
  &(vtc_S9613C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9613C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9613C2),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  S9613C1  : S9613C2 {
  void *s9613c1f0;
  ::S5073C8_nt s9613c1f1;
  int s9613c1f2;
  ::S2382C20_nt s9613c1f3;
  void *s9613c1f4;
  virtual  ~S9613C1(); // _ZN7S9613C1D1Ev
  virtual void  v1(); // _ZN7S9613C12v1Ev
  virtual void  v2(); // _ZN7S9613C12v2Ev
  S9613C1(); // tgen
};
//SIG(1 S9613C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fp FC3{ m Fp[2]} Fi FC4{ m Fp Fi FC5{ m}} Fp}


 S9613C1 ::~S9613C1(){ note_dtor("S9613C1", this);}
void  S9613C1 ::v1(){vfunc_called(this, "_ZN7S9613C12v1Ev");}
void  S9613C1 ::v2(){vfunc_called(this, "_ZN7S9613C12v2Ev");}
S9613C1 ::S9613C1(){ note_ctor("S9613C1", this);} // tgen

static void Test_S9613C1()
{
  extern Class_Descriptor cd_S9613C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S9613C1, buf);
    S9613C1 *dp, &lv = *(dp=new (buf) S9613C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S9613C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9613C1)");
    check_base_class_offset(lv, (S9613C2*), 0, "S9613C1");
    check_field_offset(lv, s9613c1f0, ABISELECT(8,4), "S9613C1.s9613c1f0");
    check_field_offset(lv, s9613c1f1, ABISELECT(16,8), "S9613C1.s9613c1f1");
    check_field_offset(lv, s9613c1f2, ABISELECT(32,16), "S9613C1.s9613c1f2");
    check_field_offset(lv, s9613c1f3, ABISELECT(40,20), "S9613C1.s9613c1f3");
    check_field_offset(lv, s9613c1f4, ABISELECT(56,32), "S9613C1.s9613c1f4");
    test_class_info(&lv, &cd_S9613C1);
    dp->~S9613C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9613C1(Test_S9613C1, "S9613C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S9613C1C1Ev();
extern void _ZN7S9613C1D1Ev();
Name_Map name_map_S9613C1[] = {
  NSPAIR(_ZN7S9613C1C1Ev),
  NSPAIR(_ZN7S9613C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9613C2;
extern VTBL_ENTRY _ZTI7S9613C2[];
extern  VTBL_ENTRY _ZTV7S9613C2[];
static Base_Class bases_S9613C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9613C1[];
extern void _ZN7S9613C1D1Ev();
extern void _ZN7S9613C1D0Ev();
extern void _ZN7S9613C22v3Ev();
extern void _ZN7S9613C22v4Ev();
extern void _ZN7S9613C12v1Ev();
extern void _ZN7S9613C12v2Ev();
static  VTBL_ENTRY vtc_S9613C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9613C1[0]),
  (VTBL_ENTRY)&_ZN7S9613C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9613C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9613C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9613C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9613C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9613C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9613C1[];
extern  VTBL_ENTRY _ZTV7S9613C1[];
Class_Descriptor cd_S9613C1 = {  "S9613C1", // class name
  bases_S9613C1, 1,
  &(vtc_S9613C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S9613C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9613C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21435C1  {
  ::S2403C17_nt s21435c1f0;
  int s21435c1f1[2];
  ::S21393C4 s21435c1f2;
  void  mf21435c1(); // _ZN8S21435C19mf21435c1Ev
  virtual  ~S21435C1(); // _ZN8S21435C1D1Ev
  S21435C1(); // tgen
};
//SIG(1 S21435C1) C1{ vd m FC2{ m FL[4]} Fi[2] FC3{ vd m Fi FC4{ m Fp Fi FC5{ m} FC5}}}


void  S21435C1 ::mf21435c1(){}
 S21435C1 ::~S21435C1(){ note_dtor("S21435C1", this);}
S21435C1 ::S21435C1(){ note_ctor("S21435C1", this);} // tgen

static void Test_S21435C1()
{
  extern Class_Descriptor cd_S21435C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,17)];
    init_test(&cd_S21435C1, buf);
    S21435C1 *dp, &lv = *(dp=new (buf) S21435C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S21435C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21435C1)");
    check_field_offset(lv, s21435c1f0, ABISELECT(8,4), "S21435C1.s21435c1f0");
    check_field_offset(lv, s21435c1f1, ABISELECT(40,36), "S21435C1.s21435c1f1");
    check_field_offset(lv, s21435c1f2, ABISELECT(48,44), "S21435C1.s21435c1f2");
    test_class_info(&lv, &cd_S21435C1);
    dp->~S21435C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21435C1(Test_S21435C1, "S21435C1", ABISELECT(80,64));

#else // __cplusplus

extern void _ZN8S21435C1C1Ev();
extern void _ZN8S21435C1D1Ev();
Name_Map name_map_S21435C1[] = {
  NSPAIR(_ZN8S21435C1C1Ev),
  NSPAIR(_ZN8S21435C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21435C1[];
extern void _ZN8S21435C1D1Ev();
extern void _ZN8S21435C1D0Ev();
static  VTBL_ENTRY vtc_S21435C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21435C1[0]),
  (VTBL_ENTRY)&_ZN8S21435C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21435C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21435C1[];
extern  VTBL_ENTRY _ZTV8S21435C1[];
Class_Descriptor cd_S21435C1 = {  "S21435C1", // class name
  0,0,//no base classes
  &(vtc_S21435C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,64), // object size
  NSPAIRA(_ZTI8S21435C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21435C1),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  S10346C1  : S7511C9_nt {
  ::S2382C20_nt s10346c1f0;
  ::S2382C20_nt s10346c1f1;
  char s10346c1f2;
  int s10346c1f3[3];
  ::S2382C13_nt s10346c1f4;
  ::S2382C13_nt s10346c1f5;
};
//SIG(1 S10346C1) C1{ BC2{} FC3{ m Fp Fi FC4{ m}} FC3 Fc Fi[3] FC5{ m FC6{ m FL[2]}} FC5}



static void Test_S10346C1()
{
  extern Class_Descriptor cd_S10346C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,19)];
    init_test(&cd_S10346C1, buf);
    S10346C1 &lv = *(new (buf) S10346C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S10346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10346C1)");
    check_base_class_offset(lv, (S7511C9_nt*), 0, "S10346C1");
    check_field_offset(lv, s10346c1f0, 0, "S10346C1.s10346c1f0");
    check_field_offset(lv, s10346c1f1, ABISELECT(16,12), "S10346C1.s10346c1f1");
    check_field_offset(lv, s10346c1f2, ABISELECT(32,24), "S10346C1.s10346c1f2");
    check_field_offset(lv, s10346c1f3, ABISELECT(36,28), "S10346C1.s10346c1f3");
    check_field_offset(lv, s10346c1f4, ABISELECT(48,40), "S10346C1.s10346c1f4");
    check_field_offset(lv, s10346c1f5, ABISELECT(64,56), "S10346C1.s10346c1f5");
    test_class_info(&lv, &cd_S10346C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10346C1(Test_S10346C1, "S10346C1", ABISELECT(80,72));

#else // __cplusplus

extern Class_Descriptor cd_S7511C9_nt;
static Base_Class bases_S10346C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S10346C1 = {  "S10346C1", // class name
  bases_S10346C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,72), // 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  S9265C2  {
  ::S2382C20_nt s9265c2f0;
  int s9265c2f1[2];
  char s9265c2f2;
  virtual  ~S9265C2(); // _ZN7S9265C2D1Ev
  virtual void  v3(); // _ZN7S9265C22v3Ev
  virtual void  v4(); // _ZN7S9265C22v4Ev
  virtual void  v5(); // _ZN7S9265C22v5Ev
  S9265C2(); // tgen
};
//SIG(-1 S9265C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9265C2 ::~S9265C2(){ note_dtor("S9265C2", this);}
void  S9265C2 ::v3(){vfunc_called(this, "_ZN7S9265C22v3Ev");}
void  S9265C2 ::v4(){vfunc_called(this, "_ZN7S9265C22v4Ev");}
void  S9265C2 ::v5(){vfunc_called(this, "_ZN7S9265C22v5Ev");}
S9265C2 ::S9265C2(){ note_ctor("S9265C2", this);} // tgen

static void Test_S9265C2()
{
  extern Class_Descriptor cd_S9265C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9265C2, buf);
    S9265C2 *dp, &lv = *(dp=new (buf) S9265C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9265C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9265C2)");
    check_field_offset(lv, s9265c2f0, ABISELECT(8,4), "S9265C2.s9265c2f0");
    check_field_offset(lv, s9265c2f1, ABISELECT(24,16), "S9265C2.s9265c2f1");
    check_field_offset(lv, s9265c2f2, ABISELECT(32,24), "S9265C2.s9265c2f2");
    test_class_info(&lv, &cd_S9265C2);
    dp->~S9265C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9265C2(Test_S9265C2, "S9265C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9265C2C1Ev();
extern void _ZN7S9265C2D1Ev();
Name_Map name_map_S9265C2[] = {
  NSPAIR(_ZN7S9265C2C1Ev),
  NSPAIR(_ZN7S9265C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9265C2[];
extern void _ZN7S9265C2D1Ev();
extern void _ZN7S9265C2D0Ev();
extern void _ZN7S9265C22v3Ev();
extern void _ZN7S9265C22v4Ev();
extern void _ZN7S9265C22v5Ev();
static  VTBL_ENTRY vtc_S9265C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9265C2[0]),
  (VTBL_ENTRY)&_ZN7S9265C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9265C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9265C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9265C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9265C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9265C2[];
extern  VTBL_ENTRY _ZTV7S9265C2[];
Class_Descriptor cd_S9265C2 = {  "S9265C2", // class name
  0,0,//no base classes
  &(vtc_S9265C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9265C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9265C2),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  S9265C1  : S9265C2 {
  char s9265c1f0[2];
  virtual  ~S9265C1(); // _ZN7S9265C1D1Ev
  virtual void  v1(); // _ZN7S9265C12v1Ev
  virtual void  v2(); // _ZN7S9265C12v2Ev
  S9265C1(); // tgen
};
//SIG(1 S9265C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[2]}


 S9265C1 ::~S9265C1(){ note_dtor("S9265C1", this);}
void  S9265C1 ::v1(){vfunc_called(this, "_ZN7S9265C12v1Ev");}
void  S9265C1 ::v2(){vfunc_called(this, "_ZN7S9265C12v2Ev");}
S9265C1 ::S9265C1(){ note_ctor("S9265C1", this);} // tgen

static void Test_S9265C1()
{
  extern Class_Descriptor cd_S9265C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9265C1, buf);
    S9265C1 *dp, &lv = *(dp=new (buf) S9265C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9265C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9265C1)");
    check_base_class_offset(lv, (S9265C2*), 0, "S9265C1");
    check_field_offset(lv, s9265c1f0, ABISELECT(33,25), "S9265C1.s9265c1f0");
    test_class_info(&lv, &cd_S9265C1);
    dp->~S9265C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9265C1(Test_S9265C1, "S9265C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9265C1C1Ev();
extern void _ZN7S9265C1D1Ev();
Name_Map name_map_S9265C1[] = {
  NSPAIR(_ZN7S9265C1C1Ev),
  NSPAIR(_ZN7S9265C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9265C2;
extern VTBL_ENTRY _ZTI7S9265C2[];
extern  VTBL_ENTRY _ZTV7S9265C2[];
static Base_Class bases_S9265C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9265C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9265C1[];
extern void _ZN7S9265C1D1Ev();
extern void _ZN7S9265C1D0Ev();
extern void _ZN7S9265C22v3Ev();
extern void _ZN7S9265C22v4Ev();
extern void _ZN7S9265C22v5Ev();
extern void _ZN7S9265C12v1Ev();
extern void _ZN7S9265C12v2Ev();
static  VTBL_ENTRY vtc_S9265C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9265C1[0]),
  (VTBL_ENTRY)&_ZN7S9265C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9265C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9265C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9265C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9265C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9265C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9265C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9265C1[];
extern  VTBL_ENTRY _ZTV7S9265C1[];
Class_Descriptor cd_S9265C1 = {  "S9265C1", // class name
  bases_S9265C1, 1,
  &(vtc_S9265C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9265C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9265C1),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  S6935C2  {
  virtual  ~S6935C2(); // _ZN7S6935C2D1Ev
  virtual void  v5(); // _ZN7S6935C22v5Ev
  virtual void  v6(); // _ZN7S6935C22v6Ev
  virtual void  v7(); // _ZN7S6935C22v7Ev
  virtual void  v8(); // _ZN7S6935C22v8Ev
  S6935C2(); // tgen
};
//SIG(-1 S6935C2) C1{ vd v1 v2 v3 v4}


 S6935C2 ::~S6935C2(){ note_dtor("S6935C2", this);}
void  S6935C2 ::v5(){vfunc_called(this, "_ZN7S6935C22v5Ev");}
void  S6935C2 ::v6(){vfunc_called(this, "_ZN7S6935C22v6Ev");}
void  S6935C2 ::v7(){vfunc_called(this, "_ZN7S6935C22v7Ev");}
void  S6935C2 ::v8(){vfunc_called(this, "_ZN7S6935C22v8Ev");}
S6935C2 ::S6935C2(){ note_ctor("S6935C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6935C2C1Ev();
extern void _ZN7S6935C2D1Ev();
Name_Map name_map_S6935C2[] = {
  NSPAIR(_ZN7S6935C2C1Ev),
  NSPAIR(_ZN7S6935C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6935C2[];
extern void _ZN7S6935C2D1Ev();
extern void _ZN7S6935C2D0Ev();
extern void _ZN7S6935C22v5Ev();
extern void _ZN7S6935C22v6Ev();
extern void _ZN7S6935C22v7Ev();
extern void _ZN7S6935C22v8Ev();
static  VTBL_ENTRY vtc_S6935C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6935C2[0]),
  (VTBL_ENTRY)&_ZN7S6935C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6935C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S6935C2[];
extern  VTBL_ENTRY _ZTV7S6935C2[];
Class_Descriptor cd_S6935C2 = {  "S6935C2", // class name
  0,0,//no base classes
  &(vtc_S6935C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6935C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6935C2),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  S6935C1  : S6935C2 {
  ::S5073C8_nt s6935c1f0;
  __tsi64 s6935c1f1;
  int s6935c1f2;
  char s6935c1f3;
  void *s6935c1f4;
  virtual  ~S6935C1(); // _ZN7S6935C1D1Ev
  virtual void  v1(); // _ZN7S6935C12v1Ev
  virtual void  v2(); // _ZN7S6935C12v2Ev
  virtual void  v3(); // _ZN7S6935C12v3Ev
  virtual void  v4(); // _ZN7S6935C12v4Ev
  S6935C1(); // tgen
};
//SIG(1 S6935C1) C1{ BC2{ vd v5 v6 v7 v8} vd v1 v2 v3 v4 FC3{ m Fp[2]} FL Fi Fc Fp}


 S6935C1 ::~S6935C1(){ note_dtor("S6935C1", this);}
void  S6935C1 ::v1(){vfunc_called(this, "_ZN7S6935C12v1Ev");}
void  S6935C1 ::v2(){vfunc_called(this, "_ZN7S6935C12v2Ev");}
void  S6935C1 ::v3(){vfunc_called(this, "_ZN7S6935C12v3Ev");}
void  S6935C1 ::v4(){vfunc_called(this, "_ZN7S6935C12v4Ev");}
S6935C1 ::S6935C1(){ note_ctor("S6935C1", this);} // tgen

static void Test_S6935C1()
{
  extern Class_Descriptor cd_S6935C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S6935C1, buf);
    S6935C1 *dp, &lv = *(dp=new (buf) S6935C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S6935C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6935C1)");
    check_base_class_offset(lv, (S6935C2*), 0, "S6935C1");
    check_field_offset(lv, s6935c1f0, ABISELECT(8,4), "S6935C1.s6935c1f0");
    check_field_offset(lv, s6935c1f1, ABISELECT(24,12), "S6935C1.s6935c1f1");
    check_field_offset(lv, s6935c1f2, ABISELECT(32,20), "S6935C1.s6935c1f2");
    check_field_offset(lv, s6935c1f3, ABISELECT(36,24), "S6935C1.s6935c1f3");
    check_field_offset(lv, s6935c1f4, ABISELECT(40,28), "S6935C1.s6935c1f4");
    test_class_info(&lv, &cd_S6935C1);
    dp->~S6935C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6935C1(Test_S6935C1, "S6935C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S6935C1C1Ev();
extern void _ZN7S6935C1D1Ev();
Name_Map name_map_S6935C1[] = {
  NSPAIR(_ZN7S6935C1C1Ev),
  NSPAIR(_ZN7S6935C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6935C2;
extern VTBL_ENTRY _ZTI7S6935C2[];
extern  VTBL_ENTRY _ZTV7S6935C2[];
static Base_Class bases_S6935C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6935C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6935C1[];
extern void _ZN7S6935C1D1Ev();
extern void _ZN7S6935C1D0Ev();
extern void _ZN7S6935C22v5Ev();
extern void _ZN7S6935C22v6Ev();
extern void _ZN7S6935C22v7Ev();
extern void _ZN7S6935C22v8Ev();
extern void _ZN7S6935C12v1Ev();
extern void _ZN7S6935C12v2Ev();
extern void _ZN7S6935C12v3Ev();
extern void _ZN7S6935C12v4Ev();
static  VTBL_ENTRY vtc_S6935C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6935C1[0]),
  (VTBL_ENTRY)&_ZN7S6935C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6935C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6935C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6935C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6935C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6935C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6935C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6935C1[];
extern  VTBL_ENTRY _ZTV7S6935C1[];
Class_Descriptor cd_S6935C1 = {  "S6935C1", // class name
  bases_S6935C1, 1,
  &(vtc_S6935C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S6935C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6935C1),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  S16731C2_nt  {
  int s16731c2f0;
  void *s16731c2f1;
  void  mf16731c2(); // _ZN11S16731C2_nt9mf16731c2Ev
};
//SIG(-1 S16731C2_nt) C1{ m Fi Fp}


void  S16731C2_nt ::mf16731c2(){}

//skip512 S16731C2_nt

#else // __cplusplus

Class_Descriptor cd_S16731C2_nt = {  "S16731C2_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  S16731C3_nt  : S15643C4_nt {
};
//SIG(-1 S16731C3_nt) C1{ BC2{ m Fc[16]}}



//skip512 S16731C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S15643C4_nt;
static Base_Class bases_S16731C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15643C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16731C1  {
  int s16731c1f0;
  ::S16731C2_nt s16731c1f1;
  ::S16731C2_nt s16731c1f2;
  ::S16731C3_nt s16731c1f3;
  ::S16731C3_nt s16731c1f4;
  int s16731c1f5;
  void *s16731c1f6[2];
  void  mf16731c1(); // _ZN8S16731C19mf16731c1Ev
};
//SIG(1 S16731C1) C1{ m Fi FC2{ m Fi Fp} FC2 FC3{ BC4{ m Fc[16]}} FC3 Fi Fp[2]}


void  S16731C1 ::mf16731c1(){}

static void Test_S16731C1()
{
  {
    init_simple_test("S16731C1");
    S16731C1 lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S16731C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16731C1)");
    check_field_offset(lv, s16731c1f0, 0, "S16731C1.s16731c1f0");
    check_field_offset(lv, s16731c1f1, ABISELECT(8,4), "S16731C1.s16731c1f1");
    check_field_offset(lv, s16731c1f2, ABISELECT(24,12), "S16731C1.s16731c1f2");
    check_field_offset(lv, s16731c1f3, ABISELECT(40,20), "S16731C1.s16731c1f3");
    check_field_offset(lv, s16731c1f4, ABISELECT(56,36), "S16731C1.s16731c1f4");
    check_field_offset(lv, s16731c1f5, ABISELECT(72,52), "S16731C1.s16731c1f5");
    check_field_offset(lv, s16731c1f6, ABISELECT(80,56), "S16731C1.s16731c1f6");
  }
}
static Arrange_To_Call_Me vS16731C1(Test_S16731C1, "S16731C1", ABISELECT(96,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18190C5  {
  ::S2382C20_nt s18190c5f0;
  void *s18190c5f1[2];
  void  mf18190c5(); // _ZN8S18190C59mf18190c5Ev
};
//SIG(-1 S18190C5) C1{ m FC2{ m Fp Fi FC3{ m}} Fp[2]}


void  S18190C5 ::mf18190c5(){}

static void Test_S18190C5()
{
  {
    init_simple_test("S18190C5");
    S18190C5 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18190C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18190C5)");
    check_field_offset(lv, s18190c5f0, 0, "S18190C5.s18190c5f0");
    check_field_offset(lv, s18190c5f1, ABISELECT(16,12), "S18190C5.s18190c5f1");
  }
}
static Arrange_To_Call_Me vS18190C5(Test_S18190C5, "S18190C5", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18190C2  {
  ::S2382C20_nt s18190c2f0;
  ::S18190C5 s18190c2f1;
  void  mf18190c2(); // _ZN8S18190C29mf18190c2Ev
};
//SIG(-1 S18190C2) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC2 Fp[2]}}


void  S18190C2 ::mf18190c2(){}

static void Test_S18190C2()
{
  {
    init_simple_test("S18190C2");
    S18190C2 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S18190C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18190C2)");
    check_field_offset(lv, s18190c2f0, 0, "S18190C2.s18190c2f0");
    check_field_offset(lv, s18190c2f1, ABISELECT(16,12), "S18190C2.s18190c2f1");
  }
}
static Arrange_To_Call_Me vS18190C2(Test_S18190C2, "S18190C2", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18190C1  {
  void *s18190c1f0[3];
  ::S18190C2 s18190c1f1;
  char s18190c1f2[2];
  void  mf18190c1(); // _ZN8S18190C19mf18190c1Ev
};
//SIG(1 S18190C1) C1{ m Fp[3] FC2{ m FC3{ m Fp Fi FC4{ m}} FC5{ m FC3 Fp[2]}} Fc[2]}


void  S18190C1 ::mf18190c1(){}

static void Test_S18190C1()
{
  {
    init_simple_test("S18190C1");
    S18190C1 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S18190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18190C1)");
    check_field_offset(lv, s18190c1f0, 0, "S18190C1.s18190c1f0");
    check_field_offset(lv, s18190c1f1, ABISELECT(24,12), "S18190C1.s18190c1f1");
    check_field_offset(lv, s18190c1f2, ABISELECT(72,44), "S18190C1.s18190c1f2");
  }
}
static Arrange_To_Call_Me vS18190C1(Test_S18190C1, "S18190C1", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9508C2  {
  virtual  ~S9508C2(); // _ZN7S9508C2D1Ev
  virtual void  v3(); // _ZN7S9508C22v3Ev
  virtual void  v4(); // _ZN7S9508C22v4Ev
  virtual void  v5(); // _ZN7S9508C22v5Ev
  virtual void  v6(); // _ZN7S9508C22v6Ev
  virtual void  v7(); // _ZN7S9508C22v7Ev
  S9508C2(); // tgen
};
//SIG(-1 S9508C2) C1{ vd v1 v2 v3 v4 v5}


 S9508C2 ::~S9508C2(){ note_dtor("S9508C2", this);}
void  S9508C2 ::v3(){vfunc_called(this, "_ZN7S9508C22v3Ev");}
void  S9508C2 ::v4(){vfunc_called(this, "_ZN7S9508C22v4Ev");}
void  S9508C2 ::v5(){vfunc_called(this, "_ZN7S9508C22v5Ev");}
void  S9508C2 ::v6(){vfunc_called(this, "_ZN7S9508C22v6Ev");}
void  S9508C2 ::v7(){vfunc_called(this, "_ZN7S9508C22v7Ev");}
S9508C2 ::S9508C2(){ note_ctor("S9508C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9508C2C1Ev();
extern void _ZN7S9508C2D1Ev();
Name_Map name_map_S9508C2[] = {
  NSPAIR(_ZN7S9508C2C1Ev),
  NSPAIR(_ZN7S9508C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9508C2[];
extern void _ZN7S9508C2D1Ev();
extern void _ZN7S9508C2D0Ev();
extern void _ZN7S9508C22v3Ev();
extern void _ZN7S9508C22v4Ev();
extern void _ZN7S9508C22v5Ev();
extern void _ZN7S9508C22v6Ev();
extern void _ZN7S9508C22v7Ev();
static  VTBL_ENTRY vtc_S9508C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9508C2[0]),
  (VTBL_ENTRY)&_ZN7S9508C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9508C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9508C2[];
extern  VTBL_ENTRY _ZTV7S9508C2[];
Class_Descriptor cd_S9508C2 = {  "S9508C2", // class name
  0,0,//no base classes
  &(vtc_S9508C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9508C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9508C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9508C1  : S9508C2 {
  ::S16731C2_nt s9508c1f0;
  void *s9508c1f1;
  char s9508c1f2;
  int s9508c1f3;
  char s9508c1f4;
  virtual  ~S9508C1(); // _ZN7S9508C1D1Ev
  virtual void  v1(); // _ZN7S9508C12v1Ev
  virtual void  v2(); // _ZN7S9508C12v2Ev
  S9508C1(); // tgen
};
//SIG(1 S9508C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 FC3{ m Fi Fp} Fp Fc Fi Fc}


 S9508C1 ::~S9508C1(){ note_dtor("S9508C1", this);}
void  S9508C1 ::v1(){vfunc_called(this, "_ZN7S9508C12v1Ev");}
void  S9508C1 ::v2(){vfunc_called(this, "_ZN7S9508C12v2Ev");}
S9508C1 ::S9508C1(){ note_ctor("S9508C1", this);} // tgen

static void Test_S9508C1()
{
  extern Class_Descriptor cd_S9508C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S9508C1, buf);
    S9508C1 *dp, &lv = *(dp=new (buf) S9508C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S9508C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9508C1)");
    check_base_class_offset(lv, (S9508C2*), 0, "S9508C1");
    check_field_offset(lv, s9508c1f0, ABISELECT(8,4), "S9508C1.s9508c1f0");
    check_field_offset(lv, s9508c1f1, ABISELECT(24,12), "S9508C1.s9508c1f1");
    check_field_offset(lv, s9508c1f2, ABISELECT(32,16), "S9508C1.s9508c1f2");
    check_field_offset(lv, s9508c1f3, ABISELECT(36,20), "S9508C1.s9508c1f3");
    check_field_offset(lv, s9508c1f4, ABISELECT(40,24), "S9508C1.s9508c1f4");
    test_class_info(&lv, &cd_S9508C1);
    dp->~S9508C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9508C1(Test_S9508C1, "S9508C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S9508C1C1Ev();
extern void _ZN7S9508C1D1Ev();
Name_Map name_map_S9508C1[] = {
  NSPAIR(_ZN7S9508C1C1Ev),
  NSPAIR(_ZN7S9508C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9508C2;
extern VTBL_ENTRY _ZTI7S9508C2[];
extern  VTBL_ENTRY _ZTV7S9508C2[];
static Base_Class bases_S9508C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9508C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9508C1[];
extern void _ZN7S9508C1D1Ev();
extern void _ZN7S9508C1D0Ev();
extern void _ZN7S9508C22v3Ev();
extern void _ZN7S9508C22v4Ev();
extern void _ZN7S9508C22v5Ev();
extern void _ZN7S9508C22v6Ev();
extern void _ZN7S9508C22v7Ev();
extern void _ZN7S9508C12v1Ev();
extern void _ZN7S9508C12v2Ev();
static  VTBL_ENTRY vtc_S9508C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9508C1[0]),
  (VTBL_ENTRY)&_ZN7S9508C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9508C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9508C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9508C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9508C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9508C1[];
extern  VTBL_ENTRY _ZTV7S9508C1[];
Class_Descriptor cd_S9508C1 = {  "S9508C1", // class name
  bases_S9508C1, 1,
  &(vtc_S9508C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S9508C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9508C1),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  S21372C2_nt  {
  long s21372c2f0;
};
//SIG(-1 S21372C2_nt) C1{ Fl}



//skip512 S21372C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21372C5_nt  {
  void *s21372c5f0;
  int s21372c5f1;
  ::S2382C30 s21372c5f2;
  void  mf21372c5(); // _ZN11S21372C5_nt9mf21372c5Ev
};
//SIG(-1 S21372C5_nt) C1{ m Fp Fi FC2{ m}}


void  S21372C5_nt ::mf21372c5(){}

//skip512 S21372C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21372C1  {
  ::S21372C2_nt s21372c1f0;
  ::S2382C20_nt s21372c1f1;
  ::S21372C5_nt s21372c1f2;
  ::S2382C20_nt s21372c1f3;
  void  mf21372c1(); // _ZN8S21372C19mf21372c1Ev
  virtual  ~S21372C1(); // _ZN8S21372C1D1Ev
  S21372C1(); // tgen
};
//SIG(1 S21372C1) C1{ vd m FC2{ Fl} FC3{ m Fp Fi FC4{ m}} FC5{ m Fp Fi FC6{ m}} FC3}


void  S21372C1 ::mf21372c1(){}
 S21372C1 ::~S21372C1(){ note_dtor("S21372C1", this);}
S21372C1 ::S21372C1(){ note_ctor("S21372C1", this);} // tgen

static void Test_S21372C1()
{
  extern Class_Descriptor cd_S21372C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S21372C1, buf);
    S21372C1 *dp, &lv = *(dp=new (buf) S21372C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S21372C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21372C1)");
    check_field_offset(lv, s21372c1f0, ABISELECT(8,4), "S21372C1.s21372c1f0");
    check_field_offset(lv, s21372c1f1, ABISELECT(16,8), "S21372C1.s21372c1f1");
    check_field_offset(lv, s21372c1f2, ABISELECT(32,20), "S21372C1.s21372c1f2");
    check_field_offset(lv, s21372c1f3, ABISELECT(48,32), "S21372C1.s21372c1f3");
    test_class_info(&lv, &cd_S21372C1);
    dp->~S21372C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21372C1(Test_S21372C1, "S21372C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN8S21372C1C1Ev();
extern void _ZN8S21372C1D1Ev();
Name_Map name_map_S21372C1[] = {
  NSPAIR(_ZN8S21372C1C1Ev),
  NSPAIR(_ZN8S21372C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21372C1[];
extern void _ZN8S21372C1D1Ev();
extern void _ZN8S21372C1D0Ev();
static  VTBL_ENTRY vtc_S21372C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21372C1[0]),
  (VTBL_ENTRY)&_ZN8S21372C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21372C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21372C1[];
extern  VTBL_ENTRY _ZTV8S21372C1[];
Class_Descriptor cd_S21372C1 = {  "S21372C1", // class name
  0,0,//no base classes
  &(vtc_S21372C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI8S21372C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21372C1),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  S18227C3  {
  char s18227c3f0[200];
  int s18227c3f1[2];
  __tsi64 s18227c3f2;
  int s18227c3f3[3];
  void  mf18227c3(); // _ZN8S18227C39mf18227c3Ev
};
//SIG(-1 S18227C3) C1{ m Fc[200] Fi[2] FL Fi[3]}


void  S18227C3 ::mf18227c3(){}

static void Test_S18227C3()
{
  {
    init_simple_test("S18227C3");
    S18227C3 lv;
    check2(sizeof(lv), ABISELECT(232,228), "sizeof(S18227C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18227C3)");
    check_field_offset(lv, s18227c3f0, 0, "S18227C3.s18227c3f0");
    check_field_offset(lv, s18227c3f1, 200, "S18227C3.s18227c3f1");
    check_field_offset(lv, s18227c3f2, 208, "S18227C3.s18227c3f2");
    check_field_offset(lv, s18227c3f3, 216, "S18227C3.s18227c3f3");
  }
}
static Arrange_To_Call_Me vS18227C3(Test_S18227C3, "S18227C3", ABISELECT(232,228));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18227C2  {
  int s18227c2f0;
  ::S18227C3 s18227c2f1;
  void  mf18227c2(); // _ZN8S18227C29mf18227c2Ev
};
//SIG(-1 S18227C2) C1{ m Fi FC2{ m Fc[200] Fi[2] FL Fi[3]}}


void  S18227C2 ::mf18227c2(){}

static void Test_S18227C2()
{
  {
    init_simple_test("S18227C2");
    S18227C2 lv;
    check2(sizeof(lv), ABISELECT(240,232), "sizeof(S18227C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18227C2)");
    check_field_offset(lv, s18227c2f0, 0, "S18227C2.s18227c2f0");
    check_field_offset(lv, s18227c2f1, ABISELECT(8,4), "S18227C2.s18227c2f1");
  }
}
static Arrange_To_Call_Me vS18227C2(Test_S18227C2, "S18227C2", ABISELECT(240,232));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18227C1  {
  void *s18227c1f0[3];
  ::S18227C2 s18227c1f1;
  char s18227c1f2[2];
  void  mf18227c1(); // _ZN8S18227C19mf18227c1Ev
};
//SIG(1 S18227C1) C1{ m Fp[3] FC2{ m Fi FC3{ m Fc[200] Fi[2] FL Fi[3]}} Fc[2]}


void  S18227C1 ::mf18227c1(){}

static void Test_S18227C1()
{
  {
    init_simple_test("S18227C1");
    S18227C1 lv;
    check2(sizeof(lv), ABISELECT(272,248), "sizeof(S18227C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18227C1)");
    check_field_offset(lv, s18227c1f0, 0, "S18227C1.s18227c1f0");
    check_field_offset(lv, s18227c1f1, ABISELECT(24,12), "S18227C1.s18227c1f1");
    check_field_offset(lv, s18227c1f2, ABISELECT(264,244), "S18227C1.s18227c1f2");
  }
}
static Arrange_To_Call_Me vS18227C1(Test_S18227C1, "S18227C1", ABISELECT(272,248));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9609C2  {
  virtual  ~S9609C2(); // _ZN7S9609C2D1Ev
  virtual void  v3(); // _ZN7S9609C22v3Ev
  virtual void  v4(); // _ZN7S9609C22v4Ev
  S9609C2(); // tgen
};
//SIG(-1 S9609C2) C1{ vd v1 v2}


 S9609C2 ::~S9609C2(){ note_dtor("S9609C2", this);}
void  S9609C2 ::v3(){vfunc_called(this, "_ZN7S9609C22v3Ev");}
void  S9609C2 ::v4(){vfunc_called(this, "_ZN7S9609C22v4Ev");}
S9609C2 ::S9609C2(){ note_ctor("S9609C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9609C2C1Ev();
extern void _ZN7S9609C2D1Ev();
Name_Map name_map_S9609C2[] = {
  NSPAIR(_ZN7S9609C2C1Ev),
  NSPAIR(_ZN7S9609C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9609C2[];
extern void _ZN7S9609C2D1Ev();
extern void _ZN7S9609C2D0Ev();
extern void _ZN7S9609C22v3Ev();
extern void _ZN7S9609C22v4Ev();
static  VTBL_ENTRY vtc_S9609C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9609C2[0]),
  (VTBL_ENTRY)&_ZN7S9609C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9609C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9609C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9609C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9609C2[];
extern  VTBL_ENTRY _ZTV7S9609C2[];
Class_Descriptor cd_S9609C2 = {  "S9609C2", // class name
  0,0,//no base classes
  &(vtc_S9609C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9609C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9609C2),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  S9609C1  : S9609C2 {
  void *s9609c1f0;
  ::S21372C5_nt s9609c1f1;
  void *s9609c1f2;
  int s9609c1f3;
  void *s9609c1f4;
  virtual  ~S9609C1(); // _ZN7S9609C1D1Ev
  virtual void  v1(); // _ZN7S9609C12v1Ev
  virtual void  v2(); // _ZN7S9609C12v2Ev
  S9609C1(); // tgen
};
//SIG(1 S9609C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fp FC3{ m Fp Fi FC4{ m}} Fp Fi Fp}


 S9609C1 ::~S9609C1(){ note_dtor("S9609C1", this);}
void  S9609C1 ::v1(){vfunc_called(this, "_ZN7S9609C12v1Ev");}
void  S9609C1 ::v2(){vfunc_called(this, "_ZN7S9609C12v2Ev");}
S9609C1 ::S9609C1(){ note_ctor("S9609C1", this);} // tgen

static void Test_S9609C1()
{
  extern Class_Descriptor cd_S9609C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9609C1, buf);
    S9609C1 *dp, &lv = *(dp=new (buf) S9609C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9609C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9609C1)");
    check_base_class_offset(lv, (S9609C2*), 0, "S9609C1");
    check_field_offset(lv, s9609c1f0, ABISELECT(8,4), "S9609C1.s9609c1f0");
    check_field_offset(lv, s9609c1f1, ABISELECT(16,8), "S9609C1.s9609c1f1");
    check_field_offset(lv, s9609c1f2, ABISELECT(32,20), "S9609C1.s9609c1f2");
    check_field_offset(lv, s9609c1f3, ABISELECT(40,24), "S9609C1.s9609c1f3");
    check_field_offset(lv, s9609c1f4, ABISELECT(48,28), "S9609C1.s9609c1f4");
    test_class_info(&lv, &cd_S9609C1);
    dp->~S9609C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9609C1(Test_S9609C1, "S9609C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9609C1C1Ev();
extern void _ZN7S9609C1D1Ev();
Name_Map name_map_S9609C1[] = {
  NSPAIR(_ZN7S9609C1C1Ev),
  NSPAIR(_ZN7S9609C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9609C2;
extern VTBL_ENTRY _ZTI7S9609C2[];
extern  VTBL_ENTRY _ZTV7S9609C2[];
static Base_Class bases_S9609C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9609C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9609C1[];
extern void _ZN7S9609C1D1Ev();
extern void _ZN7S9609C1D0Ev();
extern void _ZN7S9609C22v3Ev();
extern void _ZN7S9609C22v4Ev();
extern void _ZN7S9609C12v1Ev();
extern void _ZN7S9609C12v2Ev();
static  VTBL_ENTRY vtc_S9609C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9609C1[0]),
  (VTBL_ENTRY)&_ZN7S9609C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9609C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9609C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9609C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9609C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9609C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9609C1[];
extern  VTBL_ENTRY _ZTV7S9609C1[];
Class_Descriptor cd_S9609C1 = {  "S9609C1", // class name
  bases_S9609C1, 1,
  &(vtc_S9609C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9609C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9609C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5778C3_nt  {
  int s5778c3f0[3];
};
//SIG(-1 S5778C3_nt) C1{ Fi[3]}



//skip512 S5778C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5778C5  {
  int s5778c5f0[33];
};
//SIG(-1 S5778C5) C1{ Fi[33]}



static void Test_S5778C5()
{
  {
    init_simple_test("S5778C5");
    S5778C5 lv;
    check2(sizeof(lv), 132, "sizeof(S5778C5)");
    check2(__alignof__(lv), 4, "__alignof__(S5778C5)");
    check_field_offset(lv, s5778c5f0, 0, "S5778C5.s5778c5f0");
  }
}
static Arrange_To_Call_Me vS5778C5(Test_S5778C5, "S5778C5", 132);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5778C2  {
  int s5778c2f0[2];
  ::S5778C3_nt s5778c2f1;
  ::S5778C3_nt s5778c2f2;
  int s5778c2f3;
  ::S5778C5 s5778c2f4;
  int s5778c2f5;
  void  mf5778c2(); // _ZN7S5778C28mf5778c2Ev
};
//SIG(-1 S5778C2) C1{ m Fi[2] FC2{ Fi[3]} FC2 Fi FC3{ Fi[33]} Fi}


void  S5778C2 ::mf5778c2(){}

static void Test_S5778C2()
{
  {
    init_simple_test("S5778C2");
    S5778C2 lv;
    check2(sizeof(lv), 172, "sizeof(S5778C2)");
    check2(__alignof__(lv), 4, "__alignof__(S5778C2)");
    check_field_offset(lv, s5778c2f0, 0, "S5778C2.s5778c2f0");
    check_field_offset(lv, s5778c2f1, 8, "S5778C2.s5778c2f1");
    check_field_offset(lv, s5778c2f2, 20, "S5778C2.s5778c2f2");
    check_field_offset(lv, s5778c2f3, 32, "S5778C2.s5778c2f3");
    check_field_offset(lv, s5778c2f4, 36, "S5778C2.s5778c2f4");
    check_field_offset(lv, s5778c2f5, 168, "S5778C2.s5778c2f5");
  }
}
static Arrange_To_Call_Me vS5778C2(Test_S5778C2, "S5778C2", 172);

#else // __cplusplus

Class_Descriptor cd_S5778C2 = {  "S5778C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  172, // 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  S5778C1  : S5778C2 {
  int s5778c1f0;
};
//SIG(1 S5778C1) C1{ BC2{ m Fi[2] FC3{ Fi[3]} FC3 Fi FC4{ Fi[33]} Fi} Fi}



static void Test_S5778C1()
{
  extern Class_Descriptor cd_S5778C1;
  void *lvp;
  {
    int buf[45];
    init_test(&cd_S5778C1, buf);
    S5778C1 &lv = *(new (buf) S5778C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 176, "sizeof(S5778C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5778C1)");
    check_base_class_offset(lv, (S5778C2*), 0, "S5778C1");
    check_field_offset(lv, s5778c1f0, 172, "S5778C1.s5778c1f0");
    test_class_info(&lv, &cd_S5778C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5778C1(Test_S5778C1, "S5778C1", 176);

#else // __cplusplus

extern Class_Descriptor cd_S5778C2;
static Base_Class bases_S5778C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5778C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5778C1 = {  "S5778C1", // class name
  bases_S5778C1, 1,
  0, // no vftv
  0, //no vtt
  176, // 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  S4682C3  {
  char s4682c3f0;
  int s4682c3f1;
  virtual  ~S4682C3(); // _ZN7S4682C3D1Ev
  virtual void  v3(); // _ZN7S4682C32v3Ev
  S4682C3(); // tgen
};
//SIG(-1 S4682C3) C1{ vd v1 Fc Fi}


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

static void Test_S4682C3()
{
  extern Class_Descriptor cd_S4682C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4682C3, buf);
    S4682C3 *dp, &lv = *(dp=new (buf) S4682C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4682C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4682C3)");
    check_field_offset(lv, s4682c3f0, ABISELECT(8,4), "S4682C3.s4682c3f0");
    check_field_offset(lv, s4682c3f1, ABISELECT(12,8), "S4682C3.s4682c3f1");
    test_class_info(&lv, &cd_S4682C3);
    dp->~S4682C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4682C3(Test_S4682C3, "S4682C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4682C3C1Ev();
extern void _ZN7S4682C3D1Ev();
Name_Map name_map_S4682C3[] = {
  NSPAIR(_ZN7S4682C3C1Ev),
  NSPAIR(_ZN7S4682C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4682C3[];
extern void _ZN7S4682C3D1Ev();
extern void _ZN7S4682C3D0Ev();
extern void _ZN7S4682C32v3Ev();
static  VTBL_ENTRY vtc_S4682C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4682C3[0]),
  (VTBL_ENTRY)&_ZN7S4682C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4682C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4682C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4682C3[];
extern  VTBL_ENTRY _ZTV7S4682C3[];
Class_Descriptor cd_S4682C3 = {  "S4682C3", // class name
  0,0,//no base classes
  &(vtc_S4682C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4682C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4682C3),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  S4682C2  : S4682C3 {
  ::S2432C7_nt s4682c2f0;
  virtual  ~S4682C2(); // _ZN7S4682C2D1Ev
  virtual void  v4(); // _ZN7S4682C22v4Ev
  virtual void  v5(); // _ZN7S4682C22v5Ev
  S4682C2(); // tgen
};
//SIG(-1 S4682C2) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 FC3{ FL[4]}}


 S4682C2 ::~S4682C2(){ note_dtor("S4682C2", this);}
void  S4682C2 ::v4(){vfunc_called(this, "_ZN7S4682C22v4Ev");}
void  S4682C2 ::v5(){vfunc_called(this, "_ZN7S4682C22v5Ev");}
S4682C2 ::S4682C2(){ note_ctor("S4682C2", this);} // tgen

static void Test_S4682C2()
{
  extern Class_Descriptor cd_S4682C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S4682C2, buf);
    S4682C2 *dp, &lv = *(dp=new (buf) S4682C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S4682C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4682C2)");
    check_base_class_offset(lv, (S4682C3*), 0, "S4682C2");
    check_field_offset(lv, s4682c2f0, ABISELECT(16,12), "S4682C2.s4682c2f0");
    test_class_info(&lv, &cd_S4682C2);
    dp->~S4682C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4682C2(Test_S4682C2, "S4682C2", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S4682C2C1Ev();
extern void _ZN7S4682C2D1Ev();
Name_Map name_map_S4682C2[] = {
  NSPAIR(_ZN7S4682C2C1Ev),
  NSPAIR(_ZN7S4682C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4682C3;
extern VTBL_ENTRY _ZTI7S4682C3[];
extern  VTBL_ENTRY _ZTV7S4682C3[];
static Base_Class bases_S4682C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4682C2[];
extern void _ZN7S4682C2D1Ev();
extern void _ZN7S4682C2D0Ev();
extern void _ZN7S4682C32v3Ev();
extern void _ZN7S4682C22v4Ev();
extern void _ZN7S4682C22v5Ev();
static  VTBL_ENTRY vtc_S4682C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4682C2[0]),
  (VTBL_ENTRY)&_ZN7S4682C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4682C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4682C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4682C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4682C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4682C2[];
extern  VTBL_ENTRY _ZTV7S4682C2[];
Class_Descriptor cd_S4682C2 = {  "S4682C2", // class name
  bases_S4682C2, 1,
  &(vtc_S4682C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S4682C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4682C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4682C1  : S4682C2 {
  int s4682c1f0;
  virtual  ~S4682C1(); // _ZN7S4682C1D1Ev
  virtual void  v1(); // _ZN7S4682C12v1Ev
  virtual void  v2(); // _ZN7S4682C12v2Ev
  S4682C1(); // tgen
};
//SIG(1 S4682C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 v5 FC4{ FL[4]}} vd v1 v2 Fi}


 S4682C1 ::~S4682C1(){ note_dtor("S4682C1", this);}
void  S4682C1 ::v1(){vfunc_called(this, "_ZN7S4682C12v1Ev");}
void  S4682C1 ::v2(){vfunc_called(this, "_ZN7S4682C12v2Ev");}
S4682C1 ::S4682C1(){ note_ctor("S4682C1", this);} // tgen

static void Test_S4682C1()
{
  extern Class_Descriptor cd_S4682C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S4682C1, buf);
    S4682C1 *dp, &lv = *(dp=new (buf) S4682C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S4682C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4682C1)");
    check_base_class_offset(lv, (S4682C3*)(S4682C2*), 0, "S4682C1");
    check_base_class_offset(lv, (S4682C2*), 0, "S4682C1");
    check_field_offset(lv, s4682c1f0, ABISELECT(48,44), "S4682C1.s4682c1f0");
    test_class_info(&lv, &cd_S4682C1);
    dp->~S4682C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4682C1(Test_S4682C1, "S4682C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S4682C1C1Ev();
extern void _ZN7S4682C1D1Ev();
Name_Map name_map_S4682C1[] = {
  NSPAIR(_ZN7S4682C1C1Ev),
  NSPAIR(_ZN7S4682C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4682C3;
extern VTBL_ENTRY _ZTI7S4682C3[];
extern  VTBL_ENTRY _ZTV7S4682C3[];
extern Class_Descriptor cd_S4682C2;
extern VTBL_ENTRY _ZTI7S4682C2[];
extern  VTBL_ENTRY _ZTV7S4682C2[];
static Base_Class bases_S4682C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4682C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4682C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4682C1[];
extern void _ZN7S4682C1D1Ev();
extern void _ZN7S4682C1D0Ev();
extern void _ZN7S4682C32v3Ev();
extern void _ZN7S4682C22v4Ev();
extern void _ZN7S4682C22v5Ev();
extern void _ZN7S4682C12v1Ev();
extern void _ZN7S4682C12v2Ev();
static  VTBL_ENTRY vtc_S4682C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4682C1[0]),
  (VTBL_ENTRY)&_ZN7S4682C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4682C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4682C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4682C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4682C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4682C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4682C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4682C1[];
extern  VTBL_ENTRY _ZTV7S4682C1[];
Class_Descriptor cd_S4682C1 = {  "S4682C1", // class name
  bases_S4682C1, 2,
  &(vtc_S4682C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S4682C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4682C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4681C3  {
  char s4681c3f0;
  int s4681c3f1;
  virtual  ~S4681C3(); // _ZN7S4681C3D1Ev
  virtual void  v3(); // _ZN7S4681C32v3Ev
  S4681C3(); // tgen
};
//SIG(-1 S4681C3) C1{ vd v1 Fc Fi}


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

static void Test_S4681C3()
{
  extern Class_Descriptor cd_S4681C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4681C3, buf);
    S4681C3 *dp, &lv = *(dp=new (buf) S4681C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4681C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4681C3)");
    check_field_offset(lv, s4681c3f0, ABISELECT(8,4), "S4681C3.s4681c3f0");
    check_field_offset(lv, s4681c3f1, ABISELECT(12,8), "S4681C3.s4681c3f1");
    test_class_info(&lv, &cd_S4681C3);
    dp->~S4681C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4681C3(Test_S4681C3, "S4681C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4681C3C1Ev();
extern void _ZN7S4681C3D1Ev();
Name_Map name_map_S4681C3[] = {
  NSPAIR(_ZN7S4681C3C1Ev),
  NSPAIR(_ZN7S4681C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4681C3[];
extern void _ZN7S4681C3D1Ev();
extern void _ZN7S4681C3D0Ev();
extern void _ZN7S4681C32v3Ev();
static  VTBL_ENTRY vtc_S4681C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4681C3[0]),
  (VTBL_ENTRY)&_ZN7S4681C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4681C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4681C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4681C3[];
extern  VTBL_ENTRY _ZTV7S4681C3[];
Class_Descriptor cd_S4681C3 = {  "S4681C3", // class name
  0,0,//no base classes
  &(vtc_S4681C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4681C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4681C3),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  S4681C2  : S4681C3 {
  ::S2338C14_nt s4681c2f0;
  virtual  ~S4681C2(); // _ZN7S4681C2D1Ev
  virtual void  v4(); // _ZN7S4681C22v4Ev
  virtual void  v5(); // _ZN7S4681C22v5Ev
  S4681C2(); // tgen
};
//SIG(-1 S4681C2) C1{ BC2{ vd v3 Fc Fi} vd v1 v2 FC3{ Fl[4]}}


 S4681C2 ::~S4681C2(){ note_dtor("S4681C2", this);}
void  S4681C2 ::v4(){vfunc_called(this, "_ZN7S4681C22v4Ev");}
void  S4681C2 ::v5(){vfunc_called(this, "_ZN7S4681C22v5Ev");}
S4681C2 ::S4681C2(){ note_ctor("S4681C2", this);} // tgen

static void Test_S4681C2()
{
  extern Class_Descriptor cd_S4681C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4681C2, buf);
    S4681C2 *dp, &lv = *(dp=new (buf) S4681C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4681C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4681C2)");
    check_base_class_offset(lv, (S4681C3*), 0, "S4681C2");
    check_field_offset(lv, s4681c2f0, ABISELECT(16,12), "S4681C2.s4681c2f0");
    test_class_info(&lv, &cd_S4681C2);
    dp->~S4681C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4681C2(Test_S4681C2, "S4681C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4681C2C1Ev();
extern void _ZN7S4681C2D1Ev();
Name_Map name_map_S4681C2[] = {
  NSPAIR(_ZN7S4681C2C1Ev),
  NSPAIR(_ZN7S4681C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4681C3;
extern VTBL_ENTRY _ZTI7S4681C3[];
extern  VTBL_ENTRY _ZTV7S4681C3[];
static Base_Class bases_S4681C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4681C2[];
extern void _ZN7S4681C2D1Ev();
extern void _ZN7S4681C2D0Ev();
extern void _ZN7S4681C32v3Ev();
extern void _ZN7S4681C22v4Ev();
extern void _ZN7S4681C22v5Ev();
static  VTBL_ENTRY vtc_S4681C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4681C2[0]),
  (VTBL_ENTRY)&_ZN7S4681C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4681C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4681C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4681C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4681C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4681C2[];
extern  VTBL_ENTRY _ZTV7S4681C2[];
Class_Descriptor cd_S4681C2 = {  "S4681C2", // class name
  bases_S4681C2, 1,
  &(vtc_S4681C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4681C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4681C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4681C1  : S4681C2 {
  int s4681c1f0;
  virtual  ~S4681C1(); // _ZN7S4681C1D1Ev
  virtual void  v1(); // _ZN7S4681C12v1Ev
  virtual void  v2(); // _ZN7S4681C12v2Ev
  S4681C1(); // tgen
};
//SIG(1 S4681C1) C1{ BC2{ BC3{ vd v3 Fc Fi} vd v4 v5 FC4{ Fl[4]}} vd v1 v2 Fi}


 S4681C1 ::~S4681C1(){ note_dtor("S4681C1", this);}
void  S4681C1 ::v1(){vfunc_called(this, "_ZN7S4681C12v1Ev");}
void  S4681C1 ::v2(){vfunc_called(this, "_ZN7S4681C12v2Ev");}
S4681C1 ::S4681C1(){ note_ctor("S4681C1", this);} // tgen

static void Test_S4681C1()
{
  extern Class_Descriptor cd_S4681C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S4681C1, buf);
    S4681C1 *dp, &lv = *(dp=new (buf) S4681C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S4681C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4681C1)");
    check_base_class_offset(lv, (S4681C3*)(S4681C2*), 0, "S4681C1");
    check_base_class_offset(lv, (S4681C2*), 0, "S4681C1");
    check_field_offset(lv, s4681c1f0, ABISELECT(48,28), "S4681C1.s4681c1f0");
    test_class_info(&lv, &cd_S4681C1);
    dp->~S4681C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4681C1(Test_S4681C1, "S4681C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S4681C1C1Ev();
extern void _ZN7S4681C1D1Ev();
Name_Map name_map_S4681C1[] = {
  NSPAIR(_ZN7S4681C1C1Ev),
  NSPAIR(_ZN7S4681C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4681C3;
extern VTBL_ENTRY _ZTI7S4681C3[];
extern  VTBL_ENTRY _ZTV7S4681C3[];
extern Class_Descriptor cd_S4681C2;
extern VTBL_ENTRY _ZTI7S4681C2[];
extern  VTBL_ENTRY _ZTV7S4681C2[];
static Base_Class bases_S4681C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4681C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4681C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4681C1[];
extern void _ZN7S4681C1D1Ev();
extern void _ZN7S4681C1D0Ev();
extern void _ZN7S4681C32v3Ev();
extern void _ZN7S4681C22v4Ev();
extern void _ZN7S4681C22v5Ev();
extern void _ZN7S4681C12v1Ev();
extern void _ZN7S4681C12v2Ev();
static  VTBL_ENTRY vtc_S4681C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4681C1[0]),
  (VTBL_ENTRY)&_ZN7S4681C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4681C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4681C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4681C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4681C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4681C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4681C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4681C1[];
extern  VTBL_ENTRY _ZTV7S4681C1[];
Class_Descriptor cd_S4681C1 = {  "S4681C1", // class name
  bases_S4681C1, 2,
  &(vtc_S4681C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S4681C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4681C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10510C2  {
  short s10510c2f0[2];
  long s10510c2f1[2];
  short s10510c2f2;
};
//SIG(-1 S10510C2) C1{ Fs[2] Fl[2] Fs}



static void Test_S10510C2()
{
  {
    init_simple_test("S10510C2");
    S10510C2 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10510C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10510C2)");
    check_field_offset(lv, s10510c2f0, 0, "S10510C2.s10510c2f0");
    check_field_offset(lv, s10510c2f1, ABISELECT(8,4), "S10510C2.s10510c2f1");
    check_field_offset(lv, s10510c2f2, ABISELECT(24,12), "S10510C2.s10510c2f2");
  }
}
static Arrange_To_Call_Me vS10510C2(Test_S10510C2, "S10510C2", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10510C3  {
  short s10510c3f0[2];
  long s10510c3f1;
  short s10510c3f2;
};
//SIG(-1 S10510C3) C1{ Fs[2] Fl Fs}



static void Test_S10510C3()
{
  {
    init_simple_test("S10510C3");
    S10510C3 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10510C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10510C3)");
    check_field_offset(lv, s10510c3f0, 0, "S10510C3.s10510c3f0");
    check_field_offset(lv, s10510c3f1, ABISELECT(8,4), "S10510C3.s10510c3f1");
    check_field_offset(lv, s10510c3f2, ABISELECT(16,8), "S10510C3.s10510c3f2");
  }
}
static Arrange_To_Call_Me vS10510C3(Test_S10510C3, "S10510C3", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10510C1  {
  char s10510c1f0;
  short s10510c1f1[123];
  ::S10510C2 s10510c1f2;
  ::S10510C3 s10510c1f3;
  short s10510c1f4;
};
//SIG(1 S10510C1) C1{ Fc Fs[123] FC2{ Fs[2] Fl[2] Fs} FC3{ Fs[2] Fl Fs} Fs}



static void Test_S10510C1()
{
  {
    init_simple_test("S10510C1");
    S10510C1 lv;
    check2(sizeof(lv), ABISELECT(312,280), "sizeof(S10510C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10510C1)");
    check_field_offset(lv, s10510c1f0, 0, "S10510C1.s10510c1f0");
    check_field_offset(lv, s10510c1f1, 2, "S10510C1.s10510c1f1");
    check_field_offset(lv, s10510c1f2, 248, "S10510C1.s10510c1f2");
    check_field_offset(lv, s10510c1f3, ABISELECT(280,264), "S10510C1.s10510c1f3");
    check_field_offset(lv, s10510c1f4, ABISELECT(304,276), "S10510C1.s10510c1f4");
  }
}
static Arrange_To_Call_Me vS10510C1(Test_S10510C1, "S10510C1", ABISELECT(312,280));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6399C2  {
  char s6399c2f0;
  char s6399c2f1:8;
  int s6399c2f2;
  char s6399c2f3;
  void *s6399c2f4;
  char s6399c2f5:2;
  virtual void  v1(); // _ZN7S6399C22v1Ev
  virtual void  v2(); // _ZN7S6399C22v2Ev
  virtual void  v3(); // _ZN7S6399C22v3Ev
  ~S6399C2(); // tgen
  S6399C2(); // tgen
};
//SIG(-1 S6399C2) C1{ v1 v2 v3 Fc Fc:8 Fi Fc Fp Fc:2}


void  S6399C2 ::v1(){vfunc_called(this, "_ZN7S6399C22v1Ev");}
void  S6399C2 ::v2(){vfunc_called(this, "_ZN7S6399C22v2Ev");}
void  S6399C2 ::v3(){vfunc_called(this, "_ZN7S6399C22v3Ev");}
S6399C2 ::~S6399C2(){ note_dtor("S6399C2", this);} // tgen
S6399C2 ::S6399C2(){ note_ctor("S6399C2", this);} // tgen

static void Test_S6399C2()
{
  extern Class_Descriptor cd_S6399C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S6399C2, buf);
    S6399C2 *dp, &lv = *(dp=new (buf) S6399C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S6399C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6399C2)");
    check_field_offset(lv, s6399c2f0, ABISELECT(8,4), "S6399C2.s6399c2f0");
    set_bf_and_test(lv, s6399c2f1, ABISELECT(9,5), 0, 8, 1, "S6399C2");
    set_bf_and_test(lv, s6399c2f1, ABISELECT(9,5), 0, 8, hide_sll(1LL<<7), "S6399C2");
    check_field_offset(lv, s6399c2f2, ABISELECT(12,8), "S6399C2.s6399c2f2");
    check_field_offset(lv, s6399c2f3, ABISELECT(16,12), "S6399C2.s6399c2f3");
    check_field_offset(lv, s6399c2f4, ABISELECT(24,16), "S6399C2.s6399c2f4");
    set_bf_and_test(lv, s6399c2f5, ABISELECT(32,20), 0, 2, 1, "S6399C2");
    set_bf_and_test(lv, s6399c2f5, ABISELECT(32,20), 0, 2, hide_sll(1LL<<1), "S6399C2");
    test_class_info(&lv, &cd_S6399C2);
    dp->~S6399C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6399C2(Test_S6399C2, "S6399C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S6399C2C1Ev();
extern void _ZN7S6399C2D1Ev();
Name_Map name_map_S6399C2[] = {
  NSPAIR(_ZN7S6399C2C1Ev),
  NSPAIR(_ZN7S6399C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6399C2[];
extern void _ZN7S6399C22v1Ev();
extern void _ZN7S6399C22v2Ev();
extern void _ZN7S6399C22v3Ev();
static  VTBL_ENTRY vtc_S6399C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6399C2[0]),
  (VTBL_ENTRY)&_ZN7S6399C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6399C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6399C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6399C2[];
extern  VTBL_ENTRY _ZTV7S6399C2[];
Class_Descriptor cd_S6399C2 = {  "S6399C2", // class name
  0,0,//no base classes
  &(vtc_S6399C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S6399C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6399C2),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  S6399C1  : S6399C2 {
  ::S6399C2 s6399c1f0;
  __tsi64 s6399c1f1;
  void *s6399c1f2[3];
  ~S6399C1(); // tgen
  S6399C1(); // tgen
};
//SIG(1 S6399C1) C1{ BC2{ v1 v2 v3 Fc Fc:8 Fi Fc Fp Fc:2} FC2 FL Fp[3]}


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

static void Test_S6399C1()
{
  extern Class_Descriptor cd_S6399C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S6399C1, buf);
    S6399C1 *dp, &lv = *(dp=new (buf) S6399C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S6399C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6399C1)");
    check_base_class_offset(lv, (S6399C2*), 0, "S6399C1");
    check_field_offset(lv, s6399c1f0, ABISELECT(40,24), "S6399C1.s6399c1f0");
    check_field_offset(lv, s6399c1f1, ABISELECT(80,48), "S6399C1.s6399c1f1");
    check_field_offset(lv, s6399c1f2, ABISELECT(88,56), "S6399C1.s6399c1f2");
    test_class_info(&lv, &cd_S6399C1);
    dp->~S6399C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6399C1(Test_S6399C1, "S6399C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S6399C1C1Ev();
extern void _ZN7S6399C1D1Ev();
Name_Map name_map_S6399C1[] = {
  NSPAIR(_ZN7S6399C1C1Ev),
  NSPAIR(_ZN7S6399C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6399C2;
extern VTBL_ENTRY _ZTI7S6399C2[];
extern  VTBL_ENTRY _ZTV7S6399C2[];
static Base_Class bases_S6399C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6399C2,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6399C1[];
extern void _ZN7S6399C22v1Ev();
extern void _ZN7S6399C22v2Ev();
extern void _ZN7S6399C22v3Ev();
static  VTBL_ENTRY vtc_S6399C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6399C1[0]),
  (VTBL_ENTRY)&_ZN7S6399C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6399C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6399C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6399C1[];
extern  VTBL_ENTRY _ZTV7S6399C1[];
Class_Descriptor cd_S6399C1 = {  "S6399C1", // class name
  bases_S6399C1, 1,
  &(vtc_S6399C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S6399C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6399C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8263C1  : S8379C2_nt {
  ::S195C24 s8263c1f0;
  ::S195C24 s8263c1f1;
  int s8263c1f2;
  ::S100C45 s8263c1f3;
  int s8263c1f4;
  ~S8263C1(); // tgen
  S8263C1(); // tgen
};
//SIG(1 S8263C1) C1{ BC2{ vd m} FC3{ BC4{ m Fp Fi[2]}} FC3 Fi FC5{ BC4} Fi}


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

static void Test_S8263C1()
{
  extern Class_Descriptor cd_S8263C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S8263C1, buf);
    S8263C1 *dp, &lv = *(dp=new (buf) S8263C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S8263C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8263C1)");
    check_base_class_offset(lv, (S8379C2_nt*), 0, "S8263C1");
    check_field_offset(lv, s8263c1f0, ABISELECT(8,4), "S8263C1.s8263c1f0");
    check_field_offset(lv, s8263c1f1, ABISELECT(24,16), "S8263C1.s8263c1f1");
    check_field_offset(lv, s8263c1f2, ABISELECT(40,28), "S8263C1.s8263c1f2");
    check_field_offset(lv, s8263c1f3, ABISELECT(48,32), "S8263C1.s8263c1f3");
    check_field_offset(lv, s8263c1f4, ABISELECT(64,44), "S8263C1.s8263c1f4");
    test_class_info(&lv, &cd_S8263C1);
    dp->~S8263C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8263C1(Test_S8263C1, "S8263C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S8263C1C1Ev();
extern void _ZN7S8263C1D1Ev();
Name_Map name_map_S8263C1[] = {
  NSPAIR(_ZN7S8263C1C1Ev),
  NSPAIR(_ZN7S8263C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8379C2_nt;
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
static Base_Class bases_S8263C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8379C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8263C1[];
extern void _ZN7S8263C1D1Ev();
extern void _ZN7S8263C1D0Ev();
static  VTBL_ENTRY vtc_S8263C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8263C1[0]),
  (VTBL_ENTRY)&_ZN7S8263C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8263C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8263C1[];
extern  VTBL_ENTRY _ZTV7S8263C1[];
Class_Descriptor cd_S8263C1 = {  "S8263C1", // class name
  bases_S8263C1, 1,
  &(vtc_S8263C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S8263C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8263C1),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  S1221C3  : S2382C30 {
  virtual  ~S1221C3(); // _ZN7S1221C3D1Ev
  virtual void  v4(); // _ZN7S1221C32v4Ev
  S1221C3(); // tgen
};
//SIG(-1 S1221C3) C1{ BC2{ m} vd v1}


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

static void Test_S1221C3()
{
  extern Class_Descriptor cd_S1221C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1221C3, buf);
    S1221C3 *dp, &lv = *(dp=new (buf) S1221C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1221C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1221C3)");
    check_base_class_offset(lv, (S2382C30*), 0, "S1221C3");
    test_class_info(&lv, &cd_S1221C3);
    dp->~S1221C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1221C3(Test_S1221C3, "S1221C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1221C3C1Ev();
extern void _ZN7S1221C3D1Ev();
Name_Map name_map_S1221C3[] = {
  NSPAIR(_ZN7S1221C3C1Ev),
  NSPAIR(_ZN7S1221C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
static Base_Class bases_S1221C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1221C3[];
extern void _ZN7S1221C3D1Ev();
extern void _ZN7S1221C3D0Ev();
extern void _ZN7S1221C32v4Ev();
static  VTBL_ENTRY vtc_S1221C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1221C3[0]),
  (VTBL_ENTRY)&_ZN7S1221C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1221C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1221C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S1221C3[];
extern  VTBL_ENTRY _ZTV7S1221C3[];
Class_Descriptor cd_S1221C3 = {  "S1221C3", // class name
  bases_S1221C3, 1,
  &(vtc_S1221C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1221C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1221C3),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  S1221C2  : S1221C3 {
  virtual  ~S1221C2(); // _ZN7S1221C2D1Ev
  virtual void  v5(); // _ZN7S1221C22v5Ev
  virtual void  v6(); // _ZN7S1221C22v6Ev
  S1221C2(); // tgen
};
//SIG(-1 S1221C2) C1{ BC2{ BC3{ m} vd v3} vd v1 v2}


 S1221C2 ::~S1221C2(){ note_dtor("S1221C2", this);}
void  S1221C2 ::v5(){vfunc_called(this, "_ZN7S1221C22v5Ev");}
void  S1221C2 ::v6(){vfunc_called(this, "_ZN7S1221C22v6Ev");}
S1221C2 ::S1221C2(){ note_ctor("S1221C2", this);} // tgen

static void Test_S1221C2()
{
  extern Class_Descriptor cd_S1221C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1221C2, buf);
    S1221C2 *dp, &lv = *(dp=new (buf) S1221C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1221C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1221C2)");
    check_base_class_offset(lv, (S2382C30*)(S1221C3*), 0, "S1221C2");
    check_base_class_offset(lv, (S1221C3*), 0, "S1221C2");
    test_class_info(&lv, &cd_S1221C2);
    dp->~S1221C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1221C2(Test_S1221C2, "S1221C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1221C2C1Ev();
extern void _ZN7S1221C2D1Ev();
Name_Map name_map_S1221C2[] = {
  NSPAIR(_ZN7S1221C2C1Ev),
  NSPAIR(_ZN7S1221C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
extern Class_Descriptor cd_S1221C3;
extern VTBL_ENTRY _ZTI7S1221C3[];
extern  VTBL_ENTRY _ZTV7S1221C3[];
static Base_Class bases_S1221C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1221C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1221C2[];
extern void _ZN7S1221C2D1Ev();
extern void _ZN7S1221C2D0Ev();
extern void _ZN7S1221C32v4Ev();
extern void _ZN7S1221C22v5Ev();
extern void _ZN7S1221C22v6Ev();
static  VTBL_ENTRY vtc_S1221C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1221C2[0]),
  (VTBL_ENTRY)&_ZN7S1221C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1221C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1221C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1221C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1221C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S1221C2[];
extern  VTBL_ENTRY _ZTV7S1221C2[];
Class_Descriptor cd_S1221C2 = {  "S1221C2", // class name
  bases_S1221C2, 2,
  &(vtc_S1221C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1221C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1221C2),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  S1221C1  : S1221C2 {
  short s1221c1f0[4];
  virtual  ~S1221C1(); // _ZN7S1221C1D1Ev
  virtual void  v1(); // _ZN7S1221C12v1Ev
  virtual void  v2(); // _ZN7S1221C12v2Ev
  virtual void  v3(); // _ZN7S1221C12v3Ev
  S1221C1(); // tgen
};
//SIG(1 S1221C1) C1{ BC2{ BC3{ BC4{ m} vd v4} vd v5 v6} vd v1 v2 v3 Fs[4]}


 S1221C1 ::~S1221C1(){ note_dtor("S1221C1", this);}
void  S1221C1 ::v1(){vfunc_called(this, "_ZN7S1221C12v1Ev");}
void  S1221C1 ::v2(){vfunc_called(this, "_ZN7S1221C12v2Ev");}
void  S1221C1 ::v3(){vfunc_called(this, "_ZN7S1221C12v3Ev");}
S1221C1 ::S1221C1(){ note_ctor("S1221C1", this);} // tgen

static void Test_S1221C1()
{
  extern Class_Descriptor cd_S1221C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1221C1, buf);
    S1221C1 *dp, &lv = *(dp=new (buf) S1221C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1221C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1221C1)");
    check_base_class_offset(lv, (S2382C30*)(S1221C3*)(S1221C2*), 0, "S1221C1");
    check_base_class_offset(lv, (S1221C3*)(S1221C2*), 0, "S1221C1");
    check_base_class_offset(lv, (S1221C2*), 0, "S1221C1");
    check_field_offset(lv, s1221c1f0, ABISELECT(8,4), "S1221C1.s1221c1f0");
    test_class_info(&lv, &cd_S1221C1);
    dp->~S1221C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1221C1(Test_S1221C1, "S1221C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1221C1C1Ev();
extern void _ZN7S1221C1D1Ev();
Name_Map name_map_S1221C1[] = {
  NSPAIR(_ZN7S1221C1C1Ev),
  NSPAIR(_ZN7S1221C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
extern Class_Descriptor cd_S1221C3;
extern VTBL_ENTRY _ZTI7S1221C3[];
extern  VTBL_ENTRY _ZTV7S1221C3[];
extern Class_Descriptor cd_S1221C2;
extern VTBL_ENTRY _ZTI7S1221C2[];
extern  VTBL_ENTRY _ZTV7S1221C2[];
static Base_Class bases_S1221C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1221C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1221C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1221C1[];
extern void _ZN7S1221C1D1Ev();
extern void _ZN7S1221C1D0Ev();
extern void _ZN7S1221C32v4Ev();
extern void _ZN7S1221C22v5Ev();
extern void _ZN7S1221C22v6Ev();
extern void _ZN7S1221C12v1Ev();
extern void _ZN7S1221C12v2Ev();
extern void _ZN7S1221C12v3Ev();
static  VTBL_ENTRY vtc_S1221C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1221C1[0]),
  (VTBL_ENTRY)&_ZN7S1221C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1221C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1221C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1221C22v5Ev,
  (VTBL_ENTRY)&_ZN7S1221C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1221C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1221C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1221C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1221C1[];
extern  VTBL_ENTRY _ZTV7S1221C1[];
Class_Descriptor cd_S1221C1 = {  "S1221C1", // class name
  bases_S1221C1, 3,
  &(vtc_S1221C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1221C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1221C1),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  S16142C1  {
  ::S2403C17_nt s16142c1f0;
  ::S21372C5_nt s16142c1f1;
  ::S21372C5_nt s16142c1f2;
  void *s16142c1f3;
  int s16142c1f4;
  char s16142c1f5;
  void  mf16142c1(); // _ZN8S16142C19mf16142c1Ev
};
//SIG(1 S16142C1) C1{ m FC2{ m FL[4]} FC3{ m Fp Fi FC4{ m}} FC3 Fp Fi Fc}


void  S16142C1 ::mf16142c1(){}

static void Test_S16142C1()
{
  {
    init_simple_test("S16142C1");
    S16142C1 lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S16142C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16142C1)");
    check_field_offset(lv, s16142c1f0, 0, "S16142C1.s16142c1f0");
    check_field_offset(lv, s16142c1f1, 32, "S16142C1.s16142c1f1");
    check_field_offset(lv, s16142c1f2, ABISELECT(48,44), "S16142C1.s16142c1f2");
    check_field_offset(lv, s16142c1f3, ABISELECT(64,56), "S16142C1.s16142c1f3");
    check_field_offset(lv, s16142c1f4, ABISELECT(72,60), "S16142C1.s16142c1f4");
    check_field_offset(lv, s16142c1f5, ABISELECT(76,64), "S16142C1.s16142c1f5");
  }
}
static Arrange_To_Call_Me vS16142C1(Test_S16142C1, "S16142C1", ABISELECT(80,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18794C1  {
  ::S20509C3 s18794c1f0;
  void *s18794c1f1;
  virtual void  v1(); // _ZN8S18794C12v1Ev
  virtual void  v2(); // _ZN8S18794C12v2Ev
  virtual void  v3(); // _ZN8S18794C12v3Ev
  virtual void  v4(); // _ZN8S18794C12v4Ev
  virtual void  v5(); // _ZN8S18794C12v5Ev
  virtual void  v6(); // _ZN8S18794C12v6Ev
  virtual void  v7(); // _ZN8S18794C12v7Ev
  ~S18794C1(); // tgen
  S18794C1(); // tgen
};
//SIG(1 S18794C1) C1{ v1 v2 v3 v4 v5 v6 v7 FC2{ BC3{ v9 v10 v11} v8} Fp}


void  S18794C1 ::v1(){vfunc_called(this, "_ZN8S18794C12v1Ev");}
void  S18794C1 ::v2(){vfunc_called(this, "_ZN8S18794C12v2Ev");}
void  S18794C1 ::v3(){vfunc_called(this, "_ZN8S18794C12v3Ev");}
void  S18794C1 ::v4(){vfunc_called(this, "_ZN8S18794C12v4Ev");}
void  S18794C1 ::v5(){vfunc_called(this, "_ZN8S18794C12v5Ev");}
void  S18794C1 ::v6(){vfunc_called(this, "_ZN8S18794C12v6Ev");}
void  S18794C1 ::v7(){vfunc_called(this, "_ZN8S18794C12v7Ev");}
S18794C1 ::~S18794C1(){ note_dtor("S18794C1", this);} // tgen
S18794C1 ::S18794C1(){ note_ctor("S18794C1", this);} // tgen

static void Test_S18794C1()
{
  extern Class_Descriptor cd_S18794C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18794C1, buf);
    S18794C1 *dp, &lv = *(dp=new (buf) S18794C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18794C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18794C1)");
    check_field_offset(lv, s18794c1f0, ABISELECT(8,4), "S18794C1.s18794c1f0");
    check_field_offset(lv, s18794c1f1, ABISELECT(16,8), "S18794C1.s18794c1f1");
    test_class_info(&lv, &cd_S18794C1);
    dp->~S18794C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18794C1(Test_S18794C1, "S18794C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18794C1C1Ev();
extern void _ZN8S18794C1D1Ev();
Name_Map name_map_S18794C1[] = {
  NSPAIR(_ZN8S18794C1C1Ev),
  NSPAIR(_ZN8S18794C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18794C1[];
extern void _ZN8S18794C12v1Ev();
extern void _ZN8S18794C12v2Ev();
extern void _ZN8S18794C12v3Ev();
extern void _ZN8S18794C12v4Ev();
extern void _ZN8S18794C12v5Ev();
extern void _ZN8S18794C12v6Ev();
extern void _ZN8S18794C12v7Ev();
static  VTBL_ENTRY vtc_S18794C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18794C1[0]),
  (VTBL_ENTRY)&_ZN8S18794C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18794C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18794C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18794C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18794C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18794C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18794C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S18794C1[];
extern  VTBL_ENTRY _ZTV8S18794C1[];
Class_Descriptor cd_S18794C1 = {  "S18794C1", // class name
  0,0,//no base classes
  &(vtc_S18794C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18794C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18794C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18488C2  {
  ::S20111C2 s18488c2f0[10];
  void *s18488c2f1[4];
  char s18488c2f2;
  void  mf18488c2(); // _ZN8S18488C29mf18488c2Ev
  virtual  ~S18488C2(); // _ZN8S18488C2D1Ev
  S18488C2(); // tgen
};
//SIG(-1 S18488C2) C1{ vd m FC2{ v1 FL}[10] Fp[4] Fc}


void  S18488C2 ::mf18488c2(){}
 S18488C2 ::~S18488C2(){ note_dtor("S18488C2", this);}
S18488C2 ::S18488C2(){ note_ctor("S18488C2", this);} // tgen

static void Test_S18488C2()
{
  extern Class_Descriptor cd_S18488C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S18488C2, buf);
    S18488C2 *dp, &lv = *(dp=new (buf) S18488C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S18488C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18488C2)");
    check_field_offset(lv, s18488c2f0, ABISELECT(8,4), "S18488C2.s18488c2f0");
    check_field_offset(lv, s18488c2f1, ABISELECT(168,124), "S18488C2.s18488c2f1");
    check_field_offset(lv, s18488c2f2, ABISELECT(200,140), "S18488C2.s18488c2f2");
    test_class_info(&lv, &cd_S18488C2);
    dp->~S18488C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18488C2(Test_S18488C2, "S18488C2", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN8S18488C2C1Ev();
extern void _ZN8S18488C2D1Ev();
Name_Map name_map_S18488C2[] = {
  NSPAIR(_ZN8S18488C2C1Ev),
  NSPAIR(_ZN8S18488C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18488C2[];
extern void _ZN8S18488C2D1Ev();
extern void _ZN8S18488C2D0Ev();
static  VTBL_ENTRY vtc_S18488C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18488C2[0]),
  (VTBL_ENTRY)&_ZN8S18488C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18488C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S18488C2[];
extern  VTBL_ENTRY _ZTV8S18488C2[];
Class_Descriptor cd_S18488C2 = {  "S18488C2", // class name
  0,0,//no base classes
  &(vtc_S18488C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI8S18488C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18488C2),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  S18488C1  {
  ::S18488C2 s18488c1f0;
  int s18488c1f1;
  short s18488c1f2;
  void *s18488c1f3;
  virtual void  v1(); // _ZN8S18488C12v1Ev
  ~S18488C1(); // tgen
  S18488C1(); // tgen
};
//SIG(1 S18488C1) C1{ v1 FC2{ vd m FC3{ v2 FL}[10] Fp[4] Fc} Fi Fs Fp}


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

static void Test_S18488C1()
{
  extern Class_Descriptor cd_S18488C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S18488C1, buf);
    S18488C1 *dp, &lv = *(dp=new (buf) S18488C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S18488C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18488C1)");
    check_field_offset(lv, s18488c1f0, ABISELECT(8,4), "S18488C1.s18488c1f0");
    check_field_offset(lv, s18488c1f1, ABISELECT(216,148), "S18488C1.s18488c1f1");
    check_field_offset(lv, s18488c1f2, ABISELECT(220,152), "S18488C1.s18488c1f2");
    check_field_offset(lv, s18488c1f3, ABISELECT(224,156), "S18488C1.s18488c1f3");
    test_class_info(&lv, &cd_S18488C1);
    dp->~S18488C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18488C1(Test_S18488C1, "S18488C1", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN8S18488C1C1Ev();
extern void _ZN8S18488C1D1Ev();
Name_Map name_map_S18488C1[] = {
  NSPAIR(_ZN8S18488C1C1Ev),
  NSPAIR(_ZN8S18488C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18488C1[];
extern void _ZN8S18488C12v1Ev();
static  VTBL_ENTRY vtc_S18488C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18488C1[0]),
  (VTBL_ENTRY)&_ZN8S18488C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18488C1[];
extern  VTBL_ENTRY _ZTV8S18488C1[];
Class_Descriptor cd_S18488C1 = {  "S18488C1", // class name
  0,0,//no base classes
  &(vtc_S18488C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI8S18488C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18488C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16727C4_nt  {
  void *s16727c4f0;
  int s16727c4f1;
  void  mf16727c4(); // _ZN11S16727C4_nt9mf16727c4Ev
};
//SIG(-1 S16727C4_nt) C1{ m Fp Fi}


void  S16727C4_nt ::mf16727c4(){}

//skip512 S16727C4_nt

#else // __cplusplus

Class_Descriptor cd_S16727C4_nt = {  "S16727C4_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  S16727C5  {
  __tsi64 s16727c5f0[12];
};
//SIG(-1 S16727C5) C1{ FL[12]}



static void Test_S16727C5()
{
  {
    init_simple_test("S16727C5");
    S16727C5 lv;
    check2(sizeof(lv), 96, "sizeof(S16727C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16727C5)");
    check_field_offset(lv, s16727c5f0, 0, "S16727C5.s16727c5f0");
  }
}
static Arrange_To_Call_Me vS16727C5(Test_S16727C5, "S16727C5", 96);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16727C3  : S16727C4_nt {
  ::S16727C5 s16727c3f0;
};
//SIG(-1 S16727C3) C1{ BC2{ m Fp Fi} FC3{ FL[12]}}



static void Test_S16727C3()
{
  extern Class_Descriptor cd_S16727C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,27)];
    init_test(&cd_S16727C3, buf);
    S16727C3 &lv = *(new (buf) S16727C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,104), "sizeof(S16727C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16727C3)");
    check_base_class_offset(lv, (S16727C4_nt*), 0, "S16727C3");
    check_field_offset(lv, s16727c3f0, ABISELECT(16,8), "S16727C3.s16727c3f0");
    test_class_info(&lv, &cd_S16727C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16727C3(Test_S16727C3, "S16727C3", ABISELECT(112,104));

#else // __cplusplus

extern Class_Descriptor cd_S16727C4_nt;
static Base_Class bases_S16727C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16727C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S16727C3 = {  "S16727C3", // class name
  bases_S16727C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(112,104), // 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  S16727C2  {
  int s16727c2f0;
  ::S16727C3 s16727c2f1;
  void  mf16727c2(); // _ZN8S16727C29mf16727c2Ev
};
//SIG(-1 S16727C2) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ FL[12]}}}


void  S16727C2 ::mf16727c2(){}

static void Test_S16727C2()
{
  {
    init_simple_test("S16727C2");
    S16727C2 lv;
    check2(sizeof(lv), ABISELECT(120,108), "sizeof(S16727C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16727C2)");
    check_field_offset(lv, s16727c2f0, 0, "S16727C2.s16727c2f0");
    check_field_offset(lv, s16727c2f1, ABISELECT(8,4), "S16727C2.s16727c2f1");
  }
}
static Arrange_To_Call_Me vS16727C2(Test_S16727C2, "S16727C2", ABISELECT(120,108));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16727C1  {
  int s16727c1f0;
  ::S16727C2 s16727c1f1;
  void  mf16727c1(); // _ZN8S16727C19mf16727c1Ev
};
//SIG(1 S16727C1) C1{ m Fi FC2{ m Fi FC3{ BC4{ m Fp Fi} FC5{ FL[12]}}}}


void  S16727C1 ::mf16727c1(){}

static void Test_S16727C1()
{
  {
    init_simple_test("S16727C1");
    S16727C1 lv;
    check2(sizeof(lv), ABISELECT(128,112), "sizeof(S16727C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16727C1)");
    check_field_offset(lv, s16727c1f0, 0, "S16727C1.s16727c1f0");
    check_field_offset(lv, s16727c1f1, ABISELECT(8,4), "S16727C1.s16727c1f1");
  }
}
static Arrange_To_Call_Me vS16727C1(Test_S16727C1, "S16727C1", ABISELECT(128,112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17611C1  {
  void *s17611c1f0;
  ::S2403C17_nt s17611c1f1;
  ::S4247C19_nt s17611c1f2;
  ::S4247C19_nt s17611c1f3;
  void  mf17611c1(); // _ZN8S17611C19mf17611c1Ev
};
//SIG(1 S17611C1) C1{ m Fp FC2{ m FL[4]} FC3{ m Fp Fi[2] FC4{ m}} FC3}


void  S17611C1 ::mf17611c1(){}

static void Test_S17611C1()
{
  {
    init_simple_test("S17611C1");
    S17611C1 lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S17611C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17611C1)");
    check_field_offset(lv, s17611c1f0, 0, "S17611C1.s17611c1f0");
    check_field_offset(lv, s17611c1f1, ABISELECT(8,4), "S17611C1.s17611c1f1");
    check_field_offset(lv, s17611c1f2, ABISELECT(40,36), "S17611C1.s17611c1f2");
    check_field_offset(lv, s17611c1f3, ABISELECT(64,52), "S17611C1.s17611c1f3");
  }
}
static Arrange_To_Call_Me vS17611C1(Test_S17611C1, "S17611C1", ABISELECT(88,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19948C2  {
  char s19948c2f0;
  char s19948c2f1:8;
  int s19948c2f2;
  char s19948c2f3;
  void *s19948c2f4;
  char s19948c2f5:2;
  virtual void  v1(); // _ZN8S19948C22v1Ev
  virtual void  v2(); // _ZN8S19948C22v2Ev
  virtual void  v3(); // _ZN8S19948C22v3Ev
  ~S19948C2(); // tgen
  S19948C2(); // tgen
};
//SIG(-1 S19948C2) C1{ v1 v2 v3 Fc Fc:8 Fi Fc Fp Fc:2}


void  S19948C2 ::v1(){vfunc_called(this, "_ZN8S19948C22v1Ev");}
void  S19948C2 ::v2(){vfunc_called(this, "_ZN8S19948C22v2Ev");}
void  S19948C2 ::v3(){vfunc_called(this, "_ZN8S19948C22v3Ev");}
S19948C2 ::~S19948C2(){ note_dtor("S19948C2", this);} // tgen
S19948C2 ::S19948C2(){ note_ctor("S19948C2", this);} // tgen

static void Test_S19948C2()
{
  extern Class_Descriptor cd_S19948C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19948C2, buf);
    S19948C2 *dp, &lv = *(dp=new (buf) S19948C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19948C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19948C2)");
    check_field_offset(lv, s19948c2f0, ABISELECT(8,4), "S19948C2.s19948c2f0");
    set_bf_and_test(lv, s19948c2f1, ABISELECT(9,5), 0, 8, 1, "S19948C2");
    set_bf_and_test(lv, s19948c2f1, ABISELECT(9,5), 0, 8, hide_sll(1LL<<7), "S19948C2");
    check_field_offset(lv, s19948c2f2, ABISELECT(12,8), "S19948C2.s19948c2f2");
    check_field_offset(lv, s19948c2f3, ABISELECT(16,12), "S19948C2.s19948c2f3");
    check_field_offset(lv, s19948c2f4, ABISELECT(24,16), "S19948C2.s19948c2f4");
    set_bf_and_test(lv, s19948c2f5, ABISELECT(32,20), 0, 2, 1, "S19948C2");
    set_bf_and_test(lv, s19948c2f5, ABISELECT(32,20), 0, 2, hide_sll(1LL<<1), "S19948C2");
    test_class_info(&lv, &cd_S19948C2);
    dp->~S19948C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19948C2(Test_S19948C2, "S19948C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19948C2C1Ev();
extern void _ZN8S19948C2D1Ev();
Name_Map name_map_S19948C2[] = {
  NSPAIR(_ZN8S19948C2C1Ev),
  NSPAIR(_ZN8S19948C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19948C2[];
extern void _ZN8S19948C22v1Ev();
extern void _ZN8S19948C22v2Ev();
extern void _ZN8S19948C22v3Ev();
static  VTBL_ENTRY vtc_S19948C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19948C2[0]),
  (VTBL_ENTRY)&_ZN8S19948C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19948C22v2Ev,
  (VTBL_ENTRY)&_ZN8S19948C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S19948C2[];
extern  VTBL_ENTRY _ZTV8S19948C2[];
Class_Descriptor cd_S19948C2 = {  "S19948C2", // class name
  0,0,//no base classes
  &(vtc_S19948C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19948C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19948C2),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  S19948C1  : virtual S19948C2 {
  void *s19948c1f0;
  int s19948c1f1;
  ~S19948C1(); // tgen
  S19948C1(); // tgen
};
//SIG(1 S19948C1) C1{ VBC2{ v1 v2 v3 Fc Fc:8 Fi Fc Fp Fc:2} Fp Fi}


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

static void Test_S19948C1()
{
  extern Class_Descriptor cd_S19948C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19948C1, buf);
    S19948C1 *dp, &lv = *(dp=new (buf) S19948C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19948C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19948C1)");
    check_base_class_offset(lv, (S19948C2*), ABISELECT(24,12), "S19948C1");
    check_field_offset(lv, s19948c1f0, ABISELECT(8,4), "S19948C1.s19948c1f0");
    check_field_offset(lv, s19948c1f1, ABISELECT(16,8), "S19948C1.s19948c1f1");
    test_class_info(&lv, &cd_S19948C1);
    dp->~S19948C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19948C1(Test_S19948C1, "S19948C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19948C1C1Ev();
extern void _ZN8S19948C1D1Ev();
Name_Map name_map_S19948C1[] = {
  NSPAIR(_ZN8S19948C1C1Ev),
  NSPAIR(_ZN8S19948C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19948C2;
extern VTBL_ENTRY _ZTI8S19948C2[];
extern  VTBL_ENTRY _ZTV8S19948C2[];
static Base_Class bases_S19948C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19948C2,    ABISELECT(24,12), //bcp->offset
    3, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19948C1[];
extern void _ZN8S19948C22v1Ev();
extern void _ZN8S19948C22v2Ev();
extern void _ZN8S19948C22v3Ev();
static  VTBL_ENTRY vtc_S19948C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19948C1[0]),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19948C1[0]),
  (VTBL_ENTRY)&_ZN8S19948C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19948C22v2Ev,
  (VTBL_ENTRY)&_ZN8S19948C22v3Ev,
};
extern VTBL_ENTRY _ZTV8S19948C1[];
static  VTT_ENTRY vtt_S19948C1[] = {
  {&(_ZTV8S19948C1[3]),  3,11},
  {&(_ZTV8S19948C1[8]),  8,11},
};
extern VTBL_ENTRY _ZTI8S19948C1[];
extern  VTBL_ENTRY _ZTV8S19948C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19948C1[];
Class_Descriptor cd_S19948C1 = {  "S19948C1", // class name
  bases_S19948C1, 1,
  &(vtc_S19948C1[0]), // expected_vtbl_contents
  &(vtt_S19948C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19948C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19948C1),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19948C1),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  S8767C2_nt  {
  int s8767c2f0;
  virtual  ~S8767C2_nt(); // _ZN10S8767C2_ntD1Ev
  virtual void  v2(); // _ZN10S8767C2_nt2v2Ev
  S8767C2_nt(); // tgen
};
//SIG(-1 S8767C2_nt) C1{ vd v1 Fi}


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

//skip512 S8767C2_nt

#else // __cplusplus

extern void _ZN10S8767C2_ntC1Ev();
extern void _ZN10S8767C2_ntD1Ev();
Name_Map name_map_S8767C2_nt[] = {
  NSPAIR(_ZN10S8767C2_ntC1Ev),
  NSPAIR(_ZN10S8767C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8767C2_nt[];
extern void _ZN10S8767C2_ntD1Ev();
extern void _ZN10S8767C2_ntD0Ev();
extern void _ZN10S8767C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8767C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8767C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8767C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8767C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8767C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8767C2_nt[];
VTBL_ENTRY *P__ZTI10S8767C2_nt = _ZTI10S8767C2_nt; 
extern  VTBL_ENTRY _ZTV10S8767C2_nt[];
Class_Descriptor cd_S8767C2_nt = {  "S8767C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8767C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8767C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8767C2_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  S8767C1  : S8767C2_nt {
  ::S4247C19_nt s8767c1f0;
  virtual  ~S8767C1(); // _ZN7S8767C1D1Ev
  virtual void  v1(); // _ZN7S8767C12v1Ev
  S8767C1(); // tgen
};
//SIG(1 S8767C1) C1{ BC2{ vd v2 Fi} vd v1 FC3{ m Fp Fi[2] FC4{ m}}}


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

static void Test_S8767C1()
{
  extern Class_Descriptor cd_S8767C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S8767C1, buf);
    S8767C1 *dp, &lv = *(dp=new (buf) S8767C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S8767C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8767C1)");
    check_base_class_offset(lv, (S8767C2_nt*), 0, "S8767C1");
    check_field_offset(lv, s8767c1f0, ABISELECT(16,8), "S8767C1.s8767c1f0");
    test_class_info(&lv, &cd_S8767C1);
    dp->~S8767C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8767C1(Test_S8767C1, "S8767C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S8767C1C1Ev();
extern void _ZN7S8767C1D1Ev();
Name_Map name_map_S8767C1[] = {
  NSPAIR(_ZN7S8767C1C1Ev),
  NSPAIR(_ZN7S8767C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8767C2_nt;
extern VTBL_ENTRY _ZTI10S8767C2_nt[];
extern  VTBL_ENTRY _ZTV10S8767C2_nt[];
static Base_Class bases_S8767C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8767C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8767C1[];
extern void _ZN7S8767C1D1Ev();
extern void _ZN7S8767C1D0Ev();
extern void _ZN10S8767C2_nt2v2Ev();
extern void _ZN7S8767C12v1Ev();
static  VTBL_ENTRY vtc_S8767C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8767C1[0]),
  (VTBL_ENTRY)&_ZN7S8767C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8767C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8767C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8767C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8767C1[];
extern  VTBL_ENTRY _ZTV7S8767C1[];
Class_Descriptor cd_S8767C1 = {  "S8767C1", // class name
  bases_S8767C1, 1,
  &(vtc_S8767C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S8767C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8767C1),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  S20065C2  {
  __tsi64 s20065c2f0;
  virtual void  v2(); // _ZN8S20065C22v2Ev
  virtual void  v3(); // _ZN8S20065C22v3Ev
  virtual void  v4(); // _ZN8S20065C22v4Ev
  virtual void  v5(); // _ZN8S20065C22v5Ev
  virtual void  v6(); // _ZN8S20065C22v6Ev
  virtual void  v7(); // _ZN8S20065C22v7Ev
  virtual void  v8(); // _ZN8S20065C22v8Ev
  virtual void  v9(); // _ZN8S20065C22v9Ev
  ~S20065C2(); // tgen
  S20065C2(); // tgen
};
//SIG(-1 S20065C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FL}


void  S20065C2 ::v2(){vfunc_called(this, "_ZN8S20065C22v2Ev");}
void  S20065C2 ::v3(){vfunc_called(this, "_ZN8S20065C22v3Ev");}
void  S20065C2 ::v4(){vfunc_called(this, "_ZN8S20065C22v4Ev");}
void  S20065C2 ::v5(){vfunc_called(this, "_ZN8S20065C22v5Ev");}
void  S20065C2 ::v6(){vfunc_called(this, "_ZN8S20065C22v6Ev");}
void  S20065C2 ::v7(){vfunc_called(this, "_ZN8S20065C22v7Ev");}
void  S20065C2 ::v8(){vfunc_called(this, "_ZN8S20065C22v8Ev");}
void  S20065C2 ::v9(){vfunc_called(this, "_ZN8S20065C22v9Ev");}
S20065C2 ::~S20065C2(){ note_dtor("S20065C2", this);} // tgen
S20065C2 ::S20065C2(){ note_ctor("S20065C2", this);} // tgen

static void Test_S20065C2()
{
  extern Class_Descriptor cd_S20065C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20065C2, buf);
    S20065C2 *dp, &lv = *(dp=new (buf) S20065C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20065C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20065C2)");
    check_field_offset(lv, s20065c2f0, ABISELECT(8,4), "S20065C2.s20065c2f0");
    test_class_info(&lv, &cd_S20065C2);
    dp->~S20065C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20065C2(Test_S20065C2, "S20065C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20065C2C1Ev();
extern void _ZN8S20065C2D1Ev();
Name_Map name_map_S20065C2[] = {
  NSPAIR(_ZN8S20065C2C1Ev),
  NSPAIR(_ZN8S20065C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20065C2[];
extern void _ZN8S20065C22v2Ev();
extern void _ZN8S20065C22v3Ev();
extern void _ZN8S20065C22v4Ev();
extern void _ZN8S20065C22v5Ev();
extern void _ZN8S20065C22v6Ev();
extern void _ZN8S20065C22v7Ev();
extern void _ZN8S20065C22v8Ev();
extern void _ZN8S20065C22v9Ev();
static  VTBL_ENTRY vtc_S20065C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20065C2[0]),
  (VTBL_ENTRY)&_ZN8S20065C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20065C2[];
extern  VTBL_ENTRY _ZTV8S20065C2[];
Class_Descriptor cd_S20065C2 = {  "S20065C2", // class name
  0,0,//no base classes
  &(vtc_S20065C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20065C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20065C2),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  S20065C1  : virtual S20065C2 {
  int s20065c1f0[2];
  virtual void  v1(); // _ZN8S20065C12v1Ev
  ~S20065C1(); // tgen
  S20065C1(); // tgen
};
//SIG(1 S20065C1) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8 v9 FL} v1 Fi[2]}


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

static void Test_S20065C1()
{
  extern Class_Descriptor cd_S20065C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20065C1, buf);
    S20065C1 *dp, &lv = *(dp=new (buf) S20065C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20065C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20065C1)");
    check_base_class_offset(lv, (S20065C2*), ABISELECT(16,12), "S20065C1");
    check_field_offset(lv, s20065c1f0, ABISELECT(8,4), "S20065C1.s20065c1f0");
    test_class_info(&lv, &cd_S20065C1);
    dp->~S20065C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20065C1(Test_S20065C1, "S20065C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20065C1C1Ev();
extern void _ZN8S20065C1D1Ev();
Name_Map name_map_S20065C1[] = {
  NSPAIR(_ZN8S20065C1C1Ev),
  NSPAIR(_ZN8S20065C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20065C2;
extern VTBL_ENTRY _ZTI8S20065C2[];
extern  VTBL_ENTRY _ZTV8S20065C2[];
static Base_Class bases_S20065C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20065C2,    ABISELECT(16,12), //bcp->offset
    4, //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 _ZTI8S20065C1[];
extern void _ZN8S20065C12v1Ev();
extern void _ZN8S20065C22v2Ev();
extern void _ZN8S20065C22v3Ev();
extern void _ZN8S20065C22v4Ev();
extern void _ZN8S20065C22v5Ev();
extern void _ZN8S20065C22v6Ev();
extern void _ZN8S20065C22v7Ev();
extern void _ZN8S20065C22v8Ev();
extern void _ZN8S20065C22v9Ev();
static  VTBL_ENTRY vtc_S20065C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20065C1[0]),
  (VTBL_ENTRY)&_ZN8S20065C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20065C1[0]),
  (VTBL_ENTRY)&_ZN8S20065C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20065C22v9Ev,
};
extern VTBL_ENTRY _ZTV8S20065C1[];
static  VTT_ENTRY vtt_S20065C1[] = {
  {&(_ZTV8S20065C1[3]),  3,22},
  {&(_ZTV8S20065C1[14]),  14,22},
};
extern VTBL_ENTRY _ZTI8S20065C1[];
extern  VTBL_ENTRY _ZTV8S20065C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20065C1[];
Class_Descriptor cd_S20065C1 = {  "S20065C1", // class name
  bases_S20065C1, 1,
  &(vtc_S20065C1[0]), // expected_vtbl_contents
  &(vtt_S20065C1[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20065C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20065C1),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20065C1),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  S9601C2  {
  virtual  ~S9601C2(); // _ZN7S9601C2D1Ev
  virtual void  v3(); // _ZN7S9601C22v3Ev
  virtual void  v4(); // _ZN7S9601C22v4Ev
  S9601C2(); // tgen
};
//SIG(-1 S9601C2) C1{ vd v1 v2}


 S9601C2 ::~S9601C2(){ note_dtor("S9601C2", this);}
void  S9601C2 ::v3(){vfunc_called(this, "_ZN7S9601C22v3Ev");}
void  S9601C2 ::v4(){vfunc_called(this, "_ZN7S9601C22v4Ev");}
S9601C2 ::S9601C2(){ note_ctor("S9601C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9601C2C1Ev();
extern void _ZN7S9601C2D1Ev();
Name_Map name_map_S9601C2[] = {
  NSPAIR(_ZN7S9601C2C1Ev),
  NSPAIR(_ZN7S9601C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9601C2[];
extern void _ZN7S9601C2D1Ev();
extern void _ZN7S9601C2D0Ev();
extern void _ZN7S9601C22v3Ev();
extern void _ZN7S9601C22v4Ev();
static  VTBL_ENTRY vtc_S9601C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9601C2[0]),
  (VTBL_ENTRY)&_ZN7S9601C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9601C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9601C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9601C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9601C2[];
extern  VTBL_ENTRY _ZTV7S9601C2[];
Class_Descriptor cd_S9601C2 = {  "S9601C2", // class name
  0,0,//no base classes
  &(vtc_S9601C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9601C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9601C2),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  S9601C1  : S9601C2 {
  int s9601c1f0[3];
  void *s9601c1f1;
  int s9601c1f2;
  void *s9601c1f3;
  int s9601c1f4;
  virtual  ~S9601C1(); // _ZN7S9601C1D1Ev
  virtual void  v1(); // _ZN7S9601C12v1Ev
  virtual void  v2(); // _ZN7S9601C12v2Ev
  S9601C1(); // tgen
};
//SIG(1 S9601C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[3] Fp Fi Fp Fi}


 S9601C1 ::~S9601C1(){ note_dtor("S9601C1", this);}
void  S9601C1 ::v1(){vfunc_called(this, "_ZN7S9601C12v1Ev");}
void  S9601C1 ::v2(){vfunc_called(this, "_ZN7S9601C12v2Ev");}
S9601C1 ::S9601C1(){ note_ctor("S9601C1", this);} // tgen

static void Test_S9601C1()
{
  extern Class_Descriptor cd_S9601C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9601C1, buf);
    S9601C1 *dp, &lv = *(dp=new (buf) S9601C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9601C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9601C1)");
    check_base_class_offset(lv, (S9601C2*), 0, "S9601C1");
    check_field_offset(lv, s9601c1f0, ABISELECT(8,4), "S9601C1.s9601c1f0");
    check_field_offset(lv, s9601c1f1, ABISELECT(24,16), "S9601C1.s9601c1f1");
    check_field_offset(lv, s9601c1f2, ABISELECT(32,20), "S9601C1.s9601c1f2");
    check_field_offset(lv, s9601c1f3, ABISELECT(40,24), "S9601C1.s9601c1f3");
    check_field_offset(lv, s9601c1f4, ABISELECT(48,28), "S9601C1.s9601c1f4");
    test_class_info(&lv, &cd_S9601C1);
    dp->~S9601C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9601C1(Test_S9601C1, "S9601C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9601C1C1Ev();
extern void _ZN7S9601C1D1Ev();
Name_Map name_map_S9601C1[] = {
  NSPAIR(_ZN7S9601C1C1Ev),
  NSPAIR(_ZN7S9601C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9601C2;
extern VTBL_ENTRY _ZTI7S9601C2[];
extern  VTBL_ENTRY _ZTV7S9601C2[];
static Base_Class bases_S9601C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9601C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9601C1[];
extern void _ZN7S9601C1D1Ev();
extern void _ZN7S9601C1D0Ev();
extern void _ZN7S9601C22v3Ev();
extern void _ZN7S9601C22v4Ev();
extern void _ZN7S9601C12v1Ev();
extern void _ZN7S9601C12v2Ev();
static  VTBL_ENTRY vtc_S9601C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9601C1[0]),
  (VTBL_ENTRY)&_ZN7S9601C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9601C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9601C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9601C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9601C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9601C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9601C1[];
extern  VTBL_ENTRY _ZTV7S9601C1[];
Class_Descriptor cd_S9601C1 = {  "S9601C1", // class name
  bases_S9601C1, 1,
  &(vtc_S9601C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9601C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9601C1),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  S8766C2  {
  int s8766c2f0;
  virtual  ~S8766C2(); // _ZN7S8766C2D1Ev
  virtual void  v2(); // _ZN7S8766C22v2Ev
  S8766C2(); // tgen
};
//SIG(-1 S8766C2) C1{ vd v1 Fi}


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

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

#else // __cplusplus

extern void _ZN7S8766C2C1Ev();
extern void _ZN7S8766C2D1Ev();
Name_Map name_map_S8766C2[] = {
  NSPAIR(_ZN7S8766C2C1Ev),
  NSPAIR(_ZN7S8766C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8766C2[];
extern void _ZN7S8766C2D1Ev();
extern void _ZN7S8766C2D0Ev();
extern void _ZN7S8766C22v2Ev();
static  VTBL_ENTRY vtc_S8766C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8766C2[0]),
  (VTBL_ENTRY)&_ZN7S8766C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8766C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8766C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8766C2[];
extern  VTBL_ENTRY _ZTV7S8766C2[];
Class_Descriptor cd_S8766C2 = {  "S8766C2", // class name
  0,0,//no base classes
  &(vtc_S8766C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8766C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8766C2),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  S8766C1  : S8766C2 {
  ::S21372C5_nt s8766c1f0;
  virtual  ~S8766C1(); // _ZN7S8766C1D1Ev
  virtual void  v1(); // _ZN7S8766C12v1Ev
  S8766C1(); // tgen
};
//SIG(1 S8766C1) C1{ BC2{ vd v2 Fi} vd v1 FC3{ m Fp Fi FC4{ m}}}


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

static void Test_S8766C1()
{
  extern Class_Descriptor cd_S8766C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S8766C1, buf);
    S8766C1 *dp, &lv = *(dp=new (buf) S8766C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S8766C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8766C1)");
    check_base_class_offset(lv, (S8766C2*), 0, "S8766C1");
    check_field_offset(lv, s8766c1f0, ABISELECT(16,8), "S8766C1.s8766c1f0");
    test_class_info(&lv, &cd_S8766C1);
    dp->~S8766C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8766C1(Test_S8766C1, "S8766C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S8766C1C1Ev();
extern void _ZN7S8766C1D1Ev();
Name_Map name_map_S8766C1[] = {
  NSPAIR(_ZN7S8766C1C1Ev),
  NSPAIR(_ZN7S8766C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8766C2;
extern VTBL_ENTRY _ZTI7S8766C2[];
extern  VTBL_ENTRY _ZTV7S8766C2[];
static Base_Class bases_S8766C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8766C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8766C1[];
extern void _ZN7S8766C1D1Ev();
extern void _ZN7S8766C1D0Ev();
extern void _ZN7S8766C22v2Ev();
extern void _ZN7S8766C12v1Ev();
static  VTBL_ENTRY vtc_S8766C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8766C1[0]),
  (VTBL_ENTRY)&_ZN7S8766C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8766C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8766C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8766C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8766C1[];
extern  VTBL_ENTRY _ZTV7S8766C1[];
Class_Descriptor cd_S8766C1 = {  "S8766C1", // class name
  bases_S8766C1, 1,
  &(vtc_S8766C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S8766C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8766C1),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  S13984C2  {
  long s13984c2f0[2];
  char s13984c2f1[50];
};
//SIG(1 S13984C2) C1{ Fl[2] Fc[50]}



static void Test_S13984C2()
{
  {
    init_simple_test("S13984C2");
    S13984C2 lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S13984C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13984C2)");
    check_field_offset(lv, s13984c2f0, 0, "S13984C2.s13984c2f0");
    check_field_offset(lv, s13984c2f1, ABISELECT(16,8), "S13984C2.s13984c2f1");
  }
}
static Arrange_To_Call_Me vS13984C2(Test_S13984C2, "S13984C2", ABISELECT(72,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13984C1  {
  __tsi64 s13984c1f0[3];
  long s13984c1f1[3];
  char s13984c1f2;
  long s13984c1f3;
  ::S13984C2 s13984c1f4[2];
};
//SIG(1 S13984C1) C1{ FL[3] Fl[3] Fc Fl FC2{ Fl[2] Fc[50]}[2]}



static void Test_S13984C1()
{
  {
    init_simple_test("S13984C1");
    S13984C1 lv;
    check2(sizeof(lv), ABISELECT(208,164), "sizeof(S13984C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13984C1)");
    check_field_offset(lv, s13984c1f0, 0, "S13984C1.s13984c1f0");
    check_field_offset(lv, s13984c1f1, 24, "S13984C1.s13984c1f1");
    check_field_offset(lv, s13984c1f2, ABISELECT(48,36), "S13984C1.s13984c1f2");
    check_field_offset(lv, s13984c1f3, ABISELECT(56,40), "S13984C1.s13984c1f3");
    check_field_offset(lv, s13984c1f4, ABISELECT(64,44), "S13984C1.s13984c1f4");
  }
}
static Arrange_To_Call_Me vS13984C1(Test_S13984C1, "S13984C1", ABISELECT(208,164));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13706C3  {
  short s13706c3f0;
  char s13706c3f1[6];
  long s13706c3f2;
};
//SIG(-1 S13706C3) C1{ Fs Fc[6] Fl}



static void Test_S13706C3()
{
  {
    init_simple_test("S13706C3");
    S13706C3 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13706C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13706C3)");
    check_field_offset(lv, s13706c3f0, 0, "S13706C3.s13706c3f0");
    check_field_offset(lv, s13706c3f1, 2, "S13706C3.s13706c3f1");
    check_field_offset(lv, s13706c3f2, 8, "S13706C3.s13706c3f2");
  }
}
static Arrange_To_Call_Me vS13706C3(Test_S13706C3, "S13706C3", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13706C4  {
  __tsi64 s13706c4f0;
  long s13706c4f1;
};
//SIG(-1 S13706C4) C1{ FL Fl}



static void Test_S13706C4()
{
  {
    init_simple_test("S13706C4");
    S13706C4 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13706C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13706C4)");
    check_field_offset(lv, s13706c4f0, 0, "S13706C4.s13706c4f0");
    check_field_offset(lv, s13706c4f1, 8, "S13706C4.s13706c4f1");
  }
}
static Arrange_To_Call_Me vS13706C4(Test_S13706C4, "S13706C4", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13706C2  {
  __tsi64 s13706c2f0;
  ::S13706C3 s13706c2f1;
  ::S13706C4 s13706c2f2;
};
//SIG(-1 S13706C2) C1{ FL FC2{ Fs Fc[6] Fl} FC3{ FL Fl}}



static void Test_S13706C2()
{
  {
    init_simple_test("S13706C2");
    S13706C2 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S13706C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13706C2)");
    check_field_offset(lv, s13706c2f0, 0, "S13706C2.s13706c2f0");
    check_field_offset(lv, s13706c2f1, 8, "S13706C2.s13706c2f1");
    check_field_offset(lv, s13706c2f2, ABISELECT(24,20), "S13706C2.s13706c2f2");
  }
}
static Arrange_To_Call_Me vS13706C2(Test_S13706C2, "S13706C2", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13706C1  {
  __tsi64 s13706c1f0;
  ::S13706C2 s13706c1f1;
};
//SIG(1 S13706C1) C1{ FL FC2{ FL FC3{ Fs Fc[6] Fl} FC4{ FL Fl}}}



static void Test_S13706C1()
{
  {
    init_simple_test("S13706C1");
    S13706C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S13706C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13706C1)");
    check_field_offset(lv, s13706c1f0, 0, "S13706C1.s13706c1f0");
    check_field_offset(lv, s13706c1f1, 8, "S13706C1.s13706c1f1");
  }
}
static Arrange_To_Call_Me vS13706C1(Test_S13706C1, "S13706C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16256C1  {
  ::S21372C5_nt s16256c1f0;
  ::S2177C16 s16256c1f1;
  int s16256c1f2;
  ::S2177C16 s16256c1f3;
  void  mf16256c1(); // _ZN8S16256C19mf16256c1Ev
};
//SIG(1 S16256C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} Fi FC4}


void  S16256C1 ::mf16256c1(){}

static void Test_S16256C1()
{
  {
    init_simple_test("S16256C1");
    S16256C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S16256C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16256C1)");
    check_field_offset(lv, s16256c1f0, 0, "S16256C1.s16256c1f0");
    check_field_offset(lv, s16256c1f1, ABISELECT(16,12), "S16256C1.s16256c1f1");
    check_field_offset(lv, s16256c1f2, ABISELECT(24,16), "S16256C1.s16256c1f2");
    check_field_offset(lv, s16256c1f3, ABISELECT(32,20), "S16256C1.s16256c1f3");
  }
}
static Arrange_To_Call_Me vS16256C1(Test_S16256C1, "S16256C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6694C2  {
  void *s6694c2f0;
  int s6694c2f1;
  virtual void  v3(); // _ZN7S6694C22v3Ev
  virtual void  v4(); // _ZN7S6694C22v4Ev
  virtual void  v5(); // _ZN7S6694C22v5Ev
  virtual void  v6(); // _ZN7S6694C22v6Ev
  virtual void  v7(); // _ZN7S6694C22v7Ev
  virtual void  v8(); // _ZN7S6694C22v8Ev
  virtual void  v9(); // _ZN7S6694C22v9Ev
  ~S6694C2(); // tgen
  S6694C2(); // tgen
};
//SIG(-1 S6694C2) C1{ v1 v2 v3 v4 v5 v6 v7 Fp Fi}


void  S6694C2 ::v3(){vfunc_called(this, "_ZN7S6694C22v3Ev");}
void  S6694C2 ::v4(){vfunc_called(this, "_ZN7S6694C22v4Ev");}
void  S6694C2 ::v5(){vfunc_called(this, "_ZN7S6694C22v5Ev");}
void  S6694C2 ::v6(){vfunc_called(this, "_ZN7S6694C22v6Ev");}
void  S6694C2 ::v7(){vfunc_called(this, "_ZN7S6694C22v7Ev");}
void  S6694C2 ::v8(){vfunc_called(this, "_ZN7S6694C22v8Ev");}
void  S6694C2 ::v9(){vfunc_called(this, "_ZN7S6694C22v9Ev");}
S6694C2 ::~S6694C2(){ note_dtor("S6694C2", this);} // tgen
S6694C2 ::S6694C2(){ note_ctor("S6694C2", this);} // tgen

static void Test_S6694C2()
{
  extern Class_Descriptor cd_S6694C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6694C2, buf);
    S6694C2 *dp, &lv = *(dp=new (buf) S6694C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6694C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6694C2)");
    check_field_offset(lv, s6694c2f0, ABISELECT(8,4), "S6694C2.s6694c2f0");
    check_field_offset(lv, s6694c2f1, ABISELECT(16,8), "S6694C2.s6694c2f1");
    test_class_info(&lv, &cd_S6694C2);
    dp->~S6694C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6694C2(Test_S6694C2, "S6694C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6694C2C1Ev();
extern void _ZN7S6694C2D1Ev();
Name_Map name_map_S6694C2[] = {
  NSPAIR(_ZN7S6694C2C1Ev),
  NSPAIR(_ZN7S6694C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6694C2[];
extern void _ZN7S6694C22v3Ev();
extern void _ZN7S6694C22v4Ev();
extern void _ZN7S6694C22v5Ev();
extern void _ZN7S6694C22v6Ev();
extern void _ZN7S6694C22v7Ev();
extern void _ZN7S6694C22v8Ev();
extern void _ZN7S6694C22v9Ev();
static  VTBL_ENTRY vtc_S6694C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6694C2[0]),
  (VTBL_ENTRY)&_ZN7S6694C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S6694C2[];
extern  VTBL_ENTRY _ZTV7S6694C2[];
Class_Descriptor cd_S6694C2 = {  "S6694C2", // class name
  0,0,//no base classes
  &(vtc_S6694C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6694C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6694C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6694C1  : S6694C2 {
  virtual void  v1(); // _ZN7S6694C12v1Ev
  virtual void  v2(); // _ZN7S6694C12v2Ev
  ~S6694C1(); // tgen
  S6694C1(); // tgen
};
//SIG(1 S6694C1) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 Fp Fi} v1 v2}


void  S6694C1 ::v1(){vfunc_called(this, "_ZN7S6694C12v1Ev");}
void  S6694C1 ::v2(){vfunc_called(this, "_ZN7S6694C12v2Ev");}
S6694C1 ::~S6694C1(){ note_dtor("S6694C1", this);} // tgen
S6694C1 ::S6694C1(){ note_ctor("S6694C1", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6694C1C1Ev();
extern void _ZN7S6694C1D1Ev();
Name_Map name_map_S6694C1[] = {
  NSPAIR(_ZN7S6694C1C1Ev),
  NSPAIR(_ZN7S6694C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6694C2;
extern VTBL_ENTRY _ZTI7S6694C2[];
extern  VTBL_ENTRY _ZTV7S6694C2[];
static Base_Class bases_S6694C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6694C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6694C1[];
extern void _ZN7S6694C22v3Ev();
extern void _ZN7S6694C22v4Ev();
extern void _ZN7S6694C22v5Ev();
extern void _ZN7S6694C22v6Ev();
extern void _ZN7S6694C22v7Ev();
extern void _ZN7S6694C22v8Ev();
extern void _ZN7S6694C22v9Ev();
extern void _ZN7S6694C12v1Ev();
extern void _ZN7S6694C12v2Ev();
static  VTBL_ENTRY vtc_S6694C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6694C1[0]),
  (VTBL_ENTRY)&_ZN7S6694C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6694C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6694C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6694C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6694C1[];
extern  VTBL_ENTRY _ZTV7S6694C1[];
Class_Descriptor cd_S6694C1 = {  "S6694C1", // class name
  bases_S6694C1, 1,
  &(vtc_S6694C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6694C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6694C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17489C1  {
  void *s17489c1f0;
  ::S195C23_nt s17489c1f1;
  int s17489c1f2[3];
  void  mf17489c1(); // _ZN8S17489C19mf17489c1Ev
};
//SIG(1 S17489C1) C1{ m Fp FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[3]}


void  S17489C1 ::mf17489c1(){}

static void Test_S17489C1()
{
  {
    init_simple_test("S17489C1");
    S17489C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S17489C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17489C1)");
    check_field_offset(lv, s17489c1f0, 0, "S17489C1.s17489c1f0");
    check_field_offset(lv, s17489c1f1, ABISELECT(8,4), "S17489C1.s17489c1f1");
    check_field_offset(lv, s17489c1f2, ABISELECT(24,16), "S17489C1.s17489c1f2");
  }
}
static Arrange_To_Call_Me vS17489C1(Test_S17489C1, "S17489C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13325C1  {
  int s13325c1f0[3];
  char s13325c1f1[9];
  int s13325c1f2[2];
  char s13325c1f3;
  int s13325c1f4[3];
  short s13325c1f5[6];
  char s13325c1f6;
};
//SIG(1 S13325C1) C1{ Fi[3] Fc[9] Fi[2] Fc Fi[3] Fs[6] Fc}



static void Test_S13325C1()
{
  {
    init_simple_test("S13325C1");
    S13325C1 lv;
    check2(sizeof(lv), 64, "sizeof(S13325C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13325C1)");
    check_field_offset(lv, s13325c1f0, 0, "S13325C1.s13325c1f0");
    check_field_offset(lv, s13325c1f1, 12, "S13325C1.s13325c1f1");
    check_field_offset(lv, s13325c1f2, 24, "S13325C1.s13325c1f2");
    check_field_offset(lv, s13325c1f3, 32, "S13325C1.s13325c1f3");
    check_field_offset(lv, s13325c1f4, 36, "S13325C1.s13325c1f4");
    check_field_offset(lv, s13325c1f5, 48, "S13325C1.s13325c1f5");
    check_field_offset(lv, s13325c1f6, 60, "S13325C1.s13325c1f6");
  }
}
static Arrange_To_Call_Me vS13325C1(Test_S13325C1, "S13325C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8827C2_nt  {
  void *s8827c2f0;
  virtual  ~S8827C2_nt(); // _ZN10S8827C2_ntD1Ev
  virtual void  v2(); // _ZN10S8827C2_nt2v2Ev
  S8827C2_nt(); // tgen
};
//SIG(-1 S8827C2_nt) C1{ vd v1 Fp}


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

//skip512 S8827C2_nt

#else // __cplusplus

extern void _ZN10S8827C2_ntC1Ev();
extern void _ZN10S8827C2_ntD1Ev();
Name_Map name_map_S8827C2_nt[] = {
  NSPAIR(_ZN10S8827C2_ntC1Ev),
  NSPAIR(_ZN10S8827C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8827C2_nt[];
extern void _ZN10S8827C2_ntD1Ev();
extern void _ZN10S8827C2_ntD0Ev();
extern void _ZN10S8827C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8827C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8827C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8827C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8827C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8827C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8827C2_nt[];
VTBL_ENTRY *P__ZTI10S8827C2_nt = _ZTI10S8827C2_nt; 
extern  VTBL_ENTRY _ZTV10S8827C2_nt[];
Class_Descriptor cd_S8827C2_nt = {  "S8827C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8827C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8827C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8827C2_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  S8827C4_nt  {
  __tsi64 s8827c4f0;
  void  mf8827c4(); // _ZN10S8827C4_nt8mf8827c4Ev
};
//SIG(-1 S8827C4_nt) C1{ m FL}


void  S8827C4_nt ::mf8827c4(){}

//skip512 S8827C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8827C3_nt  {
  ::S8827C4_nt s8827c3f0;
  void  mf8827c3(); // _ZN10S8827C3_nt8mf8827c3Ev
};
//SIG(-1 S8827C3_nt) C1{ m FC2{ m FL}}


void  S8827C3_nt ::mf8827c3(){}

//skip512 S8827C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8827C1  : S8827C2_nt {
  ::S8827C3_nt s8827c1f0;
  void *s8827c1f1;
  virtual void  v1(); // _ZN7S8827C12v1Ev
  ~S8827C1(); // tgen
  S8827C1(); // tgen
};
//SIG(1 S8827C1) C1{ BC2{ vd v2 Fp} v1 FC3{ m FC4{ m FL}} Fp}


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

static void Test_S8827C1()
{
  extern Class_Descriptor cd_S8827C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S8827C1, buf);
    S8827C1 *dp, &lv = *(dp=new (buf) S8827C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S8827C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8827C1)");
    check_base_class_offset(lv, (S8827C2_nt*), 0, "S8827C1");
    check_field_offset(lv, s8827c1f0, ABISELECT(16,8), "S8827C1.s8827c1f0");
    check_field_offset(lv, s8827c1f1, ABISELECT(24,16), "S8827C1.s8827c1f1");
    test_class_info(&lv, &cd_S8827C1);
    dp->~S8827C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8827C1(Test_S8827C1, "S8827C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S8827C1C1Ev();
extern void _ZN7S8827C1D1Ev();
Name_Map name_map_S8827C1[] = {
  NSPAIR(_ZN7S8827C1C1Ev),
  NSPAIR(_ZN7S8827C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8827C2_nt;
extern VTBL_ENTRY _ZTI10S8827C2_nt[];
extern  VTBL_ENTRY _ZTV10S8827C2_nt[];
static Base_Class bases_S8827C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8827C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8827C1[];
extern void _ZN7S8827C1D1Ev();
extern void _ZN7S8827C1D0Ev();
extern void _ZN10S8827C2_nt2v2Ev();
extern void _ZN7S8827C12v1Ev();
static  VTBL_ENTRY vtc_S8827C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8827C1[0]),
  (VTBL_ENTRY)&_ZN7S8827C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8827C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8827C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8827C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8827C1[];
extern  VTBL_ENTRY _ZTV7S8827C1[];
Class_Descriptor cd_S8827C1 = {  "S8827C1", // class name
  bases_S8827C1, 1,
  &(vtc_S8827C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S8827C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8827C1),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  S16200C1  {
  ::S21372C5_nt s16200c1f0;
  ::S21372C5_nt s16200c1f1;
  char s16200c1f2;
  void *s16200c1f3[2];
  void  mf16200c1(); // _ZN8S16200C19mf16200c1Ev
};
//SIG(1 S16200C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 Fc Fp[2]}


void  S16200C1 ::mf16200c1(){}

static void Test_S16200C1()
{
  {
    init_simple_test("S16200C1");
    S16200C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S16200C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16200C1)");
    check_field_offset(lv, s16200c1f0, 0, "S16200C1.s16200c1f0");
    check_field_offset(lv, s16200c1f1, ABISELECT(16,12), "S16200C1.s16200c1f1");
    check_field_offset(lv, s16200c1f2, ABISELECT(32,24), "S16200C1.s16200c1f2");
    check_field_offset(lv, s16200c1f3, ABISELECT(40,28), "S16200C1.s16200c1f3");
  }
}
static Arrange_To_Call_Me vS16200C1(Test_S16200C1, "S16200C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8909C2_nt  {
  void *s8909c2f0;
  virtual  ~S8909C2_nt(); // _ZN10S8909C2_ntD1Ev
  virtual void  v2(); // _ZN10S8909C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8909C2_nt2v3Ev
  S8909C2_nt(); // tgen
};
//SIG(-1 S8909C2_nt) C1{ vd v1 v2 Fp}


 S8909C2_nt ::~S8909C2_nt(){ note_dtor("S8909C2_nt", this);}
void  S8909C2_nt ::v2(){vfunc_called(this, "_ZN10S8909C2_nt2v2Ev");}
void  S8909C2_nt ::v3(){vfunc_called(this, "_ZN10S8909C2_nt2v3Ev");}
S8909C2_nt ::S8909C2_nt(){ note_ctor("S8909C2_nt", this);} // tgen

//skip512 S8909C2_nt

#else // __cplusplus

extern void _ZN10S8909C2_ntC1Ev();
extern void _ZN10S8909C2_ntD1Ev();
Name_Map name_map_S8909C2_nt[] = {
  NSPAIR(_ZN10S8909C2_ntC1Ev),
  NSPAIR(_ZN10S8909C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8909C2_nt[];
extern void _ZN10S8909C2_ntD1Ev();
extern void _ZN10S8909C2_ntD0Ev();
extern void _ZN10S8909C2_nt2v2Ev();
extern void _ZN10S8909C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S8909C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8909C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8909C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8909C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8909C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8909C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S8909C2_nt[];
VTBL_ENTRY *P__ZTI10S8909C2_nt = _ZTI10S8909C2_nt; 
extern  VTBL_ENTRY _ZTV10S8909C2_nt[];
Class_Descriptor cd_S8909C2_nt = {  "S8909C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8909C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8909C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8909C2_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  S8909C1  : S8909C2_nt {
  void *s8909c1f0;
  int s8909c1f1;
  void *s8909c1f2[2];
  virtual  ~S8909C1(); // _ZN7S8909C1D1Ev
  virtual void  v1(); // _ZN7S8909C12v1Ev
  S8909C1(); // tgen
};
//SIG(1 S8909C1) C1{ BC2{ vd v2 v3 Fp} vd v1 Fp Fi Fp[2]}


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

static void Test_S8909C1()
{
  extern Class_Descriptor cd_S8909C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S8909C1, buf);
    S8909C1 *dp, &lv = *(dp=new (buf) S8909C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S8909C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8909C1)");
    check_base_class_offset(lv, (S8909C2_nt*), 0, "S8909C1");
    check_field_offset(lv, s8909c1f0, ABISELECT(16,8), "S8909C1.s8909c1f0");
    check_field_offset(lv, s8909c1f1, ABISELECT(24,12), "S8909C1.s8909c1f1");
    check_field_offset(lv, s8909c1f2, ABISELECT(32,16), "S8909C1.s8909c1f2");
    test_class_info(&lv, &cd_S8909C1);
    dp->~S8909C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8909C1(Test_S8909C1, "S8909C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S8909C1C1Ev();
extern void _ZN7S8909C1D1Ev();
Name_Map name_map_S8909C1[] = {
  NSPAIR(_ZN7S8909C1C1Ev),
  NSPAIR(_ZN7S8909C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8909C2_nt;
extern VTBL_ENTRY _ZTI10S8909C2_nt[];
extern  VTBL_ENTRY _ZTV10S8909C2_nt[];
static Base_Class bases_S8909C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8909C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8909C1[];
extern void _ZN7S8909C1D1Ev();
extern void _ZN7S8909C1D0Ev();
extern void _ZN10S8909C2_nt2v2Ev();
extern void _ZN10S8909C2_nt2v3Ev();
extern void _ZN7S8909C12v1Ev();
static  VTBL_ENTRY vtc_S8909C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8909C1[0]),
  (VTBL_ENTRY)&_ZN7S8909C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8909C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8909C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8909C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN7S8909C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8909C1[];
extern  VTBL_ENTRY _ZTV7S8909C1[];
Class_Descriptor cd_S8909C1 = {  "S8909C1", // class name
  bases_S8909C1, 1,
  &(vtc_S8909C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S8909C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8909C1),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  S17746C1  {
  void *s17746c1f0;
  int s17746c1f1;
  void *s17746c1f2;
  int s17746c1f3;
  void *s17746c1f4[5];
  int s17746c1f5[11];
  void *s17746c1f6;
  int s17746c1f7;
  void  mf17746c1(); // _ZN8S17746C19mf17746c1Ev
};
//SIG(1 S17746C1) C1{ m Fp Fi Fp Fi Fp[5] Fi[11] Fp Fi}


void  S17746C1 ::mf17746c1(){}

static void Test_S17746C1()
{
  {
    init_simple_test("S17746C1");
    S17746C1 lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S17746C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17746C1)");
    check_field_offset(lv, s17746c1f0, 0, "S17746C1.s17746c1f0");
    check_field_offset(lv, s17746c1f1, ABISELECT(8,4), "S17746C1.s17746c1f1");
    check_field_offset(lv, s17746c1f2, ABISELECT(16,8), "S17746C1.s17746c1f2");
    check_field_offset(lv, s17746c1f3, ABISELECT(24,12), "S17746C1.s17746c1f3");
    check_field_offset(lv, s17746c1f4, ABISELECT(32,16), "S17746C1.s17746c1f4");
    check_field_offset(lv, s17746c1f5, ABISELECT(72,36), "S17746C1.s17746c1f5");
    check_field_offset(lv, s17746c1f6, ABISELECT(120,80), "S17746C1.s17746c1f6");
    check_field_offset(lv, s17746c1f7, ABISELECT(128,84), "S17746C1.s17746c1f7");
  }
}
static Arrange_To_Call_Me vS17746C1(Test_S17746C1, "S17746C1", ABISELECT(136,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13924C1  {
  long s13924c1f0[2];
  int s13924c1f1;
  long s13924c1f2;
  int s13924c1f3[2];
  long s13924c1f4;
  __tsi64 s13924c1f5[4];
  long s13924c1f6[2];
};
//SIG(1 S13924C1) C1{ Fl[2] Fi Fl Fi[2] Fl FL[4] Fl[2]}



static void Test_S13924C1()
{
  {
    init_simple_test("S13924C1");
    S13924C1 lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S13924C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13924C1)");
    check_field_offset(lv, s13924c1f0, 0, "S13924C1.s13924c1f0");
    check_field_offset(lv, s13924c1f1, ABISELECT(16,8), "S13924C1.s13924c1f1");
    check_field_offset(lv, s13924c1f2, ABISELECT(24,12), "S13924C1.s13924c1f2");
    check_field_offset(lv, s13924c1f3, ABISELECT(32,16), "S13924C1.s13924c1f3");
    check_field_offset(lv, s13924c1f4, ABISELECT(40,24), "S13924C1.s13924c1f4");
    check_field_offset(lv, s13924c1f5, ABISELECT(48,28), "S13924C1.s13924c1f5");
    check_field_offset(lv, s13924c1f6, ABISELECT(80,60), "S13924C1.s13924c1f6");
  }
}
static Arrange_To_Call_Me vS13924C1(Test_S13924C1, "S13924C1", ABISELECT(96,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6116C3  {
  __tsi64 s6116c3f0;
  virtual void  v1(); // _ZN7S6116C32v1Ev
  ~S6116C3(); // tgen
  S6116C3(); // tgen
};
//SIG(-1 S6116C3) C1{ v1 FL}


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

static void Test_S6116C3()
{
  extern Class_Descriptor cd_S6116C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6116C3, buf);
    S6116C3 *dp, &lv = *(dp=new (buf) S6116C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6116C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6116C3)");
    check_field_offset(lv, s6116c3f0, ABISELECT(8,4), "S6116C3.s6116c3f0");
    test_class_info(&lv, &cd_S6116C3);
    dp->~S6116C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6116C3(Test_S6116C3, "S6116C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S6116C3C1Ev();
extern void _ZN7S6116C3D1Ev();
Name_Map name_map_S6116C3[] = {
  NSPAIR(_ZN7S6116C3C1Ev),
  NSPAIR(_ZN7S6116C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6116C3[];
extern void _ZN7S6116C32v1Ev();
static  VTBL_ENTRY vtc_S6116C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6116C3[0]),
  (VTBL_ENTRY)&_ZN7S6116C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S6116C3[];
extern  VTBL_ENTRY _ZTV7S6116C3[];
Class_Descriptor cd_S6116C3 = {  "S6116C3", // class name
  0,0,//no base classes
  &(vtc_S6116C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6116C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6116C3),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  S6116C1  : S2382C30 , S6116C3 {
  int s6116c1f0;
  ::S2177C16 s6116c1f1;
  virtual  ~S6116C1(); // _ZN7S6116C1D1Ev
  S6116C1(); // tgen
};
//SIG(1 S6116C1) C1{ BC2{ m} BC3{ v1 FL} vd Fi FC4{ m Fp}}


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

static void Test_S6116C1()
{
  extern Class_Descriptor cd_S6116C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6116C1, buf);
    S6116C1 *dp, &lv = *(dp=new (buf) S6116C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6116C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6116C1)");
    check_base_class_offset(lv, (S2382C30*), 0, "S6116C1");
    check_base_class_offset(lv, (S6116C3*), 0, "S6116C1");
    check_field_offset(lv, s6116c1f0, ABISELECT(16,12), "S6116C1.s6116c1f0");
    check_field_offset(lv, s6116c1f1, ABISELECT(24,16), "S6116C1.s6116c1f1");
    test_class_info(&lv, &cd_S6116C1);
    dp->~S6116C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6116C1(Test_S6116C1, "S6116C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S6116C1C1Ev();
extern void _ZN7S6116C1D1Ev();
Name_Map name_map_S6116C1[] = {
  NSPAIR(_ZN7S6116C1C1Ev),
  NSPAIR(_ZN7S6116C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
extern Class_Descriptor cd_S6116C3;
extern VTBL_ENTRY _ZTI7S6116C3[];
extern  VTBL_ENTRY _ZTV7S6116C3[];
static Base_Class bases_S6116C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6116C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6116C1[];
extern void _ZN7S6116C32v1Ev();
extern void _ZN7S6116C1D1Ev();
extern void _ZN7S6116C1D0Ev();
static  VTBL_ENTRY vtc_S6116C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6116C1[0]),
  (VTBL_ENTRY)&_ZN7S6116C32v1Ev,
  (VTBL_ENTRY)&_ZN7S6116C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6116C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6116C1[];
extern  VTBL_ENTRY _ZTV7S6116C1[];
Class_Descriptor cd_S6116C1 = {  "S6116C1", // class name
  bases_S6116C1, 2,
  &(vtc_S6116C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S6116C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6116C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10424C1  {
  __tsi64 s10424c1f0;
  __tsi64 s10424c1f1;
  __tsi64 s10424c1f2;
  __tsi64 s10424c1f3;
  __tsi64 s10424c1f4;
  char s10424c1f5[16];
  __tsi64 s10424c1f6;
};
//SIG(1 S10424C1) C1{ FL[5] Fc[16] FL}



static void Test_S10424C1()
{
  {
    init_simple_test("S10424C1");
    S10424C1 lv;
    check2(sizeof(lv), 64, "sizeof(S10424C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10424C1)");
    check_field_offset(lv, s10424c1f0, 0, "S10424C1.s10424c1f0");
    check_field_offset(lv, s10424c1f1, 8, "S10424C1.s10424c1f1");
    check_field_offset(lv, s10424c1f2, 16, "S10424C1.s10424c1f2");
    check_field_offset(lv, s10424c1f3, 24, "S10424C1.s10424c1f3");
    check_field_offset(lv, s10424c1f4, 32, "S10424C1.s10424c1f4");
    check_field_offset(lv, s10424c1f5, 40, "S10424C1.s10424c1f5");
    check_field_offset(lv, s10424c1f6, 56, "S10424C1.s10424c1f6");
  }
}
static Arrange_To_Call_Me vS10424C1(Test_S10424C1, "S10424C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12062C1  {
  ::S100C8_nt s12062c1f0;
  void *s12062c1f1;
  int s12062c1f2;
  ::S100C23_nt s12062c1f3;
};
//SIG(1 S12062C1) C1{ FC2{ m Fi[2]} Fp Fi FC3{ m Fi[4]}}



static void Test_S12062C1()
{
  {
    init_simple_test("S12062C1");
    S12062C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S12062C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12062C1)");
    check_field_offset(lv, s12062c1f0, 0, "S12062C1.s12062c1f0");
    check_field_offset(lv, s12062c1f1, 8, "S12062C1.s12062c1f1");
    check_field_offset(lv, s12062c1f2, ABISELECT(16,12), "S12062C1.s12062c1f2");
    check_field_offset(lv, s12062c1f3, ABISELECT(20,16), "S12062C1.s12062c1f3");
  }
}
static Arrange_To_Call_Me vS12062C1(Test_S12062C1, "S12062C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9032C2  {
  virtual  ~S9032C2(); // _ZN7S9032C2D1Ev
  virtual void  v2(); // _ZN7S9032C22v2Ev
  S9032C2(); // tgen
};
//SIG(-1 S9032C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9032C2C1Ev();
extern void _ZN7S9032C2D1Ev();
Name_Map name_map_S9032C2[] = {
  NSPAIR(_ZN7S9032C2C1Ev),
  NSPAIR(_ZN7S9032C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9032C2[];
extern void _ZN7S9032C2D1Ev();
extern void _ZN7S9032C2D0Ev();
extern void _ZN7S9032C22v2Ev();
static  VTBL_ENTRY vtc_S9032C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9032C2[0]),
  (VTBL_ENTRY)&_ZN7S9032C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9032C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9032C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9032C2[];
extern  VTBL_ENTRY _ZTV7S9032C2[];
Class_Descriptor cd_S9032C2 = {  "S9032C2", // class name
  0,0,//no base classes
  &(vtc_S9032C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9032C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9032C2),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  S9032C1  : S9032C2 {
  ::S5073C8_nt s9032c1f0;
  __tsi64 s9032c1f1;
  int s9032c1f2;
  virtual void  v1(); // _ZN7S9032C12v1Ev
  ~S9032C1(); // tgen
  S9032C1(); // tgen
};
//SIG(1 S9032C1) C1{ BC2{ vd v2} v1 FC3{ m Fp[2]} FL Fi}


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

static void Test_S9032C1()
{
  extern Class_Descriptor cd_S9032C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S9032C1, buf);
    S9032C1 *dp, &lv = *(dp=new (buf) S9032C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S9032C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9032C1)");
    check_base_class_offset(lv, (S9032C2*), 0, "S9032C1");
    check_field_offset(lv, s9032c1f0, ABISELECT(8,4), "S9032C1.s9032c1f0");
    check_field_offset(lv, s9032c1f1, ABISELECT(24,12), "S9032C1.s9032c1f1");
    check_field_offset(lv, s9032c1f2, ABISELECT(32,20), "S9032C1.s9032c1f2");
    test_class_info(&lv, &cd_S9032C1);
    dp->~S9032C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9032C1(Test_S9032C1, "S9032C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S9032C1C1Ev();
extern void _ZN7S9032C1D1Ev();
Name_Map name_map_S9032C1[] = {
  NSPAIR(_ZN7S9032C1C1Ev),
  NSPAIR(_ZN7S9032C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9032C2;
extern VTBL_ENTRY _ZTI7S9032C2[];
extern  VTBL_ENTRY _ZTV7S9032C2[];
static Base_Class bases_S9032C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9032C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9032C1[];
extern void _ZN7S9032C1D1Ev();
extern void _ZN7S9032C1D0Ev();
extern void _ZN7S9032C22v2Ev();
extern void _ZN7S9032C12v1Ev();
static  VTBL_ENTRY vtc_S9032C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9032C1[0]),
  (VTBL_ENTRY)&_ZN7S9032C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9032C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9032C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9032C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9032C1[];
extern  VTBL_ENTRY _ZTV7S9032C1[];
Class_Descriptor cd_S9032C1 = {  "S9032C1", // class name
  bases_S9032C1, 1,
  &(vtc_S9032C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S9032C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9032C1),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  S13203C1  {
  int s13203c1f0[2];
  void *s13203c1f1;
  int s13203c1f2[2];
  void *s13203c1f3[2];
  int s13203c1f4;
  void *s13203c1f5;
  int s13203c1f6;
};
//SIG(1 S13203C1) C1{ Fi[2] Fp Fi[2] Fp[2] Fi Fp Fi}



static void Test_S13203C1()
{
  {
    init_simple_test("S13203C1");
    S13203C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S13203C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13203C1)");
    check_field_offset(lv, s13203c1f0, 0, "S13203C1.s13203c1f0");
    check_field_offset(lv, s13203c1f1, 8, "S13203C1.s13203c1f1");
    check_field_offset(lv, s13203c1f2, ABISELECT(16,12), "S13203C1.s13203c1f2");
    check_field_offset(lv, s13203c1f3, ABISELECT(24,20), "S13203C1.s13203c1f3");
    check_field_offset(lv, s13203c1f4, ABISELECT(40,28), "S13203C1.s13203c1f4");
    check_field_offset(lv, s13203c1f5, ABISELECT(48,32), "S13203C1.s13203c1f5");
    check_field_offset(lv, s13203c1f6, ABISELECT(56,36), "S13203C1.s13203c1f6");
  }
}
static Arrange_To_Call_Me vS13203C1(Test_S13203C1, "S13203C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13983C1  {
  __tsi64 s13983c1f0[3];
  long s13983c1f1;
  ::S13984C2 s13983c1f2[2];
};
//SIG(1 S13983C1) C1{ FL[3] Fl FC2{ Fl[2] Fc[50]}[2]}



static void Test_S13983C1()
{
  {
    init_simple_test("S13983C1");
    S13983C1 lv;
    check2(sizeof(lv), ABISELECT(176,148), "sizeof(S13983C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13983C1)");
    check_field_offset(lv, s13983c1f0, 0, "S13983C1.s13983c1f0");
    check_field_offset(lv, s13983c1f1, 24, "S13983C1.s13983c1f1");
    check_field_offset(lv, s13983c1f2, ABISELECT(32,28), "S13983C1.s13983c1f2");
  }
}
static Arrange_To_Call_Me vS13983C1(Test_S13983C1, "S13983C1", ABISELECT(176,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12442C1  {
  int s12442c1f0;
  ::S8379C6_nt s12442c1f1;
  char s12442c1f2[72];
  int s12442c1f3;
  void *s12442c1f4[3];
};
//SIG(1 S12442C1) C1{ Fi FC2{ Fi[2]} Fc[72] Fi Fp[3]}



static void Test_S12442C1()
{
  {
    init_simple_test("S12442C1");
    S12442C1 lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S12442C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12442C1)");
    check_field_offset(lv, s12442c1f0, 0, "S12442C1.s12442c1f0");
    check_field_offset(lv, s12442c1f1, 4, "S12442C1.s12442c1f1");
    check_field_offset(lv, s12442c1f2, 12, "S12442C1.s12442c1f2");
    check_field_offset(lv, s12442c1f3, 84, "S12442C1.s12442c1f3");
    check_field_offset(lv, s12442c1f4, 88, "S12442C1.s12442c1f4");
  }
}
static Arrange_To_Call_Me vS12442C1(Test_S12442C1, "S12442C1", ABISELECT(112,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17056C2_nt  {
  __tsi64 s17056c2f0;
};
//SIG(-1 S17056C2_nt) C1{ FL}



//skip512 S17056C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17056C1  {
  int s17056c1f0[2];
  char s17056c1f1;
  int s17056c1f2[3];
  __tsi64 s17056c1f3;
  ::S17056C2_nt s17056c1f4;
  void  mf17056c1(); // _ZN8S17056C19mf17056c1Ev
};
//SIG(1 S17056C1) C1{ m Fi[2] Fc Fi[3] FL FC2{ FL}}


void  S17056C1 ::mf17056c1(){}

static void Test_S17056C1()
{
  {
    init_simple_test("S17056C1");
    S17056C1 lv;
    check2(sizeof(lv), 40, "sizeof(S17056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17056C1)");
    check_field_offset(lv, s17056c1f0, 0, "S17056C1.s17056c1f0");
    check_field_offset(lv, s17056c1f1, 8, "S17056C1.s17056c1f1");
    check_field_offset(lv, s17056c1f2, 12, "S17056C1.s17056c1f2");
    check_field_offset(lv, s17056c1f3, 24, "S17056C1.s17056c1f3");
    check_field_offset(lv, s17056c1f4, 32, "S17056C1.s17056c1f4");
  }
}
static Arrange_To_Call_Me vS17056C1(Test_S17056C1, "S17056C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12709C1  {
  int s12709c1f0;
  void *s12709c1f1;
  int s12709c1f2[3];
  char s12709c1f3[4];
  ::S21372C2_nt s12709c1f4;
  int s12709c1f5;
};
//SIG(1 S12709C1) C1{ Fi Fp Fi[3] Fc[4] FC2{ Fl} Fi}



static void Test_S12709C1()
{
  {
    init_simple_test("S12709C1");
    S12709C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S12709C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12709C1)");
    check_field_offset(lv, s12709c1f0, 0, "S12709C1.s12709c1f0");
    check_field_offset(lv, s12709c1f1, ABISELECT(8,4), "S12709C1.s12709c1f1");
    check_field_offset(lv, s12709c1f2, ABISELECT(16,8), "S12709C1.s12709c1f2");
    check_field_offset(lv, s12709c1f3, ABISELECT(28,20), "S12709C1.s12709c1f3");
    check_field_offset(lv, s12709c1f4, ABISELECT(32,24), "S12709C1.s12709c1f4");
    check_field_offset(lv, s12709c1f5, ABISELECT(40,28), "S12709C1.s12709c1f5");
  }
}
static Arrange_To_Call_Me vS12709C1(Test_S12709C1, "S12709C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8227C1  : S10295C3_nt {
  void *s8227c1f0;
  int s8227c1f1;
  void *s8227c1f2[4];
  virtual  ~S8227C1(); // _ZN7S8227C1D1Ev
  S8227C1(); // tgen
};
//SIG(1 S8227C1) C1{ BC2{ vd m Fp} vd Fp Fi Fp[4]}


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

static void Test_S8227C1()
{
  extern Class_Descriptor cd_S8227C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S8227C1, buf);
    S8227C1 *dp, &lv = *(dp=new (buf) S8227C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S8227C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8227C1)");
    check_base_class_offset(lv, (S10295C3_nt*), 0, "S8227C1");
    check_field_offset(lv, s8227c1f0, ABISELECT(16,8), "S8227C1.s8227c1f0");
    check_field_offset(lv, s8227c1f1, ABISELECT(24,12), "S8227C1.s8227c1f1");
    check_field_offset(lv, s8227c1f2, ABISELECT(32,16), "S8227C1.s8227c1f2");
    test_class_info(&lv, &cd_S8227C1);
    dp->~S8227C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8227C1(Test_S8227C1, "S8227C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S8227C1C1Ev();
extern void _ZN7S8227C1D1Ev();
Name_Map name_map_S8227C1[] = {
  NSPAIR(_ZN7S8227C1C1Ev),
  NSPAIR(_ZN7S8227C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10295C3_nt;
extern VTBL_ENTRY _ZTI11S10295C3_nt[];
extern  VTBL_ENTRY _ZTV11S10295C3_nt[];
static Base_Class bases_S8227C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10295C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8227C1[];
extern void _ZN7S8227C1D1Ev();
extern void _ZN7S8227C1D0Ev();
static  VTBL_ENTRY vtc_S8227C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8227C1[0]),
  (VTBL_ENTRY)&_ZN7S8227C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8227C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8227C1[];
extern  VTBL_ENTRY _ZTV7S8227C1[];
Class_Descriptor cd_S8227C1 = {  "S8227C1", // class name
  bases_S8227C1, 1,
  &(vtc_S8227C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S8227C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8227C1),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  S12238C1  {
  int s12238c1f0;
  char s12238c1f1[2];
  int s12238c1f2;
  ::S100C8_nt s12238c1f3;
  char s12238c1f4;
};
//SIG(1 S12238C1) C1{ Fi Fc[2] Fi FC2{ m Fi[2]} Fc}



static void Test_S12238C1()
{
  {
    init_simple_test("S12238C1");
    S12238C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12238C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12238C1)");
    check_field_offset(lv, s12238c1f0, 0, "S12238C1.s12238c1f0");
    check_field_offset(lv, s12238c1f1, 4, "S12238C1.s12238c1f1");
    check_field_offset(lv, s12238c1f2, 8, "S12238C1.s12238c1f2");
    check_field_offset(lv, s12238c1f3, 12, "S12238C1.s12238c1f3");
    check_field_offset(lv, s12238c1f4, 20, "S12238C1.s12238c1f4");
  }
}
static Arrange_To_Call_Me vS12238C1(Test_S12238C1, "S12238C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18800C1  {
  int s18800c1f0;
  char s18800c1f1;
  virtual void  v1(); // _ZN8S18800C12v1Ev
  virtual void  v2(); // _ZN8S18800C12v2Ev
  virtual void  v3(); // _ZN8S18800C12v3Ev
  virtual void  v4(); // _ZN8S18800C12v4Ev
  virtual void  v5(); // _ZN8S18800C12v5Ev
  virtual void  v6(); // _ZN8S18800C12v6Ev
  virtual void  v7(); // _ZN8S18800C12v7Ev
  ~S18800C1(); // tgen
  S18800C1(); // tgen
};
//SIG(1 S18800C1) C1{ v1 v2 v3 v4 v5 v6 v7 Fi Fc}


void  S18800C1 ::v1(){vfunc_called(this, "_ZN8S18800C12v1Ev");}
void  S18800C1 ::v2(){vfunc_called(this, "_ZN8S18800C12v2Ev");}
void  S18800C1 ::v3(){vfunc_called(this, "_ZN8S18800C12v3Ev");}
void  S18800C1 ::v4(){vfunc_called(this, "_ZN8S18800C12v4Ev");}
void  S18800C1 ::v5(){vfunc_called(this, "_ZN8S18800C12v5Ev");}
void  S18800C1 ::v6(){vfunc_called(this, "_ZN8S18800C12v6Ev");}
void  S18800C1 ::v7(){vfunc_called(this, "_ZN8S18800C12v7Ev");}
S18800C1 ::~S18800C1(){ note_dtor("S18800C1", this);} // tgen
S18800C1 ::S18800C1(){ note_ctor("S18800C1", this);} // tgen

static void Test_S18800C1()
{
  extern Class_Descriptor cd_S18800C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18800C1, buf);
    S18800C1 *dp, &lv = *(dp=new (buf) S18800C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18800C1)");
    check_field_offset(lv, s18800c1f0, ABISELECT(8,4), "S18800C1.s18800c1f0");
    check_field_offset(lv, s18800c1f1, ABISELECT(12,8), "S18800C1.s18800c1f1");
    test_class_info(&lv, &cd_S18800C1);
    dp->~S18800C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18800C1(Test_S18800C1, "S18800C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18800C1C1Ev();
extern void _ZN8S18800C1D1Ev();
Name_Map name_map_S18800C1[] = {
  NSPAIR(_ZN8S18800C1C1Ev),
  NSPAIR(_ZN8S18800C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18800C1[];
extern void _ZN8S18800C12v1Ev();
extern void _ZN8S18800C12v2Ev();
extern void _ZN8S18800C12v3Ev();
extern void _ZN8S18800C12v4Ev();
extern void _ZN8S18800C12v5Ev();
extern void _ZN8S18800C12v6Ev();
extern void _ZN8S18800C12v7Ev();
static  VTBL_ENTRY vtc_S18800C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18800C1[0]),
  (VTBL_ENTRY)&_ZN8S18800C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18800C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18800C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18800C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18800C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18800C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18800C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S18800C1[];
extern  VTBL_ENTRY _ZTV8S18800C1[];
Class_Descriptor cd_S18800C1 = {  "S18800C1", // class name
  0,0,//no base classes
  &(vtc_S18800C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18800C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18800C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16397C1  {
  ::S8379C5 s16397c1f0;
  int s16397c1f1;
  void  mf16397c1(); // _ZN8S16397C19mf16397c1Ev
};
//SIG(1 S16397C1) C1{ m FC2{ m Fp[3] Fi[2] Fp} Fi}


void  S16397C1 ::mf16397c1(){}

static void Test_S16397C1()
{
  {
    init_simple_test("S16397C1");
    S16397C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16397C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16397C1)");
    check_field_offset(lv, s16397c1f0, 0, "S16397C1.s16397c1f0");
    check_field_offset(lv, s16397c1f1, ABISELECT(40,24), "S16397C1.s16397c1f1");
  }
}
static Arrange_To_Call_Me vS16397C1(Test_S16397C1, "S16397C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18271C1  {
  void *s18271c1f0[3];
  ::S2200C5_nt s18271c1f1;
  char s18271c1f2[2];
  void  mf18271c1(); // _ZN8S18271C19mf18271c1Ev
};
//SIG(1 S18271C1) C1{ m Fp[3] FC2{ m FL Fp} Fc[2]}


void  S18271C1 ::mf18271c1(){}

static void Test_S18271C1()
{
  {
    init_simple_test("S18271C1");
    S18271C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S18271C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18271C1)");
    check_field_offset(lv, s18271c1f0, 0, "S18271C1.s18271c1f0");
    check_field_offset(lv, s18271c1f1, ABISELECT(24,12), "S18271C1.s18271c1f1");
    check_field_offset(lv, s18271c1f2, ABISELECT(40,24), "S18271C1.s18271c1f2");
  }
}
static Arrange_To_Call_Me vS18271C1(Test_S18271C1, "S18271C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15954C1  {
  ::S16731C2_nt s15954c1f0[20];
  int s15954c1f1[21];
  void  mf15954c1(); // _ZN8S15954C19mf15954c1Ev
};
//SIG(1 S15954C1) C1{ m FC2{ m Fi Fp}[20] Fi[21]}


void  S15954C1 ::mf15954c1(){}

static void Test_S15954C1()
{
  {
    init_simple_test("S15954C1");
    S15954C1 lv;
    check2(sizeof(lv), ABISELECT(408,244), "sizeof(S15954C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15954C1)");
    check_field_offset(lv, s15954c1f0, 0, "S15954C1.s15954c1f0");
    check_field_offset(lv, s15954c1f1, ABISELECT(320,160), "S15954C1.s15954c1f1");
  }
}
static Arrange_To_Call_Me vS15954C1(Test_S15954C1, "S15954C1", ABISELECT(408,244));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18247C1  {
  void *s18247c1f0[3];
  ::S16731C2_nt s18247c1f1;
  char s18247c1f2[2];
  void  mf18247c1(); // _ZN8S18247C19mf18247c1Ev
};
//SIG(1 S18247C1) C1{ m Fp[3] FC2{ m Fi Fp} Fc[2]}


void  S18247C1 ::mf18247c1(){}

static void Test_S18247C1()
{
  {
    init_simple_test("S18247C1");
    S18247C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S18247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18247C1)");
    check_field_offset(lv, s18247c1f0, 0, "S18247C1.s18247c1f0");
    check_field_offset(lv, s18247c1f1, ABISELECT(24,12), "S18247C1.s18247c1f1");
    check_field_offset(lv, s18247c1f2, ABISELECT(40,20), "S18247C1.s18247c1f2");
  }
}
static Arrange_To_Call_Me vS18247C1(Test_S18247C1, "S18247C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6591C2  {
  void *s6591c2f0;
  virtual  ~S6591C2(); // _ZN7S6591C2D1Ev
  virtual void  v2(); // _ZN7S6591C22v2Ev
  S6591C2(); // tgen
};
//SIG(-1 S6591C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN7S6591C2C1Ev();
extern void _ZN7S6591C2D1Ev();
Name_Map name_map_S6591C2[] = {
  NSPAIR(_ZN7S6591C2C1Ev),
  NSPAIR(_ZN7S6591C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6591C2[];
extern void _ZN7S6591C2D1Ev();
extern void _ZN7S6591C2D0Ev();
extern void _ZN7S6591C22v2Ev();
static  VTBL_ENTRY vtc_S6591C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6591C2[0]),
  (VTBL_ENTRY)&_ZN7S6591C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6591C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6591C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6591C2[];
extern  VTBL_ENTRY _ZTV7S6591C2[];
Class_Descriptor cd_S6591C2 = {  "S6591C2", // class name
  0,0,//no base classes
  &(vtc_S6591C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6591C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6591C2),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  S6591C1  : S6591C2 , S8379C2_nt {
  virtual void  v1(); // _ZN7S6591C12v1Ev
  ~S6591C1(); // tgen
  S6591C1(); // tgen
};
//SIG(1 S6591C1) C1{ BC2{ vd v2 Fp} BC3{ vd m} v1}


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

static void Test_S6591C1()
{
  extern Class_Descriptor cd_S6591C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6591C1, buf);
    S6591C1 *dp, &lv = *(dp=new (buf) S6591C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6591C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6591C1)");
    check_base_class_offset(lv, (S6591C2*), 0, "S6591C1");
    check_base_class_offset(lv, (S8379C2_nt*), ABISELECT(16,8), "S6591C1");
    test_class_info(&lv, &cd_S6591C1);
    dp->~S6591C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6591C1(Test_S6591C1, "S6591C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6591C1C1Ev();
extern void _ZN7S6591C1D1Ev();
Name_Map name_map_S6591C1[] = {
  NSPAIR(_ZN7S6591C1C1Ev),
  NSPAIR(_ZN7S6591C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6591C2;
extern VTBL_ENTRY _ZTI7S6591C2[];
extern  VTBL_ENTRY _ZTV7S6591C2[];
extern Class_Descriptor cd_S8379C2_nt;
extern VTBL_ENTRY _ZTI10S8379C2_nt[];
extern  VTBL_ENTRY _ZTV10S8379C2_nt[];
static Base_Class bases_S6591C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6591C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8379C2_nt,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6591C1[];
extern void _ZN7S6591C1D1Ev();
extern void _ZN7S6591C1D0Ev();
extern void _ZN7S6591C22v2Ev();
extern void _ZN7S6591C12v1Ev();
extern void ABISELECT(_ZThn16_N7S6591C1D1Ev,_ZThn8_N7S6591C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S6591C1D0Ev,_ZThn8_N7S6591C1D0Ev)();
static  VTBL_ENTRY vtc_S6591C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6591C1[0]),
  (VTBL_ENTRY)&_ZN7S6591C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6591C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6591C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6591C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6591C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S6591C1D1Ev,_ZThn8_N7S6591C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S6591C1D0Ev,_ZThn8_N7S6591C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S6591C1[];
extern  VTBL_ENTRY _ZTV7S6591C1[];
Class_Descriptor cd_S6591C1 = {  "S6591C1", // class name
  bases_S6591C1, 2,
  &(vtc_S6591C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6591C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6591C1),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  S13234C1  {
  int s13234c1f0[2];
  void *s13234c1f1[3];
  int s13234c1f2;
  void *s13234c1f3;
  int s13234c1f4;
  void *s13234c1f5;
};
//SIG(1 S13234C1) C1{ Fi[2] Fp[3] Fi Fp Fi Fp}



static void Test_S13234C1()
{
  {
    init_simple_test("S13234C1");
    S13234C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S13234C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13234C1)");
    check_field_offset(lv, s13234c1f0, 0, "S13234C1.s13234c1f0");
    check_field_offset(lv, s13234c1f1, 8, "S13234C1.s13234c1f1");
    check_field_offset(lv, s13234c1f2, ABISELECT(32,20), "S13234C1.s13234c1f2");
    check_field_offset(lv, s13234c1f3, ABISELECT(40,24), "S13234C1.s13234c1f3");
    check_field_offset(lv, s13234c1f4, ABISELECT(48,28), "S13234C1.s13234c1f4");
    check_field_offset(lv, s13234c1f5, ABISELECT(56,32), "S13234C1.s13234c1f5");
  }
}
static Arrange_To_Call_Me vS13234C1(Test_S13234C1, "S13234C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16049C1  {
  ::S100C31_nt s16049c1f0;
  ::S2382C30 s16049c1f1;
  int s16049c1f2;
  void  mf16049c1(); // _ZN8S16049C19mf16049c1Ev
};
//SIG(1 S16049C1) C1{ m FC2{ m Fi[3]} FC3{ m} Fi}


void  S16049C1 ::mf16049c1(){}

static void Test_S16049C1()
{
  {
    init_simple_test("S16049C1");
    S16049C1 lv;
    check2(sizeof(lv), 20, "sizeof(S16049C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16049C1)");
    check_field_offset(lv, s16049c1f0, 0, "S16049C1.s16049c1f0");
    check_field_offset(lv, s16049c1f1, 12, "S16049C1.s16049c1f1");
    check_field_offset(lv, s16049c1f2, 16, "S16049C1.s16049c1f2");
  }
}
static Arrange_To_Call_Me vS16049C1(Test_S16049C1, "S16049C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13083C2  {
  int s13083c2f0;
  __tsi64 s13083c2f1;
  ::S7511C9_nt s13083c2f2;
};
//SIG(-1 S13083C2) C1{ Fi FL FC2{}}



static void Test_S13083C2()
{
  {
    init_simple_test("S13083C2");
    S13083C2 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13083C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13083C2)");
    check_field_offset(lv, s13083c2f0, 0, "S13083C2.s13083c2f0");
    check_field_offset(lv, s13083c2f1, ABISELECT(8,4), "S13083C2.s13083c2f1");
    check_field_offset(lv, s13083c2f2, ABISELECT(16,12), "S13083C2.s13083c2f2");
  }
}
static Arrange_To_Call_Me vS13083C2(Test_S13083C2, "S13083C2", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13083C1  {
  int s13083c1f0[2];
  ::S13083C2 s13083c1f1;
};
//SIG(1 S13083C1) C1{ Fi[2] FC2{ Fi FL FC3{}}}



static void Test_S13083C1()
{
  {
    init_simple_test("S13083C1");
    S13083C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13083C1)");
    check_field_offset(lv, s13083c1f0, 0, "S13083C1.s13083c1f0");
    check_field_offset(lv, s13083c1f1, 8, "S13083C1.s13083c1f1");
  }
}
static Arrange_To_Call_Me vS13083C1(Test_S13083C1, "S13083C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17915C2_nt  {
  int s17915c2f0;
  void *s17915c2f1[2];
};
//SIG(-1 S17915C2_nt) C1{ Fi Fp[2]}



//skip512 S17915C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17915C1  {
  void *s17915c1f0[2];
  ::S17915C2_nt s17915c1f1;
  void  mf17915c1(); // _ZN8S17915C19mf17915c1Ev
};
//SIG(1 S17915C1) C1{ m Fp[2] FC2{ Fi Fp[2]}}


void  S17915C1 ::mf17915c1(){}

static void Test_S17915C1()
{
  {
    init_simple_test("S17915C1");
    S17915C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S17915C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17915C1)");
    check_field_offset(lv, s17915c1f0, 0, "S17915C1.s17915c1f0");
    check_field_offset(lv, s17915c1f1, ABISELECT(16,8), "S17915C1.s17915c1f1");
  }
}
static Arrange_To_Call_Me vS17915C1(Test_S17915C1, "S17915C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8829C2  {
  void *s8829c2f0;
  virtual  ~S8829C2(); // _ZN7S8829C2D1Ev
  virtual void  v2(); // _ZN7S8829C22v2Ev
  S8829C2(); // tgen
};
//SIG(-1 S8829C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN7S8829C2C1Ev();
extern void _ZN7S8829C2D1Ev();
Name_Map name_map_S8829C2[] = {
  NSPAIR(_ZN7S8829C2C1Ev),
  NSPAIR(_ZN7S8829C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8829C2[];
extern void _ZN7S8829C2D1Ev();
extern void _ZN7S8829C2D0Ev();
extern void _ZN7S8829C22v2Ev();
static  VTBL_ENTRY vtc_S8829C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8829C2[0]),
  (VTBL_ENTRY)&_ZN7S8829C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8829C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8829C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8829C2[];
extern  VTBL_ENTRY _ZTV7S8829C2[];
Class_Descriptor cd_S8829C2 = {  "S8829C2", // class name
  0,0,//no base classes
  &(vtc_S8829C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8829C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8829C2),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  S8829C1  : S8829C2 {
  void *s8829c1f0;
  virtual  ~S8829C1(); // _ZN7S8829C1D1Ev
  virtual void  v1(); // _ZN7S8829C12v1Ev
  S8829C1(); // tgen
};
//SIG(1 S8829C1) C1{ BC2{ vd v2 Fp} vd v1 Fp}


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

static void Test_S8829C1()
{
  extern Class_Descriptor cd_S8829C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8829C1, buf);
    S8829C1 *dp, &lv = *(dp=new (buf) S8829C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8829C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8829C1)");
    check_base_class_offset(lv, (S8829C2*), 0, "S8829C1");
    check_field_offset(lv, s8829c1f0, ABISELECT(16,8), "S8829C1.s8829c1f0");
    test_class_info(&lv, &cd_S8829C1);
    dp->~S8829C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8829C1(Test_S8829C1, "S8829C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8829C1C1Ev();
extern void _ZN7S8829C1D1Ev();
Name_Map name_map_S8829C1[] = {
  NSPAIR(_ZN7S8829C1C1Ev),
  NSPAIR(_ZN7S8829C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8829C2;
extern VTBL_ENTRY _ZTI7S8829C2[];
extern  VTBL_ENTRY _ZTV7S8829C2[];
static Base_Class bases_S8829C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8829C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8829C1[];
extern void _ZN7S8829C1D1Ev();
extern void _ZN7S8829C1D0Ev();
extern void _ZN7S8829C22v2Ev();
extern void _ZN7S8829C12v1Ev();
static  VTBL_ENTRY vtc_S8829C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8829C1[0]),
  (VTBL_ENTRY)&_ZN7S8829C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8829C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8829C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8829C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8829C1[];
extern  VTBL_ENTRY _ZTV7S8829C1[];
Class_Descriptor cd_S8829C1 = {  "S8829C1", // class name
  bases_S8829C1, 1,
  &(vtc_S8829C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8829C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8829C1),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  S11576C3_nt  {
  int s11576c3f0[2];
};
//SIG(-1 S11576C3_nt) C1{ Fi[2]}



//skip512 S11576C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11576C1  {
  ::S8379C6_nt s11576c1f0;
  ::S11576C3_nt s11576c1f1;
};
//SIG(1 S11576C1) C1{ FC2{ Fi[2]} FC3{ Fi[2]}}



static void Test_S11576C1()
{
  {
    init_simple_test("S11576C1");
    S11576C1 lv;
    check2(sizeof(lv), 16, "sizeof(S11576C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11576C1)");
    check_field_offset(lv, s11576c1f0, 0, "S11576C1.s11576c1f0");
    check_field_offset(lv, s11576c1f1, 8, "S11576C1.s11576c1f1");
  }
}
static Arrange_To_Call_Me vS11576C1(Test_S11576C1, "S11576C1", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12751C1  {
  int s12751c1f0;
  void *s12751c1f1[2];
  int s12751c1f2;
  long s12751c1f3;
  int s12751c1f4[2];
};
//SIG(1 S12751C1) C1{ Fi Fp[2] Fi Fl Fi[2]}



static void Test_S12751C1()
{
  {
    init_simple_test("S12751C1");
    S12751C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S12751C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12751C1)");
    check_field_offset(lv, s12751c1f0, 0, "S12751C1.s12751c1f0");
    check_field_offset(lv, s12751c1f1, ABISELECT(8,4), "S12751C1.s12751c1f1");
    check_field_offset(lv, s12751c1f2, ABISELECT(24,12), "S12751C1.s12751c1f2");
    check_field_offset(lv, s12751c1f3, ABISELECT(32,16), "S12751C1.s12751c1f3");
    check_field_offset(lv, s12751c1f4, ABISELECT(40,20), "S12751C1.s12751c1f4");
  }
}
static Arrange_To_Call_Me vS12751C1(Test_S12751C1, "S12751C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18088C1  {
  void *s18088c1f0[2];
  int s18088c1f1[2];
  char s18088c1f2[8];
  void  mf18088c1(); // _ZN8S18088C19mf18088c1Ev
};
//SIG(1 S18088C1) C1{ m Fp[2] Fi[2] Fc[8]}


void  S18088C1 ::mf18088c1(){}

static void Test_S18088C1()
{
  {
    init_simple_test("S18088C1");
    S18088C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S18088C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18088C1)");
    check_field_offset(lv, s18088c1f0, 0, "S18088C1.s18088c1f0");
    check_field_offset(lv, s18088c1f1, ABISELECT(16,8), "S18088C1.s18088c1f1");
    check_field_offset(lv, s18088c1f2, ABISELECT(24,16), "S18088C1.s18088c1f2");
  }
}
static Arrange_To_Call_Me vS18088C1(Test_S18088C1, "S18088C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15093C1  {
  char s15093c1f0;
  int s15093c1f1[2];
  char s15093c1f2;
  int s15093c1f3;
  short s15093c1f4;
  void  mf15093c1(); // _ZN8S15093C19mf15093c1Ev
};
//SIG(1 S15093C1) C1{ m Fc Fi[2] Fc Fi Fs}


void  S15093C1 ::mf15093c1(){}

static void Test_S15093C1()
{
  {
    init_simple_test("S15093C1");
    S15093C1 lv;
    check2(sizeof(lv), 24, "sizeof(S15093C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15093C1)");
    check_field_offset(lv, s15093c1f0, 0, "S15093C1.s15093c1f0");
    check_field_offset(lv, s15093c1f1, 4, "S15093C1.s15093c1f1");
    check_field_offset(lv, s15093c1f2, 12, "S15093C1.s15093c1f2");
    check_field_offset(lv, s15093c1f3, 16, "S15093C1.s15093c1f3");
    check_field_offset(lv, s15093c1f4, 20, "S15093C1.s15093c1f4");
  }
}
static Arrange_To_Call_Me vS15093C1(Test_S15093C1, "S15093C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12042C1  {
  ::S100C8_nt s12042c1f0;
  ::S100C8_nt s12042c1f1;
  ::S100C8_nt s12042c1f2;
};
//SIG(1 S12042C1) C1{ FC2{ m Fi[2]} FC2 FC2}



static void Test_S12042C1()
{
  {
    init_simple_test("S12042C1");
    S12042C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12042C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12042C1)");
    check_field_offset(lv, s12042c1f0, 0, "S12042C1.s12042c1f0");
    check_field_offset(lv, s12042c1f1, 8, "S12042C1.s12042c1f1");
    check_field_offset(lv, s12042c1f2, 16, "S12042C1.s12042c1f2");
  }
}
static Arrange_To_Call_Me vS12042C1(Test_S12042C1, "S12042C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5914C1  : S2200C5_nt {
  ::S2200C5_nt s5914c1f0;
  virtual  ~S5914C1(); // _ZN7S5914C1D1Ev
  S5914C1(); // tgen
};
//SIG(1 S5914C1) C1{ BC2{ m FL Fp} vd FC2}


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

static void Test_S5914C1()
{
  extern Class_Descriptor cd_S5914C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5914C1, buf);
    S5914C1 *dp, &lv = *(dp=new (buf) S5914C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5914C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5914C1)");
    check_base_class_offset(lv, (S2200C5_nt*), ABISELECT(8,4), "S5914C1");
    check_field_offset(lv, s5914c1f0, ABISELECT(24,16), "S5914C1.s5914c1f0");
    test_class_info(&lv, &cd_S5914C1);
    dp->~S5914C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5914C1(Test_S5914C1, "S5914C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5914C1C1Ev();
extern void _ZN7S5914C1D1Ev();
Name_Map name_map_S5914C1[] = {
  NSPAIR(_ZN7S5914C1C1Ev),
  NSPAIR(_ZN7S5914C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2200C5_nt;
extern VTBL_ENTRY _ZTI10S2200C5_nt[];
static Base_Class bases_S5914C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2200C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5914C1[];
extern void _ZN7S5914C1D1Ev();
extern void _ZN7S5914C1D0Ev();
static  VTBL_ENTRY vtc_S5914C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5914C1[0]),
  (VTBL_ENTRY)&_ZN7S5914C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5914C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S5914C1[];
extern  VTBL_ENTRY _ZTV7S5914C1[];
Class_Descriptor cd_S5914C1 = {  "S5914C1", // class name
  bases_S5914C1, 1,
  &(vtc_S5914C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5914C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5914C1),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  S8828C2  {
  void *s8828c2f0;
  virtual  ~S8828C2(); // _ZN7S8828C2D1Ev
  virtual void  v2(); // _ZN7S8828C22v2Ev
  S8828C2(); // tgen
};
//SIG(-1 S8828C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN7S8828C2C1Ev();
extern void _ZN7S8828C2D1Ev();
Name_Map name_map_S8828C2[] = {
  NSPAIR(_ZN7S8828C2C1Ev),
  NSPAIR(_ZN7S8828C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8828C2[];
extern void _ZN7S8828C2D1Ev();
extern void _ZN7S8828C2D0Ev();
extern void _ZN7S8828C22v2Ev();
static  VTBL_ENTRY vtc_S8828C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8828C2[0]),
  (VTBL_ENTRY)&_ZN7S8828C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8828C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8828C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8828C2[];
extern  VTBL_ENTRY _ZTV7S8828C2[];
Class_Descriptor cd_S8828C2 = {  "S8828C2", // class name
  0,0,//no base classes
  &(vtc_S8828C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8828C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8828C2),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  S8828C1  : S8828C2 {
  void *s8828c1f0;
  virtual void  v1(); // _ZN7S8828C12v1Ev
  ~S8828C1(); // tgen
  S8828C1(); // tgen
};
//SIG(1 S8828C1) C1{ BC2{ vd v2 Fp} v1 Fp}


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

static void Test_S8828C1()
{
  extern Class_Descriptor cd_S8828C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8828C1, buf);
    S8828C1 *dp, &lv = *(dp=new (buf) S8828C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8828C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8828C1)");
    check_base_class_offset(lv, (S8828C2*), 0, "S8828C1");
    check_field_offset(lv, s8828c1f0, ABISELECT(16,8), "S8828C1.s8828c1f0");
    test_class_info(&lv, &cd_S8828C1);
    dp->~S8828C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8828C1(Test_S8828C1, "S8828C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8828C1C1Ev();
extern void _ZN7S8828C1D1Ev();
Name_Map name_map_S8828C1[] = {
  NSPAIR(_ZN7S8828C1C1Ev),
  NSPAIR(_ZN7S8828C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8828C2;
extern VTBL_ENTRY _ZTI7S8828C2[];
extern  VTBL_ENTRY _ZTV7S8828C2[];
static Base_Class bases_S8828C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8828C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8828C1[];
extern void _ZN7S8828C1D1Ev();
extern void _ZN7S8828C1D0Ev();
extern void _ZN7S8828C22v2Ev();
extern void _ZN7S8828C12v1Ev();
static  VTBL_ENTRY vtc_S8828C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8828C1[0]),
  (VTBL_ENTRY)&_ZN7S8828C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8828C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8828C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8828C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8828C1[];
extern  VTBL_ENTRY _ZTV7S8828C1[];
Class_Descriptor cd_S8828C1 = {  "S8828C1", // class name
  bases_S8828C1, 1,
  &(vtc_S8828C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8828C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8828C1),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  S16732C1  {
  int s16732c1f0;
  ::S16731C2_nt s16732c1f1;
  void  mf16732c1(); // _ZN8S16732C19mf16732c1Ev
};
//SIG(1 S16732C1) C1{ m Fi FC2{ m Fi Fp}}


void  S16732C1 ::mf16732c1(){}

static void Test_S16732C1()
{
  {
    init_simple_test("S16732C1");
    S16732C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S16732C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16732C1)");
    check_field_offset(lv, s16732c1f0, 0, "S16732C1.s16732c1f0");
    check_field_offset(lv, s16732c1f1, ABISELECT(8,4), "S16732C1.s16732c1f1");
  }
}
static Arrange_To_Call_Me vS16732C1(Test_S16732C1, "S16732C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5892C1  : S7511C25_nt {
  virtual void  v1(); // _ZN7S5892C12v1Ev
  virtual void  v2(); // _ZN7S5892C12v2Ev
  virtual void  v3(); // _ZN7S5892C12v3Ev
  ~S5892C1(); // tgen
  S5892C1(); // tgen
};
//SIG(1 S5892C1) C1{ BC2{ m Fi} v1 v2 v3}


void  S5892C1 ::v1(){vfunc_called(this, "_ZN7S5892C12v1Ev");}
void  S5892C1 ::v2(){vfunc_called(this, "_ZN7S5892C12v2Ev");}
void  S5892C1 ::v3(){vfunc_called(this, "_ZN7S5892C12v3Ev");}
S5892C1 ::~S5892C1(){ note_dtor("S5892C1", this);} // tgen
S5892C1 ::S5892C1(){ note_ctor("S5892C1", this);} // tgen

static void Test_S5892C1()
{
  extern Class_Descriptor cd_S5892C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S5892C1, buf);
    S5892C1 *dp, &lv = *(dp=new (buf) S5892C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5892C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5892C1)");
    check_base_class_offset(lv, (S7511C25_nt*), ABISELECT(8,4), "S5892C1");
    test_class_info(&lv, &cd_S5892C1);
    dp->~S5892C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5892C1(Test_S5892C1, "S5892C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S5892C1C1Ev();
extern void _ZN7S5892C1D1Ev();
Name_Map name_map_S5892C1[] = {
  NSPAIR(_ZN7S5892C1C1Ev),
  NSPAIR(_ZN7S5892C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7511C25_nt;
extern VTBL_ENTRY _ZTI11S7511C25_nt[];
static Base_Class bases_S5892C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7511C25_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5892C1[];
extern void _ZN7S5892C12v1Ev();
extern void _ZN7S5892C12v2Ev();
extern void _ZN7S5892C12v3Ev();
static  VTBL_ENTRY vtc_S5892C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5892C1[0]),
  (VTBL_ENTRY)&_ZN7S5892C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5892C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5892C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5892C1[];
extern  VTBL_ENTRY _ZTV7S5892C1[];
Class_Descriptor cd_S5892C1 = {  "S5892C1", // class name
  bases_S5892C1, 1,
  &(vtc_S5892C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S5892C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5892C1),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  S14287C1  {
  void *s14287c1f0;
  int s14287c1f1[2];
  __tsi64 s14287c1f2;
  int s14287c1f3[4];
};
//SIG(1 S14287C1) C1{ Fp Fi[2] FL Fi[4]}



static void Test_S14287C1()
{
  {
    init_simple_test("S14287C1");
    S14287C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S14287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14287C1)");
    check_field_offset(lv, s14287c1f0, 0, "S14287C1.s14287c1f0");
    check_field_offset(lv, s14287c1f1, ABISELECT(8,4), "S14287C1.s14287c1f1");
    check_field_offset(lv, s14287c1f2, ABISELECT(16,12), "S14287C1.s14287c1f2");
    check_field_offset(lv, s14287c1f3, ABISELECT(24,20), "S14287C1.s14287c1f3");
  }
}
static Arrange_To_Call_Me vS14287C1(Test_S14287C1, "S14287C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15953C1  {
  ::S16731C2_nt s15953c1f0;
  void *s15953c1f1;
  void  mf15953c1(); // _ZN8S15953C19mf15953c1Ev
};
//SIG(1 S15953C1) C1{ m FC2{ m Fi Fp} Fp}


void  S15953C1 ::mf15953c1(){}

static void Test_S15953C1()
{
  {
    init_simple_test("S15953C1");
    S15953C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S15953C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15953C1)");
    check_field_offset(lv, s15953c1f0, 0, "S15953C1.s15953c1f0");
    check_field_offset(lv, s15953c1f1, ABISELECT(16,8), "S15953C1.s15953c1f1");
  }
}
static Arrange_To_Call_Me vS15953C1(Test_S15953C1, "S15953C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21820C1  {
  void *s21820c1f0[3];
  char s21820c1f1;
  int s21820c1f2;
  void  mf21820c1(); // _ZN8S21820C19mf21820c1Ev
  virtual  ~S21820C1(); // _ZN8S21820C1D1Ev
  S21820C1(); // tgen
};
//SIG(1 S21820C1) C1{ vd m Fp[3] Fc Fi}


void  S21820C1 ::mf21820c1(){}
 S21820C1 ::~S21820C1(){ note_dtor("S21820C1", this);}
S21820C1 ::S21820C1(){ note_ctor("S21820C1", this);} // tgen

static void Test_S21820C1()
{
  extern Class_Descriptor cd_S21820C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S21820C1, buf);
    S21820C1 *dp, &lv = *(dp=new (buf) S21820C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S21820C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21820C1)");
    check_field_offset(lv, s21820c1f0, ABISELECT(8,4), "S21820C1.s21820c1f0");
    check_field_offset(lv, s21820c1f1, ABISELECT(32,16), "S21820C1.s21820c1f1");
    check_field_offset(lv, s21820c1f2, ABISELECT(36,20), "S21820C1.s21820c1f2");
    test_class_info(&lv, &cd_S21820C1);
    dp->~S21820C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21820C1(Test_S21820C1, "S21820C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S21820C1C1Ev();
extern void _ZN8S21820C1D1Ev();
Name_Map name_map_S21820C1[] = {
  NSPAIR(_ZN8S21820C1C1Ev),
  NSPAIR(_ZN8S21820C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21820C1[];
extern void _ZN8S21820C1D1Ev();
extern void _ZN8S21820C1D0Ev();
static  VTBL_ENTRY vtc_S21820C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21820C1[0]),
  (VTBL_ENTRY)&_ZN8S21820C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21820C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21820C1[];
extern  VTBL_ENTRY _ZTV8S21820C1[];
Class_Descriptor cd_S21820C1 = {  "S21820C1", // class name
  0,0,//no base classes
  &(vtc_S21820C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S21820C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21820C1),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  S19830C1  : virtual S2382C30 , S2382C27 {
  virtual  ~S19830C1(); // _ZN8S19830C1D2Ev
  S19830C1(); // tgen
};
//SIG(1 S19830C1) C1{ VBC2{ m} BC3{ m} vd}


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

static void Test_S19830C1()
{
  extern Class_Descriptor cd_S19830C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19830C1, buf);
    S19830C1 *dp, &lv = *(dp=new (buf) S19830C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19830C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19830C1)");
    check_base_class_offset(lv, (S2382C30*), 0, "S19830C1");
    check_base_class_offset(lv, (S2382C27*), 0, "S19830C1");
    test_class_info(&lv, &cd_S19830C1);
    dp->~S19830C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19830C1(Test_S19830C1, "S19830C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19830C1C1Ev();
extern void _ZN8S19830C1D2Ev();
Name_Map name_map_S19830C1[] = {
  NSPAIR(_ZN8S19830C1C1Ev),
  NSPAIR(_ZN8S19830C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2382C30;
extern VTBL_ENTRY _ZTI8S2382C30[];
extern Class_Descriptor cd_S2382C27;
extern VTBL_ENTRY _ZTI8S2382C27[];
static Base_Class bases_S19830C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2382C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2382C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19830C1[];
extern void _ZN8S19830C1D1Ev();
extern void _ZN8S19830C1D0Ev();
static  VTBL_ENTRY vtc_S19830C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19830C1[0]),
  (VTBL_ENTRY)&_ZN8S19830C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19830C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19830C1[];
static  VTT_ENTRY vtt_S19830C1[] = {
  {&(_ZTV8S19830C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19830C1[];
extern  VTBL_ENTRY _ZTV8S19830C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19830C1[];
Class_Descriptor cd_S19830C1 = {  "S19830C1", // class name
  bases_S19830C1, 2,
  &(vtc_S19830C1[0]), // expected_vtbl_contents
  &(vtt_S19830C1[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19830C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19830C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19830C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8443C2  {
  void *s8443c2f0;
  virtual  ~S8443C2(); // _ZN7S8443C2D1Ev
  virtual void  v1(); // _ZN7S8443C22v1Ev
  S8443C2(); // tgen
};
//SIG(-1 S8443C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN7S8443C2C1Ev();
extern void _ZN7S8443C2D1Ev();
Name_Map name_map_S8443C2[] = {
  NSPAIR(_ZN7S8443C2C1Ev),
  NSPAIR(_ZN7S8443C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8443C2[];
extern void _ZN7S8443C2D1Ev();
extern void _ZN7S8443C2D0Ev();
extern void _ZN7S8443C22v1Ev();
static  VTBL_ENTRY vtc_S8443C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8443C2[0]),
  (VTBL_ENTRY)&_ZN7S8443C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8443C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8443C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8443C2[];
extern  VTBL_ENTRY _ZTV7S8443C2[];
Class_Descriptor cd_S8443C2 = {  "S8443C2", // class name
  0,0,//no base classes
  &(vtc_S8443C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8443C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8443C2),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  S8443C1  : S8443C2 {
  virtual  ~S8443C1(); // _ZN7S8443C1D1Ev
  S8443C1(); // tgen
};
//SIG(1 S8443C1) C1{ BC2{ vd v1 Fp} vd}


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

static void Test_S8443C1()
{
  extern Class_Descriptor cd_S8443C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8443C1, buf);
    S8443C1 *dp, &lv = *(dp=new (buf) S8443C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8443C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8443C1)");
    check_base_class_offset(lv, (S8443C2*), 0, "S8443C1");
    test_class_info(&lv, &cd_S8443C1);
    dp->~S8443C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8443C1(Test_S8443C1, "S8443C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8443C1C1Ev();
extern void _ZN7S8443C1D1Ev();
Name_Map name_map_S8443C1[] = {
  NSPAIR(_ZN7S8443C1C1Ev),
  NSPAIR(_ZN7S8443C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8443C2;
extern VTBL_ENTRY _ZTI7S8443C2[];
extern  VTBL_ENTRY _ZTV7S8443C2[];
static Base_Class bases_S8443C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8443C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8443C1[];
extern void _ZN7S8443C1D1Ev();
extern void _ZN7S8443C1D0Ev();
extern void _ZN7S8443C22v1Ev();
static  VTBL_ENTRY vtc_S8443C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8443C1[0]),
  (VTBL_ENTRY)&_ZN7S8443C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8443C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8443C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S8443C1[];
extern  VTBL_ENTRY _ZTV7S8443C1[];
Class_Descriptor cd_S8443C1 = {  "S8443C1", // class name
  bases_S8443C1, 1,
  &(vtc_S8443C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8443C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8443C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8830C2  {
  void *s8830c2f0;
  virtual  ~S8830C2(); // _ZN7S8830C2D1Ev
  virtual void  v2(); // _ZN7S8830C22v2Ev
  S8830C2(); // tgen
};
//SIG(-1 S8830C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN7S8830C2C1Ev();
extern void _ZN7S8830C2D1Ev();
Name_Map name_map_S8830C2[] = {
  NSPAIR(_ZN7S8830C2C1Ev),
  NSPAIR(_ZN7S8830C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8830C2[];
extern void _ZN7S8830C2D1Ev();
extern void _ZN7S8830C2D0Ev();
extern void _ZN7S8830C22v2Ev();
static  VTBL_ENTRY vtc_S8830C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8830C2[0]),
  (VTBL_ENTRY)&_ZN7S8830C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8830C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8830C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8830C2[];
extern  VTBL_ENTRY _ZTV7S8830C2[];
Class_Descriptor cd_S8830C2 = {  "S8830C2", // class name
  0,0,//no base classes
  &(vtc_S8830C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8830C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8830C2),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  S8830C1  : S8830C2 {
  virtual void  v1(); // _ZN7S8830C12v1Ev
  ~S8830C1(); // tgen
  S8830C1(); // tgen
};
//SIG(1 S8830C1) C1{ BC2{ vd v2 Fp} v1}


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

static void Test_S8830C1()
{
  extern Class_Descriptor cd_S8830C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8830C1, buf);
    S8830C1 *dp, &lv = *(dp=new (buf) S8830C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8830C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8830C1)");
    check_base_class_offset(lv, (S8830C2*), 0, "S8830C1");
    test_class_info(&lv, &cd_S8830C1);
    dp->~S8830C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8830C1(Test_S8830C1, "S8830C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8830C1C1Ev();
extern void _ZN7S8830C1D1Ev();
Name_Map name_map_S8830C1[] = {
  NSPAIR(_ZN7S8830C1C1Ev),
  NSPAIR(_ZN7S8830C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8830C2;
extern VTBL_ENTRY _ZTI7S8830C2[];
extern  VTBL_ENTRY _ZTV7S8830C2[];
static Base_Class bases_S8830C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8830C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8830C1[];
extern void _ZN7S8830C1D1Ev();
extern void _ZN7S8830C1D0Ev();
extern void _ZN7S8830C22v2Ev();
extern void _ZN7S8830C12v1Ev();
static  VTBL_ENTRY vtc_S8830C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8830C1[0]),
  (VTBL_ENTRY)&_ZN7S8830C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8830C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8830C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8830C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8830C1[];
extern  VTBL_ENTRY _ZTV7S8830C1[];
Class_Descriptor cd_S8830C1 = {  "S8830C1", // class name
  bases_S8830C1, 1,
  &(vtc_S8830C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8830C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8830C1),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  S15955C1  {
  ::S16731C2_nt s15955c1f0;
  void  mf15955c1(); // _ZN8S15955C19mf15955c1Ev
};
//SIG(1 S15955C1) C1{ m FC2{ m Fi Fp}}


void  S15955C1 ::mf15955c1(){}

static void Test_S15955C1()
{
  {
    init_simple_test("S15955C1");
    S15955C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S15955C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15955C1)");
    check_field_offset(lv, s15955c1f0, 0, "S15955C1.s15955c1f0");
  }
}
static Arrange_To_Call_Me vS15955C1(Test_S15955C1, "S15955C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5762C1  : S16731C2_nt {
  void *s5762c1f0;
};
//SIG(1 S5762C1) C1{ BC2{ m Fi Fp} Fp}



static void Test_S5762C1()
{
  extern Class_Descriptor cd_S5762C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5762C1, buf);
    S5762C1 &lv = *(new (buf) S5762C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5762C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5762C1)");
    check_base_class_offset(lv, (S16731C2_nt*), 0, "S5762C1");
    check_field_offset(lv, s5762c1f0, ABISELECT(16,8), "S5762C1.s5762c1f0");
    test_class_info(&lv, &cd_S5762C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5762C1(Test_S5762C1, "S5762C1", ABISELECT(24,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S5761C1  : S16731C2_nt {
  int s5761c1f0;
};
//SIG(1 S5761C1) C1{ BC2{ m Fi Fp} Fi}



static void Test_S5761C1()
{
  extern Class_Descriptor cd_S5761C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5761C1, buf);
    S5761C1 &lv = *(new (buf) S5761C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5761C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5761C1)");
    check_base_class_offset(lv, (S16731C2_nt*), 0, "S5761C1");
    check_field_offset(lv, s5761c1f0, ABISELECT(16,8), "S5761C1.s5761c1f0");
    test_class_info(&lv, &cd_S5761C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5761C1(Test_S5761C1, "S5761C1", ABISELECT(24,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S19925C2  {
  __tsi64 s19925c2f0;
  virtual void  v1(); // _ZN8S19925C22v1Ev
  ~S19925C2(); // tgen
  S19925C2(); // tgen
};
//SIG(-1 S19925C2) C1{ v1 FL}


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

static void Test_S19925C2()
{
  extern Class_Descriptor cd_S19925C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19925C2, buf);
    S19925C2 *dp, &lv = *(dp=new (buf) S19925C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19925C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19925C2)");
    check_field_offset(lv, s19925c2f0, ABISELECT(8,4), "S19925C2.s19925c2f0");
    test_class_info(&lv, &cd_S19925C2);
    dp->~S19925C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19925C2(Test_S19925C2, "S19925C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19925C2C1Ev();
extern void _ZN8S19925C2D1Ev();
Name_Map name_map_S19925C2[] = {
  NSPAIR(_ZN8S19925C2C1Ev),
  NSPAIR(_ZN8S19925C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19925C2[];
extern void _ZN8S19925C22v1Ev();
static  VTBL_ENTRY vtc_S19925C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19925C2[0]),
  (VTBL_ENTRY)&_ZN8S19925C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19925C2[];
extern  VTBL_ENTRY _ZTV8S19925C2[];
Class_Descriptor cd_S19925C2 = {  "S19925C2", // class name
  0,0,//no base classes
  &(vtc_S19925C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19925C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19925C2),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  S19925C1  : virtual S19925C2 {
  __tsi64 s19925c1f0;
  ~S19925C1(); // tgen
  S19925C1(); // tgen
};
//SIG(1 S19925C1) C1{ VBC2{ v1 FL} FL}


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

static void Test_S19925C1()
{
  extern Class_Descriptor cd_S19925C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19925C1, buf);
    S19925C1 *dp, &lv = *(dp=new (buf) S19925C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19925C1)");
    check_base_class_offset(lv, (S19925C2*), ABISELECT(16,12), "S19925C1");
    check_field_offset(lv, s19925c1f0, ABISELECT(8,4), "S19925C1.s19925c1f0");
    test_class_info(&lv, &cd_S19925C1);
    dp->~S19925C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19925C1(Test_S19925C1, "S19925C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19925C1C1Ev();
extern void _ZN8S19925C1D1Ev();
Name_Map name_map_S19925C1[] = {
  NSPAIR(_ZN8S19925C1C1Ev),
  NSPAIR(_ZN8S19925C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19925C2;
extern VTBL_ENTRY _ZTI8S19925C2[];
extern  VTBL_ENTRY _ZTV8S19925C2[];
static Base_Class bases_S19925C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19925C2,    ABISELECT(16,12), //bcp->offset
    3, //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 _ZTI8S19925C1[];
extern void _ZN8S19925C22v1Ev();
static  VTBL_ENTRY vtc_S19925C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19925C1[0]),
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19925C1[0]),
  (VTBL_ENTRY)&_ZN8S19925C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19925C1[];
static  VTT_ENTRY vtt_S19925C1[] = {
  {&(_ZTV8S19925C1[3]),  3,7},
  {&(_ZTV8S19925C1[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19925C1[];
extern  VTBL_ENTRY _ZTV8S19925C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19925C1[];
Class_Descriptor cd_S19925C1 = {  "S19925C1", // class name
  bases_S19925C1, 1,
  &(vtc_S19925C1[0]), // expected_vtbl_contents
  &(vtt_S19925C1[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19925C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19925C1),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19925C1),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  S5763C1  : S16731C2_nt {
};
//SIG(1 S5763C1) C1{ BC2{ m Fi Fp}}



static void Test_S5763C1()
{
  extern Class_Descriptor cd_S5763C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S5763C1, buf);
    S5763C1 &lv = *(new (buf) S5763C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5763C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5763C1)");
    check_base_class_offset(lv, (S16731C2_nt*), 0, "S5763C1");
    test_class_info(&lv, &cd_S5763C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5763C1(Test_S5763C1, "S5763C1", ABISELECT(16,8));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S18951C1  {
  void *s18951c1f0;
  int s18951c1f1;
  virtual  ~S18951C1(); // _ZN8S18951C1D1Ev
  virtual void  v1(); // _ZN8S18951C12v1Ev
  S18951C1(); // tgen
};
//SIG(1 S18951C1) C1{ vd v1 Fp Fi}


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

static void Test_S18951C1()
{
  extern Class_Descriptor cd_S18951C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18951C1, buf);
    S18951C1 *dp, &lv = *(dp=new (buf) S18951C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18951C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18951C1)");
    check_field_offset(lv, s18951c1f0, ABISELECT(8,4), "S18951C1.s18951c1f0");
    check_field_offset(lv, s18951c1f1, ABISELECT(16,8), "S18951C1.s18951c1f1");
    test_class_info(&lv, &cd_S18951C1);
    dp->~S18951C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18951C1(Test_S18951C1, "S18951C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18951C1C1Ev();
extern void _ZN8S18951C1D1Ev();
Name_Map name_map_S18951C1[] = {
  NSPAIR(_ZN8S18951C1C1Ev),
  NSPAIR(_ZN8S18951C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18951C1[];
extern void _ZN8S18951C1D1Ev();
extern void _ZN8S18951C1D0Ev();
extern void _ZN8S18951C12v1Ev();
static  VTBL_ENTRY vtc_S18951C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18951C1[0]),
  (VTBL_ENTRY)&_ZN8S18951C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18951C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18951C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18951C1[];
extern  VTBL_ENTRY _ZTV8S18951C1[];
Class_Descriptor cd_S18951C1 = {  "S18951C1", // class name
  0,0,//no base classes
  &(vtc_S18951C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18951C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18951C1),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  S13503C1  {
  int s13503c1f0[4];
  void *s13503c1f1[2];
};
//SIG(1 S13503C1) C1{ Fi[4] Fp[2]}



static void Test_S13503C1()
{
  {
    init_simple_test("S13503C1");
    S13503C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13503C1)");
    check_field_offset(lv, s13503c1f0, 0, "S13503C1.s13503c1f0");
    check_field_offset(lv, s13503c1f1, 16, "S13503C1.s13503c1f1");
  }
}
static Arrange_To_Call_Me vS13503C1(Test_S13503C1, "S13503C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14922C1  {
  short s14922c1f0[3];
  char s14922c1f1[6];
};
//SIG(1 S14922C1) C1{ Fs[3] Fc[6]}



static void Test_S14922C1()
{
  {
    init_simple_test("S14922C1");
    S14922C1 lv;
    check2(sizeof(lv), 12, "sizeof(S14922C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14922C1)");
    check_field_offset(lv, s14922c1f0, 0, "S14922C1.s14922c1f0");
    check_field_offset(lv, s14922c1f1, 6, "S14922C1.s14922c1f1");
  }
}
static Arrange_To_Call_Me vS14922C1(Test_S14922C1, "S14922C1", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17266C1  {
  int s17266c1f0[5];
  __tsi64 s17266c1f1;
  void  mf17266c1(); // _ZN8S17266C19mf17266c1Ev
};
//SIG(1 S17266C1) C1{ m Fi[5] FL}


void  S17266C1 ::mf17266c1(){}

static void Test_S17266C1()
{
  {
    init_simple_test("S17266C1");
    S17266C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17266C1)");
    check_field_offset(lv, s17266c1f0, 0, "S17266C1.s17266c1f0");
    check_field_offset(lv, s17266c1f1, ABISELECT(24,20), "S17266C1.s17266c1f1");
  }
}
static Arrange_To_Call_Me vS17266C1(Test_S17266C1, "S17266C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16514C1  {
  long double s16514c1f0;
  int s16514c1f1;
  long double s16514c1f2;
  void  mf16514c1(); // _ZN8S16514C19mf16514c1Ev
};
//SIG(1 S16514C1) C1{ m FD Fi FD}


void  S16514C1 ::mf16514c1(){}

static void Test_S16514C1()
{
  {
    init_simple_test("S16514C1");
    S16514C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16514C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16514C1)");
    check_field_offset(lv, s16514c1f0, 0, "S16514C1.s16514c1f0");
    check_field_offset(lv, s16514c1f1, ABISELECT(16,12), "S16514C1.s16514c1f1");
    check_field_offset(lv, s16514c1f2, ABISELECT(32,16), "S16514C1.s16514c1f2");
  }
}
static Arrange_To_Call_Me vS16514C1(Test_S16514C1, "S16514C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10467C1  {
  char s10467c1f0;
  int s10467c1f1:24;
};
//SIG(1 S10467C1) C1{ Fc Fi:24}



static void Test_S10467C1()
{
  {
    init_simple_test("S10467C1");
    static S10467C1 lv;
    check2(sizeof(lv), 4, "sizeof(S10467C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10467C1)");
    check_field_offset(lv, s10467c1f0, 0, "S10467C1.s10467c1f0");
    set_bf_and_test(lv, s10467c1f1, 1, 0, 24, 1, "S10467C1");
    set_bf_and_test(lv, s10467c1f1, 1, 0, 24, hide_sll(1LL<<23), "S10467C1");
  }
}
static Arrange_To_Call_Me vS10467C1(Test_S10467C1, "S10467C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18131C1  {
  void *s18131c1f0[24];
  void  mf18131c1(); // _ZN8S18131C19mf18131c1Ev
};
//SIG(1 S18131C1) C1{ m Fp[24]}


void  S18131C1 ::mf18131c1(){}

static void Test_S18131C1()
{
  {
    init_simple_test("S18131C1");
    S18131C1 lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S18131C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18131C1)");
    check_field_offset(lv, s18131c1f0, 0, "S18131C1.s18131c1f0");
  }
}
static Arrange_To_Call_Me vS18131C1(Test_S18131C1, "S18131C1", ABISELECT(192,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10643C1  {
  char s10643c1f0[164];
};
//SIG(1 S10643C1) C1{ Fc[164]}



static void Test_S10643C1()
{
  {
    init_simple_test("S10643C1");
    S10643C1 lv;
    check2(sizeof(lv), 164, "sizeof(S10643C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10643C1)");
    check_field_offset(lv, s10643c1f0, 0, "S10643C1.s10643c1f0");
  }
}
static Arrange_To_Call_Me vS10643C1(Test_S10643C1, "S10643C1", 164);

#else // __cplusplus

#endif // __cplusplus

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

