// @(#)root/tree:$Id$
// Author: Bruno Lenzi 12/07/2011

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

//______________________________________________________________________________
/* Begin_Html
<center><h2>TEntryListArray: a list of entries and subentries in a TTree or TChain</h2></center>

TEntryListArray is an extension of TEntryList, used to hold selected entries and subentries (sublists) for when the user has a TTree with containers (vectors, arrays, ...).
End_Html

Begin_Html
<h4> Usage with TTree::Draw to select entries and subentries </h4>
<ol>
<li> <b>To fill a list <i>elist</i> </b>:
    <pre>
     tree->Draw(">> elist", "x > 0", "entrylistarray");
    </pre>
<li> <b>To use a list to select entries and subentries:</b>
  <pre>
     tree->SetEntryList(elist);
     tree->Draw("y");
     tree->Draw("z");
  </pre>
</ol>

Its main purpose is to improve the performance of a code that needs to apply complex cuts on TTree::Draw multiple times. After the first call above to TTree::Draw, a TEntryListArray is created and filled with the entries and the indices of the arrays that satisfied the selection cut (x > 0). In the subsequent calls to TTree::Draw, only these entries / subentries are used to fill histograms.
End_Html

Begin_Html
<h4> About the class </h4>

The class derives from TEntryList and can be used basically in the same way. This same class is used to keep entries and subentries, so there are two types of TEntryListArray's:

<ol>
<li> The ones that only hold subentries
  <ul><li> fEntry is set to the entry# for which the subentries correspond
  <li> fSubLists must be 0</ul>
<li> The ones that hold entries and eventually lists with subentries in fSubLists.
  <ul><li> fEntry = -1 for those
  <li> If there are no sublists for a given entry, all the subentries will be used in the selection </ul>
</ol>

<h4> Additions with respect to TEntryList </h4>
<ol><li> Data members:
 <ul><li> fSubLists: a container to hold the sublists
 <li> fEntry: the entry number if the list is used to hold subentries
 <li> fLastSubListQueried and fSubListIter: a pointer to the last sublist queried and an iterator to resume the loop from the last sublist queried (to speed up selection and insertion in TTree::Draw) </ul>
<li> Public methods:
  <ul><li> Contains, Enter and Remove with subentry as argument
  <li> GetSubListForEntry: to return the sublist corresponding to the given entry </ul>
<li> Protected methods:
  <ul><li> AddEntriesAndSubLists: called by Add when adding two TEntryList arrays with sublists
  <li> ConvertToTEntryListArray: convert TEntryList to TEntryListArray
  <li> RemoveSubList: to remove the given sublist
  <li> RemoveSubListForEntry: to remove the sublist corresponding to the given entry
  <li> SetEntry: to get / set a sublist for the given entry </ul>
</ol>
End_Html */


#include "TEntryListArray.h"
#include "TEntryListBlock.h"
#include "TTree.h"
#include "TFile.h"
#include "TSystem.h"
#include <iostream>

ClassImp(TEntryListArray)

//______________________________________________________________________________
void TEntryListArray::Init()
{
   // Initialize data members, called by Reset
   fSubLists = 0;
   fEntry = -1;
   fLastSubListQueried = 0;
   fSubListIter = 0;
}

//______________________________________________________________________________
TEntryListArray::TEntryListArray() : TEntryList(), fSubLists(0), fEntry(-1), fLastSubListQueried(0), fSubListIter(0)
{
   //default c-tor
}

//______________________________________________________________________________
TEntryListArray::TEntryListArray(const char *name, const char *title): TEntryList(name, title), fSubLists(0), fEntry(-1), fLastSubListQueried(0), fSubListIter(0)
{
   //c-tor with name and title
}

//______________________________________________________________________________
TEntryListArray::TEntryListArray(const char *name, const char *title, const TTree *tree): TEntryList(name, title, tree), fSubLists(0), fEntry(-1), fLastSubListQueried(0), fSubListIter(0)
{
   //constructor with name and title, which also sets the tree
}

