ROOT logo

/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[13];
};
static const struct sqlcxp sqlfpn =
{
    12,
    "hora2conn.pc"
};


static unsigned int sqlctx = 302475;


static struct sqlexd {
   unsigned long  sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
   unsigned char  **sqphsv;
   unsigned long  *sqphsl;
            int   *sqphss;
            short **sqpind;
            int   *sqpins;
   unsigned long  *sqparm;
   unsigned long  **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
            int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
   unsigned int   sqlpfmem;
   unsigned char  *sqhstv[4];
   unsigned long  sqhstl[4];
            int   sqhsts[4];
            short *sqindv[4];
            int   sqinds[4];
   unsigned long  sqharm[4];
   unsigned long  *sqharc[4];
   unsigned short  sqadto[4];
   unsigned short  sqtdso[4];
} sqlstm = {13,4};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(unsigned char *, signed int *); }

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{13,4130,1,0,0,
5,0,0,0,0,0,27,108,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
36,0,0,2,0,0,32,129,0,0,0,0,0,1,0,
51,0,0,3,0,0,32,145,0,0,0,0,0,1,0,
66,0,0,0,0,0,27,226,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
97,0,0,5,56,0,6,243,0,0,1,1,0,1,0,2,3,0,0,
116,0,0,6,79,0,6,288,0,0,3,3,0,1,0,3,3,0,0,2,3,0,0,2,9,0,0,
143,0,0,7,156,0,6,325,0,0,2,2,0,1,0,1,97,0,0,2,97,0,0,
166,0,0,8,157,0,6,351,0,0,2,2,0,1,0,1,97,0,0,2,97,0,0,
189,0,0,9,163,0,6,378,0,0,2,2,0,1,0,1,3,0,0,2,97,0,0,
};


//*-- AUTHOR : Ilse Koenig
//*-- Created : 25/05/2010 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
// HOra2Conn
//
// Connection class to database Oracle in Hydra2
// (uses the Oracle C/C++ precompiler)
//
/////////////////////////////////////////////////////////////
using namespace std;
#include "hora2conn.h"
#include "TRandom.h"
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

// Oracle communication area
#include <oraca.h>
// SQL Communications Area
#include <sqlca.h>
// SQL prototype routines
#include <sqlcpr.h> 

ClassImp(HOra2Conn)

HOra2Conn::HOra2Conn() {
  // default constructor
  // defines default values for user ("hades_ana") and the database
  //   ("db-hades", the HADES Oracle 8 database on Linux at GSI)
  // User "hades_ana" has Readonly access to the Oracle tables.
  // The connection to Oracle is not opened!
  strcpy(dbName,"db-hades");
  strcpy(userName,"hades_ana");
  isConnected=kFALSE;
  actRunId=-1;
  runStart=-1;
  expLocation[0]='\0';
  historyDate[0]='\0';
  needsServerCheck=kTRUE;
}


HOra2Conn::~HOra2Conn() {
  // default destructor (closes connection)
  close();
}


Bool_t HOra2Conn::open() {
  // opens default connection with readonly access
  Char_t* password = new Char_t[9];
  strcpy(password,"hades");
  Bool_t rc=openConnection(password);
  if (!rc) close();
  return rc;
}

Bool_t HOra2Conn::open(Char_t *uName) {
  // opens connection to database Hades for user given by name
  // asks for password
  strncpy(userName,uName,20);
  Char_t* password=getPassword();
  Bool_t rc=openConnection(password);
  if (!rc) close();
  return rc;
}


Bool_t HOra2Conn::open(Char_t *dbN, Char_t *uN) {
  // opens connection to database with name dbName for user given by name
  // asks for password
  strncpy(dbName,dbN,30);
  strncpy(userName,uN,20);
  Char_t* password=getPassword();
  Bool_t rc=openConnection(password);
  if (!rc) close();
  return rc;
}


