diff --git a/pymolfile/molfile/_libpymolfile.so b/pymolfile/molfile/_libpymolfile.so
index 5f16657f992bcb5f73c8572738446d8880bc9afd..afa3e0a62a50fd7b2efa0c76eae1d2fedf08d253 100755
Binary files a/pymolfile/molfile/_libpymolfile.so and b/pymolfile/molfile/_libpymolfile.so differ
diff --git a/pymolfile/molfile/compile.sh b/pymolfile/molfile/compile.sh
index 0a16c41abea2454bf10bf092248037ae54376688..f25b34aa0c231d999945e434aee1d9029f22b487 100644
--- a/pymolfile/molfile/compile.sh
+++ b/pymolfile/molfile/compile.sh
@@ -1,2 +1,2 @@
-swig -Wall -c++ -python libpymolfile.i
+swig -py3 -Wall -c++ -python libpymolfile.i
 g++ -fPIC -Wall -Wextra -Wunused-function -shared -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ -I. libpymolfile_wrap.cxx pymolfile.c -o _libpymolfile.so -Ivmd_molfile_plugins/include/ -Ilib/ -L. lib/libmolfile_plugin.a  -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6
diff --git a/pymolfile/molfile/deneme b/pymolfile/molfile/deneme
new file mode 100644
index 0000000000000000000000000000000000000000..e7bac927c5897296286dd2ac56496fa484729015
--- /dev/null
+++ b/pymolfile/molfile/deneme
@@ -0,0 +1,17546 @@
+126
+0 ('*|*_GEO|*_DEN|*_WFK|*_POT|*_VHA|*_VHXC|*_VXC', 'ABINIT', 1, 0, 0, 1, 1, 0, 0, 1, 'ABINIT', 'mol file reader', 'Rob Lahaye', 0, 4, 17, 1)
+1 ('fld', 'fld', 0, 0, 0, 0, 0, 0, 0, 0, 'AVS Field', 'mol file reader', 'Eamon Caddigan', 0, 5, 17, 0)
+2 ('alc', 'Alchemy', 1, 0, 0, 1, 0, 0, 0, 0, 'Alchemy', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+3 ('prep', 'AMBERPREP', 1, 0, 0, 1, 0, 0, 0, 0, 'AMBERPREP', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+4 ('bs', 'BallStick', 1, 0, 0, 1, 0, 0, 0, 0, 'BallStick', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+5 ('bgf', 'MSIBGF', 1, 0, 0, 1, 0, 0, 0, 0, 'MSIBGF', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+6 ('car', 'BiosymCAR', 1, 0, 0, 1, 0, 0, 0, 0, 'BiosymCAR', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+7 ('boog', 'Boogie', 1, 0, 0, 1, 0, 0, 0, 0, 'Boogie', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+8 ('caccrt', 'Cacao', 1, 0, 0, 1, 0, 0, 0, 0, 'Cacao', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+9 ('cadpac', 'CADPAC', 1, 0, 0, 1, 0, 0, 0, 0, 'CADPAC', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+10 ('charmm', 'CHARMm', 1, 0, 0, 1, 0, 0, 0, 0, 'CHARMm', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+11 ('c3d1', 'Chem3d-1', 1, 0, 0, 1, 0, 0, 0, 0, 'Chem3d-1', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+12 ('c3d2', 'Chem3d-2', 1, 0, 0, 1, 0, 0, 0, 0, 'Chem3d-2', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+13 ('cssr', 'CSSR', 1, 0, 0, 1, 0, 0, 0, 0, 'CSSR', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+14 ('fdat', 'FDAT', 1, 0, 0, 1, 0, 0, 0, 0, 'FDAT', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+15 ('gstat', 'GSTAT', 1, 0, 0, 1, 0, 0, 0, 0, 'GSTAT', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+16 ('dock', 'Dock', 1, 0, 0, 1, 0, 0, 0, 0, 'Dock', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+17 ('dpdb', 'DockPDB', 1, 0, 0, 1, 0, 0, 0, 0, 'DockPDB', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+18 ('feat', 'Feature', 1, 0, 0, 1, 0, 0, 0, 0, 'Feature', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+19 ('fract', 'Fractional', 1, 0, 0, 1, 0, 0, 0, 0, 'Fractional', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+20 ('gamout', 'GAMESSoutput', 1, 0, 0, 1, 0, 0, 0, 0, 'GAMESSoutput', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+21 ('gzmat', 'GaussianZmatrix', 1, 0, 0, 1, 0, 0, 0, 0, 'GaussianZmatrix', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+22 ('gauout', 'Gaussian92output', 1, 0, 0, 1, 0, 0, 0, 0, 'Gaussian92output', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+23 ('g94', 'Gaussian94output', 1, 0, 0, 1, 0, 0, 0, 0, 'Gaussian94output', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+24 ('gr96A', 'Gromos96A', 1, 0, 0, 1, 0, 0, 0, 0, 'Gromos96A', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+25 ('gr96N', 'Gromos96N', 1, 0, 0, 1, 0, 0, 0, 0, 'Gromos96N', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+26 ('hin', 'HyperchemHIN', 1, 0, 0, 1, 0, 0, 0, 0, 'HyperchemHIN', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+27 ('sdf', 'IsisSDF', 1, 0, 0, 1, 0, 0, 0, 0, 'IsisSDF', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+28 ('m3d', 'M3D', 1, 0, 0, 1, 0, 0, 0, 0, 'M3D', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+29 ('macmol', 'MacMolecule', 1, 0, 0, 1, 0, 0, 0, 0, 'MacMolecule', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+30 ('macmod', 'Macromodel', 1, 0, 0, 1, 0, 0, 0, 0, 'Macromodel', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+31 ('micro', 'MicroWorld', 1, 0, 0, 1, 0, 0, 0, 0, 'MicroWorld', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+32 ('mm2in', 'MM2Input', 1, 0, 0, 1, 0, 0, 0, 0, 'MM2Input', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+33 ('mm2out', 'MM2Output', 1, 0, 0, 1, 0, 0, 0, 0, 'MM2Output', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+34 ('mm3', 'MM3', 1, 0, 0, 1, 0, 0, 0, 0, 'MM3', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+35 ('mmads', 'MMADS', 1, 0, 0, 1, 0, 0, 0, 0, 'MMADS', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+36 ('mdl', 'MDLMOL', 1, 0, 0, 1, 0, 0, 0, 0, 'MDLMOL', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+37 ('molen', 'MOLIN', 1, 0, 0, 1, 0, 0, 0, 0, 'MOLIN', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+38 ('mopcrt', 'MopacCartesian', 1, 0, 0, 1, 0, 0, 0, 0, 'MopacCartesian', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+39 ('mopint', 'MopacInternal', 1, 0, 0, 1, 0, 0, 0, 0, 'MopacInternal', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+40 ('mopout', 'MopacOutput', 1, 0, 0, 1, 0, 0, 0, 0, 'MopacOutput', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+41 ('pcmod', 'PCModel', 1, 0, 0, 1, 0, 0, 0, 0, 'PCModel', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+42 ('psin', 'PSGVBin', 1, 0, 0, 1, 0, 0, 0, 0, 'PSGVBin', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+43 ('psout', 'PSGVBout', 1, 0, 0, 1, 0, 0, 0, 0, 'PSGVBout', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+44 ('msf', 'QuantaMSF', 1, 0, 0, 1, 0, 0, 0, 0, 'QuantaMSF', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+45 ('schakal', 'Schakal', 1, 0, 0, 1, 0, 0, 0, 0, 'Schakal', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+46 ('shelx', 'ShelX', 1, 0, 0, 1, 0, 0, 0, 0, 'ShelX', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+47 ('smiles', 'SMILES', 1, 0, 0, 1, 0, 0, 0, 0, 'SMILES', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+48 ('spar', 'Spartan', 1, 0, 0, 1, 0, 0, 0, 0, 'Spartan', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+49 ('semi', 'SpartanSE', 1, 0, 0, 1, 0, 0, 0, 0, 'SpartanSE', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+50 ('spmm', 'SpartanMM', 1, 0, 0, 1, 0, 0, 0, 0, 'SpartanMM', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+51 ('mol', 'SybylMol', 1, 0, 0, 1, 0, 0, 0, 0, 'SybylMol', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+52 ('mol2', 'SybylMol2', 1, 0, 0, 1, 0, 0, 0, 0, 'SybylMol2', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+53 ('wiz', 'Conjure', 1, 0, 0, 1, 0, 0, 0, 0, 'Conjure', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+54 ('unixyz', 'UniChemXYZ', 1, 0, 0, 1, 0, 0, 0, 0, 'UniChemXYZ', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+55 ('xyz', 'XYZ', 1, 0, 0, 1, 0, 0, 0, 0, 'XYZ', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+56 ('xed', 'XED', 1, 0, 0, 1, 0, 0, 0, 0, 'XED', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0)
+57 ('basis', 'basisset', 0, 0, 0, 0, 0, 0, 0, 0, 'Basis Set', 'mol file reader', 'Jan Saam', 0, 1, 17, 0)
+58 ('bgf', 'bgf', 1, 1, 0, 1, 1, 1, 0, 1, 'MSI Biograf Format', 'mol file reader', 'Peter Freddolino ', 0, 16, 17, 1)
+59 ('binpos', 'binpos', 0, 0, 0, 1, 0, 0, 0, 1, 'Scripps Binpos', 'mol file reader', 'Brian Bennion', 0, 4, 17, 1)
+60 ('bmcg', 'biomocca', 0, 0, 0, 0, 0, 0, 0, 0, 'Biomocca Volumetric Map', 'mol file reader', 'John Stone', 0, 2, 17, 1)
+61 ('brix,brx', 'brix', 0, 0, 0, 0, 0, 0, 0, 0, 'BRIX Density Map', 'mol file reader', 'Eamon Caddigan', 0, 8, 17, 1)
+62 ('car', 'car', 1, 0, 0, 1, 0, 0, 0, 0, 'InsightII car', 'mol file reader', 'Eamon Caddigan', 0, 5, 17, 1)
+63 ('ccp4,mrc,map', 'ccp4', 0, 0, 0, 0, 0, 0, 0, 0, 'CCP4, MRC Density Map', 'mol file reader', 'Eamon Caddigan, Brendan McMorrow, John Stone', 1, 7, 17, 1)
+64 ('cor', 'cor', 1, 0, 0, 1, 0, 0, 0, 0, 'CHARMM Coordinates', 'mol file reader', 'Eamon Caddigan, John Stone', 0, 9, 17, 1)
+65 ('cpmd', 'cpmd', 0, 0, 0, 1, 0, 0, 0, 0, 'CPMD', 'mol file reader', 'Axel Kohlmeyer, John Stone', 0, 4, 17, 1)
+66 ('mdcrd,crd', 'crd', 0, 0, 0, 1, 0, 0, 0, 1, 'AMBER Coordinates', 'mol file reader', 'Justin Gullingsrud, John Stone', 0, 9, 17, 1)
+67 ('mdcrd,crd', 'crdbox', 0, 0, 0, 1, 0, 0, 0, 1, 'AMBER Coordinates with Periodic Box', 'mol file reader', 'Justin Gullingsrud, John Stone', 0, 9, 17, 1)
+68 ('cub,cube', 'cube', 1, 0, 0, 1, 0, 0, 0, 0, 'Gaussian Cube', 'mol file reader', 'Axel Kohlmeyer, John Stone', 1, 2, 17, 1)
+69 ('dcd', 'dcd', 0, 0, 0, 1, 0, 0, 0, 1, 'CHARMM,NAMD,XPLOR DCD Trajectory', 'mol file reader', 'Axel Kohlmeyer, Justin Gullingsrud, John Stone', 1, 12, 17, 1)
+70 ('dlpolyhist', 'dlpolyhist', 1, 0, 0, 1, 0, 0, 0, 0, 'DL_POLY_C HISTORY', 'mol file reader', 'John Stone', 0, 8, 17, 1)
+71 ('dlpolyhist', 'dlpoly3hist', 1, 0, 0, 1, 0, 0, 0, 0, 'DL_POLY_4 HISTORY', 'mol file reader', 'John Stone', 0, 8, 17, 1)
+72 ('dlpolyconfig', 'dlpolyconfig', 1, 0, 0, 1, 0, 0, 0, 0, 'DL_POLY CONFIG', 'mol file reader', 'Alin M Elena', 0, 1, 17, 1)
+73 ('ds6,dsn6,omap', 'DSN6', 0, 0, 0, 0, 0, 0, 0, 0, 'DSN6', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1)
+74 ('dx', 'dx', 0, 0, 0, 0, 0, 0, 0, 0, 'DX', 'mol file reader', 'Eamon Caddigan, Justin Gullingsrud, John Stone, Leonardo Trabuco', 2, 0, 17, 0)
+75 ('cns,edm,xplor', 'edm', 0, 0, 0, 0, 0, 0, 0, 0, 'XPLOR Electron Density Map', 'mol file reader', 'John Stone, Leonardo Trabuco', 0, 9, 17, 1)
+76 ('fs,fs4', 'fs', 0, 0, 0, 0, 0, 0, 0, 0, 'FS4 Density Map', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1)
+77 ('log', 'gamess', 1, 0, 0, 0, 0, 0, 0, 0, 'GAMESS', 'mol file reader', 'Jan Saam, Markus Dittrich, Johan Strumpfer', 1, 2, 17, 0)
+78 ('srf,SRF,grasp', 'grasp', 0, 0, 0, 0, 0, 0, 0, 0, 'GRASP', 'mol file reader', 'Justin Gullingsrud, John Stone', 0, 8, 17, 1)
+79 ('phi,grd', 'grd', 0, 0, 0, 0, 0, 0, 0, 0, 'GRASP,Delphi Binary Potential Map', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1)
+80 ('grid', 'grid', 0, 0, 0, 0, 0, 0, 0, 0, 'GRID,UHBD Binary Potential Map', 'mol file reader', 'Eamon Caddigan', 0, 3, 17, 1)
+81 ('gro', 'gro', 1, 0, 0, 1, 1, 0, 0, 1, 'Gromacs GRO', 'mol file reader', 'David Norris, Justin Gullingsrud, Magnus Lundborg', 1, 2, 17, 0)
+82 ('g96', 'g96', 1, 0, 0, 1, 0, 0, 0, 0, 'Gromacs g96', 'mol file reader', 'David Norris, Justin Gullingsrud', 1, 2, 17, 0)
+83 ('trr', 'trr', 0, 0, 0, 1, 0, 0, 0, 1, 'Gromacs TRR Trajectory', 'mol file reader', 'David Norris, Justin Gullingsrud, Axel Kohlmeyer', 1, 2, 17, 0)
+84 ('trj', 'trj', 0, 0, 0, 1, 0, 0, 0, 0, 'Gromacs TRJ Trajectory', 'mol file reader', 'David Norris, Justin Gullingsrud', 1, 2, 17, 0)
+85 ('xtc', 'xtc', 0, 0, 0, 1, 0, 0, 0, 0, 'Gromacs XTC Compressed Trajectory', 'mol file reader', 'David Norris, Justin Gullingsrud', 1, 2, 17, 0)
+86 ('js', 'js', 1, 1, 1, 1, 1, 1, 1, 1, 'js', 'mol file reader', 'John Stone', 2, 15, 17, 1)
+87 ('lammpstrj', 'lammpstrj', 1, 0, 0, 1, 1, 0, 0, 1, 'LAMMPS Trajectory', 'mol file reader', 'Marco Kalweit, Axel Kohlmeyer, Lutz Maibaum, John Stone', 0, 22, 17, 0)
+88 ('map', 'map', 0, 0, 0, 0, 0, 0, 0, 0, 'Autodock Grid Map', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1)
+89 ('mdf', 'mdf', 1, 1, 0, 0, 0, 0, 0, 0, 'InsightII MDF', 'mol file reader', 'Eamon Caddigan, Axel Kohlmeyer', 0, 6, 17, 1)
+90 ('mol2', 'mol2', 1, 1, 0, 1, 1, 1, 0, 1, 'MDL mol2', 'mol file reader', 'Peter Freddolino, Eamon Caddigan', 0, 17, 17, 1)
+91 ('molden', 'molden', 1, 0, 0, 0, 0, 0, 0, 0, 'Molden', 'mol file reader', 'Markus Dittrich, Jan Saam, Alexey Titov', 0, 10, 17, 1)
+92 ('mesh', 'pmesh', 0, 0, 0, 0, 0, 0, 0, 0, 'polygon mesh', 'mol file reader', 'Brian Bennion', 1, 0, 17, 1)
+93 ('face,vert', 'msms', 0, 0, 0, 0, 0, 0, 0, 0, 'MSMS Surface Mesh', 'mol file reader', 'John Stone', 0, 5, 17, 1)
+94 ('coor', 'namdbin', 0, 0, 0, 1, 0, 0, 0, 1, 'NAMD Binary Coordinates', 'mol file reader', 'James Phillips, Justin Gullingsrud', 0, 2, 17, 1)
+95 ('off', 'off', 0, 0, 0, 0, 0, 0, 0, 0, 'Object File Format (OFF)', 'mol file reader', 'Francois-Xavier Coudert', 0, 4, 17, 1)
+96 ('prmtop,parm7', 'parm7', 1, 1, 0, 0, 0, 0, 0, 0, 'AMBER7 Parm', 'mol file reader', 'Brian Bennion, Justin Gullingsrud, John Stone', 0, 15, 17, 0)
+97 ('parm', 'parm', 1, 1, 0, 0, 0, 0, 0, 0, 'AMBER Parm', 'mol file reader', 'Justin Gullingsrud, John Stone', 4, 4, 17, 1)
+98 ('pbeq, phi80', 'pbeq', 0, 0, 0, 0, 0, 0, 0, 0, 'CHARMM PBEQ Binary Potential Map', 'mol file reader', 'John Stone', 0, 4, 17, 1)
+99 ('pdb,ent', 'pdb', 1, 1, 0, 1, 1, 0, 0, 1, 'PDB', 'mol file reader', 'Justin Gullingsrud, John Stone', 1, 16, 17, 1)
+100 ('cif', 'pdbx', 1, 1, 0, 1, 1, 0, 0, 1, 'mmCIF/PDBX', 'mol file reader', 'Brendan McMorrow', 0, 9, 17, 1)
+101 ('big', 'delphibig', 0, 0, 0, 0, 0, 0, 0, 0, "Delphi 'Big' Formatted Potential Map", 'mol file reader', 'Eamon Caddigan', 0, 7, 17, 1)
+102 ('plt', 'plt', 0, 0, 0, 0, 0, 0, 0, 0, 'gOpenmol plt', 'mol file reader', 'Eamon Caddigan', 0, 4, 17, 1)
+103 ('ply', 'ply', 0, 0, 0, 0, 0, 0, 0, 0, 'PLY', 'mol file reader', 'John Stone', 0, 2, 17, 1)
+104 ('pqr', 'pqr', 1, 0, 0, 1, 1, 0, 0, 1, 'PQR', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1)
+105 ('psf', 'psf', 1, 1, 1, 0, 1, 1, 1, 0, 'CHARMM,NAMD,XPLOR PSF', 'mol file reader', 'Justin Gullingsrud, John Stone', 1, 9, 17, 1)
+106 ('r3d', 'raster3d', 0, 0, 0, 0, 0, 0, 0, 0, 'Raster3d Scene File', 'mol file reader', 'Justin Gullingsrud', 0, 3, 17, 1)
+107 ('rst7', 'rst7', 0, 0, 0, 1, 0, 0, 0, 1, 'AMBER7 Restart', 'mol file reader', 'Brian Bennion, Axel Kohlmeyer', 0, 4, 17, 0)
+108 ('sit,situs', 'situs', 0, 0, 0, 0, 0, 0, 0, 0, 'Situs Density Map', 'mol file reader', 'John Stone, Leonardo Trabuco', 1, 5, 17, 1)
+109 ('spi,spider', 'spider', 0, 0, 0, 0, 0, 0, 0, 0, 'SPIDER Density Map', 'mol file reader', 'John Stone', 0, 7, 17, 1)
+110 ('stl', 'stl', 0, 0, 0, 0, 0, 0, 0, 0, 'STL Stereolithography Triangle Mesh', 'mol file reader', 'Eamon Caddigan', 3, 0, 17, 1)
+111 ('arc', 'tinker', 1, 0, 0, 1, 0, 0, 0, 0, 'Tinker', 'mol file reader', 'John Stone', 0, 5, 17, 1)
+112 ('uhbdgrd,grd', 'uhbd', 0, 0, 0, 0, 0, 0, 0, 0, 'UHBD Grid', 'mol file reader', 'Alexander Spaar, Justin Gullingsrud', 0, 5, 17, 1)
+113 ('CHGCAR', 'CHGCAR', 0, 0, 0, 0, 0, 0, 0, 0, 'VASP_CHGCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0)
+114 ('OUTCAR', 'OUTCAR', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_OUTCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0)
+115 ('PARCHG', 'PARCHG', 0, 0, 0, 0, 0, 0, 0, 0, 'VASP_PARCHG', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0)
+116 ('POSCAR', 'POSCAR', 1, 0, 0, 1, 1, 0, 0, 1, 'VASP_POSCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0)
+117 ('VASP_XDATCAR5', 'VASP_XDATCAR5', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_XDATCAR5', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0)
+118 ('XDATCAR', 'XDATCAR', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_XDATCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0)
+119 ('xml', 'xml', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_xml', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0)
+120 ('vtk', 'vtk', 0, 0, 0, 0, 0, 0, 0, 0, 'VTK grid reader', 'mol file reader', 'John Stone', 0, 2, 17, 0)
+121 ('xbgf', 'xbgf', 1, 1, 0, 1, 1, 1, 0, 1, 'Internal Paratool Format', 'mol file reader', 'Peter Freddolino ', 0, 13, 17, 1)
+122 ('axsf,xsf', 'xsf', 1, 0, 0, 1, 0, 0, 0, 0, '(Animated) XCrySDen Structure File', 'mol file reader', 'Axel Kohlmeyer, John Stone', 0, 10, 17, 1)
+123 ('xyz,xmol', 'xyz', 1, 0, 0, 1, 1, 0, 0, 1, 'XYZ', 'mol file reader', 'Mauricio Carrillo Tripp, John E. Stone, Axel Kohlmeyer', 1, 3, 17, 1)
+124 ('dtr,dtr/,stk,atr,atr/', 'dtr', 0, 0, 0, 1, 0, 0, 0, 1, 'DESRES Trajectory', 'mol file reader', 'D.E. Shaw Research', 4, 1, 17, 0)
+125 ('mae,maeff,cms', 'mae', 1, 1, 0, 1, 1, 1, 0, 1, 'Maestro File', 'mol file reader', 'D. E. Shaw Research', 3, 8, 17, 0)
+<Swig Object of type 'molfile_plugin_t *' at 0x10c2e13c0>
+This passed
+<molobject object at 0x10d30df08>
+This passed too
+17411
+Here
+[b'N' b'' b'' ..., b'' b'' b'']
+<class 'numpy.ndarray'>
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'I'
+b'L'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'\\'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b']'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'^'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'N'
+b''
+b''
+b''
+b''
+b''
+b'_'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'`'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'a'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'A'
+b'S'
+b'P'
+b''
+b''
+b''
+b''
+b''
+b'b'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Y'
+b'S'
+b''
+b''
+b''
+b''
+b''
+b'c'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'Y'
+b''
+b''
+b''
+b''
+b''
+b'd'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'Y'
+b''
+b''
+b''
+b''
+b''
+b'd'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'Y'
+b''
+b''
+b''
+b''
+b''
+b'd'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'Y'
+b''
+b''
+b''
+b''
+b''
+b'd'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'Y'
+b''
+b''
+b''
+b''
+b''
+b'd'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'Y'
+b''
+b''
+b''
+b''
+b''
+b'd'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'G'
+b'L'
+b'Y'
+b''
+b''
+b''
+b''
+b''
+b'd'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b'3'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'L'
+b'E'
+b'U'
+b''
+b''
+b''
+b''
+b''
+b'e'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'N'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'A'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'B'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'B'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'G'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'Z'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'E'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'D'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'C'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'C'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'C'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'C'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'C'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'P'
+b'H'
+b'E'
+b''
+b''
+b''
+b''
+b''
+b'f'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'g'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'g'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'g'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'h'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'h'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'h'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'i'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'i'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'i'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'j'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'j'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'j'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'k'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'k'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'k'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'l'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'l'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'l'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'm'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'm'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'm'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'n'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'1'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'n'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'H'
+b'W'
+b'2'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'S'
+b'O'
+b'L'
+b''
+b''
+b''
+b''
+b''
+b'n'
+b'\x01'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b''
+b'O'
+b'W'
+b''
+b''
+b''
+b''
+b''
diff --git a/pymolfile/molfile/libpymolfile.i b/pymolfile/molfile/libpymolfile.i
index e858607bcd8dcac49060aa144ac6cc507cb44e2e..b5027679e0b522b8f8a74398d4db4172ff9c30da 100644
--- a/pymolfile/molfile/libpymolfile.i
+++ b/pymolfile/molfile/libpymolfile.i
@@ -24,10 +24,12 @@
    Published under BSD LICENSE
  */
 #define SWIG_FILE_WITH_INIT
+#define __STDC_FORMAT_MACROS
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
+#include <inttypes.h>
 #include "molfile_plugin.h"
 #include "libmolfile_plugin.h"
 #include "vmdplugin.h"
@@ -37,6 +39,7 @@
 %include "numpy.i"
 
 %init %{
+Py_Initialize();
 import_array();
 %}
 
@@ -54,6 +57,57 @@ import_array();
 enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, 
        pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR };
 
+
+/* Definition of molfile_atoms_t from molfile_plugin.h */
+%inline %{
+
+/*
+struct MolAtoms {
+    char name[16]; 
+    char type[16]; 
+    char resname[8];
+    int resid;
+    char segid[8];
+    char chain[2];
+    char altloc[2];
+    char insertion[2];
+    float occupancy;
+    float bfactor;
+    float mass;
+    float charge;
+    float radius;
+    float atomicnumber;
+    float ctnumber;
+};
+
+void del_plugin_structure(PyObject* pymolfile_atoms){
+    delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure");
+}
+
+static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure);
+}
+*/
+void del_plugin(PyObject* pymolfile_plugin){
+    delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin");
+}
+
+void del_atoms(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms");
+}
+
+void del_atomname(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname");
+}
+
+
+static PyObject* alloc_plugin(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin);
+}
+
+%}
+
+
 /* pymolfile.c 
    initialize and finalize molfile plugins
 */
@@ -126,20 +180,290 @@ PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) {
   }
 %}
 
+
+%feature("autodoc", "0") my_open_file_read;
+%rename (open_file_read) my_open_file_read;
+%exception my_open_file_read {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) {
+    if (PyType_Ready(&MolObjectType) < 0)
+        return NULL;
+    PyTypeObject *type = &MolObjectType;
+    /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */
+    /*MolObject* plugin_c = new MolObject;*/
+    MolObject *plugin_c;
+    plugin_c = (MolObject *)type->tp_alloc(type, 0);
+    /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/
+    plugin_c->plugin = plugin;
+    plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms);
+    plugin_c->natoms = natoms;
+    /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */
+    /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */
+    PyObject* plugin_handle = (PyObject *)plugin_c;
+    /*if(!plugin_handle) printf("Not assigned\n");*/
+    /*PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/
+    return plugin_handle;
+  }
+%}
+
+/*
+%typemap( argout ) ( char **MolfileAtomT_CharArray )
+{
+    // The result variable is the return value from
+    // c_ephcom_read_constants, the number of actual values that are
+    // defined for cnames/values.
+    npy_intp     dims[] = { result };
+    PyArray_Dims newshape_location;
+    PyArray_Dims * newshape = &newshape_location;
+    PyObject * status_check;
+    newshape->len = 1;
+    newshape->ptr = dims;
+
+    // resize array$argnum to actual size needed.
+    // Follow directions at http://www.mail-archive.com/numpy-discussion@scipy.org/msg13013.html
+    status_check = PyArray_Resize( (PyArrayObject *) array$argnum, newshape, 0, NPY_CORDER );
+    if ( !status_check )
+        SWIG_fail;
+    Py_DECREF( status_check );
+    $result = SWIG_Python_AppendOutput( $result, array$argnum );
+}
+%typemap( freearg ) ( char **MolfileAtomT_CharArray )
+{
+    free( $1 );
+}
+*/
+
 /*
-%feature("autodoc", "0") molfile_open;
-%exception molfile_open {
+#define DIM 3
+typedef int imatrix[DIM][DIM];
+typedef int ivec[DIM];
+typedef float fmatrix[DIM][DIM];
+typedef float fvec[DIM];
+*/
+
+/* Reading from xdr files */
+/*
+%apply (float INPLACE_ARRAY2[ANY][ANY]) {(matrix box)}
+%apply (int DIM1, int DIM2, float* INPLACE_ARRAY2) {(int natoms,  int _DIM,  float *x),
+                                                    (int vnatoms, int v_DIM, float *v),
+                                                    (int fnatoms, int f_DIM, float *f)}
+*/
+/*
+%apply (int INPLACE_IARRAY2[ANY][ANY]) {(imatrix intdata)}
+%apply (float INPLACE_FARRAY2[ANY][ANY]) {(fmatrix floatdata)}
+%apply (int DIM1, int* INPLACE_IARRAY2) {(int rnatoms, int* MolAtom_resid)}
+%apply (int DIM1, float* INPLACE_FARRAY2) {(int mnatoms, float* MolAtom_mass),
+                                           (int anatoms, float* MolAtom_atomicnumber)}
+*/
+/*
+%inline %{
+int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, 
+                   int* natoms, char** MolAtom_name, 
+                   int* natoms, char** MolAtom_type, 
+                   int* natoms, char** MolAtom_resname,
+                   int* natoms, int**  MolAtom_resid, 
+                   int* natoms, char** MolAtom_segid,
+                   int* natoms, char** MolAtom_chain,
+                   int* natoms, char** MolAtom_altloc,
+                   int* natoms, char** MolAtom_insertion,
+                   int* natoms, float** MolAtom_occupancy,
+                   int* natoms, float** MolAtom_bfactor,
+                   int* natoms, float** MolAtom_mass,
+                   int* natoms, float** MolAtom_charge,
+                   int* natoms, float** MolAtom_radius,
+                   int* natoms, float** MolAtom_atomicnumber,
+                   int* natoms, float** MolAtom_ctnumber) {
+    molfile_atom_t* atoms;
+    atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t));
+    plugin->read_structure(fhandle, options, atoms);
+    MolAtom_name = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_type = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resname = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resid = (int **)malloc(natoms,sizeof(int*));
+%}
+*/
+/*
+%inline %{
+int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, 
+                   int natoms, char** MolAtom_name, 
+                   int tnatoms, char** MolAtom_type, 
+                   int rnatoms, int*  MolAtom_resid, 
+                   int mnatoms, float* MolAtom_mass,
+                   int anatoms, float* MolAtom_atomicnumber) {
+    int i;
+    molfile_atom_t* atoms;
+    molfile_atom_t atm;
+    atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t));
+    plugin->read_structure(fhandle, options, atoms);
+    if(atoms == NULL) { free(atoms); return 1; }
+    if(atoms->type == NULL || atoms->name == NULL){ free(atoms); return 1; }
+    MolAtom_name = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_type = (char **)malloc(natoms,sizeof(char*));
+    MolAtom_resid = (int *)malloc(natoms,sizeof(int));
+    MolAtom_mass = (float *)malloc(natoms,sizeof(float));
+    MolAtom_atomicnumber = (float *)malloc(natoms,sizeof(float));
+    for (i=0;i<natoms;i++){
+        atm = atoms[i];
+        MolAtom_name[i] = atm.name;
+        MolAtom_type[i] = atm.type;
+        MolAtom_resid[i] = atm.resid;
+        MolAtom_mass[i] = atm.mass;
+        MolAtom_atomicnumber[i] = atm.atomicnumber;
+    }
+    return 0;
+    }
+%}
+*/
+
+%feature("autodoc", "0") my_read_structure;
+%rename (read_structure) my_read_structure;
+extern PyObject * my_read_structure(PyObject* molpack);
+
+/*
+%feature("autodoc", "0") my_read_structure;
+%rename (read_structure) my_read_structure;
+%exception my_read_structure {
   $action
   if (PyErr_Occurred()) SWIG_fail;
 }
 %inline %{
-PyObject * molfile_open(molfile_plugin_t* plugin, ) {
-    int *plugno = &plugin_no;
-    return plugin;
+PyObject * my_read_structure(PyObject* molpack) {
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    char** atom_names;
+    char** atom_types;
+    PyObject *npatoms = NULL; */
+    /*MolObject* plugin_handle = (MolObject*)PyCapsule_GetPointer(molpack, "plugin");*/
+/*    MolObject* plugin_handle = (MolObject*)molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    printf("Test1\n");
+    status = plugin->read_structure(file_handle, &options, atoms);
+    printf("Test2 %d\n",status);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return NULL;
+    }
+    printf("Test3\n");
+    npy_intp natoms[1] = { numatoms };
+    
+    PyArrayObject* oresid;
+    int64_t* cresid;
+    
+    int typenum;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms }; */
+    /*dims[0] = numatoms;*/
+/*    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    npy_intp* n = PyArray_DIMS(oresid);
+    printf("dimensions %ld\n", n[0]);
+    cresid = (int64_t*) PyArray_DATA(oresid);
+    
+    PyObject* npatomresid = NULL;
+    char** MolAtom_name = (char **)malloc(numatoms*sizeof(char*));
+    char** MolAtom_type = (char **)malloc(numatoms*sizeof(char*));
+    int64_t* MolAtom_resid = NULL; */
+    /*int64_t* MolAtom_resid = (int64_t *)malloc(numatoms*sizeof(int64_t));*/
+/*    float* MolAtom_mass = (float *)malloc(numatoms*sizeof(float));
+    float* MolAtom_atomicnumber = (float *)malloc(numatoms*sizeof(float));
+    for (i=0;i<numatoms;i++){
+        MolAtom_name[i] = atoms[i].name;
+        MolAtom_type[i] = atoms[i].type;
+        cresid[i] = (int64_t) atoms[i].resid;
+        MolAtom_mass[i] = atoms[i].mass;
+        MolAtom_atomicnumber[i] = atoms[i].atomicnumber;
+    } */
+    /*Py_DECREF( obj );*/
+    /*npy_intp dims[3];*/ /* PyArray_AsCArray is for ndim <= 3 */
+/*    PyArray_Descr *descr;
+    npatoms = PyArray_SimpleNewFromData(1, natoms, NPY_USERDEF, atoms);
+    printf("Test4 numatoms=%d\n", numatoms);
+    PyObject* npatomname = NULL;
+    npatomname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_name[0]);
+    PyObject* npatomtype = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_type); */
+    /*PyObject* npatomresname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->resname);*/
+    /*PyObject* npatomsegid = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->segid);*/
+    /*PyObject* npatomchain = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->chain);*/
+    /*PyObject* npatomaltloc = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->altloc);*/
+    /*PyObject* npatominsert = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->insertion);*/
+    /*PyObject* npatomoccup = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->occupancy);*/
+    /*PyObject* npatombfact = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->bfactor);*/
+/*    PyObject* npatommass = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, MolAtom_mass);    */
+    /*PyObject* npatomcharge = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->charge);*/
+    /*PyObject* npatomradius = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->radius);*/
+/*    PyObject* npatomicnumber = PyArray_SimpleNewFromData(1, natoms, NPY_INT64, MolAtom_atomicnumber); */
+    /*if (npatomname==NULL   || npatomtype==NULL     || npatomresname==NULL || 
+        npatomresid==NULL  || npatomsegid==NULL    || npatomchain==NULL   )
+    {
+      free(atoms);
+      Py_XDECREF(npatomname);   Py_XDECREF(npatomtype);
+      Py_XDECREF(npatomresname); Py_XDECREF(npatomresid);  Py_XDECREF(npatomsegid); 
+      Py_XDECREF(npatomchain);   Py_XDECREF(npatomaltloc); Py_XDECREF(npatominsert); 
+      Py_XDECREF(npatomoccup);   Py_XDECREF(npatombfact);  Py_XDECREF(npatommass); 
+      Py_XDECREF(npatomcharge);  Py_XDECREF(npatomradius); Py_XDECREF(npatomicnumber); 
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return 0;
+    }
+    PyArray_BASE(npatomname) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomtype) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomresname) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomresid) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomsegid) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomchain) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatomaltloc) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatominsert) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomoccup) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatombfact) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatommass) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomcharge) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomradius) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomicnumber) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatoms) = PyCObject_FromVoidPtr(atoms, free); 
+    PyArray_BASE((PyArrayObject *)npatoms) = PyCapsule_New(atoms, "atoms", del_atoms);*/
+    /*PyArray_BASE((PyArrayObject *)npatoms); */
+/*    printf("Test4-2\n"); */
+    /*PyObject* Py_MolAtom_name = PyCapsule_New((void*)MolAtom_name, "atomname", del_atomname);*/
+    /*PyObject* Py_MolAtom_name;
+    Py_INCREF(Py_MolAtom_name);*/
+/*    printf("Test4-3\n"); */
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomname, Py_MolAtom_name);*/
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomtype, MolAtom_type);
+    PyArray_SetBaseObject((PyArrayObject *)npatomresid, MolAtom_resid);
+    PyArray_SetBaseObject((PyArrayObject *)npatommass, MolAtom_mass);
+    PyArray_SetBaseObject((PyArrayObject *)npatomicnumber, MolAtom_atomicnumber); */
+/*    printf("Test5\n");
+    PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    printf("Test6\n");
+    PyTuple_SET_ITEM(tuple, 1, npatomname); */
+    /*PyTuple_SET_ITEM(tuple, 2, npatomtype);
+    PyTuple_SET_ITEM(tuple, 3, npatomresid);
+    PyTuple_SET_ITEM(tuple, 4, npatommass);
+    PyTuple_SET_ITEM(tuple, 5, npatomicnumber);
+    PyObject* vars = PyDict_New();
+    printf("Test7\n");
+    PyDict_SetItemString( vars, "name", npatomname ); */
+/*    printf("Test8\n"); */
+    /*PyDict_SetItemString( vars, "resid", npatomresid ); */
+    /*return Py_BuildValue("O", oresid); */
+    /*return PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);*/
+/*    return 0;
   }
 %}
 */
 
+
 /* 
    python wrappers for functions 
    and structure data in  molfile_plugin.h
@@ -167,7 +491,20 @@ PyObject * molfile_open(molfile_plugin_t* plugin, ) {
 
 /* molfile_plugin_t */
 
-
+/*
+%feature("autodoc", "0") molfile_open_file_read;
+%rename (open_file_read) molfile_open_file_read;
+%exception molfile_open_file_read {
+  $action
+  if (PyErr_Occurred()) SWIG_fail;
+}
+%inline %{
+PyObject * molfile_open_file_read(molfile_plugin_t* plugin, char *fname, int natoms) {
+    int *plugno = &plugin_no;
+    return plugin;
+  }
+%}
+*/
 /*
   void *(* open_file_read)(const char *filepath, const char *filetype, 
       int *natoms);
diff --git a/pymolfile/molfile/libpymolfile.py b/pymolfile/molfile/libpymolfile.py
index 99826d44affeba9f88384ea9f7c7c7f98d6e0212..504cde21c682b39139f1be654c5966b33f6d28d0 100644
--- a/pymolfile/molfile/libpymolfile.py
+++ b/pymolfile/molfile/libpymolfile.py
@@ -8,7 +8,7 @@
 
 :Author:  Berk Onat <b.onat@warwick.ac.uk>
 :Year:    2017
-:Licence: BSD LICENSE
+:Licence: UIUC LICENSE
 
 
 
@@ -113,26 +113,136 @@ pluginNOMEM = _libpymolfile.pluginNOMEM
 pluginENDOFFILE = _libpymolfile.pluginENDOFFILE
 pluginFILENOTFOUND = _libpymolfile.pluginFILENOTFOUND
 pluginFORMATERROR = _libpymolfile.pluginFORMATERROR
+class MolAtoms(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, MolAtoms, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, MolAtoms, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["name"] = _libpymolfile.MolAtoms_name_set
+    __swig_getmethods__["name"] = _libpymolfile.MolAtoms_name_get
+    if _newclass:
+        name = _swig_property(_libpymolfile.MolAtoms_name_get, _libpymolfile.MolAtoms_name_set)
+    __swig_setmethods__["type"] = _libpymolfile.MolAtoms_type_set
+    __swig_getmethods__["type"] = _libpymolfile.MolAtoms_type_get
+    if _newclass:
+        type = _swig_property(_libpymolfile.MolAtoms_type_get, _libpymolfile.MolAtoms_type_set)
+    __swig_setmethods__["resname"] = _libpymolfile.MolAtoms_resname_set
+    __swig_getmethods__["resname"] = _libpymolfile.MolAtoms_resname_get
+    if _newclass:
+        resname = _swig_property(_libpymolfile.MolAtoms_resname_get, _libpymolfile.MolAtoms_resname_set)
+    __swig_setmethods__["resid"] = _libpymolfile.MolAtoms_resid_set
+    __swig_getmethods__["resid"] = _libpymolfile.MolAtoms_resid_get
+    if _newclass:
+        resid = _swig_property(_libpymolfile.MolAtoms_resid_get, _libpymolfile.MolAtoms_resid_set)
+    __swig_setmethods__["segid"] = _libpymolfile.MolAtoms_segid_set
+    __swig_getmethods__["segid"] = _libpymolfile.MolAtoms_segid_get
+    if _newclass:
+        segid = _swig_property(_libpymolfile.MolAtoms_segid_get, _libpymolfile.MolAtoms_segid_set)
+    __swig_setmethods__["chain"] = _libpymolfile.MolAtoms_chain_set
+    __swig_getmethods__["chain"] = _libpymolfile.MolAtoms_chain_get
+    if _newclass:
+        chain = _swig_property(_libpymolfile.MolAtoms_chain_get, _libpymolfile.MolAtoms_chain_set)
+    __swig_setmethods__["altloc"] = _libpymolfile.MolAtoms_altloc_set
+    __swig_getmethods__["altloc"] = _libpymolfile.MolAtoms_altloc_get
+    if _newclass:
+        altloc = _swig_property(_libpymolfile.MolAtoms_altloc_get, _libpymolfile.MolAtoms_altloc_set)
+    __swig_setmethods__["insertion"] = _libpymolfile.MolAtoms_insertion_set
+    __swig_getmethods__["insertion"] = _libpymolfile.MolAtoms_insertion_get
+    if _newclass:
+        insertion = _swig_property(_libpymolfile.MolAtoms_insertion_get, _libpymolfile.MolAtoms_insertion_set)
+    __swig_setmethods__["occupancy"] = _libpymolfile.MolAtoms_occupancy_set
+    __swig_getmethods__["occupancy"] = _libpymolfile.MolAtoms_occupancy_get
+    if _newclass:
+        occupancy = _swig_property(_libpymolfile.MolAtoms_occupancy_get, _libpymolfile.MolAtoms_occupancy_set)
+    __swig_setmethods__["bfactor"] = _libpymolfile.MolAtoms_bfactor_set
+    __swig_getmethods__["bfactor"] = _libpymolfile.MolAtoms_bfactor_get
+    if _newclass:
+        bfactor = _swig_property(_libpymolfile.MolAtoms_bfactor_get, _libpymolfile.MolAtoms_bfactor_set)
+    __swig_setmethods__["mass"] = _libpymolfile.MolAtoms_mass_set
+    __swig_getmethods__["mass"] = _libpymolfile.MolAtoms_mass_get
+    if _newclass:
+        mass = _swig_property(_libpymolfile.MolAtoms_mass_get, _libpymolfile.MolAtoms_mass_set)
+    __swig_setmethods__["charge"] = _libpymolfile.MolAtoms_charge_set
+    __swig_getmethods__["charge"] = _libpymolfile.MolAtoms_charge_get
+    if _newclass:
+        charge = _swig_property(_libpymolfile.MolAtoms_charge_get, _libpymolfile.MolAtoms_charge_set)
+    __swig_setmethods__["radius"] = _libpymolfile.MolAtoms_radius_set
+    __swig_getmethods__["radius"] = _libpymolfile.MolAtoms_radius_get
+    if _newclass:
+        radius = _swig_property(_libpymolfile.MolAtoms_radius_get, _libpymolfile.MolAtoms_radius_set)
+    __swig_setmethods__["atomicnumber"] = _libpymolfile.MolAtoms_atomicnumber_set
+    __swig_getmethods__["atomicnumber"] = _libpymolfile.MolAtoms_atomicnumber_get
+    if _newclass:
+        atomicnumber = _swig_property(_libpymolfile.MolAtoms_atomicnumber_get, _libpymolfile.MolAtoms_atomicnumber_set)
+    __swig_setmethods__["ctnumber"] = _libpymolfile.MolAtoms_ctnumber_set
+    __swig_getmethods__["ctnumber"] = _libpymolfile.MolAtoms_ctnumber_get
+    if _newclass:
+        ctnumber = _swig_property(_libpymolfile.MolAtoms_ctnumber_get, _libpymolfile.MolAtoms_ctnumber_set)
+
+    def __init__(self):
+        this = _libpymolfile.new_MolAtoms()
+        try:
+            self.this.append(this)
+        except __builtin__.Exception:
+            self.this = this
+    __swig_destroy__ = _libpymolfile.delete_MolAtoms
+    __del__ = lambda self: None
+MolAtoms_swigregister = _libpymolfile.MolAtoms_swigregister
+MolAtoms_swigregister(MolAtoms)
+
+
+def del_plugin_structure(pymolfile_atoms: 'PyObject *') -> "void":
+    return _libpymolfile.del_plugin_structure(pymolfile_atoms)
+del_plugin_structure = _libpymolfile.del_plugin_structure
+
+def alloc_plugin_structure(arg1: 'PyObject *', args: 'PyObject *') -> "PyObject *":
+    return _libpymolfile.alloc_plugin_structure(arg1, args)
+alloc_plugin_structure = _libpymolfile.alloc_plugin_structure
+
+def del_plugin(pymolfile_plugin: 'PyObject *') -> "void":
+    return _libpymolfile.del_plugin(pymolfile_plugin)
+del_plugin = _libpymolfile.del_plugin
 
-def molfile_plugin_list(maxsize):
+def del_atoms(pymolfile_atoms: 'PyObject *') -> "void":
+    return _libpymolfile.del_atoms(pymolfile_atoms)
+del_atoms = _libpymolfile.del_atoms
+
+def del_atomname(pymolfile_atoms: 'PyObject *') -> "void":
+    return _libpymolfile.del_atomname(pymolfile_atoms)
+del_atomname = _libpymolfile.del_atomname
+
+def alloc_plugin(arg1: 'PyObject *', args: 'PyObject *') -> "PyObject *":
+    return _libpymolfile.alloc_plugin(arg1, args)
+alloc_plugin = _libpymolfile.alloc_plugin
+
+def molfile_plugin_list(maxsize: 'int') -> "molfile_plugin_t **":
     """molfile_plugin_list(maxsize) -> molfile_plugin_t **"""
     return _libpymolfile.molfile_plugin_list(maxsize)
 
-def molfile_init():
+def molfile_init() -> "int":
     """molfile_init() -> int"""
     return _libpymolfile.molfile_init()
 
-def molfile_finish():
+def molfile_finish() -> "int":
     """molfile_finish() -> int"""
     return _libpymolfile.molfile_finish()
 
-def get_plugin(plugin_list, plugin_no):
+def get_plugin(plugin_list: 'molfile_plugin_t **', plugin_no: 'int') -> "molfile_plugin_t *":
     """get_plugin(plugin_list, plugin_no) -> molfile_plugin_t *"""
     return _libpymolfile.get_plugin(plugin_list, plugin_no)
 
-def molfile_plugin_info(plugin_list, plugin_no):
+def molfile_plugin_info(plugin_list: 'molfile_plugin_t **', plugin_no: 'int') -> "PyObject *":
     """molfile_plugin_info(plugin_list, plugin_no) -> PyObject *"""
     return _libpymolfile.molfile_plugin_info(plugin_list, plugin_no)
+
+def open_file_read(plugin: 'molfile_plugin_t *', fname: 'char *', ftype: 'char *', natoms: 'int') -> "PyObject *":
+    """open_file_read(plugin, fname, ftype, natoms) -> PyObject *"""
+    return _libpymolfile.open_file_read(plugin, fname, ftype, natoms)
+
+def read_structure(molpack: 'PyObject *') -> "PyObject *":
+    """read_structure(molpack) -> PyObject *"""
+    return _libpymolfile.read_structure(molpack)
 # This file is compatible with both classic and new-style classes.
 
 
diff --git a/pymolfile/molfile/libpymolfile_wrap.c b/pymolfile/molfile/libpymolfile_wrap.c
index 6f1adbdcb0d89209aadcc05ce50230698c431e8d..5b5f68509360007f255d744fe232957bf8eeb830 100644
--- a/pymolfile/molfile/libpymolfile_wrap.c
+++ b/pymolfile/molfile/libpymolfile_wrap.c
@@ -2979,11 +2979,12 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
 
 /* -------- TYPES TABLE (BEGIN) -------- */
 
-#define SWIGTYPE_p_char swig_types[0]
-#define SWIGTYPE_p_int swig_types[1]
+#define SWIGTYPE_p_MolAtoms swig_types[0]
+#define SWIGTYPE_p_char swig_types[1]
 #define SWIGTYPE_p_molfile_plugin_t swig_types[2]
-static swig_type_info *swig_types[4];
-static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0};
+#define SWIGTYPE_p_p_molfile_plugin_t swig_types[3]
+static swig_type_info *swig_types[5];
+static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -3020,10 +3021,12 @@ static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0};
    Published under BSD LICENSE
  */
 #define SWIG_FILE_WITH_INIT
+#define __STDC_FORMAT_MACROS
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
+#include <inttypes.h>
 #include "molfile_plugin.h"
 #include "libmolfile_plugin.h"
 #include "vmdplugin.h"
@@ -3035,7 +3038,7 @@ static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0};
 #endif
 #include "stdio.h"
 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
-#include <numpy/arrayobject.h>
+#include "numpy/arrayobject.h"
 
 
 SWIGINTERNINLINE PyObject*
@@ -3045,54 +3048,241 @@ SWIGINTERNINLINE PyObject*
 }
 
 
-PyObject * molfile_plugin_info(molfile_plugin_t *plugin_list, int plugin_no) {
-    molfile_plugin_t *plugin;
-    void *plugin_handle;
-    int has_readstructure = 0;
-    int has_readbonds = 0;
-    int has_readangles = 0;
-    int has_writestructure = 0;
-    int has_writebonds = 0;
-    int has_writeangles = 0;
-    int has_readnexttimestep = 0;
-    int has_writetimestep = 0;
-    int plugin_list_size = sizeof(plugin_list) / sizeof(molfile_plugin_t*);
-    if (&plugin_no==NULL || plugin_no<0 || plugin_no>plugin_list_size){
-      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin handle no should be given, be positive value and should not exceed the list length. You set '%d'", pluginNOINIT, plugin_no);
-      return 0;
+
+
+struct MolAtoms {
+    char name[16]; 
+    char type[16]; 
+    char resname[8];
+    int resid;
+    char segid[8];
+    char chain[2];
+    char altloc[2];
+    char insertion[2];
+    float occupancy;
+    float bfactor;
+    float mass;
+    float charge;
+    float radius;
+    float atomicnumber;
+    float ctnumber;
+};
+
+void del_plugin_structure(PyObject* pymolfile_atoms){
+    delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure");
+}
+
+static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure);
+}
+
+void del_plugin(PyObject* pymolfile_plugin){
+    delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin");
+}
+
+void del_atoms(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms");
+}
+
+void del_atomname(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname");
+}
+
+
+static PyObject* alloc_plugin(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin);
+}
+
+
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_TypeQuery("_p_char");
+    init = 1;
+  }
+  return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+{
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+  if (PyBytes_Check(obj))
+#else
+  if (PyUnicode_Check(obj))
+#endif
+#else  
+  if (PyString_Check(obj))
+#endif
+  {
+    char *cstr; Py_ssize_t len;
+#if PY_VERSION_HEX>=0x03000000
+#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+    if (!alloc && cptr) {
+        /* We can't allow converting without allocation, since the internal
+           representation of string in Python 3 is UCS-2/UCS-4 but we require
+           a UTF-8 representation.
+           TODO(bhy) More detailed explanation */
+        return SWIG_RuntimeError;
     }
-    plugin = plugin_list[plugin_no];
-    if(plugin==NULL || !plugin->open_file_read){
-      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin '%d' is not initialized.", pluginNOINIT, plugin_no);
-      return 0;
+    obj = PyUnicode_AsUTF8String(obj);
+    if(alloc) *alloc = SWIG_NEWOBJ;
+#endif
+    PyBytes_AsStringAndSize(obj, &cstr, &len);
+#else
+    PyString_AsStringAndSize(obj, &cstr, &len);
+#endif
+    if (cptr) {
+      if (alloc) {
+	/* 
+	   In python the user should not be able to modify the inner
+	   string representation. To warranty that, if you define
+	   SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string
+	   buffer is always returned.
+
+	   The default behavior is just to return the pointer value,
+	   so, be careful.
+	*/ 
+#if defined(SWIG_PYTHON_SAFE_CSTRINGS)
+	if (*alloc != SWIG_OLDOBJ) 
+#else
+	if (*alloc == SWIG_NEWOBJ) 
+#endif
+	{
+	  *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1));
+	  *alloc = SWIG_NEWOBJ;
+	} else {
+	  *cptr = cstr;
+	  *alloc = SWIG_OLDOBJ;
+	}
+      } else {
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+	*cptr = PyBytes_AsString(obj);
+#else
+	assert(0); /* Should never reach here with Unicode strings in Python 3 */
+#endif
+#else
+	*cptr = SWIG_Python_str_AsChar(obj);
+#endif
+      }
     }
-    if (plugin->read_structure) has_readstructure = 1;
-    if (plugin->read_bonds) has_readbonds = 1;
-    if (plugin->read_angles) has_readangles = 1;
-    if (plugin->read_next_timestep) has_readnexttimestep = 1;
-    if (plugin->write_structure) has_writestructure = 1;
-    if (plugin->write_bonds) has_writebonds = 1;
-    if (plugin->write_angles) has_writeangles = 1;
-    if (plugin->write_timestep) has_writetimestep = 1;
-    PyObject *tuple = PyTuple_New(16);
-    PyTuple_SET_ITEM(tuple, 0, PyString_FromString((const char)plugin->name));
-    PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong((long)has_readstructure));
-    PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong((long)has_readbonds));
-    PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong((long)has_readangles));
-    PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong((long)has_readnexttimestep));
-    PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong((long)has_writestructure));
-    PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong((long)has_writebonds));
-    PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong((long)has_writeangles));
-    PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong((long)has_writetimestep));
-    PyTuple_SET_ITEM(tuple, 9, PyString_FromString((const char)plugin->prettyname));
-    PyTuple_SET_ITEM(tuple, 10, PyString_FromString((const char)plugin->type));
-    PyTuple_SET_ITEM(tuple, 11, PyString_FromString((const char)plugin->author));
-    PyTuple_SET_ITEM(tuple, 12, PyInt_FromLong((long)plugin->majorv));
-    PyTuple_SET_ITEM(tuple, 13, PyInt_FromLong((long)plugin->minorv));
-    PyTuple_SET_ITEM(tuple, 14, PyInt_FromLong((long)plugin->abiversion));
-    PyTuple_SET_ITEM(tuple, 15, PyInt_FromLong((long)plugin->is_reentrant));
-    return tuple;
+    if (psize) *psize = len + 1;
+#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+    Py_XDECREF(obj);
+#endif
+    return SWIG_OK;
+  } else {
+#if defined(SWIG_PYTHON_2_UNICODE)
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once"
+#endif
+#if PY_VERSION_HEX<0x03000000
+    if (PyUnicode_Check(obj)) {
+      char *cstr; Py_ssize_t len;
+      if (!alloc && cptr) {
+        return SWIG_RuntimeError;
+      }
+      obj = PyUnicode_AsUTF8String(obj);
+      if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) {
+        if (cptr) {
+          if (alloc) *alloc = SWIG_NEWOBJ;
+          *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1));
+        }
+        if (psize) *psize = len + 1;
+
+        Py_XDECREF(obj);
+        return SWIG_OK;
+      } else {
+        Py_XDECREF(obj);
+      }
+    }
+#endif
+#endif
+
+    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+    if (pchar_descriptor) {
+      void* vptr = 0;
+      if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
+	if (cptr) *cptr = (char *) vptr;
+	if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
+	if (alloc) *alloc = SWIG_OLDOBJ;
+	return SWIG_OK;
+      }
+    }
+  }
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharArray(PyObject * obj, char *val, size_t size)
+{ 
+  char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ;
+  int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize, &alloc);
+  if (SWIG_IsOK(res)) {
+    /* special case of single char conversion when we don't need space for NUL */
+    if (size == 1 && csize == 2 && cptr && !cptr[1]) --csize;
+    if (csize <= size) {
+      if (val) {
+	if (csize) memcpy(val, cptr, csize*sizeof(char));
+	if (csize < size) memset(val + csize, 0, (size - csize)*sizeof(char));
+      }
+      if (alloc == SWIG_NEWOBJ) {
+	free((char*)cptr);
+	res = SWIG_DelNewMask(res);
+      }      
+      return res;
+    }
+    if (alloc == SWIG_NEWOBJ) free((char*)cptr);
+  }
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+  if (carray) {
+    if (size > INT_MAX) {
+      swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+      return pchar_descriptor ? 
+	SWIG_InternalNewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void();
+    } else {
+#if PY_VERSION_HEX >= 0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+      return PyBytes_FromStringAndSize(carray, (Py_ssize_t)(size));
+#else
+#if PY_VERSION_HEX >= 0x03010000
+      return PyUnicode_DecodeUTF8(carray, (Py_ssize_t)(size), "surrogateescape");
+#else
+      return PyUnicode_FromStringAndSize(carray, (Py_ssize_t)(size));
+#endif
+#endif
+#else
+      return PyString_FromStringAndSize(carray, (Py_ssize_t)(size));
+#endif
+    }
+  } else {
+    return SWIG_Py_Void();
   }
+}
+
+
+SWIGINTERN size_t
+SWIG_strnlen(const char* s, size_t maxlen)
+{
+  const char *p;
+  for (p = s; maxlen-- && *p; p++)
+    ;
+  return p - s;
+}
 
 
 #include <limits.h>
@@ -3245,91 +3435,1437 @@ SWIG_AsVal_int (PyObject * obj, int *val)
   return res;
 }
 
+
+/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */
+#ifndef SWIG_isfinite
+/* isfinite() is a macro for C99 */
+# if defined(isfinite)
+#  define SWIG_isfinite(X) (isfinite(X))
+# elif defined __cplusplus && __cplusplus >= 201103L
+/* Use a template so that this works whether isfinite() is std::isfinite() or
+ * in the global namespace.  The reality seems to vary between compiler
+ * versions.
+ *
+ * Make sure namespace std exists to avoid compiler warnings.
+ *
+ * extern "C++" is required as this fragment can end up inside an extern "C" { } block
+ */
+namespace std { }
+extern "C++" template<typename T>
+inline int SWIG_isfinite_func(T x) {
+  using namespace std;
+  return isfinite(x);
+}
+#  define SWIG_isfinite(X) (SWIG_isfinite_func(X))
+# elif defined(_MSC_VER)
+#  define SWIG_isfinite(X) (_finite(X))
+# elif defined(__sun) && defined(__SVR4)
+#  include <ieeefp.h>
+#  define SWIG_isfinite(X) (finite(X))
+# endif
+#endif
+
+
+/* Accept infinite as a valid float value unless we are unable to check if a value is finite */
+#ifdef SWIG_isfinite
+# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X))
+#else
+# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX))
+#endif
+
+
+SWIGINTERN int
+SWIG_AsVal_float (PyObject * obj, float *val)
+{
+  double v;
+  int res = SWIG_AsVal_double (obj, &v);
+  if (SWIG_IsOK(res)) {
+    if (SWIG_Float_Overflow_Check(v)) {
+      return SWIG_OverflowError;
+    } else {
+      if (val) *val = (float)(v);
+    }
+  }  
+  return res;
+}
+
+
+  #define SWIG_From_double   PyFloat_FromDouble 
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_float  (float value)
+{    
+  return SWIG_From_double  (value);
+}
+
+
+PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) {
+    molfile_plugin_t *plugin;
+    int *plugno = &plugin_no;
+    int has_readstructure = 0;
+    int has_readbonds = 0;
+    int has_readangles = 0;
+    int has_writestructure = 0;
+    int has_writebonds = 0;
+    int has_writeangles = 0;
+    int has_readnexttimestep = 0;
+    int has_writetimestep = 0;
+    int plugin_list_size = sizeof(plugin_list) / sizeof(molfile_plugin_t**);
+    if (plugno==NULL || plugin_no<0){
+      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin handle no should be given, be positive value and should not exceed the list length'%d'. You set '%d'", pluginNOINIT, plugin_list_size, plugin_no);
+      return 0;
+    }
+    plugin = plugin_list[plugin_no];
+    if(plugin==NULL || !plugin->open_file_read){
+      PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin '%d' is not initialized.", pluginNOINIT, plugin_no);
+      return 0;
+    }
+    if (plugin->read_structure) has_readstructure = 1;
+    if (plugin->read_bonds) has_readbonds = 1;
+    if (plugin->read_angles) has_readangles = 1;
+    if (plugin->read_next_timestep) has_readnexttimestep = 1;
+    if (plugin->write_structure) has_writestructure = 1;
+    if (plugin->write_bonds) has_writebonds = 1;
+    if (plugin->write_angles) has_writeangles = 1;
+    if (plugin->write_timestep) has_writetimestep = 1;
+    PyObject *tuple = PyTuple_New(17);
+    PyTuple_SET_ITEM(tuple, 0, PyString_FromString(plugin->filename_extension));
+    PyTuple_SET_ITEM(tuple, 1, PyString_FromString(plugin->name));
+    PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong((long)has_readstructure));
+    PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong((long)has_readbonds));
+    PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong((long)has_readangles));
+    PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong((long)has_readnexttimestep));
+    PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong((long)has_writestructure));
+    PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong((long)has_writebonds));
+    PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong((long)has_writeangles));
+    PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong((long)has_writetimestep));
+    PyTuple_SET_ITEM(tuple, 10, PyString_FromString(plugin->prettyname));
+    PyTuple_SET_ITEM(tuple, 11, PyString_FromString(plugin->type));
+    PyTuple_SET_ITEM(tuple, 12, PyString_FromString(plugin->author));
+    PyTuple_SET_ITEM(tuple, 13, PyInt_FromLong((long)plugin->majorv));
+    PyTuple_SET_ITEM(tuple, 14, PyInt_FromLong((long)plugin->minorv));
+    PyTuple_SET_ITEM(tuple, 15, PyInt_FromLong((long)plugin->abiversion));
+    PyTuple_SET_ITEM(tuple, 16, PyInt_FromLong((long)plugin->is_reentrant));
+    return tuple;
+  }
+
+
+PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) {
+    if (PyType_Ready(&MolObjectType) < 0)
+        return NULL;
+    PyTypeObject *type = &MolObjectType;
+    /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */
+    /*MolObject* plugin_c = new MolObject;*/
+    MolObject *plugin_c;
+    plugin_c = (MolObject *)type->tp_alloc(type, 0);
+    /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/
+    plugin_c->plugin = plugin;
+    plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms);
+    plugin_c->natoms = natoms;
+    /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */
+    /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */
+    PyObject* plugin_handle = (PyObject *)plugin_c;
+    /*if(!plugin_handle) printf("Not assigned\n");*/
+    /*PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/
+    return plugin_handle;
+  }
+
+
+
+
+
+PyObject * my_read_structure(PyObject* molpack, int options) {
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    char** atom_names;
+    char** atom_types;
+    PyObject *npatoms = NULL;
+    /*MolObject* plugin_handle = (MolObject*)PyCapsule_GetPointer(molpack, "plugin");*/
+    MolObject* plugin_handle = (MolObject*)molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    printf("Test1\n");
+    status = plugin->read_structure(file_handle, &options, atoms);
+    printf("Test2 %d\n",status);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return NULL;
+    }
+    printf("Test3\n");
+    npy_intp natoms[1] = { numatoms };
+    
+    PyArrayObject* oresid;
+    int64_t* cresid;
+    
+    int typenum;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms };
+    /*dims[0] = numatoms;*/
+    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    int n = oresid->dimensions[0];
+    printf("dimensions %d\n", n);
+    cresid = (int64_t*) oresid->data;
+    
+    PyObject* npatomresid = NULL;
+    char** MolAtom_name = (char **)malloc(numatoms*sizeof(char*));
+    char** MolAtom_type = (char **)malloc(numatoms*sizeof(char*));
+    int64_t* MolAtom_resid = NULL;
+    /*int64_t* MolAtom_resid = (int64_t *)malloc(numatoms*sizeof(int64_t));*/
+    float* MolAtom_mass = (float *)malloc(numatoms*sizeof(float));
+    float* MolAtom_atomicnumber = (float *)malloc(numatoms*sizeof(float));
+    for (i=0;i<numatoms;i++){
+        MolAtom_name[i] = atoms[i].name;
+        MolAtom_type[i] = atoms[i].type;
+        printf("--->%d %d\n",i,atoms[i].resid);
+        oresid->data[i] = (int64_t) atoms[i].resid;
+        printf("%d %d\n",i,(int)oresid->data[i]);
+        MolAtom_mass[i] = atoms[i].mass;
+        MolAtom_atomicnumber[i] = atoms[i].atomicnumber;
+    }
+    /*Py_DECREF( obj );*/
+    /*npy_intp dims[3];*/ /* PyArray_AsCArray is for ndim <= 3 */
+    PyArray_Descr *descr;
+    npatoms = PyArray_SimpleNewFromData(1, natoms, NPY_USERDEF, atoms);
+    printf("Test4 numatoms=%d\n", numatoms);
+    PyObject* npatomname = NULL;
+    npatomname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_name[0]);
+    PyObject* npatomtype = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_type);
+    /*PyObject* npatomresname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->resname);*/
+    /*PyObject* npatomsegid = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->segid);*/
+    /*PyObject* npatomchain = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->chain);*/
+    /*PyObject* npatomaltloc = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->altloc);*/
+    /*PyObject* npatominsert = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->insertion);*/
+    /*PyObject* npatomoccup = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->occupancy);*/
+    /*PyObject* npatombfact = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->bfactor);*/
+    PyObject* npatommass = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, MolAtom_mass);
+    /*PyObject* npatomcharge = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->charge);*/
+    /*PyObject* npatomradius = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->radius);*/
+    PyObject* npatomicnumber = PyArray_SimpleNewFromData(1, natoms, NPY_INT64, MolAtom_atomicnumber);
+    /*if (npatomname==NULL   || npatomtype==NULL     || npatomresname==NULL || 
+        npatomresid==NULL  || npatomsegid==NULL    || npatomchain==NULL   )
+    {
+      free(atoms);
+      Py_XDECREF(npatomname);   Py_XDECREF(npatomtype);
+      Py_XDECREF(npatomresname); Py_XDECREF(npatomresid);  Py_XDECREF(npatomsegid); 
+      Py_XDECREF(npatomchain);   Py_XDECREF(npatomaltloc); Py_XDECREF(npatominsert); 
+      Py_XDECREF(npatomoccup);   Py_XDECREF(npatombfact);  Py_XDECREF(npatommass); 
+      Py_XDECREF(npatomcharge);  Py_XDECREF(npatomradius); Py_XDECREF(npatomicnumber); 
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python.");
+      return 0;
+    }
+    PyArray_BASE(npatomname) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomtype) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatomresname) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomresid) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomsegid) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomchain) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatomaltloc) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatominsert) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomoccup) = PyCObject_FromVoidPtr(*atoms, free);   
+    PyArray_BASE(npatombfact) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatommass) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomcharge) = PyCObject_FromVoidPtr(*atoms, free);  
+    PyArray_BASE(npatomradius) = PyCObject_FromVoidPtr(*atoms, free); 
+    PyArray_BASE(npatomicnumber) = PyCObject_FromVoidPtr(*atoms, free);
+    PyArray_BASE(npatoms) = PyCObject_FromVoidPtr(atoms, free); 
+    PyArray_BASE((PyArrayObject *)npatoms) = PyCapsule_New(atoms, "atoms", del_atoms);*/
+    /*PyArray_BASE((PyArrayObject *)npatoms); */
+    printf("Test4-2\n");
+    /*PyObject* Py_MolAtom_name = PyCapsule_New((void*)MolAtom_name, "atomname", del_atomname);*/
+    /*PyObject* Py_MolAtom_name;
+    Py_INCREF(Py_MolAtom_name);*/
+    printf("Test4-3\n");
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomname, Py_MolAtom_name);*/
+    /*PyArray_SetBaseObject((PyArrayObject *)npatomtype, MolAtom_type);
+    PyArray_SetBaseObject((PyArrayObject *)npatomresid, MolAtom_resid);
+    PyArray_SetBaseObject((PyArrayObject *)npatommass, MolAtom_mass);
+    PyArray_SetBaseObject((PyArrayObject *)npatomicnumber, MolAtom_atomicnumber); */
+    printf("Test5\n");
+    PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    printf("Test6\n");
+    PyTuple_SET_ITEM(tuple, 1, npatomname);
+    /*PyTuple_SET_ITEM(tuple, 2, npatomtype);
+    PyTuple_SET_ITEM(tuple, 3, npatomresid);
+    PyTuple_SET_ITEM(tuple, 4, npatommass);
+    PyTuple_SET_ITEM(tuple, 5, npatomicnumber);*/
+    PyObject* vars = PyDict_New();
+/*    printf("Test7\n");
+    PyDict_SetItemString( vars, "name", npatomname ); */
+    printf("Test8\n");
+    /*PyDict_SetItemString( vars, "resid", npatomresid ); */
+    return Py_BuildValue("O", oresid);
+  }
+
 #ifdef __cplusplus
 extern "C" {
 #endif
-SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  int *arg1 = (int *) 0 ;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  char *arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
+  char temp2[16] ;
+  int res2 ;
   PyObject * obj0 = 0 ;
-  molfile_plugin_t *result = 0 ;
+  PyObject * obj1 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_name_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
   }
-  arg1 = (int *)(argp1);
-  result = (molfile_plugin_t *)molfile_plugin_list(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  arg1 = (struct MolAtoms *)(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 16);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_name_set" "', argument " "2"" of type '" "char [16]""'");
+  }
+  arg2 = (char *)(temp2);
+  if (arg2) memcpy(arg1->name,arg2,16*sizeof(char));
+  else memset(arg1->name,0,16*sizeof(char));
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  int result;
+  char *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:molfile_init",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_name_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_init" "', argument " "1"" of type '" "molfile_plugin_t *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (char *)(char *) ((arg1)->name);
+  {
+    size_t size = SWIG_strnlen(result, 16);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
   }
-  arg1 = (molfile_plugin_t *)(argp1);
-  result = (int)molfile_init(arg1);
-  resultobj = SWIG_From_int((int)(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  int result;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[16] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail;
-  result = (int)molfile_finish();
-  resultobj = SWIG_From_int((int)(result));
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_type_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 16);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_type_set" "', argument " "2"" of type '" "char [16]""'");
+  }
+  arg2 = (char *)(temp2);
+  if (arg2) memcpy(arg1->type,arg2,16*sizeof(char));
+  else memset(arg1->type,0,16*sizeof(char));
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ;
-  int arg2 ;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
   PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject *result = 0 ;
+  char *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_type_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
   }
-  arg1 = (molfile_plugin_t *)(argp1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = (int)(val2);
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (char *)(char *) ((arg1)->type);
   {
-    result = (PyObject *)molfile_plugin_info(arg1,arg2);
+    size_t size = SWIG_strnlen(result, 16);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_resname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[8] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resname_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 8);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_resname_set" "', argument " "2"" of type '" "char [8]""'");
+  }
+  arg2 = (char *)(temp2);
+  if (arg2) memcpy(arg1->resname,arg2,8*sizeof(char));
+  else memset(arg1->resname,0,8*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_resname_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resname_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (char *)(char *) ((arg1)->resname);
+  {
+    size_t size = SWIG_strnlen(result, 8);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_resid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resid_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_resid_set" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  if (arg1) (arg1)->resid = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_resid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resid_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (int) ((arg1)->resid);
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_segid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[8] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_segid_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 8);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_segid_set" "', argument " "2"" of type '" "char [8]""'");
+  }
+  arg2 = (char *)(temp2);
+  if (arg2) memcpy(arg1->segid,arg2,8*sizeof(char));
+  else memset(arg1->segid,0,8*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_segid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_segid_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (char *)(char *) ((arg1)->segid);
+  {
+    size_t size = SWIG_strnlen(result, 8);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_chain_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[2] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_chain_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_chain_set" "', argument " "2"" of type '" "char [2]""'");
+  }
+  arg2 = (char *)(temp2);
+  if (arg2) memcpy(arg1->chain,arg2,2*sizeof(char));
+  else memset(arg1->chain,0,2*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_chain_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_chain_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (char *)(char *) ((arg1)->chain);
+  {
+    size_t size = SWIG_strnlen(result, 2);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_altloc_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[2] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_altloc_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_altloc_set" "', argument " "2"" of type '" "char [2]""'");
+  }
+  arg2 = (char *)(temp2);
+  if (arg2) memcpy(arg1->altloc,arg2,2*sizeof(char));
+  else memset(arg1->altloc,0,2*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_altloc_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_altloc_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (char *)(char *) ((arg1)->altloc);
+  {
+    size_t size = SWIG_strnlen(result, 2);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_insertion_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[2] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_insertion_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_insertion_set" "', argument " "2"" of type '" "char [2]""'");
+  }
+  arg2 = (char *)(temp2);
+  if (arg2) memcpy(arg1->insertion,arg2,2*sizeof(char));
+  else memset(arg1->insertion,0,2*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_insertion_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_insertion_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (char *)(char *) ((arg1)->insertion);
+  {
+    size_t size = SWIG_strnlen(result, 2);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_occupancy_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_occupancy_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = (float)(val2);
+  if (arg1) (arg1)->occupancy = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_occupancy_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (float) ((arg1)->occupancy);
+  resultobj = SWIG_From_float((float)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_bfactor_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_bfactor_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = (float)(val2);
+  if (arg1) (arg1)->bfactor = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_bfactor_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (float) ((arg1)->bfactor);
+  resultobj = SWIG_From_float((float)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_mass_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_mass_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_mass_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = (float)(val2);
+  if (arg1) (arg1)->mass = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_mass_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_mass_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (float) ((arg1)->mass);
+  resultobj = SWIG_From_float((float)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_charge_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_charge_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_charge_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = (float)(val2);
+  if (arg1) (arg1)->charge = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_charge_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_charge_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (float) ((arg1)->charge);
+  resultobj = SWIG_From_float((float)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_radius_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_radius_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_radius_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = (float)(val2);
+  if (arg1) (arg1)->radius = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_radius_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_radius_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (float) ((arg1)->radius);
+  resultobj = SWIG_From_float((float)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_atomicnumber_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_atomicnumber_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = (float)(val2);
+  if (arg1) (arg1)->atomicnumber = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_atomicnumber_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (float) ((arg1)->atomicnumber);
+  resultobj = SWIG_From_float((float)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_ctnumber_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_ctnumber_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = (float)(val2);
+  if (arg1) (arg1)->ctnumber = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_ctnumber_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  result = (float) ((arg1)->ctnumber);
+  resultobj = SWIG_From_float((float)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_MolAtoms")) SWIG_fail;
+  result = (struct MolAtoms *)calloc(1, sizeof(struct MolAtoms));
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MolAtoms, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  struct MolAtoms *arg1 = (struct MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_MolAtoms",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MolAtoms" "', argument " "1"" of type '" "struct MolAtoms *""'"); 
+  }
+  arg1 = (struct MolAtoms *)(argp1);
+  free((char *) arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *MolAtoms_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_MolAtoms, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_del_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_plugin_structure",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_plugin_structure(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_alloc_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *arg2 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin_structure",&obj0,&obj1)) SWIG_fail;
+  arg1 = obj0;
+  arg2 = obj1;
+  result = (PyObject *)alloc_plugin_structure(arg1,arg2);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_del_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_plugin",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_plugin(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_del_atoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_atoms",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_atoms(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_del_atomname(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_atomname",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_atomname(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_alloc_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *arg2 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin",&obj0,&obj1)) SWIG_fail;
+  arg1 = obj0;
+  arg2 = obj1;
+  result = (PyObject *)alloc_plugin(arg1,arg2);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  molfile_plugin_t **result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = (int)(val1);
+  result = (molfile_plugin_t **)molfile_plugin_list(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":molfile_init")) SWIG_fail;
+  result = (int)molfile_init();
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail;
+  result = (int)molfile_finish();
+  resultobj = SWIG_From_int((int)(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_get_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  molfile_plugin_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:get_plugin",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_plugin" "', argument " "1"" of type '" "molfile_plugin_t **""'"); 
+  }
+  arg1 = (molfile_plugin_t **)(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_plugin" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  result = (molfile_plugin_t *)get_plugin(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t **""'"); 
+  }
+  arg1 = (molfile_plugin_t **)(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  {
+    result = (PyObject *)molfile_plugin_info(arg1,arg2);
+    if (PyErr_Occurred()) SWIG_fail;
+  }
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_open_file_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ;
+  char *arg2 = (char *) 0 ;
+  char *arg3 = (char *) 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:open_file_read",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_file_read" "', argument " "1"" of type '" "molfile_plugin_t *""'"); 
+  }
+  arg1 = (molfile_plugin_t *)(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "open_file_read" "', argument " "2"" of type '" "char *""'");
+  }
+  arg2 = (char *)(buf2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "open_file_read" "', argument " "3"" of type '" "char *""'");
+  }
+  arg3 = (char *)(buf3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "open_file_read" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = (int)(val4);
+  {
+    result = (PyObject *)my_open_file_read(arg1,arg2,arg3,arg4);
+    if (PyErr_Occurred()) SWIG_fail;
+  }
+  resultobj = result;
+  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_read_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  int arg2 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:read_structure",&obj0,&obj1)) SWIG_fail;
+  arg1 = obj0;
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "read_structure" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = (int)(val2);
+  {
+    result = (PyObject *)my_read_structure(arg1,arg2);
     if (PyErr_Occurred()) SWIG_fail;
   }
   resultobj = result;
@@ -3341,34 +4877,80 @@ fail:
 
 static PyMethodDef SwigMethods[] = {
 	 { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
-	 { (char *)"molfile_plugin_list", _wrap_molfile_plugin_list, METH_VARARGS, (char *)"molfile_plugin_list(maxsize) -> molfile_plugin_t *"},
-	 { (char *)"molfile_init", _wrap_molfile_init, METH_VARARGS, (char *)"molfile_init(plugin_list) -> int"},
+	 { (char *)"MolAtoms_name_set", _wrap_MolAtoms_name_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_name_get", _wrap_MolAtoms_name_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_type_set", _wrap_MolAtoms_type_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_type_get", _wrap_MolAtoms_type_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resname_set", _wrap_MolAtoms_resname_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resname_get", _wrap_MolAtoms_resname_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resid_set", _wrap_MolAtoms_resid_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resid_get", _wrap_MolAtoms_resid_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_segid_set", _wrap_MolAtoms_segid_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_segid_get", _wrap_MolAtoms_segid_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_chain_set", _wrap_MolAtoms_chain_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_chain_get", _wrap_MolAtoms_chain_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_altloc_set", _wrap_MolAtoms_altloc_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_altloc_get", _wrap_MolAtoms_altloc_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_insertion_set", _wrap_MolAtoms_insertion_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_insertion_get", _wrap_MolAtoms_insertion_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_occupancy_set", _wrap_MolAtoms_occupancy_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_occupancy_get", _wrap_MolAtoms_occupancy_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_bfactor_set", _wrap_MolAtoms_bfactor_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_bfactor_get", _wrap_MolAtoms_bfactor_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_mass_set", _wrap_MolAtoms_mass_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_mass_get", _wrap_MolAtoms_mass_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_charge_set", _wrap_MolAtoms_charge_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_charge_get", _wrap_MolAtoms_charge_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_radius_set", _wrap_MolAtoms_radius_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_radius_get", _wrap_MolAtoms_radius_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_atomicnumber_set", _wrap_MolAtoms_atomicnumber_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_atomicnumber_get", _wrap_MolAtoms_atomicnumber_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_ctnumber_set", _wrap_MolAtoms_ctnumber_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_ctnumber_get", _wrap_MolAtoms_ctnumber_get, METH_VARARGS, NULL},
+	 { (char *)"new_MolAtoms", _wrap_new_MolAtoms, METH_VARARGS, NULL},
+	 { (char *)"delete_MolAtoms", _wrap_delete_MolAtoms, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_swigregister", MolAtoms_swigregister, METH_VARARGS, NULL},
+	 { (char *)"del_plugin_structure", _wrap_del_plugin_structure, METH_VARARGS, NULL},
+	 { (char *)"alloc_plugin_structure", _wrap_alloc_plugin_structure, METH_VARARGS, NULL},
+	 { (char *)"del_plugin", _wrap_del_plugin, METH_VARARGS, NULL},
+	 { (char *)"del_atoms", _wrap_del_atoms, METH_VARARGS, NULL},
+	 { (char *)"del_atomname", _wrap_del_atomname, METH_VARARGS, NULL},
+	 { (char *)"alloc_plugin", _wrap_alloc_plugin, METH_VARARGS, NULL},
+	 { (char *)"molfile_plugin_list", _wrap_molfile_plugin_list, METH_VARARGS, (char *)"molfile_plugin_list(maxsize) -> molfile_plugin_t **"},
+	 { (char *)"molfile_init", _wrap_molfile_init, METH_VARARGS, (char *)"molfile_init() -> int"},
 	 { (char *)"molfile_finish", _wrap_molfile_finish, METH_VARARGS, (char *)"molfile_finish() -> int"},
+	 { (char *)"get_plugin", _wrap_get_plugin, METH_VARARGS, (char *)"get_plugin(plugin_list, plugin_no) -> molfile_plugin_t *"},
 	 { (char *)"molfile_plugin_info", _wrap_molfile_plugin_info, METH_VARARGS, (char *)"molfile_plugin_info(plugin_list, plugin_no) -> PyObject *"},
+	 { (char *)"open_file_read", _wrap_open_file_read, METH_VARARGS, (char *)"open_file_read(plugin, fname, ftype, natoms) -> PyObject *"},
+	 { (char *)"read_structure", _wrap_read_structure, METH_VARARGS, (char *)"read_structure(molpack, options) -> PyObject *"},
 	 { NULL, NULL, 0, NULL }
 };
 
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
+static swig_type_info _swigt__p_MolAtoms = {"_p_MolAtoms", "struct MolAtoms *|MolAtoms *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_molfile_plugin_t = {"_p_molfile_plugin_t", "molfile_plugin_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_molfile_plugin_t = {"_p_p_molfile_plugin_t", "molfile_plugin_t **", 0, 0, (void*)0, 0};
 
 static swig_type_info *swig_type_initial[] = {
+  &_swigt__p_MolAtoms,
   &_swigt__p_char,
-  &_swigt__p_int,
   &_swigt__p_molfile_plugin_t,
+  &_swigt__p_p_molfile_plugin_t,
 };
 
+static swig_cast_info _swigc__p_MolAtoms[] = {  {&_swigt__p_MolAtoms, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_molfile_plugin_t[] = {  {&_swigt__p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_molfile_plugin_t[] = {  {&_swigt__p_p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}};
 
 static swig_cast_info *swig_cast_initial[] = {
+  _swigc__p_MolAtoms,
   _swigc__p_char,
-  _swigc__p_int,
   _swigc__p_molfile_plugin_t,
+  _swigc__p_p_molfile_plugin_t,
 };
 
 
@@ -4060,6 +5642,7 @@ SWIG_init(void) {
   SWIG_InstallConstants(d,swig_const_table);
   
   
+  Py_Initialize();
   import_array();
   
   SWIG_Python_SetConstant(d, "pluginOK",SWIG_From_int((int)(pluginOK)));
@@ -4069,9 +5652,6 @@ SWIG_init(void) {
   SWIG_Python_SetConstant(d, "pluginENDOFFILE",SWIG_From_int((int)(pluginENDOFFILE)));
   SWIG_Python_SetConstant(d, "pluginFILENOTFOUND",SWIG_From_int((int)(pluginFILENOTFOUND)));
   SWIG_Python_SetConstant(d, "pluginFORMATERROR",SWIG_From_int((int)(pluginFORMATERROR)));
-  SWIG_Python_SetConstant(d, "SEEK_SET",SWIG_From_int((int)(SEEK_SET)));
-  SWIG_Python_SetConstant(d, "SEEK_CUR",SWIG_From_int((int)(SEEK_CUR)));
-  SWIG_Python_SetConstant(d, "SEEK_END",SWIG_From_int((int)(SEEK_END)));
 #if PY_VERSION_HEX >= 0x03000000
   return m;
 #else
diff --git a/pymolfile/molfile/libpymolfile_wrap.cxx b/pymolfile/molfile/libpymolfile_wrap.cxx
index a29b996585521d9172c15dca7a7f2811c71dc908..95bdb95e9932318e5292506992be9aab7f63405f 100644
--- a/pymolfile/molfile/libpymolfile_wrap.cxx
+++ b/pymolfile/molfile/libpymolfile_wrap.cxx
@@ -3003,11 +3003,12 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
 
 /* -------- TYPES TABLE (BEGIN) -------- */
 
-#define SWIGTYPE_p_char swig_types[0]
-#define SWIGTYPE_p_molfile_plugin_t swig_types[1]
-#define SWIGTYPE_p_p_molfile_plugin_t swig_types[2]
-static swig_type_info *swig_types[4];
-static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0};
+#define SWIGTYPE_p_MolAtoms swig_types[0]
+#define SWIGTYPE_p_char swig_types[1]
+#define SWIGTYPE_p_molfile_plugin_t swig_types[2]
+#define SWIGTYPE_p_p_molfile_plugin_t swig_types[3]
+static swig_type_info *swig_types[5];
+static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -3117,10 +3118,12 @@ namespace swig {
    Published under BSD LICENSE
  */
 #define SWIG_FILE_WITH_INIT
+#define __STDC_FORMAT_MACROS
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
+#include <inttypes.h>
 #include "molfile_plugin.h"
 #include "libmolfile_plugin.h"
 #include "vmdplugin.h"
@@ -3145,6 +3148,243 @@ SWIGINTERNINLINE PyObject*
 }
 
 
+
+
+struct MolAtoms {
+    char name[16]; 
+    char type[16]; 
+    char resname[8];
+    int resid;
+    char segid[8];
+    char chain[2];
+    char altloc[2];
+    char insertion[2];
+    float occupancy;
+    float bfactor;
+    float mass;
+    float charge;
+    float radius;
+    float atomicnumber;
+    float ctnumber;
+};
+
+void del_plugin_structure(PyObject* pymolfile_atoms){
+    delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure");
+}
+
+static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure);
+}
+
+void del_plugin(PyObject* pymolfile_plugin){
+    delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin");
+}
+
+void del_atoms(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms");
+}
+
+void del_atomname(PyObject* pymolfile_atoms){
+    delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname");
+}
+
+
+static PyObject* alloc_plugin(PyObject *self, PyObject *args) {
+    return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin);
+}
+
+
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_TypeQuery("_p_char");
+    init = 1;
+  }
+  return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+{
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+  if (PyBytes_Check(obj))
+#else
+  if (PyUnicode_Check(obj))
+#endif
+#else  
+  if (PyString_Check(obj))
+#endif
+  {
+    char *cstr; Py_ssize_t len;
+#if PY_VERSION_HEX>=0x03000000
+#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+    if (!alloc && cptr) {
+        /* We can't allow converting without allocation, since the internal
+           representation of string in Python 3 is UCS-2/UCS-4 but we require
+           a UTF-8 representation.
+           TODO(bhy) More detailed explanation */
+        return SWIG_RuntimeError;
+    }
+    obj = PyUnicode_AsUTF8String(obj);
+    if(alloc) *alloc = SWIG_NEWOBJ;
+#endif
+    PyBytes_AsStringAndSize(obj, &cstr, &len);
+#else
+    PyString_AsStringAndSize(obj, &cstr, &len);
+#endif
+    if (cptr) {
+      if (alloc) {
+	/* 
+	   In python the user should not be able to modify the inner
+	   string representation. To warranty that, if you define
+	   SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string
+	   buffer is always returned.
+
+	   The default behavior is just to return the pointer value,
+	   so, be careful.
+	*/ 
+#if defined(SWIG_PYTHON_SAFE_CSTRINGS)
+	if (*alloc != SWIG_OLDOBJ) 
+#else
+	if (*alloc == SWIG_NEWOBJ) 
+#endif
+	{
+	  *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
+	  *alloc = SWIG_NEWOBJ;
+	} else {
+	  *cptr = cstr;
+	  *alloc = SWIG_OLDOBJ;
+	}
+      } else {
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+	*cptr = PyBytes_AsString(obj);
+#else
+	assert(0); /* Should never reach here with Unicode strings in Python 3 */
+#endif
+#else
+	*cptr = SWIG_Python_str_AsChar(obj);
+#endif
+      }
+    }
+    if (psize) *psize = len + 1;
+#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+    Py_XDECREF(obj);
+#endif
+    return SWIG_OK;
+  } else {
+#if defined(SWIG_PYTHON_2_UNICODE)
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once"
+#endif
+#if PY_VERSION_HEX<0x03000000
+    if (PyUnicode_Check(obj)) {
+      char *cstr; Py_ssize_t len;
+      if (!alloc && cptr) {
+        return SWIG_RuntimeError;
+      }
+      obj = PyUnicode_AsUTF8String(obj);
+      if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) {
+        if (cptr) {
+          if (alloc) *alloc = SWIG_NEWOBJ;
+          *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
+        }
+        if (psize) *psize = len + 1;
+
+        Py_XDECREF(obj);
+        return SWIG_OK;
+      } else {
+        Py_XDECREF(obj);
+      }
+    }
+#endif
+#endif
+
+    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+    if (pchar_descriptor) {
+      void* vptr = 0;
+      if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
+	if (cptr) *cptr = (char *) vptr;
+	if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
+	if (alloc) *alloc = SWIG_OLDOBJ;
+	return SWIG_OK;
+      }
+    }
+  }
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharArray(PyObject * obj, char *val, size_t size)
+{ 
+  char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ;
+  int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize, &alloc);
+  if (SWIG_IsOK(res)) {
+    /* special case of single char conversion when we don't need space for NUL */
+    if (size == 1 && csize == 2 && cptr && !cptr[1]) --csize;
+    if (csize <= size) {
+      if (val) {
+	if (csize) memcpy(val, cptr, csize*sizeof(char));
+	if (csize < size) memset(val + csize, 0, (size - csize)*sizeof(char));
+      }
+      if (alloc == SWIG_NEWOBJ) {
+	delete[] cptr;
+	res = SWIG_DelNewMask(res);
+      }      
+      return res;
+    }
+    if (alloc == SWIG_NEWOBJ) delete[] cptr;
+  }
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+  if (carray) {
+    if (size > INT_MAX) {
+      swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+      return pchar_descriptor ? 
+	SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
+    } else {
+#if PY_VERSION_HEX >= 0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+      return PyBytes_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#else
+#if PY_VERSION_HEX >= 0x03010000
+      return PyUnicode_DecodeUTF8(carray, static_cast< Py_ssize_t >(size), "surrogateescape");
+#else
+      return PyUnicode_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#endif
+#endif
+#else
+      return PyString_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#endif
+    }
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+
+
+SWIGINTERN size_t
+SWIG_strnlen(const char* s, size_t maxlen)
+{
+  const char *p;
+  for (p = s; maxlen-- && *p; p++)
+    ;
+  return p - s;
+}
+
+
 #include <limits.h>
 #if !defined(SWIG_NO_LLONG_MAX)
 # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
@@ -3296,6 +3536,70 @@ SWIG_AsVal_int (PyObject * obj, int *val)
 }
 
 
+/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */
+#ifndef SWIG_isfinite
+/* isfinite() is a macro for C99 */
+# if defined(isfinite)
+#  define SWIG_isfinite(X) (isfinite(X))
+# elif defined __cplusplus && __cplusplus >= 201103L
+/* Use a template so that this works whether isfinite() is std::isfinite() or
+ * in the global namespace.  The reality seems to vary between compiler
+ * versions.
+ *
+ * Make sure namespace std exists to avoid compiler warnings.
+ *
+ * extern "C++" is required as this fragment can end up inside an extern "C" { } block
+ */
+namespace std { }
+extern "C++" template<typename T>
+inline int SWIG_isfinite_func(T x) {
+  using namespace std;
+  return isfinite(x);
+}
+#  define SWIG_isfinite(X) (SWIG_isfinite_func(X))
+# elif defined(_MSC_VER)
+#  define SWIG_isfinite(X) (_finite(X))
+# elif defined(__sun) && defined(__SVR4)
+#  include <ieeefp.h>
+#  define SWIG_isfinite(X) (finite(X))
+# endif
+#endif
+
+
+/* Accept infinite as a valid float value unless we are unable to check if a value is finite */
+#ifdef SWIG_isfinite
+# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X))
+#else
+# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX))
+#endif
+
+
+SWIGINTERN int
+SWIG_AsVal_float (PyObject * obj, float *val)
+{
+  double v;
+  int res = SWIG_AsVal_double (obj, &v);
+  if (SWIG_IsOK(res)) {
+    if (SWIG_Float_Overflow_Check(v)) {
+      return SWIG_OverflowError;
+    } else {
+      if (val) *val = static_cast< float >(v);
+    }
+  }  
+  return res;
+}
+
+
+  #define SWIG_From_double   PyFloat_FromDouble 
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_float  (float value)
+{    
+  return SWIG_From_double  (value);
+}
+
+
 PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) {
     molfile_plugin_t *plugin;
     int *plugno = &plugin_no;
@@ -3346,91 +3650,215 @@ PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) {
     return tuple;
   }
 
+
+PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) {
+    if (PyType_Ready(&MolObjectType) < 0)
+        return NULL;
+    PyTypeObject *type = &MolObjectType;
+    /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */
+    /*MolObject* plugin_c = new MolObject;*/
+    MolObject *plugin_c;
+    plugin_c = (MolObject *)type->tp_alloc(type, 0);
+    /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/
+    plugin_c->plugin = plugin;
+    plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms);
+    plugin_c->natoms = natoms;
+    /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */
+    /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */
+    PyObject* plugin_handle = (PyObject *)plugin_c;
+    /*if(!plugin_handle) printf("Not assigned\n");*/
+    /*PyObject *tuple = PyTuple_New(2);
+    PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms));
+    PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/
+    return plugin_handle;
+  }
+
+
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif
-SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  int arg1 ;
-  int val1 ;
-  int ecode1 = 0 ;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[16] ;
+  int res2 ;
   PyObject * obj0 = 0 ;
-  molfile_plugin_t **result = 0 ;
+  PyObject * obj1 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = static_cast< int >(val1);
-  result = (molfile_plugin_t **)molfile_plugin_list(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_name_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 16);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_name_set" "', argument " "2"" of type '" "char [16]""'");
+  }
+  arg2 = reinterpret_cast< char * >(temp2);
+  if (arg2) memcpy(arg1->name,arg2,16*sizeof(char));
+  else memset(arg1->name,0,16*sizeof(char));
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  int result;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)":molfile_init")) SWIG_fail;
-  result = (int)molfile_init();
-  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_name_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (char *)(char *) ((arg1)->name);
+  {
+    size_t size = SWIG_strnlen(result, 16);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  int result;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[16] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail;
-  result = (int)molfile_finish();
-  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_type_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 16);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_type_set" "', argument " "2"" of type '" "char [16]""'");
+  }
+  arg2 = reinterpret_cast< char * >(temp2);
+  if (arg2) memcpy(arg1->type,arg2,16*sizeof(char));
+  else memset(arg1->type,0,16*sizeof(char));
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_get_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ;
-  int arg2 ;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_type_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (char *)(char *) ((arg1)->type);
+  {
+    size_t size = SWIG_strnlen(result, 16);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_resname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[8] ;
+  int res2 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  molfile_plugin_t *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:get_plugin",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resname_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_plugin" "', argument " "1"" of type '" "molfile_plugin_t **""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
   }
-  arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1);
-  ecode2 = SWIG_AsVal_int(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_plugin" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = static_cast< int >(val2);
-  result = (molfile_plugin_t *)get_plugin(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 8);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_resname_set" "', argument " "2"" of type '" "char [8]""'");
+  }
+  arg2 = reinterpret_cast< char * >(temp2);
+  if (arg2) memcpy(arg1->resname,arg2,8*sizeof(char));
+  else memset(arg1->resname,0,8*sizeof(char));
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MolAtoms_resname_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resname_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (char *)(char *) ((arg1)->resname);
+  {
+    size_t size = SWIG_strnlen(result, 8);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_resid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
   int arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -3438,23 +3866,967 @@ SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), P
   int ecode2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  PyObject *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resid_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t **""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
   }
-  arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1);
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
   ecode2 = SWIG_AsVal_int(obj1, &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_resid_set" "', argument " "2"" of type '" "int""'");
   } 
   arg2 = static_cast< int >(val2);
-  {
-    result = (PyObject *)molfile_plugin_info(arg1,arg2);
-    if (PyErr_Occurred()) SWIG_fail;
+  if (arg1) (arg1)->resid = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_resid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resid_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
   }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (int) ((arg1)->resid);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_segid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[8] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_segid_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 8);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_segid_set" "', argument " "2"" of type '" "char [8]""'");
+  }
+  arg2 = reinterpret_cast< char * >(temp2);
+  if (arg2) memcpy(arg1->segid,arg2,8*sizeof(char));
+  else memset(arg1->segid,0,8*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_segid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_segid_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (char *)(char *) ((arg1)->segid);
+  {
+    size_t size = SWIG_strnlen(result, 8);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_chain_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[2] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_chain_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_chain_set" "', argument " "2"" of type '" "char [2]""'");
+  }
+  arg2 = reinterpret_cast< char * >(temp2);
+  if (arg2) memcpy(arg1->chain,arg2,2*sizeof(char));
+  else memset(arg1->chain,0,2*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_chain_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_chain_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (char *)(char *) ((arg1)->chain);
+  {
+    size_t size = SWIG_strnlen(result, 2);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_altloc_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[2] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_altloc_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_altloc_set" "', argument " "2"" of type '" "char [2]""'");
+  }
+  arg2 = reinterpret_cast< char * >(temp2);
+  if (arg2) memcpy(arg1->altloc,arg2,2*sizeof(char));
+  else memset(arg1->altloc,0,2*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_altloc_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_altloc_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (char *)(char *) ((arg1)->altloc);
+  {
+    size_t size = SWIG_strnlen(result, 2);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_insertion_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  char *arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char temp2[2] ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_insertion_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  res2 = SWIG_AsCharArray(obj1, temp2, 2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_insertion_set" "', argument " "2"" of type '" "char [2]""'");
+  }
+  arg2 = reinterpret_cast< char * >(temp2);
+  if (arg2) memcpy(arg1->insertion,arg2,2*sizeof(char));
+  else memset(arg1->insertion,0,2*sizeof(char));
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_insertion_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_insertion_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (char *)(char *) ((arg1)->insertion);
+  {
+    size_t size = SWIG_strnlen(result, 2);
+    
+    
+    
+    resultobj = SWIG_FromCharPtrAndSize(result, size);
+  }
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_occupancy_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_occupancy_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  if (arg1) (arg1)->occupancy = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_occupancy_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (float) ((arg1)->occupancy);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_bfactor_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_bfactor_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  if (arg1) (arg1)->bfactor = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_bfactor_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (float) ((arg1)->bfactor);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_mass_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_mass_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_mass_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  if (arg1) (arg1)->mass = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_mass_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_mass_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (float) ((arg1)->mass);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_charge_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_charge_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_charge_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  if (arg1) (arg1)->charge = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_charge_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_charge_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (float) ((arg1)->charge);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_radius_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_radius_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_radius_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  if (arg1) (arg1)->radius = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_radius_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_radius_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (float) ((arg1)->radius);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_atomicnumber_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_atomicnumber_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  if (arg1) (arg1)->atomicnumber = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_atomicnumber_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (float) ((arg1)->atomicnumber);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_ctnumber_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_set" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_ctnumber_set" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  if (arg1) (arg1)->ctnumber = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_ctnumber_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_get" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  result = (float) ((arg1)->ctnumber);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_MolAtoms")) SWIG_fail;
+  result = (MolAtoms *)new MolAtoms();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MolAtoms, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MolAtoms *arg1 = (MolAtoms *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_MolAtoms",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MolAtoms" "', argument " "1"" of type '" "MolAtoms *""'"); 
+  }
+  arg1 = reinterpret_cast< MolAtoms * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *MolAtoms_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_MolAtoms, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_del_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_plugin_structure",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_plugin_structure(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_alloc_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *arg2 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin_structure",&obj0,&obj1)) SWIG_fail;
+  arg1 = obj0;
+  arg2 = obj1;
+  result = (PyObject *)alloc_plugin_structure(arg1,arg2);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_del_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_plugin",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_plugin(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_del_atoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_atoms",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_atoms(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_del_atomname(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:del_atomname",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  del_atomname(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_alloc_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *arg2 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin",&obj0,&obj1)) SWIG_fail;
+  arg1 = obj0;
+  arg2 = obj1;
+  result = (PyObject *)alloc_plugin(arg1,arg2);
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  molfile_plugin_t **result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  result = (molfile_plugin_t **)molfile_plugin_list(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":molfile_init")) SWIG_fail;
+  result = (int)molfile_init();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail;
+  result = (int)molfile_finish();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_get_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  molfile_plugin_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:get_plugin",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_plugin" "', argument " "1"" of type '" "molfile_plugin_t **""'"); 
+  }
+  arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_plugin" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (molfile_plugin_t *)get_plugin(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t **""'"); 
+  }
+  arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  {
+    result = (PyObject *)molfile_plugin_info(arg1,arg2);
+    if (PyErr_Occurred()) SWIG_fail;
+  }
+  resultobj = result;
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_open_file_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ;
+  char *arg2 = (char *) 0 ;
+  char *arg3 = (char *) 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:open_file_read",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_file_read" "', argument " "1"" of type '" "molfile_plugin_t *""'"); 
+  }
+  arg1 = reinterpret_cast< molfile_plugin_t * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "open_file_read" "', argument " "2"" of type '" "char *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "open_file_read" "', argument " "3"" of type '" "char *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "open_file_read" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  {
+    result = (PyObject *)my_open_file_read(arg1,arg2,arg3,arg4);
+    if (PyErr_Occurred()) SWIG_fail;
+  }
+  resultobj = result;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_read_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:read_structure",&obj0)) SWIG_fail;
+  arg1 = obj0;
+  result = (PyObject *)my_read_structure(arg1);
   resultobj = result;
   return resultobj;
 fail:
@@ -3464,32 +4836,77 @@ fail:
 
 static PyMethodDef SwigMethods[] = {
 	 { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
+	 { (char *)"MolAtoms_name_set", _wrap_MolAtoms_name_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_name_get", _wrap_MolAtoms_name_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_type_set", _wrap_MolAtoms_type_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_type_get", _wrap_MolAtoms_type_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resname_set", _wrap_MolAtoms_resname_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resname_get", _wrap_MolAtoms_resname_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resid_set", _wrap_MolAtoms_resid_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_resid_get", _wrap_MolAtoms_resid_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_segid_set", _wrap_MolAtoms_segid_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_segid_get", _wrap_MolAtoms_segid_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_chain_set", _wrap_MolAtoms_chain_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_chain_get", _wrap_MolAtoms_chain_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_altloc_set", _wrap_MolAtoms_altloc_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_altloc_get", _wrap_MolAtoms_altloc_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_insertion_set", _wrap_MolAtoms_insertion_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_insertion_get", _wrap_MolAtoms_insertion_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_occupancy_set", _wrap_MolAtoms_occupancy_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_occupancy_get", _wrap_MolAtoms_occupancy_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_bfactor_set", _wrap_MolAtoms_bfactor_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_bfactor_get", _wrap_MolAtoms_bfactor_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_mass_set", _wrap_MolAtoms_mass_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_mass_get", _wrap_MolAtoms_mass_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_charge_set", _wrap_MolAtoms_charge_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_charge_get", _wrap_MolAtoms_charge_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_radius_set", _wrap_MolAtoms_radius_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_radius_get", _wrap_MolAtoms_radius_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_atomicnumber_set", _wrap_MolAtoms_atomicnumber_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_atomicnumber_get", _wrap_MolAtoms_atomicnumber_get, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_ctnumber_set", _wrap_MolAtoms_ctnumber_set, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_ctnumber_get", _wrap_MolAtoms_ctnumber_get, METH_VARARGS, NULL},
+	 { (char *)"new_MolAtoms", _wrap_new_MolAtoms, METH_VARARGS, NULL},
+	 { (char *)"delete_MolAtoms", _wrap_delete_MolAtoms, METH_VARARGS, NULL},
+	 { (char *)"MolAtoms_swigregister", MolAtoms_swigregister, METH_VARARGS, NULL},
+	 { (char *)"del_plugin_structure", _wrap_del_plugin_structure, METH_VARARGS, NULL},
+	 { (char *)"alloc_plugin_structure", _wrap_alloc_plugin_structure, METH_VARARGS, NULL},
+	 { (char *)"del_plugin", _wrap_del_plugin, METH_VARARGS, NULL},
+	 { (char *)"del_atoms", _wrap_del_atoms, METH_VARARGS, NULL},
+	 { (char *)"del_atomname", _wrap_del_atomname, METH_VARARGS, NULL},
+	 { (char *)"alloc_plugin", _wrap_alloc_plugin, METH_VARARGS, NULL},
 	 { (char *)"molfile_plugin_list", _wrap_molfile_plugin_list, METH_VARARGS, (char *)"molfile_plugin_list(maxsize) -> molfile_plugin_t **"},
 	 { (char *)"molfile_init", _wrap_molfile_init, METH_VARARGS, (char *)"molfile_init() -> int"},
 	 { (char *)"molfile_finish", _wrap_molfile_finish, METH_VARARGS, (char *)"molfile_finish() -> int"},
 	 { (char *)"get_plugin", _wrap_get_plugin, METH_VARARGS, (char *)"get_plugin(plugin_list, plugin_no) -> molfile_plugin_t *"},
 	 { (char *)"molfile_plugin_info", _wrap_molfile_plugin_info, METH_VARARGS, (char *)"molfile_plugin_info(plugin_list, plugin_no) -> PyObject *"},
+	 { (char *)"open_file_read", _wrap_open_file_read, METH_VARARGS, (char *)"open_file_read(plugin, fname, ftype, natoms) -> PyObject *"},
+	 { (char *)"read_structure", _wrap_read_structure, METH_VARARGS, (char *)"read_structure(molpack) -> PyObject *"},
 	 { NULL, NULL, 0, NULL }
 };
 
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
+static swig_type_info _swigt__p_MolAtoms = {"_p_MolAtoms", "MolAtoms *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_molfile_plugin_t = {"_p_molfile_plugin_t", "molfile_plugin_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_p_molfile_plugin_t = {"_p_p_molfile_plugin_t", "molfile_plugin_t **", 0, 0, (void*)0, 0};
 
 static swig_type_info *swig_type_initial[] = {
+  &_swigt__p_MolAtoms,
   &_swigt__p_char,
   &_swigt__p_molfile_plugin_t,
   &_swigt__p_p_molfile_plugin_t,
 };
 
+static swig_cast_info _swigc__p_MolAtoms[] = {  {&_swigt__p_MolAtoms, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_molfile_plugin_t[] = {  {&_swigt__p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_p_molfile_plugin_t[] = {  {&_swigt__p_p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}};
 
 static swig_cast_info *swig_cast_initial[] = {
+  _swigc__p_MolAtoms,
   _swigc__p_char,
   _swigc__p_molfile_plugin_t,
   _swigc__p_p_molfile_plugin_t,
@@ -4184,6 +5601,7 @@ SWIG_init(void) {
   SWIG_InstallConstants(d,swig_const_table);
   
   
+  Py_Initialize();
   import_array();
   
   SWIG_Python_SetConstant(d, "pluginOK",SWIG_From_int(static_cast< int >(pluginOK)));
diff --git a/pymolfile/molfile/pymolfile.c b/pymolfile/molfile/pymolfile.c
index 5bae356ea6afb0e04d4b0c691d94da62c3ab41c6..b3033e97440a13dc50ef4c006f9ebb4ecdb35fe4 100644
--- a/pymolfile/molfile/pymolfile.c
+++ b/pymolfile/molfile/pymolfile.c
@@ -36,6 +36,9 @@
 int numplugins=0;
 molfile_plugin_t** plugin_list;
 
+
+
+
 /* * * * * * * * * * * * * * * * * * * * * * *
  * Helper functions to set and store plugins *
  * * * * * * * * * * * * * * * * * * * * * * */
@@ -58,11 +61,13 @@ struct DICTHOLDER * plugin_find(struct DICTHOLDER *dict, const char *pluginname)
 
 molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no)
 {
+    molfile_plugin_t* plugin;
     if(plug_no < 0){
-	return NULL;
+	plugin = NULL;
     } else {
-	return plug_list[plug_no];
+	plugin = plug_list[plug_no];
     }
+    return plugin;
 }
 
 #if 0
@@ -245,4 +250,55 @@ int molfile_finish(void)
 
 /* Functions in molfile_plugin_t */
 
+PyObject * my_read_structure(PyObject* molpack) {
+    Py_Initialize();
+    import_array();
+    
+    int options = 0;
+    int i;
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    molfile_atom_t* atoms;
+    int numatoms, status;
+    PyArray_Descr *descr;
+    PyObject p*;
+    if (PyType_Ready(&MolAtomType) < 0)
+        return NULL;
+    PyTypeObject *atype = &MolAtomType;
+    MolAtom *atom_t;
+    atom_t = (MolAtom *)atype->tp_alloc(atype, 0);
+    p = (PyObject*) atom_t;
+    descr = PyArray_DescrFromObject(p, NULL)
+    MolObject* plugin_handle = (MolObject*) molpack;
+    plugin = plugin_handle->plugin;
+    file_handle = plugin_handle->file_handle;
+    numatoms = plugin_handle->natoms;
+    atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t));
+    status = plugin->read_structure(file_handle, &options, atoms);
+    if (status!=0){
+      PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin.");
+      return NULL;
+    }
+    PyArrayObject* oresid;
+    PyObject* array;
+    int64_t* cresid;
+    int nd = 1;
+    npy_intp dims[1] = { numatoms };
+    oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64);
+    Py_DECREF(p);
+    array = (PyArrayObject*) PyArray_SimpleNewFromDescr(1, dims, descr);
+    PyObject_Print(array, stdout, 0);
+    if (!oresid){
+      PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into numpy array.");
+      return NULL;
+    }
+    npy_intp* n = PyArray_DIMS(oresid);
+    cresid = (int64_t*) PyArray_DATA(oresid);
+    
+//    for (i=0;i<numatoms;i++){
+//        cresid[i] = (int64_t) atoms[i].resid;
+//    }
+    return (PyObject*) PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);
+}
+
 
diff --git a/pymolfile/molfile/pymolfile.h b/pymolfile/molfile/pymolfile.h
index e71a911f5bfbd883fa9506462e9d3214526572c9..5d37f5d2dc12ed010c2baa45c4edb26cbe77ae75 100644
--- a/pymolfile/molfile/pymolfile.h
+++ b/pymolfile/molfile/pymolfile.h
@@ -25,6 +25,10 @@ extern "C"
 #include "molfile_plugin.h"
 #include "libmolfile_plugin.h"
 #include "vmdplugin.h"
+#include "Python.h"
+#include "structmember.h"
+#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
+#include <numpy/arrayobject.h>
 
 enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, 
        pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR };
@@ -33,6 +37,281 @@ enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM,
 #define MAXPLUGINS 200
 #endif
 
+struct MolObject {
+    PyObject_HEAD
+    molfile_plugin_t* plugin;
+    void* file_handle;
+    int natoms;
+    MolObject(void) {}
+};
+
+static void MolObject_dealloc(MolObject* self)
+{
+    Py_XDECREF(self->plugin);
+    Py_XDECREF(self->file_handle);
+    Py_TYPE(self)->tp_free((PyObject*)self);
+}
+
+static PyObject * MolObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    MolObject *self;
+
+    self = (MolObject *)type->tp_alloc(type, 0);
+    if (self != NULL) {
+        self->plugin = NULL;
+        self->file_handle = NULL;
+        self->natoms = 0;
+    }
+
+    return (PyObject *)self;
+}
+
+static int MolObject_init(MolObject *self, PyObject *args, PyObject *kwds)
+{
+    molfile_plugin_t *plugin = NULL;
+    void *file_handle = NULL;
+    molfile_plugin_t *tmp1 = NULL;
+    void *tmp2 = NULL;
+
+    static char *kwlist[] = {"plugin", "file_handle", "natoms", NULL};
+
+    if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
+                                      &plugin, &file_handle,
+                                      &self->natoms))
+        return -1;
+
+    if (plugin) {
+        tmp1 = self->plugin;
+        Py_INCREF(plugin);
+        self->plugin = plugin;
+        Py_XDECREF(tmp1);
+    }
+
+    if (file_handle) {
+        tmp2 = self->file_handle;
+        Py_INCREF(file_handle);
+        self->file_handle = file_handle;
+        Py_XDECREF(tmp2);
+    }
+
+    return 0;
+}
+
+static molfile_plugin_t* MolObject_plugin(MolObject* self)
+{
+        return self->plugin;
+}
+
+static void* MolObject_file_handle(MolObject* self)
+{
+        return self->file_handle;
+}
+
+static PyObject* MolObject_natoms(MolObject* self)
+{
+        return PyLong_FromLong((long)self->natoms);
+}
+
+static PyMemberDef MolObject_members[] = {
+    {"plugin", T_OBJECT_EX, offsetof(MolObject, plugin), 0,
+     "molfile_plugin_t type plugin"},
+    {"file_handle", T_OBJECT_EX, offsetof(MolObject, file_handle), 0,
+     "file handle for plugin"},
+    {"natoms", T_INT, offsetof(MolObject, natoms), 0,
+     "number of atoms"},
+    {NULL, NULL, 0, NULL}  /* Sentinel */
+};
+
+static PyMethodDef MolObject_methods[] = {
+    {"get_plugin", (PyCFunction)MolObject_plugin, METH_NOARGS,
+     "Return the plugin"
+    },
+    {"get_file_handle", (PyCFunction)MolObject_file_handle, METH_NOARGS,
+     "Return the plugin"
+    },
+    {"get_natoms", (PyCFunction)MolObject_natoms, METH_NOARGS,
+     "Return the number of atoms"
+    },
+    {NULL, NULL, 0, NULL}  /* Sentinel */
+};
+
+
+#ifndef PyVarObject_HEAD_INIT
+    #define PyVarObject_HEAD_INIT(type, size) \
+        PyObject_HEAD_INIT(type) size,
+#endif
+
+static PyTypeObject MolObjectType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "molobject",                 /*tp_name*/
+    sizeof(MolObject),          /*tp_basicsize*/
+    0,                         /*tp_itemsize*/
+    (destructor)MolObject_dealloc, /*tp_dealloc*/
+    0,                         /*tp_print*/
+    0,                         /*tp_getattr*/
+    0,                         /*tp_setattr*/
+    0,                         /*tp_reserved*/
+    0,                         /*tp_repr*/
+    0,                         /*tp_as_number*/
+    0,                         /*tp_as_sequence*/
+    0,                         /*tp_as_mapping*/
+    0,                         /*tp_hash */
+    0,                         /*tp_call*/
+    0,                         /*tp_str*/
+    0,                         /*tp_getattro*/
+    0,                         /*tp_setattro*/
+    0,                         /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | 
+	    Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "molobject objects",           /* tp_doc */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
+    MolObject_methods,         /* tp_methods */
+    MolObject_members,         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    (initproc)MolObject_init,      /* tp_init */
+    0,                         /* tp_alloc */	
+    MolObject_new,                 /* tp_new */
+};
+
+struct MolAtom {
+    PyObject_HEAD
+    char* name; 
+    char* type; 
+    char* resname;
+    int* resid;
+    char* segid;
+    char* chain;
+    char* altloc;
+    char* insertion;
+    float* occupancy;
+    float* bfactor;
+    float* mass;
+    float* charge;
+    float* radius;
+    float* atomicnumber;
+    float* ctnumber;
+    MolAtom(void) {}
+};
+
+static void MolAtom_dealloc(MolAtom* self)
+{
+    Py_XDECREF(self->name); 
+    Py_XDECREF(self->type); 
+    Py_XDECREF(self->resname);
+    Py_XDECREF(self->resid);
+    Py_XDECREF(self->segid);
+    Py_XDECREF(self->chain);
+    Py_XDECREF(self->altloc);
+    Py_XDECREF(self->insertion);
+    Py_XDECREF(self->occupancy);
+    Py_XDECREF(self->bfactor);
+    Py_XDECREF(self->mass);
+    Py_XDECREF(self->charge);
+    Py_XDECREF(self->radius);
+    Py_XDECREF(self->atomicnumber);
+    Py_XDECREF(self->ctnumber);
+    Py_TYPE(self)->tp_free((PyObject*)self);
+}
+
+static PyObject * MolAtom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    MolAtom *self;
+
+    self = (MolAtom *)type->tp_alloc(type, 0);
+    if (self != NULL) {
+        self->name = NULL;
+        self->type = NULL;
+        self->resname = NULL;
+        self->resid = NULL;
+        self->segid = NULL;
+        self->chain = NULL;
+        self->altloc = NULL;
+        self->insertion = NULL;
+        self->occupancy = NULL;
+        self->bfactor = NULL;
+        self->mass = NULL;
+        self->charge = NULL;
+        self->radius = NULL;
+        self->atomicnumber = NULL;
+        self->ctnumber = NULL;
+    }
+
+    return (PyObject *)self;
+}
+
+static PyMemberDef MolAtom_members[] = {
+    {"name", T_STRING, offsetof(MolAtom, name), 0,""},
+    {"type", T_STRING, offsetof(MolAtom, type), 0,""},
+    {"resname", T_STRING, offsetof(MolAtom, resname), 0,""},
+    {"resid", T_INT, offsetof(MolAtom, resid), 0,""},
+    {"segid", T_STRING, offsetof(MolAtom, segid), 0,""},
+    {"chain", T_STRING, offsetof(MolAtom, chain), 0,""},
+    {"altloc", T_STRING, offsetof(MolAtom, altloc), 0,""},
+    {"insertion", T_STRING, offsetof(MolAtom, occupancy), 0,""},
+    {"occupancy", T_FLOAT, offsetof(MolAtom, ), 0,""},
+    {"bfactor", T_FLOAT, offsetof(MolAtom, bfactor), 0,""},
+    {"mass", T_FLOAT, offsetof(MolAtom, mass), 0,""},
+    {"charge", T_FLOAT, offsetof(MolAtom, charge), 0,""},
+    {"radius", T_FLOAT, offsetof(MolAtom, radius), 0,""},
+    {"atomicnumber", T_INT, offsetof(MolAtom, atomicnumber), 0,""},
+    {"ctnumber", T_INT, offsetof(MolAtom, ctnumber), 0,""},
+    {NULL, NULL, 0, NULL}  /* Sentinel */
+};
+
+static PyTypeObject MolAtomType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "molobject",                 /*tp_name*/
+    sizeof(MolAtom),          /*tp_basicsize*/
+    0,                         /*tp_itemsize*/
+    (destructor)MolAtom_dealloc, /*tp_dealloc*/
+    0,                         /*tp_print*/
+    0,                         /*tp_getattr*/
+    0,                         /*tp_setattr*/
+    0,                         /*tp_reserved*/
+    0,                         /*tp_repr*/
+    0,                         /*tp_as_number*/
+    0,                         /*tp_as_sequence*/
+    0,                         /*tp_as_mapping*/
+    0,                         /*tp_hash */
+    0,                         /*tp_call*/
+    0,                         /*tp_str*/
+    0,                         /*tp_getattro*/
+    0,                         /*tp_setattro*/
+    0,                         /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT | 
+	    Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    "molatom objects",           /* tp_doc */
+    0,                         /* tp_traverse */
+    0,                         /* tp_clear */
+    0,                         /* tp_richcompare */
+    0,                         /* tp_weaklistoffset */
+    0,                         /* tp_iter */
+    0,                         /* tp_iternext */
+    0,         /* tp_methods */
+    MolAtom_members,         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    0,      /* tp_init */
+    0,                         /* tp_alloc */	
+    MolAtom_new,                 /* tp_new */
+};
+
+PyObject * my_read_structure(PyObject* molpack);
+
 #if 0
 typedef struct DICTHOLDER {
     const char *key;          // Dictionary key
@@ -55,6 +334,7 @@ static int has_writesupport(const char *pluginname);
 static molfile_plugin_t *get_plugin(const char *pluginname);
 
 static int molfile_register(void *ptr, vmdplugin_t *plugin);
+
 #endif
 molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no);
 
diff --git a/pymolfile/molfile/test.py b/pymolfile/molfile/test.py
index 52af65aa65d193c83db4989ec9c3b312189066f1..afca74ed4fb9117e100c586e16cbb94e359dd340 100644
--- a/pymolfile/molfile/test.py
+++ b/pymolfile/molfile/test.py
@@ -1,6 +1,128 @@
 import numpy
+import ctypes
 import _libpymolfile
 
+class molatom_t(ctypes.Structure):
+    _fields_ = [
+        ('name', ctypes.c_char * 16),
+        ('type', ctypes.c_char * 16),
+        ('resname', ctypes.c_char * 8),
+        ('resid', ctypes.c_uint8),
+        ('segid', ctypes.c_char * 8),
+        ('chain', ctypes.c_char * 2),
+        ('altloc', ctypes.c_char * 2),
+        ('insertion', ctypes.c_char *2),
+        ('occupancy', ctypes.c_float),
+        ('bfactor', ctypes.c_float),
+        ('mass', ctypes.c_float),
+        ('charge', ctypes.c_float),
+        ('radius', ctypes.c_float),
+        ('atomicnumber', ctypes.c_uint8),
+        ('ctnumber', ctypes.c_uint8),
+    ]
+
+class molplugin_t(ctypes.Structure):
+    _fields_ = [
+        ('abiversion', ctypes.c_uint8),
+        ('type', ctypes.c_char_p),
+        ('name', ctypes.c_char_p),
+        ('prettyname', ctypes.c_char_p),
+        ('author', ctypes.c_char_p),
+        ('majorv', ctypes.c_uint8),
+        ('minorv', ctypes.c_uint8),
+        ('is_reentrant', ctypes.c_uint8), 
+        ('filename_extension', ctypes.c_char_p),
+        ('open_file_read', ctypes.CFUNCTYPE(ctypes.c_char_p, 
+            ctypes.c_char_p, ctypes.POINTER(ctypes.c_uint8))),
+        ('read_structure', ctypes.CFUNCTYPE(ctypes.c_void_p, 
+            ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(molatom_t))),
+        ('read_bonds', ctypes.CFUNCTYPE(ctypes.c_void_p,
+            ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint),
+            ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint),
+            ctypes.c_char_p)),
+        ('read_next_timestep', ctypes.c_int8),
+        ('close_file_read', ctypes.c_void_p),
+        ('open_file_write', ctypes.c_void_p),
+        ('write_structure', ctypes.c_int8),
+        ('write_timestep', ctypes.c_int8),
+        ('close_file_write', ctypes.c_void_p),
+        ('read_volumetric_metadata', ctypes.c_int8),
+        ('read_volumetric_data', ctypes.c_int8),
+        ('read_volumetric_data_ex', ctypes.c_int8),
+        ('read_rawgraphics', ctypes.c_int8),
+        ('read_molecule_metadata', ctypes.c_int8),
+        ('write_bonds', ctypes.c_int8),
+        ('write_volumetric_data', ctypes.c_int8),
+        ('write_volumetric_data_ex', ctypes.c_int8),
+        ('read_angles', ctypes.c_int8),
+        ('write_angles', ctypes.c_int8),
+        ('read_qm_metadata', ctypes.c_int8),
+        ('read_qm_rundata', ctypes.c_int8),
+        ('read_timestep', ctypes.c_int8),
+        ('read_timestep_metadata', ctypes.c_int8),
+        ('read_qm_timestep_metadata', ctypes.c_int8),
+        ('read_timestep2', ctypes.c_int8),
+        ('read_times', ctypes.c_ssize_t),
+        ('cons_fputs', ctypes.c_uint8)
+    ]
+
+class moltimestep_t(ctypes.Structure):
+    _fields_ = [
+        ('coords', ctypes.POINTER(ctypes.c_float)),
+        ('velocities', ctypes.POINTER(ctypes.c_float)),
+        ('A', ctypes.c_float),
+        ('B', ctypes.c_float),
+        ('C', ctypes.c_float),
+        ('alpha', ctypes.c_float),
+        ('beta', ctypes.c_float),
+        ('gamma', ctypes.c_float),
+        ('physical_time', ctypes.c_double),
+        ('total_energy', ctypes.c_double),
+        ('potential_energy', ctypes.c_double),
+        ('kinetic_energy', ctypes.c_double),
+        ('extended_energy', ctypes.c_double),
+        ('force_energy', ctypes.c_double),
+        ('total_pressure', ctypes.c_double)
+    ]
+
+class molhandle_t(ctypes.Structure):
+    _fields_ = [
+        ('plugin', ctypes.POINTER(molplugin_t)),
+        ('file_handle', ctypes.c_void_p),
+        ('natoms', ctypes.c_int)
+    ]
+
+class molnatoms(ctypes.Structure):
+    _fields_ = [
+        ('natoms', ctypes.c_int)
+    ]
+
+#callback_t = ctypes.CFUNCTYPE(None, ctypes.POINTER(molatom_t))
+
+def get_open_file_read(output):
+    ctypes.open_file_read.restype = ctypes.POINTER(molhandle_t)
+    ctypes.open_file_read.argtypes = [ctypes.POINTER(molplugin_t), ctypes.c_void_p, ctypes.c_uint8]
+    return ctypes.pythonapi.PyCapsule_GetPointer(output, "plugin")
+
+def get_capsule(capsule):
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    return ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+
+def get_plugincapsule(capsule):
+    data = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+    return data
+
+def get_plugindata(capsule):
+    data = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t)
+    ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p]
+    data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin")
+    return data
+
 mylib = _libpymolfile
 mylist  = mylib.molfile_plugin_list(200)
 numlist = mylib.molfile_init()
@@ -9,4 +131,23 @@ for i in range(numlist):
     testplugin = mylib.molfile_plugin_info(mylist, i)
     print(i, testplugin)
 
+plugin = mylib.get_plugin(mylist, 81)
+print(plugin)
+natoms=0
+numatoms=molnatoms(natoms)
+fname="../../test/md.gro"
+ftype="gro"
+
+pluginhandle = mylib.open_file_read(plugin, fname, ftype, natoms)
+print("This passed")
+print(pluginhandle)
+print("This passed too")
+print(pluginhandle.natoms)
+print("Here")
+outarray = mylib.read_structure(pluginhandle)
+print(outarray)
+#print(type(outarray))
+#for i in outarray:
+#    print(i)
+