//______________________________________________________________________________
TEntryListArray::TEntryListArray(const char *name, const char *title, const char *treename, const char *filename): TEntryList(name, title, treename, filename), fSubLists(0), fEntry(-1), fLastSubListQueried(0), fSubListIter(0)
{
   //c-tor with name and title, which also sets the treename and the filename
}

//______________________________________________________________________________
TEntryListArray::TEntryListArray(const TTree *tree) : TEntryList(tree), fSubLists(0), fEntry(-1), fLastSubListQueried(0), fSubListIter(0)
{
   //c-tor, which sets the tree
}

//______________________________________________________________________________
TEntryListArray::TEntryListArray(const TEntryListArray &elist) : TEntryList(), fSubLists(0), fEntry(-1), fLastSubListQueried(0), fSubListIter(0)
{
   //copy c-tor
   fEntry = elist.fEntry;
   Add(&elist);
}

//______________________________________________________________________________
TEntryListArray::TEntryListArray(const TEntryList& elist) : TEntryList(elist), fSubLists(0), fEntry(-1), fLastSubListQueried(0), fSubListIter(0)
{
   //c-tor, from TEntryList
}


//______________________________________________________________________________
TEntryListArray::~TEntryListArray()
{
   // d-tor
   if (fSubLists) {
      fSubLists->Delete();
      delete fSubLists;
   }
   fSubLists = 0;
   delete fSubListIter;
   fSubListIter = 0;
}

//______________________________________________________________________________
void TEntryListArray::Add(const TEntryList *elist)
{
   //Add 2 entry lists

   if (!elist) return;

   if (fEntry != -1) {
      TEntryList::Add(elist);
      return;
   }

   // Include in this list all the trees present in elist, so the sublists can be added
   // This would happen in any case when calling TEntryList::Add
   if (elist->GetLists()) { // the other list has lists to hold mutiple trees, add one by one
      TIter next(elist->GetLists());
      const TEntryList *e = 0;
      while ((e = (const TEntryList*)next())) {
         SetTree(e->GetTreeName(), e->GetFileName());
      }
   } else {
      SetTree(elist->GetTreeName(), elist->GetFileName());
   }

   AddEntriesAndSubLists(elist);
}