Bool_t HOra2Conn::reconnect() {
  // opens connection (contains the SQL-statements)
  if (isConnected) return kTRUE;
  if (strcmp(userName,"hades_ana")!=0) return kFALSE;
  Char_t connId[80];
  Char_t password[]={"hades"};
  strcpy(connId,userName);
  strcat(connId,"@");
  strcat(connId,dbName);    // e.g."hades_ana@db-hades"
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* uName;
    char* pWord;
  /* EXEC SQL END DECLARE SECTION; */ 

  uName=connId;
  pWord=password;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("openConnection(Char_t*)","Wrong user/password"); */ 

  /* EXEC SQL CONNECT :uName IDENTIFIED BY :pWord; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )10;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)uName;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)pWord;
  sqlstm.sqhstl[1] = (unsigned long )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlstm.sqlcmax = (unsigned int )100;
  sqlstm.sqlcmin = (unsigned int )2;
  sqlstm.sqlcincr = (unsigned int )1;
  sqlstm.sqlctimeout = (unsigned int )0;
  sqlstm.sqlcnowait = (unsigned int )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("openConnection(Char_t*)","Wrong user/password");
}


  if (sqlca.sqlcode==0) {
    isConnected=kTRUE;
    setHistoryDate(historyDate);
  } else Error("reconnect()","*** Failed to connect to Oracle ***");
  return isConnected; 
}


void HOra2Conn::close() {
  // disconnects from ORACLE
  // A transaction will be automatically rolled back,
  // that means changes in the database are not stored
  // without an explicit COMMIT
  actRunId=-1;
  runStart=-1;
  expLocation[0]='\0';
  historyDate[0]='\0';
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("close()"); */ 

  if (isConnected) {
    /* EXEC SQL ROLLBACK RELEASE; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 13;
    sqlstm.arrsiz = 4;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )1;
    sqlstm.offset = (unsigned int  )36;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)4352;
    sqlstm.occurs = (unsigned int  )0;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) showSqlError("close()");
}


    isConnected=kFALSE;
    cout<<"connection to Oracle closed"<<endl;
  }
  needsServerCheck=kTRUE;
}


void HOra2Conn::disconnect() {
  // disconnects from ORACLE
  // may be opened again via reconnect()
  if (isConnected) {
    actRunId=-1;
    runStart=-1;
    /* EXEC SQL WHENEVER SQLERROR DO
      showSqlError("disconnect()"); */ 

    /* EXEC SQL ROLLBACK RELEASE; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 13;
    sqlstm.arrsiz = 4;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )1;
    sqlstm.offset = (unsigned int  )51;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)4352;
    sqlstm.occurs = (unsigned int  )0;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) showSqlError("disconnect()");
}


    isConnected=kFALSE;
    cout<<"connection to Oracle closed"<<endl;
    needsServerCheck=kTRUE;
  }
}


void HOra2Conn::print() {
  // prints information about the database connection
  if (isConnected)
    cout<<"Oracle-Database: "<<dbName<<"    Username: "<<userName<<'\n';
  else cout<<"*** no connection to Oracle established  ***\n";
  if (strlen(historyDate)==0) cout<<"No history date set\n";
  else cout<<"History date: "<<historyDate<<'\n';
}


void HOra2Conn::showSqlError(const Char_t* fctName,const Char_t* msg) {
  // shows SQL error messages
  UChar_t errmsg[513];
  size_t buflen, msglen;
  buflen=sizeof(errmsg)-1;
  sqlglm(errmsg,&buflen,&msglen);
  if ((++msglen)<buflen) {
    errmsg[msglen]='\0';
  } else {
    errmsg[buflen]='\0';
  }
  if (msg) {
    Error(fctName,"\n%s\n%s\n",errmsg,msg);
  } else {
    Error(fctName,"\n%s\n",errmsg);
  }
}


Char_t* HOra2Conn::getPassword() {
  // asks for the password
  Char_t* passwd = new Char_t[20];
  Char_t buf[20];
  Int_t ttyfd = 0;
  struct termios tio, itio;
  if ((ttyfd = ::open("/dev/tty", O_RDWR)) < 0) {
    fprintf(stderr, "cannot open tty, using stdin\n");
    ttyfd = 0;
  }
  if (tcgetattr(ttyfd, &tio) < 0) {
    fprintf (stderr, "\nUnable to get terminal characteristics: ");
    cout<<"enter password for user "<<userName<<" > ";
    scanf("%[^\n]%*c",passwd);
    return passwd; 
  }
  itio = tio;
  tio.c_lflag &= ~(ECHO|ICANON);         
  tcsetattr (ttyfd, TCSAFLUSH, &tio);
  cout<<"enter password for user "<<userName<<" > ";
  fgets(buf, 20, stdin);
  tcsetattr (ttyfd, TCSAFLUSH, &itio);
  //close(ttyfd);
  sscanf(buf, "%s", passwd);
  cout<<endl;
  return passwd;
}


Bool_t HOra2Conn::openConnection(Char_t* password) {
  // opens connection (contains the SQL-statements)
  if (isConnected) close();
  Char_t connId[80];
  strcpy(connId,userName);
  strcat(connId,"@");
  strcat(connId,dbName);    // e.g."hades_ana@hadp"
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* uName;
    char* pWord;
  /* EXEC SQL END DECLARE SECTION; */ 

  uName=connId;
  pWord=password;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("openConnection(Char_t*)","Wrong user/password"); */ 

  /* EXEC SQL CONNECT :uName IDENTIFIED BY :pWord; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )10;
  sqlstm.offset = (unsigned int  )66;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)uName;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)pWord;
  sqlstm.sqhstl[1] = (unsigned long )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlstm.sqlcmax = (unsigned int )100;
  sqlstm.sqlcmin = (unsigned int )2;
  sqlstm.sqlcincr = (unsigned int )1;
  sqlstm.sqlctimeout = (unsigned int )0;
  sqlstm.sqlcnowait = (unsigned int )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("openConnection(Char_t*)","Wrong user/password");
}


  if (sqlca.sqlcode==0) isConnected=kTRUE;
  else cout<<"*** Failed to connect to Oracle ***"<<endl;
  delete [] password;
  actRunId=-1;
  runStart=0;
  expLocation[0]='\0';
  historyDate[0]='\0';
  alignmentOutVers=-1;
  return isConnected; 
}

Int_t HOra2Conn::checkServerLoad() {
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int retval; 
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO notfound; */ 

  /* EXEC SQL EXECUTE
    BEGIN
      :retval := hanal.check_analysis_sessions;
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin :retval := hanal . check_analysis_sessions ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )97;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)&retval;
  sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto notfound;
}


  return retval;
notfound:
  showSqlError("checkServerLoad");
  return -1; 
}

Int_t HOra2Conn::getRunStart(Int_t id) {
  // Gets the actual run id from the current event file and compares it with
  // the last used actRunId for fetching data.
  // If they are different, the run start time (converted to a number od seconds) is
  // read from Oracle and stored together with the run id in the data members
  // run_id and runStart
  if (id==actRunId && runStart!=0) return runStart;
  if (needsServerCheck) {
    Int_t l=0;
    UInt_t nTotWait=0;
    l=checkServerLoad();
    while (l==0&&nTotWait<86400000) {
      UInt_t nWait=10000+gRandom->Integer(20000);
      nTotWait+=nWait;
      cout<<"Oracle server busy, retry in "<<nWait/1000<<" seconds"<<endl;
      usleep(nWait*1000);
      l=checkServerLoad();
    }
    if (l>0) needsServerCheck=kFALSE;
    else return -1;
  }
  if (strlen(historyDate)==0) setParamRelease(id);
  actRunId=id;
  alignmentOutVers=-1;
  runStart=-1;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int ri; 
    int rs;
    /* varchar exp_loc[11]; */ 
struct { unsigned short len; unsigned char arr[11]; } exp_loc;

  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO notfound; */ 

  ri = actRunId;
  exp_loc.len=11;
  // run start converted to number of seconds since 01-JAN-1970 local time 
  /* EXEC SQL EXECUTE
    BEGIN
      hades_oper.run_query_2.get_run_start(:ri,:rs,:exp_loc);
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin hades_oper . run_query_2 . get_run_start ( :ri , :rs \
, :exp_loc ) ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )116;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)&ri;
  sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)&rs;
  sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (unsigned char  *)&exp_loc;
  sqlstm.sqhstl[2] = (unsigned long )13;
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         short *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned long )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto notfound;
}


  if (ri==(Int_t)actRunId) {
    runStart=rs;
    exp_loc.arr[exp_loc.len]='\0';
    if (strlen(expLocation)==0) strcpy(expLocation,(Char_t*)exp_loc.arr);
    else {
      if (strcmp(expLocation,(Char_t*)exp_loc.arr)!=0) {
        Error("getRunStart(Int_t)",
          "\nA switch from beamtime runs to simulations runs and vice versa is not "
          "possible\nwithout the close and reopen of the Oracle connection!\n\n");
        runStart=-1;
      }
    }
    /* cout<<"actRunId: "<<actRunId<<"   runStart: "<<runStart
           <<"   expLocation: "<<expLocation<<endl; */
    return runStart;
  }
notfound:
  Error("getRunStart(Int_t)","Run not found!\n\n");
  return -1; 
}


