// @(#)root/netx:$Id$
// Author: Frank Winklmeier, Fabrizio Furano

/*************************************************************************
 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TXNetSystem                                                          //
//                                                                      //
// Authors: Frank Winklmeier,  Fabrizio Furano                          //
//          INFN Padova, 2005                                           //
//                                                                      //
// TXNetSystem is an extension of TNetSystem able to deal with new      //
// xrootd servers. The class detects the nature of the server and       //
// redirects the calls to TNetSystem in case of a rootd server.         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TEnv.h"
#include "TFileStager.h"
#include "TObjString.h"
#include "TROOT.h"
#include "TSocket.h"
#include "TString.h"
#include "TUrl.h"
#include "TVirtualMutex.h"
#include "TXNetFile.h"
#include "TXNetSystem.h"

#include "XrdOuc/XrdOucString.hh"
#include "XrdClient/XrdClientVector.hh"
#include "XrdClient/XrdClientAdmin.hh"
#include "XrdClient/XrdClientConn.hh"
#include "XrdClient/XrdClientConst.hh"
#include "XrdClient/XrdClientEnv.hh"
#include "XProtocol/XProtocol.hh"

#include "XrdProofdXrdVers.h"

ClassImp(TXNetSystem);

Bool_t TXNetSystem::fgInitDone = kFALSE;
Bool_t TXNetSystem::fgRootdBC = kTRUE;
THashList TXNetSystem::fgAddrFQDN;
THashList TXNetSystem::fgAdminHash;

typedef XrdClientVector<XrdOucString> VecString_t;

//_____________________________________________________________________________
TXNetSystem::TXNetSystem(Bool_t owner) : TNetSystem(owner), fDirList(0)
{
   // Create system management class without connecting to server.

   SetTitle("(x)rootd system administration");
   fIsRootd = kFALSE;
   fIsXRootd = kFALSE;
   fDir = "";
   fDirp = 0;
   fUrl = "";
}

//_____________________________________________________________________________
TXNetSystem::TXNetSystem(const char *url, Bool_t owner) : TNetSystem(owner), fDirList(0)
{
   // Create system management class and connect to server specified by url.

   SetTitle("(x)rootd system administration");
   fIsRootd = kFALSE;
   fIsXRootd = kFALSE;
   fDir = "";
   fDirp = 0;
   fUrl = url;

   fgAddrFQDN.SetOwner();
   fgAdminHash.SetOwner();

   // Set debug level
   EnvPutInt(NAME_DEBUG, gEnv->GetValue("XNet.Debug", -1));

   // The first time do some global initialization
   if (!fgInitDone)
      InitXrdClient();

   // Fill in user, host, port
   TNetSystem::InitRemoteEntity(url);

   TXNetSystemConnectGuard cguard(this, url);
   if (!cguard.IsValid() && !fIsRootd)
      Error("TXNetSystem","fatal error: connection creation failed.");

   return;
}

//_____________________________________________________________________________
XrdClientAdmin *TXNetSystem::Connect(const char *url)
{
   // Init a connection to the server.
   // Returns a pointer to the appropriate instance of XrdClientAdmin or 0
   // in case of failure.

   // We need a dummy filename after the server url to connect
   TString dummy = url;
   dummy += "/dummy";

   XrdClientAdmin *cadm = TXNetSystem::GetClientAdmin(dummy);

   if (!cadm) {
      Error("Connect","fatal error: new object creation failed.");
      return cadm;
   }

   // Do not block: restore old value after
   Int_t maxOld = EnvGetLong(NAME_FIRSTCONNECTMAXCNT);

   // Try to connect to the server
   gEnv->SetValue("XNet.FirstConnectMaxCnt", 1);
   EnvPutInt(NAME_FIRSTCONNECTMAXCNT, 1);
   if (cadm->Connect()) {
      fIsXRootd = kTRUE;
      EnvPutInt(NAME_FIRSTCONNECTMAXCNT, maxOld);
   } else {
      EnvPutInt(NAME_FIRSTCONNECTMAXCNT, maxOld);
      if (fgRootdBC) {
         Bool_t isRootd =
            (cadm->GetClientConn()->GetServerType() == kSTRootd);
         Int_t sd = cadm->GetClientConn()->GetOpenSockFD();
         if (isRootd && sd > -1) {
            //
            // Create a TSocket on the open connection
            TSocket *s = new TSocket(sd);

            // We will clean it by ourselves
            R__LOCKGUARD2(gROOTMutex);
            gROOT->GetListOfSockets()->Remove(s);

            s->SetOption(kNoBlock, 0);

            // Find out the remote protocol (send the client protocol first)
            Int_t rproto = TXNetFile::GetRootdProtocol(s);
            if (rproto < 0) {
               Error("TXNetSystem", "getting protocol of the rootd server");
               cadm = 0;
               return 0;
            }
            // Finalize TSocket initialization
            s->SetRemoteProtocol(rproto);
            TUrl uut((cadm->GetClientConn()
                             ->GetCurrentUrl()).GetUrl().c_str());
            TString uu;
            TXNetFile::FormUrl(uut,uu);
            if (gDebug > 2)
               Info("Connect"," url: %s",uu.Data());

            s->SetUrl(uu.Data());
            s->SetService("rootd");
            s->SetServType(TSocket::kROOTD);
            //
            // Now we can check if we can create a TNetFile on the
            // open connection
            if (rproto > 13) {
               //
               // Remote support for reuse of open connection
               TNetSystem::Create(uu, s);
            } else {
               //
               // Open connection has been closed because could
               // not be reused; TNetSystem will open a new connection
               TNetSystem::Create(uu);
            }

            // Type of server
            fIsRootd = kTRUE;
            cadm = 0;

         } else {
            Error("Connect", "some severe error occurred while opening"
                  " the connection at %s - exit", url);
            if (cadm && cadm->LastServerError())
               Printf("   '%s'", cadm->LastServerError()->errmsg);
            else
               Printf("   (error message not available)");
            cadm = 0;
            return cadm;
         }
      } else {
         Error("Connect",
               "while opening the connection at %s - exit", url);
         cadm = 0;
         return cadm;
      }
   }

   return cadm;
}

//_____________________________________________________________________________
void TXNetSystem::InitXrdClient()
{
   // One-time initialization of some communication variables for xrootd protocol

   // Init vars with default debug level -1, so we do not get warnings
   TXNetFile::SetEnv();

   // Only once
   fgInitDone = kTRUE;

   // Print the tag, if required (only once)
   if (gEnv->GetValue("XNet.PrintTAG",0) == 1)
     Info("TXNetFile","(C) 2005 SLAC TXNetSystem (eXtended TNetSystem) %s",
         gROOT->GetVersion());
}

//_____________________________________________________________________________
void* TXNetSystem::OpenDirectory(const char* dir)
{
   // Open a directory. Returns a non-zero pointer (with no special
   // purpose) in case of success, 0 in case of error.

   if (fIsXRootd) {
      // Check if the directory exists
      TXNetSystemConnectGuard cg(this, dir);
      if (cg.IsValid()) {
         fUrl = dir;
         // Extract the directory name
         fDir = TUrl(dir).GetFile();
         fDirp = (void*)&fDir;     // serves as directory pointer

         vecString dirs;
         vecBool existDirs;
         XrdOucString s(fDir.Data());
         dirs.Push_back(s);
         cg.ClientAdmin()->ExistDirs(dirs, existDirs);
         cg.ClientAdmin()->GoBackToRedirector();
         if (existDirs.GetSize()>0 && existDirs[0])
            return fDirp;
         else
            cg.NotifyLastError();
      }
      return 0;
   }

   if (gDebug > 1)
      Info("OpenDirectory", "calling TNetSystem::OpenDirectory");
   return TNetSystem::OpenDirectory(dir);       // for a rootd
}

//_____________________________________________________________________________
void TXNetSystem::FreeDirectory(void *dirp)
{
   // Free(Close) the directory referenced by dirp

   if (fIsXRootd) {
      if (dirp != fDirp) {
         Error("FreeDirectory","invalid directory pointer (%p, %p)", dirp, fDirp);
         return;
      }
      fDir = "";
      fDirp = 0;
      fDirEntry = "";
      if (fDirList) {
         ((VecString_t*)fDirList)->Clear();
         delete ((VecString_t*)fDirList);
         fDirList = 0;
      }
      return;
   }

   if (gDebug > 1)
      Info("FreeDirectory","calling TNetSystem::FreeDirectory");
   return TNetSystem::FreeDirectory(dirp);     // for a rootd
}

//_____________________________________________________________________________
Int_t TXNetSystem::MakeDirectory(const char* dir)
{
   // Create a directory. Return 0 on success, -1 otherwise.

   if (fIsXRootd) {
      TXNetSystemConnectGuard cg(this, dir);
      if (cg.IsValid()) {
         // use default permissions 755 to create directory
         Bool_t ok = cg.ClientAdmin()->Mkdir(TUrl(dir).GetFile(),7,5,5);
         cg.ClientAdmin()->GoBackToRedirector();
         if (ok) {
            return 0;
         } else {
            cg.NotifyLastError();
            return -1;
         }
      }
   }

   if (gDebug > 1)
      Info("MakeDirectory","Calling TNetSystem::MakeDirectory");
   return TNetSystem::MakeDirectory(dir);     // for a rootd
}

//_____________________________________________________________________________
const char* TXNetSystem::GetDirEntry(void *dirp)
{
   // Get directory entry for directory referenced by dirp.
   // Returns 0 in case there are no more entries.

   if (fIsXRootd) {
      if (dirp != fDirp) {
         Error("GetDirEntry","invalid directory pointer");
         return 0;
      }

      // Only request new directory listing the first time called
      if (!fDirList) {
         TXNetSystemConnectGuard cg(this, fUrl);
         if (cg.IsValid()) {
            fDirList = new VecString_t;
            Bool_t ok = cg.ClientAdmin()->DirList(fDir, *(VecString_t*)fDirList);
            cg.ClientAdmin()->GoBackToRedirector();
            if (!ok) {
               cg.NotifyLastError();
               delete (VecString_t*)fDirList;
               fDirList = 0;
               return 0;
            }
         }
      }

      // Return entries one by one with each call of method
      if (fDirList && ((VecString_t*)fDirList)->GetSize() > 0) {
         fDirEntry = ((VecString_t*)fDirList)->Pop_front().c_str();
         return fDirEntry.Data();
      }
      return 0;   // until all of them have been returned
   }

   if (gDebug > 1) Info("GetDirEntry","Calling TNetSystem::GetDirEntry");
   return TNetSystem::GetDirEntry(dirp);      // for a rootd
}

//_____________________________________________________________________________
Int_t TXNetSystem::GetPathInfo(const char* path, FileStat_t &buf)
{
   // Get info about a file. Info is returned in the form of a FileStat_t
   // structure (see TSystem.h).
   // The function returns 0 in case of success and 1 if the file could
   // not be stat'ed.
   // NOTICE: Not all information is available with an xrootd server.

   if (fIsXRootd) {
      TXNetSystemConnectGuard cg(this, path);
      if (cg.IsValid()) {

         Long_t id;
         Long64_t size;
         Long_t flags;
         Long_t modtime;

         // Issue the request
         TUrl urlpath(path);
         Bool_t ok = cg.ClientAdmin()->Stat(urlpath.GetFile(),id,size,flags,modtime);
         if (ok) {
            // Save the endpoint path
            urlpath.SetProtocol(cg.ClientAdmin()->GetCurrentUrl().Proto.c_str());
            urlpath.SetHost(cg.ClientAdmin()->GetCurrentUrl().Host.c_str());
            urlpath.SetPort(cg.ClientAdmin()->GetCurrentUrl().Port);
            buf.fUrl = urlpath.GetUrl();
         }
         cg.ClientAdmin()->GoBackToRedirector();

         // Flag offline files
         if (flags & kXR_offline) {
            buf.fMode = kS_IFOFF;
         } else if (ok) {
            buf.fDev = (id >> 24);
            buf.fIno = (id & 0x00FFFFFF);
            buf.fUid = -1;       // not all information available in xrootd
            buf.fGid = -1;       // not available
            buf.fSize = size;
            buf.fMtime = modtime;

            if (flags == 0) buf.fMode = kS_IFREG;
            if (flags & kXR_xset) buf.fMode = (kS_IFREG|kS_IXUSR|kS_IXGRP|kS_IXOTH);
            if (flags & kXR_isDir) buf.fMode = kS_IFDIR;
            if (flags & kXR_other) buf.fMode = kS_IFSOCK;
            if (flags & kXR_readable) buf.fMode |= kS_IRUSR;
            if (flags & kXR_writable) buf.fMode |= kS_IWUSR;

            buf.fIsLink = 0;     // not available
            return 0;
         } else {
            if (gDebug > 0)
               cg.NotifyLastError();
         }
      }
      return 1;
   }

   if (gDebug > 1)
      Info("GetPathInfo","Calling TNetSystem::GetPathInfo");
   return TNetSystem::GetPathInfo(path,buf);       // for a rootd
}

//_____________________________________________________________________________
Bool_t TXNetSystem::ConsistentWith(const char *path, void *dirptr)
{
   // Check consistency of this helper with the one required
   // by 'path' or 'dirptr'.

   if (gDebug > 1)
      Info("ConsistentWith",
           "calling for path: %s, dir: %p", path, dirptr);

   return TNetSystem::ConsistentWith(path,dirptr);    // for a rootd
}

//_____________________________________________________________________________
Bool_t TXNetSystem::AccessPathName(const char *path, EAccessMode mode)
{
   // Returns FALSE if one can access a file using the specified access mode.
   // NB: for the time being mode is ignored for XROOTD (just checks existence
   // of the file or directory).
   // Mode is the same as for the Unix access(2) function.
   // Attention, bizarre convention of return value!!

   if (fIsXRootd) {
      // Check only if the file or directory exists and
      FileStat_t buf;
      if (GetPathInfo(path, buf) == 0)
         if (buf.fMode != kS_IFSOCK)
            return kFALSE;
      // The file could not be stated
      return kTRUE;
   }

   if (gDebug > 1)
      Info("AccessPathName", "calling TNetSystem::AccessPathName");
   return TNetSystem::AccessPathName(path,mode);    // for a rootd
}

//_____________________________________________________________________________
int TXNetSystem::Unlink(const char *path)
{
   // Unlink 'path' on the remote server system.
   // Returns 0 on success, -1 otherwise.

   if (fIsXRootd) {

      TXNetSystemConnectGuard cg(this, path);
      if (cg.IsValid()) {

         Long_t id;
         Long64_t size;
         Long_t flags;
         Long_t modtime;

         // Extract the directory name
         TString edir = TUrl(path).GetFile();
         Bool_t ok = cg.ClientAdmin()->Stat(edir.Data(), id, size, flags, modtime);

         // Flag offline files
         if (ok && !(flags & kXR_offline)) {
            if (flags & kXR_isDir)
               ok = cg.ClientAdmin()->Rmdir(edir.Data());
            else
               ok = cg.ClientAdmin()->Rm(edir.Data());
            cg.ClientAdmin()->GoBackToRedirector();

            // Done
            return ((ok) ? 0 : -1);
         } else if (!ok) {
            cg.ClientAdmin()->GoBackToRedirector();
            cg.NotifyLastError();
         }
      }
   }

   if (gDebug > 1)
      Info("Unlink", "calling TNetSystem::Unlink");
   return -1;    // not implemented for rootd
}

//_____________________________________________________________________________
Bool_t TXNetSystem::IsOnline(const char *path)
{
   // Check if the file defined by 'path' is ready to be used

   // This is most efficiently done using GetPathInfo
   FileStat_t st;
   if (GetPathInfo(path, st) != 0) {
      if (gDebug > 0)
         Info("IsOnline", "path '%s' cannot be stat'ed", path);
      return kFALSE;
   }
   if (R_ISOFF(st.fMode)) {
      if (gDebug > 0)
         Info("IsOnline", "path '%s' is offline", path);
      return kFALSE;
   }
   // Done
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t TXNetSystem::Prepare(const char *path, UChar_t option, UChar_t priority)
{
   // Issue a prepare request for file defined by 'path'

   TXNetSystemConnectGuard cg(this, path);
   if (cg.IsValid()) {
      XrdOucString pathname = TUrl(path).GetFileAndOptions();
      vecString vs;
      vs.Push_back(pathname);
      cg.ClientAdmin()->Prepare(vs, (kXR_char)option, (kXR_char)priority);
      cg.ClientAdmin()->GoBackToRedirector();
      if (gDebug >0)
         Info("Prepare", "Got Status %d for %s",
              cg.ClientAdmin()->LastServerResp()->status, pathname.c_str());
      if (!(cg.ClientAdmin()->LastServerResp()->status)){
         return kTRUE;
      }
      cg.NotifyLastError();
   }

   // Done
   return kFALSE;
}

//_____________________________________________________________________________
Int_t TXNetSystem::Prepare(TCollection *paths,
                           UChar_t opt, UChar_t prio, TString *bufout)
{
   // Issue a prepare request for a list of files defined by 'paths', which must
   // be of one of the following types: TFileInfo, TUrl, TObjString.
   // On output, bufout, if defined, points to a buffer form that can be used
   // with GetPathsInfo.
   // Return the number of paths found or -1 if any error occured.

   if (!paths) {
      Warning("Prepare", "input list is empty!");
      return -1;
   }

   Int_t npaths = 0;

   TXNetSystemConnectGuard cg(this, "");
   if (cg.IsValid()) {

      TString *buf = (bufout) ? bufout : new TString();

      // Prepare the buffer
      TObject *o = 0;
      TUrl u;
      TString path;
      TIter nxt(paths);
      while ((o = nxt()))  {
         // Extract the path name from the allowed object types
         TString pn = TFileStager::GetPathName(o);
         if (pn == "") {
            Warning("Prepare", "object is of unexpected type %s - ignoring", o->ClassName());
            continue;
         }
         u.SetUrl(pn);
         // The path
         path = u.GetFileAndOptions();
         path.ReplaceAll("\n","\r");
         npaths++;
         *buf += Form("%s\n", path.Data());
      }

      Info("Prepare","buffer ready: issuing prepare (opt=%d, prio=%d) ...",
         opt, prio);
      cg.ClientAdmin()->Prepare(buf->Data(), (kXR_char)opt, (kXR_char)prio);
      cg.ClientAdmin()->GoBackToRedirector();
      if (!bufout)
         delete buf;
      if (gDebug >0)
         Info("Prepare", "Got Status %d",
              cg.ClientAdmin()->LastServerResp()->status);
      if (!(cg.ClientAdmin()->LastServerResp()->status)){
         return npaths;
      }
      cg.NotifyLastError();
   }

   // Done
   return -1;
}

//_____________________________________________________________________________
Bool_t TXNetSystem::GetPathsInfo(const char *paths, UChar_t *info)
{
   // Retrieve status of a '\n'-separated list of files in 'paths'.
   // The information is returned as one UChar_t per file in 'info';
   // 'info' must be allocated by the caller.

   if (!paths) {
      Warning("GetPathsInfo", "input list is empty!");
      return kFALSE;
   }

   TXNetSystemConnectGuard cg(this, "");
   if (cg.IsValid()) {
      cg.ClientAdmin()->SysStatX(paths, info);
      cg.ClientAdmin()->GoBackToRedirector();
      if (gDebug >0)
         Info("GetPathsInfo", "Got Status %d",
              cg.ClientAdmin()->LastServerResp()->status);
      if (!(cg.ClientAdmin()->LastServerResp()->status)){
         return kTRUE;
      }
      cg.NotifyLastError();
   }

   // Done
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TXNetSystem::IsPathLocal(const char *path)
{
   // Returns TRUE if the url in 'path' points to the local file system.
   // This is used to avoid going through the NIC card for local operations.

   if (fIsXRootd) {
      TXNetSystemConnectGuard cg(this, path);
      if (cg.IsValid()) {
         if (cg.ClientAdmin()->GetClientConn()->GetServerType() != kSTDataXrootd) {
            // Not an end point data server: cannot assert locality
            return kFALSE;
         }
      }
   }
   // Either an end-point data server or 'rootd': check for locality
   return TSystem::IsPathLocal(path);
}

//_____________________________________________________________________________
Int_t TXNetSystem::Locate(const char *path, TString &eurl)
{
   // Get end-point url of a file. Info is returned in eurl.
   // The function returns 0 in case of success and 1 if the file could
   // not be stat'ed.

   if (fIsXRootd) {
      TXNetSystemConnectGuard cg(this, path);
      if (cg.IsValid()) {

         // Extract the directory name
         XrdClientLocate_Info li;
         TString edir = TUrl(path).GetFile();

         if (cg.ClientAdmin()->Locate((kXR_char *)edir.Data(), li)) {
            TUrl u(path);
            XrdClientUrlInfo ui((const char *)&li.Location[0]);
            // We got the IP address but we need the FQDN: if we did not resolve
            // it yet do it and cache the result
            TNamed *hn = 0;
            if (fgAddrFQDN.GetSize() <= 0 ||
               !(hn = dynamic_cast<TNamed *>(fgAddrFQDN.FindObject(ui.Host.c_str())))) {
               TInetAddress a(gSystem->GetHostByName(ui.Host.c_str()));
               if (strlen(a.GetHostName()) > 0)
                  hn = new TNamed(ui.Host.c_str(), a.GetHostName());
               else
                  hn = new TNamed(ui.Host.c_str(), ui.Host.c_str());
               fgAddrFQDN.Add(hn);
               if (gDebug > 0)
                  Info("Locate","caching host name: %s", hn->GetTitle());
            }
            if (hn)
               u.SetHost(hn->GetTitle());
            else
               u.SetHost(ui.Host.c_str());
            u.SetPort(ui.Port);
            eurl = u.GetUrl();
            return 0;
         }
         cg.NotifyLastError();
      }
      return 1;
   }

   // Not implemented
   if (gDebug > 0) Info("Locate", "server not Xrootd: method not implemented!");
   return -1;
}

//_____________________________________________________________________________
XrdClientAdmin *TXNetSystem::GetClientAdmin(const char *url)
{
   // Checks if an admin for 'url' exists already.
   // Avoid duplications.
   XrdClientAdmin *ca = 0;

   // ID key
   TString key = TXNetSystem::GetKey(url);

   // If we have one for 'key', just use it
   TXrdClientAdminWrapper *caw = 0;
   if (fgAdminHash.GetSize() > 0 &&
      (caw = dynamic_cast<TXrdClientAdminWrapper *>(fgAdminHash.FindObject(key.Data()))))
      return caw->fXCA;

   // Create one and save the reference in the hash table
   ca = new XrdClientAdmin(url);
   fgAdminHash.Add(new TXrdClientAdminWrapper(key, ca));

   // Done
   return ca;
}

//_____________________________________________________________________________
TString TXNetSystem::GetKey(const char *url)
{
   // Build from uu a unique ID key used in hash tables

   TUrl u(url);
   TString key(u.GetUser());
   if (!key.IsNull())
      key += "@";
   key += u.GetHost();
   if (u.GetPort() > 0) {
      key += ":";
      key += u.GetPort();
   }

   // Done
   return key;
}

//
// Wrapper class
//
//_____________________________________________________________________________
TXrdClientAdminWrapper::~TXrdClientAdminWrapper()
{
   // Destructor: destroy the instance

   SafeDelete(fXCA);
}

//
// Guard methods
//
//_____________________________________________________________________________
TXNetSystemConnectGuard::TXNetSystemConnectGuard(TXNetSystem *xn, const char *url)
                        : fClientAdmin(0)
{
   // Construct a guard object

    if (xn)
       // Connect
       fClientAdmin = (url && strlen(url) > 0) ? xn->Connect(url)
                                               : xn->Connect(xn->fUrl);
}

//_____________________________________________________________________________
TXNetSystemConnectGuard::~TXNetSystemConnectGuard()
{
   // Destructor: close the connection

   fClientAdmin = 0;
}

//_____________________________________________________________________________
void TXNetSystemConnectGuard::NotifyLastError()
{
   // Print message about last occured error

   if (fClientAdmin)
      if (fClientAdmin->GetClientConn())
         Printf("Srv err: %s", fClientAdmin->GetClientConn()->LastServerError.errmsg);
}
 TXNetSystem.cxx:1
 TXNetSystem.cxx:2
 TXNetSystem.cxx:3
 TXNetSystem.cxx:4
 TXNetSystem.cxx:5
 TXNetSystem.cxx:6
 TXNetSystem.cxx:7
 TXNetSystem.cxx:8
 TXNetSystem.cxx:9
 TXNetSystem.cxx:10
 TXNetSystem.cxx:11
 TXNetSystem.cxx:12
 TXNetSystem.cxx:13
 TXNetSystem.cxx:14
 TXNetSystem.cxx:15
 TXNetSystem.cxx:16
 TXNetSystem.cxx:17
 TXNetSystem.cxx:18
 TXNetSystem.cxx:19
 TXNetSystem.cxx:20
 TXNetSystem.cxx:21
 TXNetSystem.cxx:22
 TXNetSystem.cxx:23
 TXNetSystem.cxx:24
 TXNetSystem.cxx:25
 TXNetSystem.cxx:26
 TXNetSystem.cxx:27
 TXNetSystem.cxx:28
 TXNetSystem.cxx:29
 TXNetSystem.cxx:30
 TXNetSystem.cxx:31
 TXNetSystem.cxx:32
 TXNetSystem.cxx:33
 TXNetSystem.cxx:34
 TXNetSystem.cxx:35
 TXNetSystem.cxx:36
 TXNetSystem.cxx:37
 TXNetSystem.cxx:38
 TXNetSystem.cxx:39
 TXNetSystem.cxx:40
 TXNetSystem.cxx:41
 TXNetSystem.cxx:42
 TXNetSystem.cxx:43
 TXNetSystem.cxx:44
 TXNetSystem.cxx:45
 TXNetSystem.cxx:46
 TXNetSystem.cxx:47
 TXNetSystem.cxx:48
 TXNetSystem.cxx:49
 TXNetSystem.cxx:50
 TXNetSystem.cxx:51
 TXNetSystem.cxx:52
 TXNetSystem.cxx:53
 TXNetSystem.cxx:54
 TXNetSystem.cxx:55
 TXNetSystem.cxx:56
 TXNetSystem.cxx:57
 TXNetSystem.cxx:58
 TXNetSystem.cxx:59
 TXNetSystem.cxx:60
 TXNetSystem.cxx:61
 TXNetSystem.cxx:62
 TXNetSystem.cxx:63
 TXNetSystem.cxx:64
 TXNetSystem.cxx:65
 TXNetSystem.cxx:66
 TXNetSystem.cxx:67
 TXNetSystem.cxx:68
 TXNetSystem.cxx:69
 TXNetSystem.cxx:70
 TXNetSystem.cxx:71
 TXNetSystem.cxx:72
 TXNetSystem.cxx:73
 TXNetSystem.cxx:74
 TXNetSystem.cxx:75
 TXNetSystem.cxx:76
 TXNetSystem.cxx:77
 TXNetSystem.cxx:78
 TXNetSystem.cxx:79
 TXNetSystem.cxx:80
 TXNetSystem.cxx:81
 TXNetSystem.cxx:82
 TXNetSystem.cxx:83
 TXNetSystem.cxx:84
 TXNetSystem.cxx:85
 TXNetSystem.cxx:86
 TXNetSystem.cxx:87
 TXNetSystem.cxx:88
 TXNetSystem.cxx:89
 TXNetSystem.cxx:90
 TXNetSystem.cxx:91
 TXNetSystem.cxx:92
 TXNetSystem.cxx:93
 TXNetSystem.cxx:94
 TXNetSystem.cxx:95
 TXNetSystem.cxx:96
 TXNetSystem.cxx:97
 TXNetSystem.cxx:98
 TXNetSystem.cxx:99
 TXNetSystem.cxx:100
 TXNetSystem.cxx:101
 TXNetSystem.cxx:102
 TXNetSystem.cxx:103
 TXNetSystem.cxx:104
 TXNetSystem.cxx:105
 TXNetSystem.cxx:106
 TXNetSystem.cxx:107
 TXNetSystem.cxx:108
 TXNetSystem.cxx:109
 TXNetSystem.cxx:110
 TXNetSystem.cxx:111
 TXNetSystem.cxx:112
 TXNetSystem.cxx:113
 TXNetSystem.cxx:114
 TXNetSystem.cxx:115
 TXNetSystem.cxx:116
 TXNetSystem.cxx:117
 TXNetSystem.cxx:118
 TXNetSystem.cxx:119
 TXNetSystem.cxx:120
 TXNetSystem.cxx:121
 TXNetSystem.cxx:122
 TXNetSystem.cxx:123
 TXNetSystem.cxx:124
 TXNetSystem.cxx:125
 TXNetSystem.cxx:126
 TXNetSystem.cxx:127
 TXNetSystem.cxx:128
 TXNetSystem.cxx:129
 TXNetSystem.cxx:130
 TXNetSystem.cxx:131
 TXNetSystem.cxx:132
 TXNetSystem.cxx:133
 TXNetSystem.cxx:134
 TXNetSystem.cxx:135
 TXNetSystem.cxx:136
 TXNetSystem.cxx:137
 TXNetSystem.cxx:138
 TXNetSystem.cxx:139
 TXNetSystem.cxx:140
 TXNetSystem.cxx:141
 TXNetSystem.cxx:142
 TXNetSystem.cxx:143
 TXNetSystem.cxx:144
 TXNetSystem.cxx:145
 TXNetSystem.cxx:146
 TXNetSystem.cxx:147
 TXNetSystem.cxx:148
 TXNetSystem.cxx:149
 TXNetSystem.cxx:150
 TXNetSystem.cxx:151
 TXNetSystem.cxx:152
 TXNetSystem.cxx:153
 TXNetSystem.cxx:154
 TXNetSystem.cxx:155
 TXNetSystem.cxx:156
 TXNetSystem.cxx:157
 TXNetSystem.cxx:158
 TXNetSystem.cxx:159
 TXNetSystem.cxx:160
 TXNetSystem.cxx:161
 TXNetSystem.cxx:162
 TXNetSystem.cxx:163
 TXNetSystem.cxx:164
 TXNetSystem.cxx:165
 TXNetSystem.cxx:166
 TXNetSystem.cxx:167
 TXNetSystem.cxx:168
 TXNetSystem.cxx:169
 TXNetSystem.cxx:170
 TXNetSystem.cxx:171
 TXNetSystem.cxx:172
 TXNetSystem.cxx:173
 TXNetSystem.cxx:174
 TXNetSystem.cxx:175
 TXNetSystem.cxx:176
 TXNetSystem.cxx:177
 TXNetSystem.cxx:178
 TXNetSystem.cxx:179
 TXNetSystem.cxx:180
 TXNetSystem.cxx:181
 TXNetSystem.cxx:182
 TXNetSystem.cxx:183
 TXNetSystem.cxx:184
 TXNetSystem.cxx:185
 TXNetSystem.cxx:186
 TXNetSystem.cxx:187
 TXNetSystem.cxx:188
 TXNetSystem.cxx:189
 TXNetSystem.cxx:190
 TXNetSystem.cxx:191
 TXNetSystem.cxx:192
 TXNetSystem.cxx:193
 TXNetSystem.cxx:194
 TXNetSystem.cxx:195
 TXNetSystem.cxx:196
 TXNetSystem.cxx:197
 TXNetSystem.cxx:198
 TXNetSystem.cxx:199
 TXNetSystem.cxx:200
 TXNetSystem.cxx:201
 TXNetSystem.cxx:202
 TXNetSystem.cxx:203
 TXNetSystem.cxx:204
 TXNetSystem.cxx:205
 TXNetSystem.cxx:206
 TXNetSystem.cxx:207
 TXNetSystem.cxx:208
 TXNetSystem.cxx:209
 TXNetSystem.cxx:210
 TXNetSystem.cxx:211
 TXNetSystem.cxx:212
 TXNetSystem.cxx:213
 TXNetSystem.cxx:214
 TXNetSystem.cxx:215
 TXNetSystem.cxx:216
 TXNetSystem.cxx:217
 TXNetSystem.cxx:218
 TXNetSystem.cxx:219
 TXNetSystem.cxx:220
 TXNetSystem.cxx:221
 TXNetSystem.cxx:222
 TXNetSystem.cxx:223
 TXNetSystem.cxx:224
 TXNetSystem.cxx:225
 TXNetSystem.cxx:226
 TXNetSystem.cxx:227
 TXNetSystem.cxx:228
 TXNetSystem.cxx:229
 TXNetSystem.cxx:230
 TXNetSystem.cxx:231
 TXNetSystem.cxx:232
 TXNetSystem.cxx:233
 TXNetSystem.cxx:234
 TXNetSystem.cxx:235
 TXNetSystem.cxx:236
 TXNetSystem.cxx:237
 TXNetSystem.cxx:238
 TXNetSystem.cxx:239
 TXNetSystem.cxx:240
 TXNetSystem.cxx:241
 TXNetSystem.cxx:242
 TXNetSystem.cxx:243
 TXNetSystem.cxx:244
 TXNetSystem.cxx:245
 TXNetSystem.cxx:246
 TXNetSystem.cxx:247
 TXNetSystem.cxx:248
 TXNetSystem.cxx:249
 TXNetSystem.cxx:250
 TXNetSystem.cxx:251
 TXNetSystem.cxx:252
 TXNetSystem.cxx:253
 TXNetSystem.cxx:254
 TXNetSystem.cxx:255
 TXNetSystem.cxx:256
 TXNetSystem.cxx:257
 TXNetSystem.cxx:258
 TXNetSystem.cxx:259
 TXNetSystem.cxx:260
 TXNetSystem.cxx:261
 TXNetSystem.cxx:262
 TXNetSystem.cxx:263
 TXNetSystem.cxx:264
 TXNetSystem.cxx:265
 TXNetSystem.cxx:266
 TXNetSystem.cxx:267
 TXNetSystem.cxx:268
 TXNetSystem.cxx:269
 TXNetSystem.cxx:270
 TXNetSystem.cxx:271
 TXNetSystem.cxx:272
 TXNetSystem.cxx:273
 TXNetSystem.cxx:274
 TXNetSystem.cxx:275
 TXNetSystem.cxx:276
 TXNetSystem.cxx:277
 TXNetSystem.cxx:278
 TXNetSystem.cxx:279
 TXNetSystem.cxx:280
 TXNetSystem.cxx:281
 TXNetSystem.cxx:282
 TXNetSystem.cxx:283
 TXNetSystem.cxx:284
 TXNetSystem.cxx:285
 TXNetSystem.cxx:286
 TXNetSystem.cxx:287
 TXNetSystem.cxx:288
 TXNetSystem.cxx:289
 TXNetSystem.cxx:290
 TXNetSystem.cxx:291
 TXNetSystem.cxx:292
 TXNetSystem.cxx:293
 TXNetSystem.cxx:294
 TXNetSystem.cxx:295
 TXNetSystem.cxx:296
 TXNetSystem.cxx:297
 TXNetSystem.cxx:298
 TXNetSystem.cxx:299
 TXNetSystem.cxx:300
 TXNetSystem.cxx:301
 TXNetSystem.cxx:302
 TXNetSystem.cxx:303
 TXNetSystem.cxx:304
 TXNetSystem.cxx:305
 TXNetSystem.cxx:306
 TXNetSystem.cxx:307
 TXNetSystem.cxx:308
 TXNetSystem.cxx:309
 TXNetSystem.cxx:310
 TXNetSystem.cxx:311
 TXNetSystem.cxx:312
 TXNetSystem.cxx:313
 TXNetSystem.cxx:314
 TXNetSystem.cxx:315
 TXNetSystem.cxx:316
 TXNetSystem.cxx:317
 TXNetSystem.cxx:318
 TXNetSystem.cxx:319
 TXNetSystem.cxx:320
 TXNetSystem.cxx:321
 TXNetSystem.cxx:322
 TXNetSystem.cxx:323
 TXNetSystem.cxx:324
 TXNetSystem.cxx:325
 TXNetSystem.cxx:326
 TXNetSystem.cxx:327
 TXNetSystem.cxx:328
 TXNetSystem.cxx:329
 TXNetSystem.cxx:330
 TXNetSystem.cxx:331
 TXNetSystem.cxx:332
 TXNetSystem.cxx:333
 TXNetSystem.cxx:334
 TXNetSystem.cxx:335
 TXNetSystem.cxx:336
 TXNetSystem.cxx:337
 TXNetSystem.cxx:338
 TXNetSystem.cxx:339
 TXNetSystem.cxx:340
 TXNetSystem.cxx:341
 TXNetSystem.cxx:342
 TXNetSystem.cxx:343
 TXNetSystem.cxx:344
 TXNetSystem.cxx:345
 TXNetSystem.cxx:346
 TXNetSystem.cxx:347
 TXNetSystem.cxx:348
 TXNetSystem.cxx:349
 TXNetSystem.cxx:350
 TXNetSystem.cxx:351
 TXNetSystem.cxx:352
 TXNetSystem.cxx:353
 TXNetSystem.cxx:354
 TXNetSystem.cxx:355
 TXNetSystem.cxx:356
 TXNetSystem.cxx:357
 TXNetSystem.cxx:358
 TXNetSystem.cxx:359
 TXNetSystem.cxx:360
 TXNetSystem.cxx:361
 TXNetSystem.cxx:362
 TXNetSystem.cxx:363
 TXNetSystem.cxx:364
 TXNetSystem.cxx:365
 TXNetSystem.cxx:366
 TXNetSystem.cxx:367
 TXNetSystem.cxx:368
 TXNetSystem.cxx:369
 TXNetSystem.cxx:370
 TXNetSystem.cxx:371
 TXNetSystem.cxx:372
 TXNetSystem.cxx:373
 TXNetSystem.cxx:374
 TXNetSystem.cxx:375
 TXNetSystem.cxx:376
 TXNetSystem.cxx:377
 TXNetSystem.cxx:378
 TXNetSystem.cxx:379
 TXNetSystem.cxx:380
 TXNetSystem.cxx:381
 TXNetSystem.cxx:382
 TXNetSystem.cxx:383
 TXNetSystem.cxx:384
 TXNetSystem.cxx:385
 TXNetSystem.cxx:386
 TXNetSystem.cxx:387
 TXNetSystem.cxx:388
 TXNetSystem.cxx:389
 TXNetSystem.cxx:390
 TXNetSystem.cxx:391
 TXNetSystem.cxx:392
 TXNetSystem.cxx:393
 TXNetSystem.cxx:394
 TXNetSystem.cxx:395
 TXNetSystem.cxx:396
 TXNetSystem.cxx:397
 TXNetSystem.cxx:398
 TXNetSystem.cxx:399
 TXNetSystem.cxx:400
 TXNetSystem.cxx:401
 TXNetSystem.cxx:402
 TXNetSystem.cxx:403
 TXNetSystem.cxx:404
 TXNetSystem.cxx:405
 TXNetSystem.cxx:406
 TXNetSystem.cxx:407
 TXNetSystem.cxx:408
 TXNetSystem.cxx:409
 TXNetSystem.cxx:410
 TXNetSystem.cxx:411
 TXNetSystem.cxx:412
 TXNetSystem.cxx:413
 TXNetSystem.cxx:414
 TXNetSystem.cxx:415
 TXNetSystem.cxx:416
 TXNetSystem.cxx:417
 TXNetSystem.cxx:418
 TXNetSystem.cxx:419
 TXNetSystem.cxx:420
 TXNetSystem.cxx:421
 TXNetSystem.cxx:422
 TXNetSystem.cxx:423
 TXNetSystem.cxx:424
 TXNetSystem.cxx:425
 TXNetSystem.cxx:426
 TXNetSystem.cxx:427
 TXNetSystem.cxx:428
 TXNetSystem.cxx:429
 TXNetSystem.cxx:430
 TXNetSystem.cxx:431
 TXNetSystem.cxx:432
 TXNetSystem.cxx:433
 TXNetSystem.cxx:434
 TXNetSystem.cxx:435
 TXNetSystem.cxx:436
 TXNetSystem.cxx:437
 TXNetSystem.cxx:438
 TXNetSystem.cxx:439
 TXNetSystem.cxx:440
 TXNetSystem.cxx:441
 TXNetSystem.cxx:442
 TXNetSystem.cxx:443
 TXNetSystem.cxx:444
 TXNetSystem.cxx:445
 TXNetSystem.cxx:446
 TXNetSystem.cxx:447
 TXNetSystem.cxx:448
 TXNetSystem.cxx:449
 TXNetSystem.cxx:450
 TXNetSystem.cxx:451
 TXNetSystem.cxx:452
 TXNetSystem.cxx:453
 TXNetSystem.cxx:454
 TXNetSystem.cxx:455
 TXNetSystem.cxx:456
 TXNetSystem.cxx:457
 TXNetSystem.cxx:458
 TXNetSystem.cxx:459
 TXNetSystem.cxx:460
 TXNetSystem.cxx:461
 TXNetSystem.cxx:462
 TXNetSystem.cxx:463
 TXNetSystem.cxx:464
 TXNetSystem.cxx:465
 TXNetSystem.cxx:466
 TXNetSystem.cxx:467
 TXNetSystem.cxx:468
 TXNetSystem.cxx:469
 TXNetSystem.cxx:470
 TXNetSystem.cxx:471
 TXNetSystem.cxx:472
 TXNetSystem.cxx:473
 TXNetSystem.cxx:474
 TXNetSystem.cxx:475
 TXNetSystem.cxx:476
 TXNetSystem.cxx:477
 TXNetSystem.cxx:478
 TXNetSystem.cxx:479
 TXNetSystem.cxx:480
 TXNetSystem.cxx:481
 TXNetSystem.cxx:482
 TXNetSystem.cxx:483
 TXNetSystem.cxx:484
 TXNetSystem.cxx:485
 TXNetSystem.cxx:486
 TXNetSystem.cxx:487
 TXNetSystem.cxx:488
 TXNetSystem.cxx:489
 TXNetSystem.cxx:490
 TXNetSystem.cxx:491
 TXNetSystem.cxx:492
 TXNetSystem.cxx:493
 TXNetSystem.cxx:494
 TXNetSystem.cxx:495
 TXNetSystem.cxx:496
 TXNetSystem.cxx:497
 TXNetSystem.cxx:498
 TXNetSystem.cxx:499
 TXNetSystem.cxx:500
 TXNetSystem.cxx:501
 TXNetSystem.cxx:502
 TXNetSystem.cxx:503
 TXNetSystem.cxx:504
 TXNetSystem.cxx:505
 TXNetSystem.cxx:506
 TXNetSystem.cxx:507
 TXNetSystem.cxx:508
 TXNetSystem.cxx:509
 TXNetSystem.cxx:510
 TXNetSystem.cxx:511
 TXNetSystem.cxx:512
 TXNetSystem.cxx:513
 TXNetSystem.cxx:514
 TXNetSystem.cxx:515
 TXNetSystem.cxx:516
 TXNetSystem.cxx:517
 TXNetSystem.cxx:518
 TXNetSystem.cxx:519
 TXNetSystem.cxx:520
 TXNetSystem.cxx:521
 TXNetSystem.cxx:522
 TXNetSystem.cxx:523
 TXNetSystem.cxx:524
 TXNetSystem.cxx:525
 TXNetSystem.cxx:526
 TXNetSystem.cxx:527
 TXNetSystem.cxx:528
 TXNetSystem.cxx:529
 TXNetSystem.cxx:530
 TXNetSystem.cxx:531
 TXNetSystem.cxx:532
 TXNetSystem.cxx:533
 TXNetSystem.cxx:534
 TXNetSystem.cxx:535
 TXNetSystem.cxx:536
 TXNetSystem.cxx:537
 TXNetSystem.cxx:538
 TXNetSystem.cxx:539
 TXNetSystem.cxx:540
 TXNetSystem.cxx:541
 TXNetSystem.cxx:542
 TXNetSystem.cxx:543
 TXNetSystem.cxx:544
 TXNetSystem.cxx:545
 TXNetSystem.cxx:546
 TXNetSystem.cxx:547
 TXNetSystem.cxx:548
 TXNetSystem.cxx:549
 TXNetSystem.cxx:550
 TXNetSystem.cxx:551
 TXNetSystem.cxx:552
 TXNetSystem.cxx:553
 TXNetSystem.cxx:554
 TXNetSystem.cxx:555
 TXNetSystem.cxx:556
 TXNetSystem.cxx:557
 TXNetSystem.cxx:558
 TXNetSystem.cxx:559
 TXNetSystem.cxx:560
 TXNetSystem.cxx:561
 TXNetSystem.cxx:562
 TXNetSystem.cxx:563
 TXNetSystem.cxx:564
 TXNetSystem.cxx:565
 TXNetSystem.cxx:566
 TXNetSystem.cxx:567
 TXNetSystem.cxx:568
 TXNetSystem.cxx:569
 TXNetSystem.cxx:570
 TXNetSystem.cxx:571
 TXNetSystem.cxx:572
 TXNetSystem.cxx:573
 TXNetSystem.cxx:574
 TXNetSystem.cxx:575
 TXNetSystem.cxx:576
 TXNetSystem.cxx:577
 TXNetSystem.cxx:578
 TXNetSystem.cxx:579
 TXNetSystem.cxx:580
 TXNetSystem.cxx:581
 TXNetSystem.cxx:582
 TXNetSystem.cxx:583
 TXNetSystem.cxx:584
 TXNetSystem.cxx:585
 TXNetSystem.cxx:586
 TXNetSystem.cxx:587
 TXNetSystem.cxx:588
 TXNetSystem.cxx:589
 TXNetSystem.cxx:590
 TXNetSystem.cxx:591
 TXNetSystem.cxx:592
 TXNetSystem.cxx:593
 TXNetSystem.cxx:594
 TXNetSystem.cxx:595
 TXNetSystem.cxx:596
 TXNetSystem.cxx:597
 TXNetSystem.cxx:598
 TXNetSystem.cxx:599
 TXNetSystem.cxx:600
 TXNetSystem.cxx:601
 TXNetSystem.cxx:602
 TXNetSystem.cxx:603
 TXNetSystem.cxx:604
 TXNetSystem.cxx:605
 TXNetSystem.cxx:606
 TXNetSystem.cxx:607
 TXNetSystem.cxx:608
 TXNetSystem.cxx:609
 TXNetSystem.cxx:610
 TXNetSystem.cxx:611
 TXNetSystem.cxx:612
 TXNetSystem.cxx:613
 TXNetSystem.cxx:614
 TXNetSystem.cxx:615
 TXNetSystem.cxx:616
 TXNetSystem.cxx:617
 TXNetSystem.cxx:618
 TXNetSystem.cxx:619
 TXNetSystem.cxx:620
 TXNetSystem.cxx:621
 TXNetSystem.cxx:622
 TXNetSystem.cxx:623
 TXNetSystem.cxx:624
 TXNetSystem.cxx:625
 TXNetSystem.cxx:626
 TXNetSystem.cxx:627
 TXNetSystem.cxx:628
 TXNetSystem.cxx:629
 TXNetSystem.cxx:630
 TXNetSystem.cxx:631
 TXNetSystem.cxx:632
 TXNetSystem.cxx:633
 TXNetSystem.cxx:634
 TXNetSystem.cxx:635
 TXNetSystem.cxx:636
 TXNetSystem.cxx:637
 TXNetSystem.cxx:638
 TXNetSystem.cxx:639
 TXNetSystem.cxx:640
 TXNetSystem.cxx:641
 TXNetSystem.cxx:642
 TXNetSystem.cxx:643
 TXNetSystem.cxx:644
 TXNetSystem.cxx:645
 TXNetSystem.cxx:646
 TXNetSystem.cxx:647
 TXNetSystem.cxx:648
 TXNetSystem.cxx:649
 TXNetSystem.cxx:650
 TXNetSystem.cxx:651
 TXNetSystem.cxx:652
 TXNetSystem.cxx:653
 TXNetSystem.cxx:654
 TXNetSystem.cxx:655
 TXNetSystem.cxx:656
 TXNetSystem.cxx:657
 TXNetSystem.cxx:658
 TXNetSystem.cxx:659
 TXNetSystem.cxx:660
 TXNetSystem.cxx:661
 TXNetSystem.cxx:662
 TXNetSystem.cxx:663
 TXNetSystem.cxx:664
 TXNetSystem.cxx:665
 TXNetSystem.cxx:666
 TXNetSystem.cxx:667
 TXNetSystem.cxx:668
 TXNetSystem.cxx:669
 TXNetSystem.cxx:670
 TXNetSystem.cxx:671
 TXNetSystem.cxx:672
 TXNetSystem.cxx:673
 TXNetSystem.cxx:674
 TXNetSystem.cxx:675
 TXNetSystem.cxx:676
 TXNetSystem.cxx:677
 TXNetSystem.cxx:678
 TXNetSystem.cxx:679
 TXNetSystem.cxx:680
 TXNetSystem.cxx:681
 TXNetSystem.cxx:682
 TXNetSystem.cxx:683
 TXNetSystem.cxx:684
 TXNetSystem.cxx:685
 TXNetSystem.cxx:686
 TXNetSystem.cxx:687
 TXNetSystem.cxx:688
 TXNetSystem.cxx:689
 TXNetSystem.cxx:690
 TXNetSystem.cxx:691
 TXNetSystem.cxx:692
 TXNetSystem.cxx:693
 TXNetSystem.cxx:694
 TXNetSystem.cxx:695
 TXNetSystem.cxx:696
 TXNetSystem.cxx:697
 TXNetSystem.cxx:698
 TXNetSystem.cxx:699
 TXNetSystem.cxx:700
 TXNetSystem.cxx:701
 TXNetSystem.cxx:702
 TXNetSystem.cxx:703
 TXNetSystem.cxx:704
 TXNetSystem.cxx:705
 TXNetSystem.cxx:706
 TXNetSystem.cxx:707
 TXNetSystem.cxx:708
 TXNetSystem.cxx:709
 TXNetSystem.cxx:710
 TXNetSystem.cxx:711
 TXNetSystem.cxx:712
 TXNetSystem.cxx:713
 TXNetSystem.cxx:714
 TXNetSystem.cxx:715
 TXNetSystem.cxx:716
 TXNetSystem.cxx:717
 TXNetSystem.cxx:718
 TXNetSystem.cxx:719
 TXNetSystem.cxx:720
 TXNetSystem.cxx:721
 TXNetSystem.cxx:722
 TXNetSystem.cxx:723
 TXNetSystem.cxx:724
 TXNetSystem.cxx:725
 TXNetSystem.cxx:726
 TXNetSystem.cxx:727
 TXNetSystem.cxx:728
 TXNetSystem.cxx:729
 TXNetSystem.cxx:730
 TXNetSystem.cxx:731
 TXNetSystem.cxx:732
 TXNetSystem.cxx:733
 TXNetSystem.cxx:734
 TXNetSystem.cxx:735
 TXNetSystem.cxx:736
 TXNetSystem.cxx:737
 TXNetSystem.cxx:738
 TXNetSystem.cxx:739
 TXNetSystem.cxx:740
 TXNetSystem.cxx:741
 TXNetSystem.cxx:742
 TXNetSystem.cxx:743
 TXNetSystem.cxx:744
 TXNetSystem.cxx:745
 TXNetSystem.cxx:746
 TXNetSystem.cxx:747
 TXNetSystem.cxx:748
 TXNetSystem.cxx:749
 TXNetSystem.cxx:750
 TXNetSystem.cxx:751
 TXNetSystem.cxx:752
 TXNetSystem.cxx:753
 TXNetSystem.cxx:754
 TXNetSystem.cxx:755
 TXNetSystem.cxx:756
 TXNetSystem.cxx:757
 TXNetSystem.cxx:758
 TXNetSystem.cxx:759
 TXNetSystem.cxx:760
 TXNetSystem.cxx:761
 TXNetSystem.cxx:762
 TXNetSystem.cxx:763
 TXNetSystem.cxx:764
 TXNetSystem.cxx:765
 TXNetSystem.cxx:766
 TXNetSystem.cxx:767
 TXNetSystem.cxx:768
 TXNetSystem.cxx:769
 TXNetSystem.cxx:770
 TXNetSystem.cxx:771
 TXNetSystem.cxx:772
 TXNetSystem.cxx:773
 TXNetSystem.cxx:774
 TXNetSystem.cxx:775
 TXNetSystem.cxx:776