//______________________________________________________________________________
void TEntryListArray::AddEntriesAndSubLists(const TEntryList *elist)
{
   // The method that really adds two entry lists with sublists
   // If lists are splitted (fLists != 0), look for the ones whose trees match and call the method for those lists.
   // Add first the sublists, and then use TEntryList::Add to deal with the entries

   // WARNING: cannot call TEntryList::Add in the beginning:
   // - Need to know which entries are present in each list when adding the sublists
   // - TEL::Add is recursive, so it will call this guy after the first iteration

   // Add to the entries and sublists of this list, the ones from the other list
   if (!elist) return;

   if (fLists) { // This list is splitted
      TEntryListArray* e = 0;
      TIter next(fLists);
      fN = 0; // reset fN to set it to the sum of fN in each list
      // Only need to do it here and the next condition will be called only from here
      while ((e = (TEntryListArray*) next())) {
         e->AddEntriesAndSubLists(elist);
         fN += e->GetN();
      }
   } else if (elist->GetLists()) { // The other list is splitted --> will be called only from the previous if
      TIter next(elist->GetLists());
      TEntryList *e = 0;
      while ((e = (TEntryList*) next())) {
         AddEntriesAndSubLists(e);
      }
   } else { // None of the lists are splitted
      if (strcmp(elist->GetTreeName(), fTreeName.Data()) || strcmp(elist->GetFileName(), fFileName.Data()))
         return; // Lists are for different trees
      const TEntryListArray *elist_array = dynamic_cast< const TEntryListArray *>(elist);
      if (!fSubLists && (!elist_array || !elist_array->GetSubLists())) {  // no sublists in neither
         TEntryList::Add(elist);
         return;
      }
      // Deal with the sublists: Loop over both fSubLists
      // - If the sublists are for the same entry, Add the sublists
      // - For sublists only in this list, check if entry is in elist, and remove the sublist if so
      // - For sublists only in the other list, insert them in fSubLists
      if (!fSubLists && elist_array->GetSubLists()) {
         fSubLists = new TList();
      }
      TEntryListArray *el1;
      const TEntryListArray *el2;
      TCollection *other_sublists = 0;
      if (elist_array) {
         other_sublists = elist_array->GetSubLists();
      }
      TIter next1(fSubLists);
      TIter next2(other_sublists); // should work even if elist->fSubLists is null

      for (el1 = (TEntryListArray*) next1(), el2 = (const TEntryListArray*) next2(); el1 || el2;)  {
         if (el1 && el2 && el1->fEntry == el2->fEntry) { // sublists for the same entry, Add them
            el1->TEntryList::Add(el2);
            el1 = (TEntryListArray*) next1();
            el2 = (const TEntryListArray*) next2();
         } else if (el1 && (!el2 || el1->fEntry < el2->fEntry)) { // el1->fEntry is not in elist->fSubLists
            if ((const_cast<TEntryList*>(elist))->Contains(el1->fEntry)) {
               RemoveSubList(el1);
            }
            el1 = (TEntryListArray*) next1();
         } else { // el2->fEntry is not in fSubLists --> make a copy and add it
            if (!Contains(el2->fEntry)) {
               if (!el1) {
                  fSubLists->AddLast(new TEntryListArray(*el2));
               } else {
                  fSubLists->AddBefore(el1, new TEntryListArray(*el2));
               }
            }
            el2 = (const TEntryListArray*) next2();
         }
      }
      TEntryList::Add(elist);
   }
}

//______________________________________________________________________________
Int_t TEntryListArray::Contains(Long64_t entry, TTree *tree, Long64_t subentry)
{
   //When tree = 0, returns from the current list
   //When tree != 0, finds the list corresponding to this tree
   //When tree is a chain, the entry is assumed to be global index and the local
   //entry is recomputed from the treeoffset information of the chain

   //When subentry != -1, return true if the enter is present and not splitted
   //or if the subentry list is found and contains #subentry

   if (tree) {
      Long64_t localentry = tree->LoadTree(entry);
      SetTree(tree->GetTree());
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray) {
         return currentArray->Contains(localentry, 0, subentry);
      }
      return 0;
   }
   // tree = 0
   Int_t result = TEntryList::Contains(entry);
   if (result && fSubLists) {
      TEntryListArray *t = GetSubListForEntry(entry);
      if (t) {
         result = t->TEntryList::Contains(subentry);
      }
   }
   return result;
}

//______________________________________________________________________________
void TEntryListArray::ConvertToTEntryListArray(TEntryList *e)
{
   // Create a TEntryListArray based on the given TEntryList
   // Called by SetTree when the given list is added to fLists
   // Replace it by a TEntryListArray and delete the given list

   // TODO: Keep the blocks and the number of entries to transfer without copying?
   //    TObjArray *blocks = e->fBlocks;
   //    Int_t NBlocks = e->fNBlocks;
   //    Long64_t N = e->fN;
   //    e->fBlocks = 0;
   //    e->fNBlocks = 0;
   //    e->fN = 0;

   TEntryListArray *earray = new TEntryListArray(*e);
//    earray->fBlocks = blocks;
//    earray->fNBlocks = NBlocks;
//    earray->fN = N;

   if (e == fCurrent) {
      fCurrent = earray;
   }
   // If the list has just been splitted, earray will be the first one
   // and must keep the current sublists
   if (fSubLists) {
      earray->fSubLists = fSubLists;
      fSubLists = 0;
   }
   if (e == fLists->First()) {
      fLists->AddFirst(earray);
   } else {
      fLists->Add(earray);
   }
   fLists->Remove(e);
   delete e;
   e = 0;
}