Bool_t HOra2Conn::setHistoryDate(const Char_t* dateString) {
  // Sets the date to retrieve historic data
  // Returns kFALSE when the date string cannot be converted to a valid date.
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* d;
    char rd[21];
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO notfound; */ 

  d=(Char_t*)dateString;
  rd[0]='\0';
  /* EXEC SQL EXECUTE
    BEGIN
      hades_oper.run_query_2.set_history_date(:d);
      :rd := to_char(hades_oper.run_query_2.get_history_date,'DD-MON-YYYY HH24:MI:SS');
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin hades_oper . run_query_2 . set_history_date ( :d ) ; \
:rd := to_char ( hades_oper . run_query_2 . get_history_date , 'DD-MON-YYYY HH\
24:MI:SS' ) ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )143;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)d;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)rd;
  sqlstm.sqhstl[1] = (unsigned long )21;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto notfound;
}


  rd[20]='\0';
  strcpy(historyDate,rd);
  cout<<"*************************************************************\n";
  cout<<"     Oracle history date: "<<historyDate<<"\n";
  cout<<"*************************************************************\n";
  return kTRUE;
notfound:
  showSqlError("setHistoryDate(Int_t)");
  return kFALSE;
}

Bool_t HOra2Conn::setParamRelease(const Char_t* release_name) {
  // Sets the history date to the creation date of the parameter release give by name
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* r;
    char rd[21];
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO notfound; */ 

  rd[0]='\0';	
  r=(Char_t*)release_name;
  /* EXEC SQL EXECUTE
    BEGIN
      hades_oper.run_query_2.set_param_release(:r);
      :rd := to_char(hades_oper.run_query_2.get_history_date,'DD-MON-YYYY HH24:MI:SS');
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin hades_oper . run_query_2 . set_param_release ( :r ) ;\
 :rd := to_char ( hades_oper . run_query_2 . get_history_date , 'DD-MON-YYYY H\
H24:MI:SS' ) ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )166;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)r;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)rd;
  sqlstm.sqhstl[1] = (unsigned long )21;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto notfound;
}


  rd[20]='\0';
  strcpy(historyDate,rd);
  cout<<"*************************************************************\n";
  cout<<"     Oracle history date: "<<historyDate<<"\n";
  cout<<"*************************************************************\n";
  return kTRUE;
notfound:
  showSqlError("setParamRelease(const Char_t*)");
  return kFALSE;
}

Bool_t HOra2Conn::setParamRelease(Int_t run) {
  // Sets the history date to the creation date of the parameter release
  // for the corresponding experiment
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int r;
    char rd[21];
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO notfound; */ 

  r=run;
  rd[0]='\0';
  /* EXEC SQL EXECUTE
    BEGIN
      hades_oper.run_query_2.set_history_date_by_run(:r);	
      :rd := to_char(hades_oper.run_query_2.get_history_date,'DD-MON-YYYY HH24:MI:SS');
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin hades_oper . run_query_2 . set_history_date_by_run ( \
:r ) ; :rd := to_char ( hades_oper . run_query_2 . get_history_date , 'DD-MON-\
YYYY HH24:MI:SS' ) ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )189;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)&r;
  sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)rd;
  sqlstm.sqhstl[1] = (unsigned long )21;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto notfound;
}


  rd[20]='\0';
  strcpy(historyDate,rd);
  cout<<"*************************************************************\n";
  cout<<"     Oracle history date: "<<historyDate<<"\n";
  cout<<"*************************************************************\n";
  return kTRUE;
notfound:
  showSqlError("setParamRelease(Int_t)");
  return kFALSE;
}
 hora2conn.pc.cc:1
 hora2conn.pc.cc:2
 hora2conn.pc.cc:3
 hora2conn.pc.cc:4
 hora2conn.pc.cc:5
 hora2conn.pc.cc:6
 hora2conn.pc.cc:7
 hora2conn.pc.cc:8
 hora2conn.pc.cc:9
 hora2conn.pc.cc:10
 hora2conn.pc.cc:11
 hora2conn.pc.cc:12
 hora2conn.pc.cc:13
 hora2conn.pc.cc:14
 hora2conn.pc.cc:15
 hora2conn.pc.cc:16
 hora2conn.pc.cc:17
 hora2conn.pc.cc:18
 hora2conn.pc.cc:19
 hora2conn.pc.cc:20
 hora2conn.pc.cc:21
 hora2conn.pc.cc:22
 hora2conn.pc.cc:23
 hora2conn.pc.cc:24
 hora2conn.pc.cc:25
 hora2conn.pc.cc:26
 hora2conn.pc.cc:27
 hora2conn.pc.cc:28
 hora2conn.pc.cc:29
 hora2conn.pc.cc:30
 hora2conn.pc.cc:31
 hora2conn.pc.cc:32
 hora2conn.pc.cc:33
 hora2conn.pc.cc:34
 hora2conn.pc.cc:35
 hora2conn.pc.cc:36
 hora2conn.pc.cc:37
 hora2conn.pc.cc:38
 hora2conn.pc.cc:39
 hora2conn.pc.cc:40
 hora2conn.pc.cc:41
 hora2conn.pc.cc:42
 hora2conn.pc.cc:43
 hora2conn.pc.cc:44
 hora2conn.pc.cc:45
 hora2conn.pc.cc:46
 hora2conn.pc.cc:47
 hora2conn.pc.cc:48
 hora2conn.pc.cc:49
 hora2conn.pc.cc:50
 hora2conn.pc.cc:51
 hora2conn.pc.cc:52
 hora2conn.pc.cc:53
 hora2conn.pc.cc:54
 hora2conn.pc.cc:55
 hora2conn.pc.cc:56
 hora2conn.pc.cc:57
 hora2conn.pc.cc:58
 hora2conn.pc.cc:59
 hora2conn.pc.cc:60
 hora2conn.pc.cc:61
 hora2conn.pc.cc:62
 hora2conn.pc.cc:63
 hora2conn.pc.cc:64
 hora2conn.pc.cc:65
 hora2conn.pc.cc:66
 hora2conn.pc.cc:67
 hora2conn.pc.cc:68
 hora2conn.pc.cc:69
 hora2conn.pc.cc:70
 hora2conn.pc.cc:71
 hora2conn.pc.cc:72
 hora2conn.pc.cc:73
 hora2conn.pc.cc:74
 hora2conn.pc.cc:75
 hora2conn.pc.cc:76
 hora2conn.pc.cc:77
 hora2conn.pc.cc:78
 hora2conn.pc.cc:79
 hora2conn.pc.cc:80
 hora2conn.pc.cc:81
 hora2conn.pc.cc:82
 hora2conn.pc.cc:83
 hora2conn.pc.cc:84
 hora2conn.pc.cc:85
 hora2conn.pc.cc:86
 hora2conn.pc.cc:87
 hora2conn.pc.cc:88
 hora2conn.pc.cc:89
 hora2conn.pc.cc:90
 hora2conn.pc.cc:91
 hora2conn.pc.cc:92
 hora2conn.pc.cc:93
 hora2conn.pc.cc:94
 hora2conn.pc.cc:95
 hora2conn.pc.cc:96
 hora2conn.pc.cc:97
 hora2conn.pc.cc:98
 hora2conn.pc.cc:99
 hora2conn.pc.cc:100
 hora2conn.pc.cc:101
 hora2conn.pc.cc:102
 hora2conn.pc.cc:103
 hora2conn.pc.cc:104
 hora2conn.pc.cc:105
 hora2conn.pc.cc:106
 hora2conn.pc.cc:107
 hora2conn.pc.cc:108
 hora2conn.pc.cc:109
 hora2conn.pc.cc:110
 hora2conn.pc.cc:111
 hora2conn.pc.cc:112
 hora2conn.pc.cc:113
 hora2conn.pc.cc:114
 hora2conn.pc.cc:115
 hora2conn.pc.cc:116
 hora2conn.pc.cc:117
 hora2conn.pc.cc:118
 hora2conn.pc.cc:119
 hora2conn.pc.cc:120
 hora2conn.pc.cc:121
 hora2conn.pc.cc:122
 hora2conn.pc.cc:123
 hora2conn.pc.cc:124
 hora2conn.pc.cc:125
 hora2conn.pc.cc:126
 hora2conn.pc.cc:127
 hora2conn.pc.cc:128
 hora2conn.pc.cc:129
 hora2conn.pc.cc:130
 hora2conn.pc.cc:131
 hora2conn.pc.cc:132
 hora2conn.pc.cc:133
 hora2conn.pc.cc:134
 hora2conn.pc.cc:135
 hora2conn.pc.cc:136
 hora2conn.pc.cc:137
 hora2conn.pc.cc:138
 hora2conn.pc.cc:139
 hora2conn.pc.cc:140
 hora2conn.pc.cc:141
 hora2conn.pc.cc:142
 hora2conn.pc.cc:143
 hora2conn.pc.cc:144
 hora2conn.pc.cc:145
 hora2conn.pc.cc:146
 hora2conn.pc.cc:147
 hora2conn.pc.cc:148
 hora2conn.pc.cc:149
 hora2conn.pc.cc:150
 hora2conn.pc.cc:151
 hora2conn.pc.cc:152
 hora2conn.pc.cc:153
 hora2conn.pc.cc:154
 hora2conn.pc.cc:155
 hora2conn.pc.cc:156
 hora2conn.pc.cc:157
 hora2conn.pc.cc:158
 hora2conn.pc.cc:159
 hora2conn.pc.cc:160
 hora2conn.pc.cc:161
 hora2conn.pc.cc:162
 hora2conn.pc.cc:163
 hora2conn.pc.cc:164
 hora2conn.pc.cc:165
 hora2conn.pc.cc:166
 hora2conn.pc.cc:167
 hora2conn.pc.cc:168
 hora2conn.pc.cc:169
 hora2conn.pc.cc:170
 hora2conn.pc.cc:171
 hora2conn.pc.cc:172
 hora2conn.pc.cc:173
 hora2conn.pc.cc:174
 hora2conn.pc.cc:175
 hora2conn.pc.cc:176
 hora2conn.pc.cc:177
 hora2conn.pc.cc:178
 hora2conn.pc.cc:179
 hora2conn.pc.cc:180
 hora2conn.pc.cc:181
 hora2conn.pc.cc:182
 hora2conn.pc.cc:183
 hora2conn.pc.cc:184
 hora2conn.pc.cc:185
 hora2conn.pc.cc:186
 hora2conn.pc.cc:187
 hora2conn.pc.cc:188
 hora2conn.pc.cc:189
 hora2conn.pc.cc:190
 hora2conn.pc.cc:191
 hora2conn.pc.cc:192
 hora2conn.pc.cc:193
 hora2conn.pc.cc:194
 hora2conn.pc.cc:195
 hora2conn.pc.cc:196
 hora2conn.pc.cc:197
 hora2conn.pc.cc:198
 hora2conn.pc.cc:199
 hora2conn.pc.cc:200
 hora2conn.pc.cc:201
 hora2conn.pc.cc:202
 hora2conn.pc.cc:203
 hora2conn.pc.cc:204
 hora2conn.pc.cc:205
 hora2conn.pc.cc:206
 hora2conn.pc.cc:207
 hora2conn.pc.cc:208
 hora2conn.pc.cc:209
 hora2conn.pc.cc:210
 hora2conn.pc.cc:211
 hora2conn.pc.cc:212
 hora2conn.pc.cc:213
 hora2conn.pc.cc:214
 hora2conn.pc.cc:215
 hora2conn.pc.cc:216
 hora2conn.pc.cc:217
 hora2conn.pc.cc:218
 hora2conn.pc.cc:219
 hora2conn.pc.cc:220
 hora2conn.pc.cc:221
 hora2conn.pc.cc:222
 hora2conn.pc.cc:223
 hora2conn.pc.cc:224
 hora2conn.pc.cc:225
 hora2conn.pc.cc:226
 hora2conn.pc.cc:227
 hora2conn.pc.cc:228
 hora2conn.pc.cc:229
 hora2conn.pc.cc:230
 hora2conn.pc.cc:231
 hora2conn.pc.cc:232
 hora2conn.pc.cc:233
 hora2conn.pc.cc:234
 hora2conn.pc.cc:235
 hora2conn.pc.cc:236
 hora2conn.pc.cc:237
 hora2conn.pc.cc:238
 hora2conn.pc.cc:239
 hora2conn.pc.cc:240
 hora2conn.pc.cc:241
 hora2conn.pc.cc:242
 hora2conn.pc.cc:243
 hora2conn.pc.cc:244
 hora2conn.pc.cc:245
 hora2conn.pc.cc:246
 hora2conn.pc.cc:247
 hora2conn.pc.cc:248
 hora2conn.pc.cc:249
 hora2conn.pc.cc:250
 hora2conn.pc.cc:251
 hora2conn.pc.cc:252
 hora2conn.pc.cc:253
 hora2conn.pc.cc:254
 hora2conn.pc.cc:255
 hora2conn.pc.cc:256
 hora2conn.pc.cc:257
 hora2conn.pc.cc:258
 hora2conn.pc.cc:259
 hora2conn.pc.cc:260
 hora2conn.pc.cc:261
 hora2conn.pc.cc:262
 hora2conn.pc.cc:263
 hora2conn.pc.cc:264
 hora2conn.pc.cc:265
 hora2conn.pc.cc:266
 hora2conn.pc.cc:267
 hora2conn.pc.cc:268
 hora2conn.pc.cc:269
 hora2conn.pc.cc:270
 hora2conn.pc.cc:271
 hora2conn.pc.cc:272
 hora2conn.pc.cc:273
 hora2conn.pc.cc:274
 hora2conn.pc.cc:275
 hora2conn.pc.cc:276
 hora2conn.pc.cc:277
 hora2conn.pc.cc:278
 hora2conn.pc.cc:279
 hora2conn.pc.cc:280
 hora2conn.pc.cc:281
 hora2conn.pc.cc:282
 hora2conn.pc.cc:283
 hora2conn.pc.cc:284
 hora2conn.pc.cc:285
 hora2conn.pc.cc:286
 hora2conn.pc.cc:287
 hora2conn.pc.cc:288
 hora2conn.pc.cc:289
 hora2conn.pc.cc:290
 hora2conn.pc.cc:291
 hora2conn.pc.cc:292
 hora2conn.pc.cc:293
 hora2conn.pc.cc:294
 hora2conn.pc.cc:295
 hora2conn.pc.cc:296
 hora2conn.pc.cc:297
 hora2conn.pc.cc:298
 hora2conn.pc.cc:299
 hora2conn.pc.cc:300
 hora2conn.pc.cc:301
 hora2conn.pc.cc:302
 hora2conn.pc.cc:303
 hora2conn.pc.cc:304
 hora2conn.pc.cc:305
 hora2conn.pc.cc:306
 hora2conn.pc.cc:307
 hora2conn.pc.cc:308
 hora2conn.pc.cc:309
 hora2conn.pc.cc:310
 hora2conn.pc.cc:311
 hora2conn.pc.cc:312
 hora2conn.pc.cc:313
 hora2conn.pc.cc:314
 hora2conn.pc.cc:315
 hora2conn.pc.cc:316
 hora2conn.pc.cc:317
 hora2conn.pc.cc:318
 hora2conn.pc.cc:319
 hora2conn.pc.cc:320
 hora2conn.pc.cc:321
 hora2conn.pc.cc:322
 hora2conn.pc.cc:323
 hora2conn.pc.cc:324
 hora2conn.pc.cc:325
 hora2conn.pc.cc:326
 hora2conn.pc.cc:327
 hora2conn.pc.cc:328
 hora2conn.pc.cc:329
 hora2conn.pc.cc:330
 hora2conn.pc.cc:331
 hora2conn.pc.cc:332
 hora2conn.pc.cc:333
 hora2conn.pc.cc:334
 hora2conn.pc.cc:335
 hora2conn.pc.cc:336
 hora2conn.pc.cc:337
 hora2conn.pc.cc:338
 hora2conn.pc.cc:339
 hora2conn.pc.cc:340
 hora2conn.pc.cc:341
 hora2conn.pc.cc:342
 hora2conn.pc.cc:343
 hora2conn.pc.cc:344
 hora2conn.pc.cc:345
 hora2conn.pc.cc:346
 hora2conn.pc.cc:347
 hora2conn.pc.cc:348
 hora2conn.pc.cc:349
 hora2conn.pc.cc:350
 hora2conn.pc.cc:351
 hora2conn.pc.cc:352
 hora2conn.pc.cc:353
 hora2conn.pc.cc:354
 hora2conn.pc.cc:355
 hora2conn.pc.cc:356
 hora2conn.pc.cc:357
 hora2conn.pc.cc:358
 hora2conn.pc.cc:359
 hora2conn.pc.cc:360
 hora2conn.pc.cc:361
 hora2conn.pc.cc:362
 hora2conn.pc.cc:363
 hora2conn.pc.cc:364
 hora2conn.pc.cc:365
 hora2conn.pc.cc:366
 hora2conn.pc.cc:367
 hora2conn.pc.cc:368
 hora2conn.pc.cc:369
 hora2conn.pc.cc:370
 hora2conn.pc.cc:371
 hora2conn.pc.cc:372
 hora2conn.pc.cc:373
 hora2conn.pc.cc:374
 hora2conn.pc.cc:375
 hora2conn.pc.cc:376
 hora2conn.pc.cc:377
 hora2conn.pc.cc:378
 hora2conn.pc.cc:379
 hora2conn.pc.cc:380
 hora2conn.pc.cc:381
 hora2conn.pc.cc:382
 hora2conn.pc.cc:383
 hora2conn.pc.cc:384
 hora2conn.pc.cc:385
 hora2conn.pc.cc:386
 hora2conn.pc.cc:387
 hora2conn.pc.cc:388
 hora2conn.pc.cc:389
 hora2conn.pc.cc:390
 hora2conn.pc.cc:391
 hora2conn.pc.cc:392
 hora2conn.pc.cc:393
 hora2conn.pc.cc:394
 hora2conn.pc.cc:395
 hora2conn.pc.cc:396
 hora2conn.pc.cc:397
 hora2conn.pc.cc:398
 hora2conn.pc.cc:399
 hora2conn.pc.cc:400
 hora2conn.pc.cc:401
 hora2conn.pc.cc:402
 hora2conn.pc.cc:403
 hora2conn.pc.cc:404
 hora2conn.pc.cc:405
 hora2conn.pc.cc:406
 hora2conn.pc.cc:407
 hora2conn.pc.cc:408
 hora2conn.pc.cc:409
 hora2conn.pc.cc:410
 hora2conn.pc.cc:411
 hora2conn.pc.cc:412
 hora2conn.pc.cc:413
 hora2conn.pc.cc:414
 hora2conn.pc.cc:415
 hora2conn.pc.cc:416
 hora2conn.pc.cc:417
 hora2conn.pc.cc:418
 hora2conn.pc.cc:419
 hora2conn.pc.cc:420
 hora2conn.pc.cc:421
 hora2conn.pc.cc:422
 hora2conn.pc.cc:423
 hora2conn.pc.cc:424
 hora2conn.pc.cc:425
 hora2conn.pc.cc:426
 hora2conn.pc.cc:427
 hora2conn.pc.cc:428
 hora2conn.pc.cc:429
 hora2conn.pc.cc:430
 hora2conn.pc.cc:431
 hora2conn.pc.cc:432
 hora2conn.pc.cc:433
 hora2conn.pc.cc:434
 hora2conn.pc.cc:435
 hora2conn.pc.cc:436
 hora2conn.pc.cc:437
 hora2conn.pc.cc:438
 hora2conn.pc.cc:439
 hora2conn.pc.cc:440
 hora2conn.pc.cc:441
 hora2conn.pc.cc:442
 hora2conn.pc.cc:443
 hora2conn.pc.cc:444
 hora2conn.pc.cc:445
 hora2conn.pc.cc:446
 hora2conn.pc.cc:447
 hora2conn.pc.cc:448
 hora2conn.pc.cc:449
 hora2conn.pc.cc:450
 hora2conn.pc.cc:451
 hora2conn.pc.cc:452
 hora2conn.pc.cc:453
 hora2conn.pc.cc:454
 hora2conn.pc.cc:455
 hora2conn.pc.cc:456
 hora2conn.pc.cc:457
 hora2conn.pc.cc:458
 hora2conn.pc.cc:459
 hora2conn.pc.cc:460
 hora2conn.pc.cc:461
 hora2conn.pc.cc:462
 hora2conn.pc.cc:463
 hora2conn.pc.cc:464
 hora2conn.pc.cc:465
 hora2conn.pc.cc:466
 hora2conn.pc.cc:467
 hora2conn.pc.cc:468
 hora2conn.pc.cc:469
 hora2conn.pc.cc:470
 hora2conn.pc.cc:471
 hora2conn.pc.cc:472
 hora2conn.pc.cc:473
 hora2conn.pc.cc:474
 hora2conn.pc.cc:475
 hora2conn.pc.cc:476
 hora2conn.pc.cc:477
 hora2conn.pc.cc:478
 hora2conn.pc.cc:479
 hora2conn.pc.cc:480
 hora2conn.pc.cc:481
 hora2conn.pc.cc:482
 hora2conn.pc.cc:483
 hora2conn.pc.cc:484
 hora2conn.pc.cc:485
 hora2conn.pc.cc:486
 hora2conn.pc.cc:487
 hora2conn.pc.cc:488
 hora2conn.pc.cc:489
 hora2conn.pc.cc:490
 hora2conn.pc.cc:491
 hora2conn.pc.cc:492
 hora2conn.pc.cc:493
 hora2conn.pc.cc:494
 hora2conn.pc.cc:495
 hora2conn.pc.cc:496
 hora2conn.pc.cc:497
 hora2conn.pc.cc:498
 hora2conn.pc.cc:499
 hora2conn.pc.cc:500
 hora2conn.pc.cc:501
 hora2conn.pc.cc:502
 hora2conn.pc.cc:503
 hora2conn.pc.cc:504
 hora2conn.pc.cc:505
 hora2conn.pc.cc:506
 hora2conn.pc.cc:507
 hora2conn.pc.cc:508
 hora2conn.pc.cc:509
 hora2conn.pc.cc:510
 hora2conn.pc.cc:511
 hora2conn.pc.cc:512
 hora2conn.pc.cc:513
 hora2conn.pc.cc:514
 hora2conn.pc.cc:515
 hora2conn.pc.cc:516
 hora2conn.pc.cc:517
 hora2conn.pc.cc:518
 hora2conn.pc.cc:519
 hora2conn.pc.cc:520
 hora2conn.pc.cc:521
 hora2conn.pc.cc:522
 hora2conn.pc.cc:523
 hora2conn.pc.cc:524
 hora2conn.pc.cc:525
 hora2conn.pc.cc:526
 hora2conn.pc.cc:527
 hora2conn.pc.cc:528
 hora2conn.pc.cc:529
 hora2conn.pc.cc:530
 hora2conn.pc.cc:531
 hora2conn.pc.cc:532
 hora2conn.pc.cc:533
 hora2conn.pc.cc:534
 hora2conn.pc.cc:535
 hora2conn.pc.cc:536
 hora2conn.pc.cc:537
 hora2conn.pc.cc:538
 hora2conn.pc.cc:539
 hora2conn.pc.cc:540
 hora2conn.pc.cc:541
 hora2conn.pc.cc:542
 hora2conn.pc.cc:543
 hora2conn.pc.cc:544
 hora2conn.pc.cc:545
 hora2conn.pc.cc:546
 hora2conn.pc.cc:547
 hora2conn.pc.cc:548
 hora2conn.pc.cc:549
 hora2conn.pc.cc:550
 hora2conn.pc.cc:551
 hora2conn.pc.cc:552
 hora2conn.pc.cc:553
 hora2conn.pc.cc:554
 hora2conn.pc.cc:555
 hora2conn.pc.cc:556
 hora2conn.pc.cc:557
 hora2conn.pc.cc:558
 hora2conn.pc.cc:559
 hora2conn.pc.cc:560
 hora2conn.pc.cc:561
 hora2conn.pc.cc:562
 hora2conn.pc.cc:563
 hora2conn.pc.cc:564
 hora2conn.pc.cc:565
 hora2conn.pc.cc:566
 hora2conn.pc.cc:567
 hora2conn.pc.cc:568
 hora2conn.pc.cc:569
 hora2conn.pc.cc:570
 hora2conn.pc.cc:571
 hora2conn.pc.cc:572
 hora2conn.pc.cc:573
 hora2conn.pc.cc:574
 hora2conn.pc.cc:575
 hora2conn.pc.cc:576
 hora2conn.pc.cc:577
 hora2conn.pc.cc:578
 hora2conn.pc.cc:579
 hora2conn.pc.cc:580
 hora2conn.pc.cc:581
 hora2conn.pc.cc:582
 hora2conn.pc.cc:583
 hora2conn.pc.cc:584
 hora2conn.pc.cc:585
 hora2conn.pc.cc:586
 hora2conn.pc.cc:587
 hora2conn.pc.cc:588
 hora2conn.pc.cc:589
 hora2conn.pc.cc:590
 hora2conn.pc.cc:591
 hora2conn.pc.cc:592
 hora2conn.pc.cc:593
 hora2conn.pc.cc:594
 hora2conn.pc.cc:595
 hora2conn.pc.cc:596
 hora2conn.pc.cc:597
 hora2conn.pc.cc:598
 hora2conn.pc.cc:599
 hora2conn.pc.cc:600
 hora2conn.pc.cc:601
 hora2conn.pc.cc:602
 hora2conn.pc.cc:603
 hora2conn.pc.cc:604
 hora2conn.pc.cc:605
 hora2conn.pc.cc:606
 hora2conn.pc.cc:607
 hora2conn.pc.cc:608
 hora2conn.pc.cc:609
 hora2conn.pc.cc:610
 hora2conn.pc.cc:611
 hora2conn.pc.cc:612
 hora2conn.pc.cc:613
 hora2conn.pc.cc:614
 hora2conn.pc.cc:615
 hora2conn.pc.cc:616
 hora2conn.pc.cc:617
 hora2conn.pc.cc:618
 hora2conn.pc.cc:619
 hora2conn.pc.cc:620
 hora2conn.pc.cc:621
 hora2conn.pc.cc:622
 hora2conn.pc.cc:623
 hora2conn.pc.cc:624
 hora2conn.pc.cc:625
 hora2conn.pc.cc:626
 hora2conn.pc.cc:627
 hora2conn.pc.cc:628
 hora2conn.pc.cc:629
 hora2conn.pc.cc:630
 hora2conn.pc.cc:631
 hora2conn.pc.cc:632
 hora2conn.pc.cc:633
 hora2conn.pc.cc:634
 hora2conn.pc.cc:635
 hora2conn.pc.cc:636
 hora2conn.pc.cc:637
 hora2conn.pc.cc:638
 hora2conn.pc.cc:639
 hora2conn.pc.cc:640
 hora2conn.pc.cc:641
 hora2conn.pc.cc:642
 hora2conn.pc.cc:643
 hora2conn.pc.cc:644
 hora2conn.pc.cc:645
 hora2conn.pc.cc:646
 hora2conn.pc.cc:647
 hora2conn.pc.cc:648
 hora2conn.pc.cc:649
 hora2conn.pc.cc:650
 hora2conn.pc.cc:651
 hora2conn.pc.cc:652
 hora2conn.pc.cc:653
 hora2conn.pc.cc:654
 hora2conn.pc.cc:655
 hora2conn.pc.cc:656
 hora2conn.pc.cc:657
 hora2conn.pc.cc:658
 hora2conn.pc.cc:659
 hora2conn.pc.cc:660
 hora2conn.pc.cc:661
 hora2conn.pc.cc:662
 hora2conn.pc.cc:663
 hora2conn.pc.cc:664
 hora2conn.pc.cc:665
 hora2conn.pc.cc:666
 hora2conn.pc.cc:667
 hora2conn.pc.cc:668
 hora2conn.pc.cc:669
 hora2conn.pc.cc:670
 hora2conn.pc.cc:671
 hora2conn.pc.cc:672
 hora2conn.pc.cc:673
 hora2conn.pc.cc:674
 hora2conn.pc.cc:675
 hora2conn.pc.cc:676
 hora2conn.pc.cc:677
 hora2conn.pc.cc:678
 hora2conn.pc.cc:679
 hora2conn.pc.cc:680
 hora2conn.pc.cc:681
 hora2conn.pc.cc:682
 hora2conn.pc.cc:683
 hora2conn.pc.cc:684
 hora2conn.pc.cc:685
 hora2conn.pc.cc:686
 hora2conn.pc.cc:687
 hora2conn.pc.cc:688
 hora2conn.pc.cc:689
 hora2conn.pc.cc:690
 hora2conn.pc.cc:691
 hora2conn.pc.cc:692
 hora2conn.pc.cc:693
 hora2conn.pc.cc:694
 hora2conn.pc.cc:695
 hora2conn.pc.cc:696
 hora2conn.pc.cc:697
 hora2conn.pc.cc:698
 hora2conn.pc.cc:699
 hora2conn.pc.cc:700
 hora2conn.pc.cc:701
 hora2conn.pc.cc:702
 hora2conn.pc.cc:703
 hora2conn.pc.cc:704
 hora2conn.pc.cc:705
 hora2conn.pc.cc:706
 hora2conn.pc.cc:707
 hora2conn.pc.cc:708
 hora2conn.pc.cc:709
 hora2conn.pc.cc:710
 hora2conn.pc.cc:711
 hora2conn.pc.cc:712
 hora2conn.pc.cc:713
 hora2conn.pc.cc:714
 hora2conn.pc.cc:715
 hora2conn.pc.cc:716
 hora2conn.pc.cc:717
 hora2conn.pc.cc:718
 hora2conn.pc.cc:719
 hora2conn.pc.cc:720
 hora2conn.pc.cc:721
 hora2conn.pc.cc:722
 hora2conn.pc.cc:723
 hora2conn.pc.cc:724
 hora2conn.pc.cc:725
 hora2conn.pc.cc:726
 hora2conn.pc.cc:727
 hora2conn.pc.cc:728
 hora2conn.pc.cc:729
 hora2conn.pc.cc:730
 hora2conn.pc.cc:731
 hora2conn.pc.cc:732
 hora2conn.pc.cc:733
 hora2conn.pc.cc:734
 hora2conn.pc.cc:735
 hora2conn.pc.cc:736
 hora2conn.pc.cc:737
 hora2conn.pc.cc:738
 hora2conn.pc.cc:739
 hora2conn.pc.cc:740
 hora2conn.pc.cc:741
 hora2conn.pc.cc:742
 hora2conn.pc.cc:743
 hora2conn.pc.cc:744
 hora2conn.pc.cc:745
 hora2conn.pc.cc:746
 hora2conn.pc.cc:747
 hora2conn.pc.cc:748
 hora2conn.pc.cc:749
 hora2conn.pc.cc:750
 hora2conn.pc.cc:751
 hora2conn.pc.cc:752
 hora2conn.pc.cc:753
 hora2conn.pc.cc:754
 hora2conn.pc.cc:755
 hora2conn.pc.cc:756
 hora2conn.pc.cc:757
 hora2conn.pc.cc:758
 hora2conn.pc.cc:759
 hora2conn.pc.cc:760
 hora2conn.pc.cc:761
 hora2conn.pc.cc:762
 hora2conn.pc.cc:763
 hora2conn.pc.cc:764
 hora2conn.pc.cc:765
 hora2conn.pc.cc:766
 hora2conn.pc.cc:767
 hora2conn.pc.cc:768
 hora2conn.pc.cc:769
 hora2conn.pc.cc:770
 hora2conn.pc.cc:771
 hora2conn.pc.cc:772
 hora2conn.pc.cc:773
 hora2conn.pc.cc:774
 hora2conn.pc.cc:775
 hora2conn.pc.cc:776
 hora2conn.pc.cc:777
 hora2conn.pc.cc:778
 hora2conn.pc.cc:779
 hora2conn.pc.cc:780
 hora2conn.pc.cc:781
 hora2conn.pc.cc:782
 hora2conn.pc.cc:783
 hora2conn.pc.cc:784
 hora2conn.pc.cc:785
 hora2conn.pc.cc:786
 hora2conn.pc.cc:787
 hora2conn.pc.cc:788
 hora2conn.pc.cc:789
 hora2conn.pc.cc:790
 hora2conn.pc.cc:791
 hora2conn.pc.cc:792
 hora2conn.pc.cc:793
 hora2conn.pc.cc:794
 hora2conn.pc.cc:795
 hora2conn.pc.cc:796
 hora2conn.pc.cc:797
 hora2conn.pc.cc:798
 hora2conn.pc.cc:799
 hora2conn.pc.cc:800
 hora2conn.pc.cc:801
 hora2conn.pc.cc:802
 hora2conn.pc.cc:803
 hora2conn.pc.cc:804
 hora2conn.pc.cc:805
 hora2conn.pc.cc:806
 hora2conn.pc.cc:807
 hora2conn.pc.cc:808
 hora2conn.pc.cc:809
 hora2conn.pc.cc:810
 hora2conn.pc.cc:811
 hora2conn.pc.cc:812
 hora2conn.pc.cc:813
 hora2conn.pc.cc:814
 hora2conn.pc.cc:815
 hora2conn.pc.cc:816
 hora2conn.pc.cc:817
 hora2conn.pc.cc:818
 hora2conn.pc.cc:819
 hora2conn.pc.cc:820
 hora2conn.pc.cc:821
 hora2conn.pc.cc:822
 hora2conn.pc.cc:823
 hora2conn.pc.cc:824
 hora2conn.pc.cc:825
 hora2conn.pc.cc:826
 hora2conn.pc.cc:827
 hora2conn.pc.cc:828
 hora2conn.pc.cc:829
 hora2conn.pc.cc:830
 hora2conn.pc.cc:831
 hora2conn.pc.cc:832
 hora2conn.pc.cc:833
 hora2conn.pc.cc:834
 hora2conn.pc.cc:835
 hora2conn.pc.cc:836
 hora2conn.pc.cc:837
 hora2conn.pc.cc:838
 hora2conn.pc.cc:839
 hora2conn.pc.cc:840
 hora2conn.pc.cc:841
 hora2conn.pc.cc:842
 hora2conn.pc.cc:843
 hora2conn.pc.cc:844
 hora2conn.pc.cc:845
 hora2conn.pc.cc:846
 hora2conn.pc.cc:847
 hora2conn.pc.cc:848
 hora2conn.pc.cc:849
 hora2conn.pc.cc:850
 hora2conn.pc.cc:851
 hora2conn.pc.cc:852
 hora2conn.pc.cc:853
 hora2conn.pc.cc:854
 hora2conn.pc.cc:855
 hora2conn.pc.cc:856
 hora2conn.pc.cc:857
 hora2conn.pc.cc:858
 hora2conn.pc.cc:859
 hora2conn.pc.cc:860
 hora2conn.pc.cc:861
 hora2conn.pc.cc:862
 hora2conn.pc.cc:863
 hora2conn.pc.cc:864
 hora2conn.pc.cc:865
 hora2conn.pc.cc:866
 hora2conn.pc.cc:867
 hora2conn.pc.cc:868
 hora2conn.pc.cc:869
 hora2conn.pc.cc:870
 hora2conn.pc.cc:871
 hora2conn.pc.cc:872
 hora2conn.pc.cc:873
 hora2conn.pc.cc:874
 hora2conn.pc.cc:875
 hora2conn.pc.cc:876
 hora2conn.pc.cc:877
 hora2conn.pc.cc:878
 hora2conn.pc.cc:879
 hora2conn.pc.cc:880
 hora2conn.pc.cc:881
 hora2conn.pc.cc:882
 hora2conn.pc.cc:883
 hora2conn.pc.cc:884
 hora2conn.pc.cc:885
 hora2conn.pc.cc:886
 hora2conn.pc.cc:887
 hora2conn.pc.cc:888
 hora2conn.pc.cc:889
 hora2conn.pc.cc:890
 hora2conn.pc.cc:891
 hora2conn.pc.cc:892
 hora2conn.pc.cc:893
 hora2conn.pc.cc:894
 hora2conn.pc.cc:895
 hora2conn.pc.cc:896
 hora2conn.pc.cc:897
 hora2conn.pc.cc:898
 hora2conn.pc.cc:899
 hora2conn.pc.cc:900
 hora2conn.pc.cc:901
 hora2conn.pc.cc:902
 hora2conn.pc.cc:903
 hora2conn.pc.cc:904
 hora2conn.pc.cc:905
 hora2conn.pc.cc:906
 hora2conn.pc.cc:907
 hora2conn.pc.cc:908
 hora2conn.pc.cc:909
 hora2conn.pc.cc:910
 hora2conn.pc.cc:911
 hora2conn.pc.cc:912
 hora2conn.pc.cc:913
 hora2conn.pc.cc:914
 hora2conn.pc.cc:915
 hora2conn.pc.cc:916
 hora2conn.pc.cc:917
 hora2conn.pc.cc:918
 hora2conn.pc.cc:919
 hora2conn.pc.cc:920
 hora2conn.pc.cc:921
 hora2conn.pc.cc:922
 hora2conn.pc.cc:923
 hora2conn.pc.cc:924
 hora2conn.pc.cc:925
 hora2conn.pc.cc:926
 hora2conn.pc.cc:927
 hora2conn.pc.cc:928
 hora2conn.pc.cc:929
 hora2conn.pc.cc:930
 hora2conn.pc.cc:931
 hora2conn.pc.cc:932
 hora2conn.pc.cc:933
 hora2conn.pc.cc:934
 hora2conn.pc.cc:935
 hora2conn.pc.cc:936
 hora2conn.pc.cc:937