//________________________________________________________________________
Bool_t TEntryListArray::Enter(Long64_t entry, TTree *tree, Long64_t subentry)
{
   //Add entry #entry (, #subentry) to the list
   //When tree = 0, adds to the current list
   //When tree != 0, finds the list corresponding to this tree (or add a new one)
   //When tree is a chain, the entry is assumed to be global index and the local
   //entry is recomputed from the treeoffset information of the chain

   //When subentry = -1, add all subentries (remove the sublist if it exists)
   //When subentry != -1 and the entry is not present,
   //add only the given subentry, creating a TEntryListArray to hold the subentries for the given entry
   //Return true only if the entry is new (not the subentry)

   Bool_t result = 0;

   if (tree) {
      Long64_t localentry = tree->LoadTree(entry);
      SetTree(tree->GetTree());
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray) {
         if ((result = currentArray->Enter(localentry, 0, subentry)))
            if (fLists) ++fN;
      }
      return result;
   }
   if (fLists) {
      if (!fCurrent) fCurrent = (TEntryList*)fLists->First();
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray && (result = currentArray->Enter(entry, 0, subentry))) {
         ++fN;
      }
      return result;
   }
   // tree = 0 && !fLists
   // Sub entries were already present ?
   TEntryListArray *t = GetSubListForEntry(entry);
   if (t) { // Sub entries were already present
      if (subentry != -1) {
         t->TEntryList::Enter(subentry);
      } else { // remove the sub entries
         RemoveSubList(t);
      }
   } else {
      result = TEntryList::Enter(entry);
      if (subentry != -1 && result) { // a sub entry was given and the entry was not present
         t = SetEntry(entry);
         if (t) t->TEntryList::Enter(subentry);
      }
   }
   return result;
}

//______________________________________________________________________________
TEntryListArray* TEntryListArray::GetSubListForEntry(Long64_t entry, TTree *tree)
{
   // Return the list holding the subentries for the given entry or 0

   if (tree) {
      Long64_t localentry = tree->LoadTree(entry);
      SetTree(tree->GetTree());
      if (fCurrent) {
         TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
         if (currentArray) {
            return currentArray->GetSubListForEntry(localentry);
         }
      }
      return 0;
   }
   // tree = 0

   if (!fSubLists || !fSubLists->GetEntries()) {
      return 0;
   }

   if (!fSubListIter) {
      fSubListIter = new TIter(fSubLists);
      fLastSubListQueried = (TEntryListArray*) fSubListIter->Next();
   }
   else if (!fLastSubListQueried || entry < fLastSubListQueried->fEntry) {
      // Restart the loop: fLastSubListQueried should point to the newest entry
      // or where we stoped the last search
      // (it is 0 only if we reached the end of the loop)
      fSubListIter->Reset();
      fLastSubListQueried = (TEntryListArray*) fSubListIter->Next();
   }

   if (entry == fLastSubListQueried->fEntry) {
      return fLastSubListQueried;
   }

   while ((fLastSubListQueried = (TEntryListArray*) fSubListIter->Next())) {
      if (fLastSubListQueried->fEntry == entry) {
         return fLastSubListQueried;
      }
      if (fLastSubListQueried->fEntry > entry) {
         break;
      }
   }
   return 0;
}

//______________________________________________________________________________
void TEntryListArray::Print(const Option_t* option) const
{
   //Print this list
   //option = "" - default - print the name of the tree and file
   //option = "all" - print all the entry numbers
   //option = "subentries" - print all the entry numbers and associated subentries
   TString opt = option;
   opt.ToUpper();
   Bool_t new_line = !opt.Contains("EOL");

   if (!opt.Contains("S") && new_line) {
      TEntryList::Print(option);
      return;
   }

   if (fLists) {
      TIter next(fLists);
      TEntryListArray *e = 0;
      while ((e = (TEntryListArray*)next())) {
         std::cout << e->fTreeName << ":" << std::endl;
         e->Print(option);
      }
      return;
   }

   // Print all subentries
   TEntryListArray *tmp = const_cast<TEntryListArray *>(this);
   TIter next(fSubLists);
   TEntryListArray *e = (TEntryListArray*)next();
   for (Int_t i = 0; i < tmp->fN; ++i) {
      Long64_t entry = tmp->GetEntry(i);
      std::cout << entry << " ";
      if (fSubLists) {
         std::cout << " : ";
      }
      if (e && e->fEntry == entry) {
         e->Print("all,EOL");
         e = (TEntryListArray*)next();
      }
      if (new_line) {
         std::cout << std::endl;
      }
   }
}

//______________________________________________________________________________
Bool_t TEntryListArray::Remove(Long64_t entry, TTree *tree, Long64_t subentry)
{
   //Remove entry #entry (, #subentry)  from the list
   //When tree = 0, removes from the current list
   //When tree != 0, finds the list, corresponding to this tree
   //When tree is a chain, the entry is assumed to be global index and the local
   //entry is recomputed from the treeoffset information of the chain
   //If subentry != -1, only the given subentry is removed

   Bool_t result = 0;

   if (tree) {
      Long64_t localentry = tree->LoadTree(entry);
      SetTree(tree->GetTree());
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray && (result = currentArray->Remove(localentry, 0, subentry))) {
         if (fLists) {
            --fN;
         }
      }
      return result;
   }
   if (fLists) {
      if (!fCurrent) fCurrent = (TEntryList*)fLists->First();
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray && (result = currentArray->Remove(entry, 0, subentry)) && fLists) {
         --fN;
      }
      return result;
   }

   // tree = 0 && !fLists
   TEntryListArray *e = GetSubListForEntry(entry);
   if (e) {
      if (subentry != -1) {
         e->TEntryList::Remove(subentry);
      }
      if (subentry == -1 || !e->GetN()) {
         RemoveSubList(e, tree);
         return TEntryList::Remove(entry);
      }
   } else if (subentry == -1) {
      return TEntryList::Remove(entry);
   }
   return 0;
}

//______________________________________________________________________________
Bool_t TEntryListArray::RemoveSubList(TEntryListArray *e, TTree *tree)
{
   // Remove the given sublist and return true if succeeded
   if (!e) return 0;
   if (tree) {
      SetTree(tree->GetTree());
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray) {
         return currentArray->RemoveSubList(e);
      }
   }

   if (!fSubLists->Remove(e)) {
      return 0;
   }
   // fSubLists->Sort(); --> for TObjArray
   delete e;
   e = 0;
   if (!fSubLists->GetEntries()) {
      delete fSubLists;
      fSubLists = 0;
   }
   return 1;
}

//______________________________________________________________________________
Bool_t TEntryListArray::RemoveSubListForEntry(Long64_t entry, TTree *tree)
{
   // Remove the sublists for the given entry --> not being used...

   if (tree) {
      Long64_t localentry = tree->LoadTree(entry);
      SetTree(tree->GetTree());
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray) {
         return currentArray->RemoveSubListForEntry(localentry);
      }
   }
   return RemoveSubList(GetSubListForEntry(entry));
}

//______________________________________________________________________________
void TEntryListArray::Reset()
{
   // Reset all entries and remove all sublists
   TEntryList::Reset();
   if (fSubLists) {
      if (!((TEntryListArray*)fSubLists->First())->GetDirectory()) {
         fSubLists->Delete();
      }
      delete fSubLists;
   }
   delete fSubListIter;
   Init();
}

//______________________________________________________________________________
TEntryListArray* TEntryListArray::SetEntry(Long64_t entry, TTree *tree)
{
   //Create a sublist for the given entry and returns it --> should be called after calling GetSubListForEntry

   if (entry < 0) return 0;

   // If tree is given, switch to the list that contains tree
   if (tree) {
      Long64_t localentry = tree->LoadTree(entry);
      SetTree(tree->GetTree());
      TEntryListArray *currentArray = dynamic_cast<TEntryListArray*>(fCurrent);
      if (currentArray) {
         return currentArray->SetEntry(localentry);
      }
      return 0;
   }
   // tree = 0
   if (!fSubLists) {
      fSubLists = new TList();
   }
   TEntryListArray *newlist = new TEntryListArray();
   newlist->fEntry = entry;
   if (fLastSubListQueried) {
      fSubLists->AddBefore(fLastSubListQueried, newlist);
      fSubListIter->Reset(); // Reset the iterator to avoid missing the entry next to the new one (bug in TIter?)
   } else {
      fSubLists->AddLast(newlist);
   }
   fLastSubListQueried = newlist;
   return newlist;
}

//______________________________________________________________________________
void TEntryListArray::Subtract(const TEntryList *elist)
{
   //Remove all the entries (and subentries) of this entry list that are contained in elist
   //If for a given entry present in both lists, one has subentries and the other does not, the whole entry is removed

   if (!elist) return;

   if (fLists) { // This list is splitted
      TEntryListArray* e = 0;
      TIter next(fLists);
      fN = 0; // reset fN to set it to the sum of fN in each list
      while ((e = (TEntryListArray*) next())) {
         e->Subtract(elist);
         fN += e->GetN();
      }
   } else if (elist->GetLists()) { // The other list is splitted
      TIter next(elist->GetLists());
      TEntryList *e = 0;
      while ((e = (TEntryList*) next())) {
         Subtract(e);
      }
   } else { // None of the lists are splitted
      if (strcmp(elist->GetTreeName(), fTreeName.Data()) || strcmp(elist->GetFileName(), fFileName.Data()))
         return; // Lists are for different trees
      const TEntryListArray *elist_array = dynamic_cast< const TEntryListArray *>(elist);
      if (!fSubLists || !elist_array || !elist_array->GetSubLists()) {  // there are no sublists in one of the lists
         TEntryList::Subtract(elist);
         if (fSubLists) {
            TEntryListArray *e = 0;
            TIter next(fSubLists);
            while ((e = (TEntryListArray*) next())) {
               if (!Contains(e->fEntry))
                  RemoveSubList(e);
            }
         }
      } else { // Both lists have subentries, will have to loop over them
         TEntryListArray *el1, *el2;
         TIter next1(fSubLists);
         TIter next2(elist_array->GetSubLists());
         el1 = (TEntryListArray*) next1();
         el2 = (TEntryListArray*) next2();

         Long64_t n2 = elist->GetN();
         Long64_t entry;
         for (Int_t i = 0; i < n2; ++i) {
            entry = (const_cast<TEntryList*>(elist))->GetEntry(i);
            // Try to find the sublist for this entry in list
            while (el1 && el1->fEntry < entry) { // && el2
               el1 = (TEntryListArray*) next1();
            }
            while (el2 && el2->fEntry < entry) { // && el1
               el2 = (TEntryListArray*) next2();
            }

            if (el1 && el2 && entry == el1->fEntry && entry == el2->fEntry) { // both lists have sublists for this entry
               el1->Subtract(el2);
               if (!el1->fN) {
                  Remove(entry);
               }
            } else {
               Remove(entry);
            }
         }
      }
   }
}

//______________________________________________________________________________
void TEntryListArray::SetTree(const char *treename, const char *filename)
{
   //If a list for a tree with such name and filename exists, sets it as the current sublist
   //If not, creates this list and sets it as the current sublist

   //  ! the filename is taken as provided, no extensions to full path or url !

   // Uses the method from the base class: if the tree is new, the a new TEntryList will be created (and stored in fLists) and needs to be converted to a TEntryListArray

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