// @(#)root/x11:$Id$
// Author: Rene Brun, Olivier Couet, Fons Rademakers   28/11/94

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGX11                                                                //
//                                                                      //
// This class is the basic interface to the X11 graphics system. It is  //
// an implementation of the abstract TVirtualX class. The companion     //
// class for Win32 is TGWin32.                                          //
//                                                                      //
// This code was initially developed in the context of HIGZ and PAW     //
// by Olivier Couet (package X11INT).                                   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
#include "TROOT.h"
#include "TColor.h"
#include "TGX11.h"
#include "TPoint.h"
#include "TMath.h"
#include "TStorage.h"
#include "TStyle.h"
#include "TExMap.h"
#include "TEnv.h"
#include "TString.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "RStipples.h"

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/xpm.h>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#ifdef R__AIX
#   include <sys/socket.h>
#endif

extern float   XRotVersion(char*, int);
extern void    XRotSetMagnification(float);
extern void    XRotSetBoundingBoxPad(int);
extern int     XRotDrawString(Display*, XFontStruct*, float,
                              Drawable, GC, int, int, char*);
extern int     XRotDrawImageString(Display*, XFontStruct*, float,
                                   Drawable, GC, int, int, char*);
extern int     XRotDrawAlignedString(Display*, XFontStruct*, float,
                                     Drawable, GC, int, int, char*, int);
extern int     XRotDrawAlignedImageString(Display*, XFontStruct*, float,
                                          Drawable, GC, int, int, char*, int);
extern XPoint *XRotTextExtents(Display*, XFontStruct*, float,
                               int, int, char*, int);

//---- globals

static XWindow_t *gCws;      // gCws: pointer to the current window
static XWindow_t *gTws;      // gTws: temporary pointer

const Int_t kBIGGEST_RGB_VALUE = 65535;

//
// Primitives Graphic Contexts global for all windows
//
const int kMAXGC = 7;
static GC gGClist[kMAXGC];
static GC *gGCline = &gGClist[0];  // PolyLines
static GC *gGCmark = &gGClist[1];  // PolyMarker
static GC *gGCfill = &gGClist[2];  // Fill areas
static GC *gGCtext = &gGClist[3];  // Text
static GC *gGCinvt = &gGClist[4];  // Inverse text
static GC *gGCdash = &gGClist[5];  // Dashed lines
static GC *gGCpxmp = &gGClist[6];  // Pixmap management

static GC gGCecho;                 // Input echo

static Int_t  gFillHollow;         // Flag if fill style is hollow
static Pixmap gFillPattern = 0;    // Fill pattern

//
// Text management
//
const Int_t kMAXFONT = 4;
static struct {
   XFontStruct *id;
   char         name[80];                    // Font name
} gFont[kMAXFONT];                          // List of fonts loaded

static XFontStruct *gTextFont;              // Current font
static Int_t        gCurrentFontNumber = 0; // Current font number in gFont[]

//
// Markers
//
const Int_t kMAXMK = 100;
static struct {
   int    type;
   int    n;
   XPoint xy[kMAXMK];
} gMarker;                        // Point list to draw marker

//
// Keep style values for line GC
//
static int  gLineWidth = 0;
static int  gLineStyle = LineSolid;
static int  gCapStyle  = CapButt;
static int  gJoinStyle = JoinMiter;
static char gDashList[10];
static int  gDashLength = 0;
static int  gDashOffset = 0;
static int  gDashSize   = 0;

//
// Event masks
//
static ULong_t gMouseMask =   ButtonPressMask   | ButtonReleaseMask |
                              EnterWindowMask   | LeaveWindowMask   |
                              PointerMotionMask | KeyPressMask      |
                              KeyReleaseMask;
static ULong_t gKeybdMask =   ButtonPressMask | KeyPressMask |
                              EnterWindowMask | LeaveWindowMask;

//
// Data to create an invisible cursor
//
const char null_cursor_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static Cursor gNullCursor = 0;

struct RXGCValues:XGCValues{};
struct RXColor:XColor{};
struct RXImage:XImage{};
struct RXPoint:XPoint{};
struct RXVisualInfo:XVisualInfo{};
struct RVisual:Visual{};

ClassImp(TGX11)

//______________________________________________________________________________
TGX11::TGX11()
{
   // Default constructor.

   int i;
   fDisplay            = 0;
   fScreenNumber       = 0;
   fVisual             = 0;
   fRootWin            = 0;
   fVisRootWin         = 0;
   fColormap           = 0;
   fBlackPixel         = 0;
   fWhitePixel         = 0;
   fWindows            = 0;
   fColors             = 0;
   fXEvent             = new XEvent;
   fRedDiv             = -1;
   fGreenDiv           = -1;
   fBlueDiv            = -1;
   fRedShift           = -1;
   fGreenShift         = -1;
   fBlueShift          = -1;
   fCharacterUpX       = 1;
   fCharacterUpY       = 1;
   fDepth              = 0;
   fHasTTFonts         = kFALSE;
   fHasXft             = kFALSE;
   fMaxNumberOfWindows = 10;
   fTextAlignH         = 1;
   fTextAlignV         = 1;
   fTextAlign          = 7;
   fTextMagnitude      = 1;
   for (i = 0; i < kNumCursors; i++) fCursors[i] = 0;
}

//______________________________________________________________________________
TGX11::TGX11(const char *name, const char *title) : TVirtualX(name, title)
{
   // Normal Constructor.

   int i;
   fDisplay            = 0;
   fScreenNumber       = 0;
   fVisual             = 0;
   fRootWin            = 0;
   fVisRootWin         = 0;
   fColormap           = 0;
   fBlackPixel         = 0;
   fWhitePixel         = 0;
   fDrawMode           = kCopy;
   fXEvent             = new XEvent;
   fRedDiv             = -1;
   fGreenDiv           = -1;
   fBlueDiv            = -1;
   fRedShift           = -1;
   fGreenShift         = -1;
   fBlueShift          = -1;
   fCharacterUpX       = 1;
   fCharacterUpY       = 1;
   fDepth              = 0;
   fHasTTFonts         = kFALSE;
   fHasXft             = kFALSE;
   fMaxNumberOfWindows = 10;
   fTextAlignH         = 1;
   fTextAlignV         = 1;
   fTextAlign          = 7;
   fTextMagnitude      = 1;
   for (i = 0; i < kNumCursors; i++) fCursors[i] = 0;

   //fWindows = new XWindow_t[fMaxNumberOfWindows];
   fWindows = (XWindow_t*) TStorage::Alloc(fMaxNumberOfWindows*sizeof(XWindow_t));
   for (i = 0; i < fMaxNumberOfWindows; i++)
      fWindows[i].fOpen = 0;

   fColors = new TExMap;
}

//______________________________________________________________________________
TGX11::TGX11(const TGX11 &org) : TVirtualX(org)
{
   // Copy constructor. Currently only used by TGX11TTF.

   int i;

   fDisplay         = org.fDisplay;
   fScreenNumber    = org.fScreenNumber;
   fVisual          = org.fVisual;
   fRootWin         = org.fRootWin;
   fVisRootWin      = org.fVisRootWin;
   fColormap        = org.fColormap;
   fBlackPixel      = org.fBlackPixel;
   fWhitePixel      = org.fWhitePixel;
   fHasTTFonts      = org.fHasTTFonts;
   fHasXft          = org.fHasXft;
   fTextAlignH      = org.fTextAlignH;
   fTextAlignV      = org.fTextAlignV;
   fTextAlign       = org.fTextAlign;
   fTextMagnitude   = org.fTextMagnitude;
   fCharacterUpX    = org.fCharacterUpX;
   fCharacterUpY    = org.fCharacterUpY;
   fDepth           = org.fDepth;
   fRedDiv          = org.fRedDiv;
   fGreenDiv        = org.fGreenDiv;
   fBlueDiv         = org.fBlueDiv;
   fRedShift        = org.fRedShift;
   fGreenShift      = org.fGreenShift;
   fBlueShift       = org.fBlueShift;
   fDrawMode        = org.fDrawMode;
   fXEvent          = new XEvent;

   fMaxNumberOfWindows = org.fMaxNumberOfWindows;
   //fWindows = new XWindow_t[fMaxNumberOfWindows];
   fWindows = (XWindow_t*) TStorage::Alloc(fMaxNumberOfWindows*sizeof(XWindow_t));
   for (i = 0; i < fMaxNumberOfWindows; i++) {
      fWindows[i].fOpen         = org.fWindows[i].fOpen;
      fWindows[i].fDoubleBuffer = org.fWindows[i].fDoubleBuffer;
      fWindows[i].fIsPixmap     = org.fWindows[i].fIsPixmap;
      fWindows[i].fDrawing      = org.fWindows[i].fDrawing;
      fWindows[i].fWindow       = org.fWindows[i].fWindow;
      fWindows[i].fBuffer       = org.fWindows[i].fBuffer;
      fWindows[i].fWidth        = org.fWindows[i].fWidth;
      fWindows[i].fHeight       = org.fWindows[i].fHeight;
      fWindows[i].fClip         = org.fWindows[i].fClip;
      fWindows[i].fXclip        = org.fWindows[i].fXclip;
      fWindows[i].fYclip        = org.fWindows[i].fYclip;
      fWindows[i].fWclip        = org.fWindows[i].fWclip;
      fWindows[i].fHclip        = org.fWindows[i].fHclip;
      fWindows[i].fNewColors    = org.fWindows[i].fNewColors;
      fWindows[i].fNcolors      = org.fWindows[i].fNcolors;
      fWindows[i].fShared       = org.fWindows[i].fShared;
   }

   for (i = 0; i < kNumCursors; i++)
      fCursors[i] = org.fCursors[i];

   fColors = new TExMap;
   Long64_t key, value;
   TExMapIter it(org.fColors);
   while (it.Next(key, value)) {
      XColor_t *colo = (XColor_t *) (Long_t)value;
      XColor_t *col  = new XColor_t;
      col->fPixel   = colo->fPixel;
      col->fRed     = colo->fRed;
      col->fGreen   = colo->fGreen;
      col->fBlue    = colo->fBlue;
      col->fDefined = colo->fDefined;
      fColors->Add(key, (Long_t) col);
   }
}

//______________________________________________________________________________
TGX11::~TGX11()
{
   // Destructor.

   delete (XEvent*)fXEvent;
   if (fWindows) TStorage::Dealloc(fWindows);

   if (!fColors) return;
   Long64_t key, value;
   TExMapIter it(fColors);
   while (it.Next(key, value)) {
      XColor_t *col = (XColor_t *) (Long_t)value;
      delete col;
   }
   delete fColors;
}

//______________________________________________________________________________
Bool_t TGX11::Init(void *display)
{
   // Initialize X11 system. Returns kFALSE in case of failure.

   if (OpenDisplay((Display *) display) == -1) return kFALSE;
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGX11::AllocColor(Colormap cmap, RXColor *color)
{
   // Allocate color in colormap. If we are on an <= 8 plane machine
   // we will use XAllocColor. If we are on a >= 15 (15, 16 or 24) plane
   // true color machine we will calculate the pixel value using:
   // for 15 and 16 bit true colors have 6 bits precision per color however
   // only the 5 most significant bits are used in the color index.
   // Except for 16 bits where green uses all 6 bits. I.e.:
   //   15 bits = rrrrrgggggbbbbb
   //   16 bits = rrrrrggggggbbbbb
   // for 24 bits each r, g and b are represented by 8 bits.
   //
   // Since all colors are set with a max of 65535 (16 bits) per r, g, b
   // we just right shift them by 10, 11 and 10 bits for 16 planes, and
   // (10, 10, 10 for 15 planes) and by 8 bits for 24 planes.
   // Returns kFALSE in case color allocation failed.

   if (fRedDiv == -1) {
      if (XAllocColor((Display*)fDisplay, cmap, color))
         return kTRUE;
   } else {
      color->pixel = (color->red   >> fRedDiv)   << fRedShift |
                     (color->green >> fGreenDiv) << fGreenShift |
                     (color->blue  >> fBlueDiv)  << fBlueShift;
      return kTRUE;
   }
   return kFALSE;
}

//______________________________________________________________________________
void TGX11::QueryColors(Colormap cmap, RXColor *color, Int_t ncolors)
{
   // Returns the current RGB value for the pixel in the XColor structure.

   if (fRedDiv == -1) {
      XQueryColors((Display*)fDisplay, cmap, color, ncolors);
   } else {
      ULong_t r, g, b;
      for (Int_t i = 0; i < ncolors; i++) {
         r = (color[i].pixel & fVisual->red_mask) >> fRedShift;
         color[i].red = UShort_t(r*kBIGGEST_RGB_VALUE/(fVisual->red_mask >> fRedShift));

         g = (color[i].pixel & fVisual->green_mask) >> fGreenShift;
         color[i].green = UShort_t(g*kBIGGEST_RGB_VALUE/(fVisual->green_mask >> fGreenShift));

         b = (color[i].pixel & fVisual->blue_mask) >> fBlueShift;
         color[i].blue = UShort_t(b*kBIGGEST_RGB_VALUE/(fVisual->blue_mask >> fBlueShift));

         color[i].flags = DoRed | DoGreen | DoBlue;
      }
   }
}

//______________________________________________________________________________
void TGX11::ClearPixmap(Drawable *pix)
{
   // Clear the pixmap pix.

   Window root;
   int xx, yy;
   unsigned int ww, hh, border, depth;
   XGetGeometry((Display*)fDisplay, *pix, &root, &xx, &yy, &ww, &hh, &border, &depth);
   SetColor(gGCpxmp, 0);
   XFillRectangle((Display*)fDisplay, *pix, *gGCpxmp, 0 ,0 ,ww ,hh);
   SetColor(gGCpxmp, 1);
   XFlush((Display*)fDisplay);
}

//______________________________________________________________________________
void TGX11::ClearWindow()
{
   // Clear current window.

   if (!gCws->fIsPixmap && !gCws->fDoubleBuffer) {
      XSetWindowBackground((Display*)fDisplay, gCws->fDrawing, GetColor(0).fPixel);
      XClearWindow((Display*)fDisplay, gCws->fDrawing);
      XFlush((Display*)fDisplay);
   } else {
      SetColor(gGCpxmp, 0);
      XFillRectangle((Display*)fDisplay, gCws->fDrawing, *gGCpxmp,
                     0, 0, gCws->fWidth, gCws->fHeight);
      SetColor(gGCpxmp, 1);
   }
}

//______________________________________________________________________________
void TGX11::ClosePixmap()
{
   // Delete current pixmap.

   CloseWindow1();
}

//______________________________________________________________________________
void TGX11::CloseWindow()
{
   // Delete current window.

   if (gCws->fShared)
      gCws->fOpen = 0;
   else
      CloseWindow1();

   // Never close connection. TApplication takes care of that
   //   if (!gCws) Close();    // close X when no open window left
}

//______________________________________________________________________________
void TGX11::CloseWindow1()
{
   // Delete current window.

   int wid;

   if (gCws->fIsPixmap)
      XFreePixmap((Display*)fDisplay, gCws->fWindow);
   else
      XDestroyWindow((Display*)fDisplay, gCws->fWindow);

   if (gCws->fBuffer) XFreePixmap((Display*)fDisplay, gCws->fBuffer);

   if (gCws->fNewColors) {
      if (fRedDiv == -1)
         XFreeColors((Display*)fDisplay, fColormap, gCws->fNewColors, gCws->fNcolors, 0);
      delete [] gCws->fNewColors;
      gCws->fNewColors = 0;
   }

   XFlush((Display*)fDisplay);

   gCws->fOpen = 0;

   // make first window in list the current window
   for (wid = 0; wid < fMaxNumberOfWindows; wid++)
      if (fWindows[wid].fOpen) {
         gCws = &fWindows[wid];
         return;
      }

   gCws = 0;
}

//______________________________________________________________________________
void TGX11::CopyPixmap(int wid, int xpos, int ypos)
{
   // Copy the pixmap wid at the position xpos, ypos in the current window.

   gTws = &fWindows[wid];

   XCopyArea((Display*)fDisplay, gTws->fDrawing, gCws->fDrawing, *gGCpxmp, 0, 0, gTws->fWidth,
             gTws->fHeight, xpos, ypos);
   XFlush((Display*)fDisplay);
}

//______________________________________________________________________________
void TGX11::CopyWindowtoPixmap(Drawable *pix, int xpos, int ypos )
{
   // Copy area of current window in the pixmap pix.

   Window root;
   int xx, yy;
   unsigned int ww, hh, border, depth;

   XGetGeometry((Display*)fDisplay, *pix, &root, &xx, &yy, &ww, &hh, &border, &depth);
   XCopyArea((Display*)fDisplay, gCws->fDrawing, *pix, *gGCpxmp, xpos, ypos, ww, hh, 0, 0);
   XFlush((Display*)fDisplay);
}

//______________________________________________________________________________
void TGX11::DrawBox(int x1, int y1, int x2, int y2, EBoxMode mode)
{
   // Draw a box.
   // mode=0 hollow  (kHollow)
   // mode=1 solid   (kSolid)

   Int_t x = TMath::Min(x1, x2);
   Int_t y = TMath::Min(y1, y2);
   Int_t w = TMath::Abs(x2 - x1);
   Int_t h = TMath::Abs(y2 - y1);

   switch (mode) {

      case kHollow:
         XDrawRectangle((Display*)fDisplay, gCws->fDrawing, *gGCline, x, y, w, h);
         break;

      case kFilled:
         XFillRectangle((Display*)fDisplay, gCws->fDrawing, *gGCfill, x, y, w, h);
         break;

      default:
         break;
   }
}

//______________________________________________________________________________
void TGX11::DrawCellArray(int x1, int y1, int x2, int y2, int nx, int ny, int *ic)
{
   // Draw a cell array.
   // x1,y1        : left down corner
   // x2,y2        : right up corner
   // nx,ny        : array size
   // ic           : array
   //
   // Draw a cell array. The drawing is done with the pixel presicion
   // if (X2-X1)/NX (or Y) is not a exact pixel number the position of
   // the top rigth corner may be wrong.

   int i, j, icol, ix, iy, w, h, current_icol;

   current_icol = -1;
   w            = TMath::Max((x2-x1)/(nx),1);
   h            = TMath::Max((y1-y2)/(ny),1);
   ix           = x1;

   for (i = 0; i < nx; i++) {
      iy = y1-h;
      for (j = 0; j < ny; j++) {
         icol = ic[i+(nx*j)];
         if (icol != current_icol) {
            XSetForeground((Display*)fDisplay, *gGCfill, GetColor(icol).fPixel);
            current_icol = icol;
         }
         XFillRectangle((Display*)fDisplay, gCws->fDrawing, *gGCfill, ix, iy, w, h);
         iy = iy-h;
      }
      ix = ix+w;
   }
}

//______________________________________________________________________________
void TGX11::DrawFillArea(int n, TPoint *xyt)
{
   // Fill area described by polygon.
   // n         : number of points
   // xy(2,n)   : list of points

   XPoint *xy = (XPoint*)xyt;

   if (gFillHollow)
      XDrawLines((Display*)fDisplay, gCws->fDrawing, *gGCfill, xy, n, CoordModeOrigin);

   else {
      XFillPolygon((Display*)fDisplay, gCws->fDrawing, *gGCfill,
                   xy, n, Nonconvex, CoordModeOrigin);
   }
}

//______________________________________________________________________________
void TGX11::DrawLine(int x1, int y1, int x2, int y2)
{
   // Draw a line.
   // x1,y1        : begin of line
   // x2,y2        : end of line

   if (gLineStyle == LineSolid)
      XDrawLine((Display*)fDisplay, gCws->fDrawing, *gGCline, x1, y1, x2, y2);
   else {
      XSetDashes((Display*)fDisplay, *gGCdash, gDashOffset, gDashList, gDashSize);
      XDrawLine((Display*)fDisplay, gCws->fDrawing, *gGCdash, x1, y1, x2, y2);
   }
}

//______________________________________________________________________________
void TGX11::DrawPolyLine(int n, TPoint *xyt)
{
   // Draw a line through all points.
   // n         : number of points
   // xy        : list of points

   XPoint *xy = (XPoint*)xyt;

   const Int_t kMaxPoints = 1000001;

   if (n > kMaxPoints) {
      int ibeg = 0;
      int iend = kMaxPoints - 1;
      while (iend < n) {
         DrawPolyLine( kMaxPoints, &xyt[ibeg] );
         ibeg = iend;
         iend += kMaxPoints - 1;
      }
      if (ibeg < n) {
         int npt = n - ibeg;
         DrawPolyLine( npt, &xyt[ibeg] );
      }
   } else if (n > 1) {
      if (gLineStyle == LineSolid)
         XDrawLines((Display*)fDisplay, gCws->fDrawing, *gGCline, xy, n, CoordModeOrigin);
      else {
         int i;
         XSetDashes((Display*)fDisplay, *gGCdash,
                    gDashOffset, gDashList, gDashSize);
         XDrawLines((Display*)fDisplay, gCws->fDrawing, *gGCdash, xy, n, CoordModeOrigin);

         // calculate length of line to update dash offset
         for (i = 1; i < n; i++) {
            int dx = xy[i].x - xy[i-1].x;
            int dy = xy[i].y - xy[i-1].y;
            if (dx < 0) dx = - dx;
            if (dy < 0) dy = - dy;
            gDashOffset += dx > dy ? dx : dy;
         }
         gDashOffset %= gDashLength;
      }
   } else {
      int px,py;
      px=xy[0].x;
      py=xy[0].y;
      XDrawPoint((Display*)fDisplay, gCws->fDrawing,
                 gLineStyle == LineSolid ? *gGCline : *gGCdash, px, py);
   }
}

//______________________________________________________________________________
void TGX11::DrawPolyMarker(int n, TPoint *xyt)
{
   // Draw n markers with the current attributes at position x, y.
   // n    : number of markers to draw
   // xy   : x,y coordinates of markers

   XPoint *xy = (XPoint*)xyt;

   if (gMarker.n <= 0) {
      const int kNMAX = 1000000;
      int nt = n/kNMAX;
      for (int it=0;it<=nt;it++) {
         if (it < nt) {
            XDrawPoints((Display*)fDisplay, gCws->fDrawing, *gGCmark, &xy[it*kNMAX], kNMAX, CoordModeOrigin);
         } else {
            XDrawPoints((Display*)fDisplay, gCws->fDrawing, *gGCmark, &xy[it*kNMAX], n-it*kNMAX, CoordModeOrigin);
         }
      }
   } else {
      int r = gMarker.n / 2;
      int m;

      for (m = 0; m < n; m++) {
         int hollow = 0;

         switch (gMarker.type) {
            int i;

            case 0:        // hollow circle
               XDrawArc((Display*)fDisplay, gCws->fDrawing, *gGCmark,
                        xy[m].x - r, xy[m].y - r, gMarker.n, gMarker.n, 0, 360*64);
               break;

            case 1:        // filled circle
               XFillArc((Display*)fDisplay, gCws->fDrawing, *gGCmark,
                        xy[m].x - r, xy[m].y - r, gMarker.n, gMarker.n, 0, 360*64);
               break;

            case 2:        // hollow polygon
               hollow = 1;
            case 3:        // filled polygon
               for (i = 0; i < gMarker.n; i++) {
                  gMarker.xy[i].x += xy[m].x;
                  gMarker.xy[i].y += xy[m].y;
               }
               if (hollow)
                  XDrawLines((Display*)fDisplay, gCws->fDrawing, *gGCmark,
                             gMarker.xy, gMarker.n, CoordModeOrigin);
               else
                  XFillPolygon((Display*)fDisplay, gCws->fDrawing, *gGCmark,
                               gMarker.xy, gMarker.n, Nonconvex, CoordModeOrigin);
               for (i = 0; i < gMarker.n; i++) {
                  gMarker.xy[i].x -= xy[m].x;
                  gMarker.xy[i].y -= xy[m].y;
               }
               break;

            case 4:        // segmented line
               for (i = 0; i < gMarker.n; i += 2)
                  XDrawLine((Display*)fDisplay, gCws->fDrawing, *gGCmark,
                            xy[m].x + gMarker.xy[i].x, xy[m].y + gMarker.xy[i].y,
                            xy[m].x + gMarker.xy[i+1].x, xy[m].y + gMarker.xy[i+1].y);
               break;
         }
      }
   }
}

//______________________________________________________________________________
void TGX11::DrawText(int x, int y, float angle, float mgn,
                     const char *text, ETextMode mode)
{
   // Draw a text string using current font.
   // mode       : drawing mode
   // mode=0     : the background is not drawn (kClear)
   // mode=1     : the background is drawn (kOpaque)
   // x,y        : text position
   // angle      : text angle
   // mgn        : magnification factor
   // text       : text string

   XRotSetMagnification(mgn);

   if (!text) return;

   switch (mode) {

      case kClear:
         XRotDrawAlignedString((Display*)fDisplay, gTextFont, angle,
                      gCws->fDrawing, *gGCtext, x, y, (char*)text, fTextAlign);
         break;

      case kOpaque:
         XRotDrawAlignedImageString((Display*)fDisplay, gTextFont, angle,
                      gCws->fDrawing, *gGCtext, x, y, (char*)text, fTextAlign);
         break;

      default:
         break;
   }
}

//______________________________________________________________________________
void TGX11::FindBestVisual()
{
   // Find best visual, i.e. the one with the most planes and TrueColor or
   // DirectColor. Sets fVisual, fDepth, fRootWin, fColormap, fBlackPixel
   // and fWhitePixel.

   Int_t findvis = gEnv->GetValue("X11.FindBestVisual", 1);

   Visual *vis = DefaultVisual((Display*)fDisplay, fScreenNumber);
   if (((vis->c_class != TrueColor && vis->c_class != DirectColor) ||
       DefaultDepth((Display*)fDisplay, fScreenNumber) < 15) && findvis) {

      // try to find better visual
      static XVisualInfo templates[] = {
         // Visual, visualid, screen, depth, class      , red_mask, green_mask, blue_mask, colormap_size, bits_per_rgb
         { 0     , 0       , 0     , 24   , TrueColor  , 0       , 0         , 0        , 0            , 0 },
         { 0     , 0       , 0     , 32   , TrueColor  , 0       , 0         , 0        , 0            , 0 },
         { 0     , 0       , 0     , 16   , TrueColor  , 0       , 0         , 0        , 0            , 0 },
         { 0     , 0       , 0     , 15   , TrueColor  , 0       , 0         , 0        , 0            , 0 },
         // no suitable TrueColorMode found - now do the same thing to DirectColor
         { 0     , 0       , 0     , 24   , DirectColor, 0       , 0         , 0        , 0            , 0 },
         { 0     , 0       , 0     , 32   , DirectColor, 0       , 0         , 0        , 0            , 0 },
         { 0     , 0       , 0     , 16   , DirectColor, 0       , 0         , 0        , 0            , 0 },
         { 0     , 0       , 0     , 15   , DirectColor, 0       , 0         , 0        , 0            , 0 },
         { 0     , 0       , 0     , 0    , 0          , 0       , 0         , 0        , 0            , 0 },
      };

      Int_t nitems = 0;
      XVisualInfo *vlist = 0;
      for (Int_t i = 0; templates[i].depth != 0; i++) {
         Int_t mask = VisualScreenMask|VisualDepthMask|VisualClassMask;
         templates[i].screen = fScreenNumber;
         if ((vlist = XGetVisualInfo((Display*)fDisplay, mask, &(templates[i]), &nitems))) {
            FindUsableVisual((RXVisualInfo*)vlist, nitems);
            XFree(vlist);
            vlist = 0;
            if (fVisual)
               break;
         }
      }
   }

   fRootWin = RootWindow((Display*)fDisplay, fScreenNumber);

   if (!fVisual) {
      fDepth      = DefaultDepth((Display*)fDisplay, fScreenNumber);
      fVisual     = (RVisual*)DefaultVisual((Display*)fDisplay, fScreenNumber);
      fVisRootWin = fRootWin;
      if (fDepth > 1)
         fColormap = DefaultColormap((Display*)fDisplay, fScreenNumber);
      fBlackPixel = BlackPixel((Display*)fDisplay, fScreenNumber);
      fWhitePixel = WhitePixel((Display*)fDisplay, fScreenNumber);
   }
   if (gDebug > 1)
      Printf("Selected visual 0x%lx: depth %d, class %d, colormap: %s",
             fVisual->visualid, fDepth, fVisual->c_class,
             fColormap == DefaultColormap((Display*)fDisplay, fScreenNumber) ? "default" :
             "custom");
}

//______________________________________________________________________________
static Int_t DummyX11ErrorHandler(Display *, XErrorEvent *)
{
   // Dummy error handler for X11. Used by FindUsableVisual().

   return 0;
}

//______________________________________________________________________________
void TGX11::FindUsableVisual(RXVisualInfo *vlist, Int_t nitems)
{
   // Check if visual is usable, if so set fVisual, fDepth, fColormap,
   // fBlackPixel and fWhitePixel.

   Int_t (*oldErrorHandler)(Display *, XErrorEvent *) =
       XSetErrorHandler(DummyX11ErrorHandler);

   XSetWindowAttributes attr;
   memset(&attr, 0, sizeof(attr));

   Window root = RootWindow((Display*)fDisplay, fScreenNumber);

   for (Int_t i = 0; i < nitems; i++) {
      Window w = None, wjunk;
      UInt_t width, height, ujunk;
      Int_t  junk;

      // try and use default colormap when possible
      if (vlist[i].visual == DefaultVisual((Display*)fDisplay, fScreenNumber)) {
         attr.colormap = DefaultColormap((Display*)fDisplay, fScreenNumber);
      } else {
         attr.colormap = XCreateColormap((Display*)fDisplay, root, vlist[i].visual, AllocNone);
      }

      static XColor black_xcol = { 0, 0x0000, 0x0000, 0x0000, DoRed|DoGreen|DoBlue, 0 };
      static XColor white_xcol = { 0, 0xFFFF, 0xFFFF, 0xFFFF, DoRed|DoGreen|DoBlue, 0 };
      XAllocColor((Display*)fDisplay, attr.colormap, &black_xcol);
      XAllocColor((Display*)fDisplay, attr.colormap, &white_xcol);
      attr.border_pixel = black_xcol.pixel;
      attr.override_redirect = True;

      w = XCreateWindow((Display*)fDisplay, root, -20, -20, 10, 10, 0, vlist[i].depth,
                        CopyFromParent, vlist[i].visual,
                        CWColormap|CWBorderPixel|CWOverrideRedirect, &attr);
      if (w != None && XGetGeometry((Display*)fDisplay, w, &wjunk, &junk, &junk,
                                    &width, &height, &ujunk, &ujunk)) {
         fVisual     = (RVisual*)vlist[i].visual;
         fDepth      = vlist[i].depth;
         fColormap   = attr.colormap;
         fBlackPixel = black_xcol.pixel;
         fWhitePixel = white_xcol.pixel;
         fVisRootWin = w;
         break;
      }
      if (attr.colormap != DefaultColormap((Display*)fDisplay, fScreenNumber))
         XFreeColormap((Display*)fDisplay, attr.colormap);
   }
   XSetErrorHandler(oldErrorHandler);
}

//______________________________________________________________________________
void TGX11::GetCharacterUp(Float_t &chupx, Float_t &chupy)
{
   // Return character up vector.

   chupx = fCharacterUpX;
   chupy = fCharacterUpY;
}

//______________________________________________________________________________
XColor_t &TGX11::GetColor(Int_t cid)
{
   // Return reference to internal color structure associated
   // to color index cid.

   XColor_t *col = (XColor_t*) (Long_t)fColors->GetValue(cid);
   if (!col) {
      col = new XColor_t;
      fColors->Add(cid, (Long_t) col);
   }
   return *col;
}

//______________________________________________________________________________
Window_t TGX11::GetCurrentWindow() const
{
   // Return current window pointer. Protected method used by TGX11TTF.

   return (Window_t)(gCws ? gCws->fDrawing : 0);
}

//______________________________________________________________________________
void *TGX11::GetGC(Int_t which) const
{
   // Return desired Graphics Context ("which" maps directly on gGCList[]).
   // Protected method used by TGX11TTF.

   if (which >= kMAXGC || which < 0) {
      Error("GetGC", "trying to get illegal GC (which = %d)", which);
      return 0;
   }
   return &gGClist[which];
}

//______________________________________________________________________________
Int_t TGX11::GetDoubleBuffer(int wid)
{
   // Query the double buffer value for the window wid.

   gTws = &fWindows[wid];
   if (!gTws->fOpen)
      return -1;
   else
      return gTws->fDoubleBuffer;
}

//______________________________________________________________________________
void TGX11::GetGeometry(int wid, int &x, int &y, unsigned int &w, unsigned int &h)
{
   // Return position and size of window wid.
   // wid        : window identifier
   // x,y        : window position (output)
   // w,h        : window size (output)
   // if wid < 0 the size of the display is returned

   Window junkwin=0;

   if (wid < 0) {
      x = 0;
      y = 0;
      w = DisplayWidth((Display*)fDisplay,fScreenNumber);
      h = DisplayHeight((Display*)fDisplay,fScreenNumber);
   } else {
      Window root;
      unsigned int border, depth;
      unsigned int width, height;

      gTws = &fWindows[wid];
      XGetGeometry((Display*)fDisplay, gTws->fWindow, &root, &x, &y,
                   &width, &height, &border, &depth);
      XTranslateCoordinates((Display*)fDisplay, gTws->fWindow, fRootWin,
                            0, 0, &x, &y, &junkwin);
      if (width >= 65535)
         width = 1;
      if (height >= 65535)
         height = 1;
      if (width > 0 && height > 0) {
         gTws->fWidth  = width;
         gTws->fHeight = height;
      }
      w = gTws->fWidth;
      h = gTws->fHeight;
   }
}

//______________________________________________________________________________
const char *TGX11::DisplayName(const char *dpyName)
{
   // Return hostname on which the display is opened.

   return XDisplayName(dpyName);
}

//______________________________________________________________________________
ULong_t TGX11::GetPixel(Color_t ci)
{
   // Return pixel value associated to specified ROOT color number.

   TColor *color = gROOT->GetColor(ci);
   if (color)
      SetRGB(ci, color->GetRed(), color->GetGreen(), color->GetBlue());
//   else
//      Warning("GetPixel", "color with index %d not defined", ci);

   XColor_t &col = GetColor(ci);
   return col.fPixel;
}

//______________________________________________________________________________
void TGX11::GetPlanes(int &nplanes)
{
   // Get maximum number of planes.

   nplanes = fDepth;
}

//______________________________________________________________________________
void TGX11::GetRGB(int index, float &r, float &g, float &b)
{
   // Get rgb values for color "index".

   if (index == 0) {
      r = g = b = 1.0;
   } else if (index == 1) {
      r = g = b = 0.0;
   } else {
      XColor_t &col = GetColor(index);
      r = ((float) col.fRed) / ((float) kBIGGEST_RGB_VALUE);
      g = ((float) col.fGreen) / ((float) kBIGGEST_RGB_VALUE);
      b = ((float) col.fBlue) / ((float) kBIGGEST_RGB_VALUE);
   }
}

//______________________________________________________________________________
void TGX11::GetTextExtent(unsigned int &w, unsigned int &h, char *mess)
{
   // Return the size of a character string.
   // iw          : text width
   // ih          : text height
   // mess        : message

   w=0; h=0;
   if (strlen(mess)==0) return;

   XPoint *cBox;
   XRotSetMagnification(fTextMagnitude);
   cBox = XRotTextExtents((Display*)fDisplay, gTextFont, 0., 0, 0, mess, 0);
   if (cBox) {
      w    = cBox[2].x;
      h    = -cBox[2].y;
      free((char *)cBox);
   }
}

//______________________________________________________________________________
Window_t TGX11::GetWindowID(int wid)
{
   // Return the X11 window identifier.
   // wid      : Workstation identifier (input)

   return (Window_t) fWindows[wid].fWindow;
}

//______________________________________________________________________________
void TGX11::MoveWindow(int wid, int x, int y)
{
   // Move the window wid.
   // wid  : Window identifier.
   // x    : x new window position
   // y    : y new window position

   gTws = &fWindows[wid];
   if (!gTws->fOpen) return;

   XMoveWindow((Display*)fDisplay, gTws->fWindow, x, y);
}

//______________________________________________________________________________
Int_t TGX11::OpenDisplay(void *disp)
{
   // Open the display. Return -1 if the opening fails, 0 when ok.

   Pixmap  pixmp1, pixmp2;
   XColor  fore, back;
   char  **fontlist;
   int     fontcount = 0;
   int     i;

   if (fDisplay) return 0;

   fDisplay      = disp;
   fScreenNumber = DefaultScreen((Display*)fDisplay);

   FindBestVisual();

   GetColor(1).fDefined = kTRUE; // default foreground
   GetColor(1).fPixel = fBlackPixel;
   GetColor(0).fDefined = kTRUE; // default background
   GetColor(0).fPixel = fWhitePixel;

   // Inquire the the XServer Vendor
   char vendor[132];
   strlcpy(vendor, XServerVendor((Display*)fDisplay),132);

   // Create primitives graphic contexts
   for (i = 0; i < kMAXGC; i++)
      gGClist[i] = XCreateGC((Display*)fDisplay, fVisRootWin, 0, 0);

   XGCValues values;
   if (XGetGCValues((Display*)fDisplay, *gGCtext, GCForeground|GCBackground, &values)) {
      XSetForeground((Display*)fDisplay, *gGCinvt, values.background);
      XSetBackground((Display*)fDisplay, *gGCinvt, values.foreground);
   } else {
      Error("OpenDisplay", "cannot get GC values");
   }

   // Turn-off GraphicsExpose and NoExpose event reporting for the pixmap
   // manipulation GC, this to prevent these events from being stacked up
   // without ever being processed and thereby wasting a lot of memory.
   XSetGraphicsExposures((Display*)fDisplay, *gGCpxmp, False);

   // Create input echo graphic context
   XGCValues echov;
   echov.foreground = fBlackPixel;
   echov.background = fWhitePixel;
   if (strstr(vendor,"Hewlett"))
      echov.function   = GXxor;
   else
      echov.function   = GXinvert;

   gGCecho = XCreateGC((Display*)fDisplay, fVisRootWin,
                       GCForeground | GCBackground | GCFunction,
                       &echov);

   // Load a default Font
   static int isdisp = 0;
   if (!isdisp) {
      for (i = 0; i < kMAXFONT; i++) {
         gFont[i].id = 0;
         strcpy(gFont[i].name, " ");
      }
      fontlist = XListFonts((Display*)fDisplay, "*courier*", 1, &fontcount);
      if (fontlist && fontcount != 0) {
         gFont[gCurrentFontNumber].id = XLoadQueryFont((Display*)fDisplay, fontlist[0]);
         gTextFont = gFont[gCurrentFontNumber].id;
         strcpy(gFont[gCurrentFontNumber].name, "*courier*");
         gCurrentFontNumber++;
         XFreeFontNames(fontlist);
      } else {
         // emergency: try fixed font
         fontlist = XListFonts((Display*)fDisplay, "fixed", 1, &fontcount);
         if (fontlist && fontcount != 0) {
            gFont[gCurrentFontNumber].id = XLoadQueryFont((Display*)fDisplay, fontlist[0]);
            gTextFont = gFont[gCurrentFontNumber].id;
            strcpy(gFont[gCurrentFontNumber].name, "fixed");
            gCurrentFontNumber++;
            XFreeFontNames(fontlist);
         } else {
            Warning("OpenDisplay", "no default font loaded");
         }
      }
      isdisp = 1;
   }

   // Create a null cursor
   pixmp1 = XCreateBitmapFromData((Display*)fDisplay, fRootWin,
                                  null_cursor_bits, 16, 16);
   pixmp2 = XCreateBitmapFromData((Display*)fDisplay, fRootWin,
                                  null_cursor_bits, 16, 16);
   gNullCursor = XCreatePixmapCursor((Display*)fDisplay,pixmp1,pixmp2,&fore,&back,0,0);

   // Create cursors
   fCursors[kBottomLeft]  = XCreateFontCursor((Display*)fDisplay, XC_bottom_left_corner);
   fCursors[kBottomRight] = XCreateFontCursor((Display*)fDisplay, XC_bottom_right_corner);
   fCursors[kTopLeft]     = XCreateFontCursor((Display*)fDisplay, XC_top_left_corner);
   fCursors[kTopRight]    = XCreateFontCursor((Display*)fDisplay, XC_top_right_corner);
   fCursors[kBottomSide]  = XCreateFontCursor((Display*)fDisplay, XC_bottom_side);
   fCursors[kLeftSide]    = XCreateFontCursor((Display*)fDisplay, XC_left_side);
   fCursors[kTopSide]     = XCreateFontCursor((Display*)fDisplay, XC_top_side);
   fCursors[kRightSide]   = XCreateFontCursor((Display*)fDisplay, XC_right_side);
   fCursors[kMove]        = XCreateFontCursor((Display*)fDisplay, XC_fleur);
   fCursors[kCross]       = XCreateFontCursor((Display*)fDisplay, XC_tcross);
   fCursors[kArrowHor]    = XCreateFontCursor((Display*)fDisplay, XC_sb_h_double_arrow);
   fCursors[kArrowVer]    = XCreateFontCursor((Display*)fDisplay, XC_sb_v_double_arrow);
   fCursors[kHand]        = XCreateFontCursor((Display*)fDisplay, XC_hand2);
   fCursors[kRotate]      = XCreateFontCursor((Display*)fDisplay, XC_exchange);
   fCursors[kPointer]     = XCreateFontCursor((Display*)fDisplay, XC_left_ptr);
   fCursors[kArrowRight]  = XCreateFontCursor((Display*)fDisplay, XC_arrow);
   fCursors[kCaret]       = XCreateFontCursor((Display*)fDisplay, XC_xterm);
   fCursors[kWatch]       = XCreateFontCursor((Display*)fDisplay, XC_watch);
   fCursors[kNoDrop]      = XCreateFontCursor((Display*)fDisplay, XC_pirate);

   // Setup color information
   fRedDiv = fGreenDiv = fBlueDiv = fRedShift = fGreenShift = fBlueShift = -1;

   if (fVisual->c_class == TrueColor) {
      for (i = 0; i < int(sizeof(fVisual->blue_mask)*kBitsPerByte); i++) {
         if (fBlueShift == -1 && ((fVisual->blue_mask >> i) & 1))
            fBlueShift = i;
         if ((fVisual->blue_mask >> i) == 1) {
            fBlueDiv = sizeof(UShort_t)*kBitsPerByte - i - 1 + fBlueShift;
            break;
         }
      }
      for (i = 0; i < int(sizeof(fVisual->green_mask)*kBitsPerByte); i++) {
         if (fGreenShift == -1 && ((fVisual->green_mask >> i) & 1))
            fGreenShift = i;
         if ((fVisual->green_mask >> i) == 1) {
            fGreenDiv = sizeof(UShort_t)*kBitsPerByte - i - 1 + fGreenShift;
            break;
         }
      }
      for (i = 0; i < int(sizeof(fVisual->red_mask)*kBitsPerByte); i++) {
         if (fRedShift == -1 && ((fVisual->red_mask >> i) & 1))
            fRedShift = i;
         if ((fVisual->red_mask >> i) == 1) {
            fRedDiv = sizeof(UShort_t)*kBitsPerByte - i - 1 + fRedShift;
            break;
         }
      }
      //printf("fRedDiv = %d, fGreenDiv = %d, fBlueDiv = %d, fRedShift = %d, fGreenShift = %d, fBlueShift = %d\n",
      //       fRedDiv, fGreenDiv, fBlueDiv, fRedShift, fGreenShift, fBlueShift);
   }

   return 0;
}

//______________________________________________________________________________
Int_t TGX11::OpenPixmap(unsigned int w, unsigned int h)
{
   // Open a new pixmap.
   // w,h : Width and height of the pixmap.

   Window root;
   unsigned int wval, hval;
   int xx, yy, i, wid;
   unsigned int ww, hh, border, depth;
   wval = w;
   hval = h;

   // Select next free window number

again:
   for (wid = 0; wid < fMaxNumberOfWindows; wid++)
      if (!fWindows[wid].fOpen) {
         fWindows[wid].fOpen = 1;
         gCws = &fWindows[wid];
         break;
      }

   if (wid == fMaxNumberOfWindows) {
      int newsize = fMaxNumberOfWindows + 10;
      fWindows = (XWindow_t*) TStorage::ReAlloc(fWindows, newsize*sizeof(XWindow_t),
                                                fMaxNumberOfWindows*sizeof(XWindow_t));
      for (i = fMaxNumberOfWindows; i < newsize; i++)
         fWindows[i].fOpen = 0;
      fMaxNumberOfWindows = newsize;
      goto again;
   }

   gCws->fWindow = XCreatePixmap((Display*)fDisplay, fRootWin, wval, hval, fDepth);
   XGetGeometry((Display*)fDisplay, gCws->fWindow, &root, &xx, &yy, &ww, &hh, &border, &depth);

   for (i = 0; i < kMAXGC; i++)
      XSetClipMask((Display*)fDisplay, gGClist[i], None);

   SetColor(gGCpxmp, 0);
   XFillRectangle((Display*)fDisplay, gCws->fWindow, *gGCpxmp, 0, 0, ww, hh);
   SetColor(gGCpxmp, 1);

   // Initialise the window structure
   gCws->fDrawing       = gCws->fWindow;
   gCws->fBuffer        = 0;
   gCws->fDoubleBuffer  = 0;
   gCws->fIsPixmap      = 1;
   gCws->fClip          = 0;
   gCws->fWidth         = wval;
   gCws->fHeight        = hval;
   gCws->fNewColors     = 0;
   gCws->fShared        = kFALSE;

   return wid;
}

//______________________________________________________________________________
Int_t TGX11::InitWindow(ULong_t win)
{
   // Open window and return window number.
   // Return -1 if window initialization fails.

   XSetWindowAttributes attributes;
   ULong_t attr_mask = 0;
   int wid;
   int xval, yval;
   unsigned int wval, hval, border, depth;
   Window root;

   Window wind = (Window) win;

   XGetGeometry((Display*)fDisplay, wind, &root, &xval, &yval, &wval, &hval, &border, &depth);

   // Select next free window number

again:
   for (wid = 0; wid < fMaxNumberOfWindows; wid++)
      if (!fWindows[wid].fOpen) {
         fWindows[wid].fOpen = 1;
         fWindows[wid].fDoubleBuffer = 0;
         gCws = &fWindows[wid];
         break;
      }

   if (wid == fMaxNumberOfWindows) {
      int newsize = fMaxNumberOfWindows + 10;
      fWindows = (XWindow_t*) TStorage::ReAlloc(fWindows, newsize*sizeof(XWindow_t),
                                                fMaxNumberOfWindows*sizeof(XWindow_t));
      for (int i = fMaxNumberOfWindows; i < newsize; i++)
         fWindows[i].fOpen = 0;
      fMaxNumberOfWindows = newsize;
      goto again;
   }

   // Create window

   attributes.background_pixel = GetColor(0).fPixel;
   attr_mask |= CWBackPixel;
   attributes.border_pixel = GetColor(1).fPixel;
   attr_mask |= CWBorderPixel;
   attributes.event_mask = NoEventMask;
   attr_mask |= CWEventMask;
   attributes.backing_store = Always;
   attr_mask |= CWBackingStore;
   attributes.bit_gravity = NorthWestGravity;
   attr_mask |= CWBitGravity;
   if (fColormap) {
      attributes.colormap = fColormap;
      attr_mask |= CWColormap;
   }

   gCws->fWindow = XCreateWindow((Display*)fDisplay, wind,
                                 xval, yval, wval, hval, 0, fDepth,
                                 InputOutput, fVisual,
                                 attr_mask, &attributes);

   XMapWindow((Display*)fDisplay, gCws->fWindow);
   XFlush((Display*)fDisplay);

   // Initialise the window structure

   gCws->fDrawing      = gCws->fWindow;
   gCws->fBuffer       = 0;
   gCws->fDoubleBuffer = 0;
   gCws->fIsPixmap     = 0;
   gCws->fClip         = 0;
   gCws->fWidth        = wval;
   gCws->fHeight       = hval;
   gCws->fNewColors    = 0;
   gCws->fShared       = kFALSE;

   return wid;
}

//______________________________________________________________________________
Int_t TGX11::AddWindow(ULong_t qwid, UInt_t w, UInt_t h)
{
   // Register a window created by Qt as a ROOT window (like InitWindow()).

   Int_t wid;

   // Select next free window number

again:
   for (wid = 0; wid < fMaxNumberOfWindows; wid++)
      if (!fWindows[wid].fOpen) {
         fWindows[wid].fOpen = 1;
         fWindows[wid].fDoubleBuffer = 0;
         gCws = &fWindows[wid];
         break;
      }

   if (wid == fMaxNumberOfWindows) {
      int newsize = fMaxNumberOfWindows + 10;
      fWindows = (XWindow_t*) TStorage::ReAlloc(fWindows, newsize*sizeof(XWindow_t),
                                                fMaxNumberOfWindows*sizeof(XWindow_t));
      for (int i = fMaxNumberOfWindows; i < newsize; i++)
         fWindows[i].fOpen = 0;
      fMaxNumberOfWindows = newsize;
      goto again;
   }

   gCws->fWindow = qwid;

   //init Xwindow_t struct
   gCws->fDrawing       = gCws->fWindow;
   gCws->fBuffer        = 0;
   gCws->fDoubleBuffer  = 0;
   gCws->fIsPixmap      = 0;
   gCws->fClip          = 0;
   gCws->fWidth         = w;
   gCws->fHeight        = h;
   gCws->fNewColors     = 0;
   gCws->fShared        = kTRUE;

   return wid;
}

//______________________________________________________________________________
void TGX11::RemoveWindow(ULong_t qwid)
{
   // Remove a window created by Qt (like CloseWindow1()).

   SelectWindow((int)qwid);

   if (gCws->fBuffer) XFreePixmap((Display*)fDisplay, gCws->fBuffer);

   if (gCws->fNewColors) {
      if (fRedDiv == -1)
         XFreeColors((Display*)fDisplay, fColormap, gCws->fNewColors, gCws->fNcolors, 0);
      delete [] gCws->fNewColors;
      gCws->fNewColors = 0;
   }

   gCws->fOpen = 0;

   // make first window in list the current window
   for (Int_t wid = 0; wid < fMaxNumberOfWindows; wid++)
      if (fWindows[wid].fOpen) {
         gCws = &fWindows[wid];
         return;
      }

   gCws = 0;
}

//______________________________________________________________________________
void TGX11::QueryPointer(int &ix, int &iy)
{
   // Query pointer position.
   // ix       : X coordinate of pointer
   // iy       : Y coordinate of pointer
   // (both coordinates are relative to the origin of the root window)

   Window    root_return, child_return;
   int       win_x_return, win_y_return;
   int       root_x_return, root_y_return;
   unsigned int mask_return;

   XQueryPointer((Display*)fDisplay,gCws->fWindow, &root_return,
                 &child_return, &root_x_return, &root_y_return, &win_x_return,
                 &win_y_return, &mask_return);

   ix = root_x_return;
   iy = root_y_return;
}

//______________________________________________________________________________
void  TGX11::RemovePixmap(Drawable *pix)
{
   // Remove the pixmap pix.

   XFreePixmap((Display*)fDisplay,*pix);
}

//______________________________________________________________________________
Int_t TGX11::RequestLocator(int mode, int ctyp, int &x, int &y)
{
   // Request Locator position.
   // x,y       : cursor position at moment of button press (output)
   // ctyp      : cursor type (input)
   //   ctyp=1 tracking cross
   //   ctyp=2 cross-hair
   //   ctyp=3 rubber circle
   //   ctyp=4 rubber band
   //   ctyp=5 rubber rectangle
   //
   // mode      : input mode
   //   mode=0 request
   //   mode=1 sample
   //
   // Request locator:
   // return button number  1 = left is pressed
   //                       2 = middle is pressed
   //                       3 = right is pressed
   //        in sample mode:
   //                      11 = left is released
   //                      12 = middle is released
   //                      13 = right is released
   //                      -1 = nothing is pressed or released
   //                      -2 = leave the window
   //                    else = keycode (keyboard is pressed)

   static int xloc  = 0;
   static int yloc  = 0;
   static int xlocp = 0;
   static int ylocp = 0;
   static Cursor cursor = 0;

   XEvent event;
   int button_press;
   int radius;

   // Change the cursor shape
   if (cursor == 0) {
      if (ctyp > 1) {
         XDefineCursor((Display*)fDisplay, gCws->fWindow, gNullCursor);
         XSetForeground((Display*)fDisplay, gGCecho, GetColor(0).fPixel);
      } else {
         cursor = XCreateFontCursor((Display*)fDisplay, XC_crosshair);
         XDefineCursor((Display*)fDisplay, gCws->fWindow, cursor);
      }
   }

   // Event loop

   button_press = 0;

   while (button_press == 0) {

      switch (ctyp) {

         case 1 :
            break;

         case 2 :
            XDrawLine((Display*)fDisplay, gCws->fWindow, gGCecho,
                      xloc, 0, xloc, gCws->fHeight);
            XDrawLine((Display*)fDisplay, gCws->fWindow, gGCecho,
                      0, yloc, gCws->fWidth, yloc);
            break;

         case 3 :
            radius = (int) TMath::Sqrt((double)((xloc-xlocp)*(xloc-xlocp) +
                                       (yloc-ylocp)*(yloc-ylocp)));
            XDrawArc((Display*)fDisplay, gCws->fWindow, gGCecho,
                     xlocp-radius, ylocp-radius,
                     2*radius, 2*radius, 0, 23040);
            break;

         case 4 :
            XDrawLine((Display*)fDisplay, gCws->fWindow, gGCecho,
                      xlocp, ylocp, xloc, yloc);
            break;

         case 5 :
            XDrawRectangle((Display*)fDisplay, gCws->fWindow, gGCecho,
                           TMath::Min(xlocp,xloc), TMath::Min(ylocp,yloc),
                           TMath::Abs(xloc-xlocp), TMath::Abs(yloc-ylocp));
            break;

         default:
            break;
      }

      while (XEventsQueued( (Display*)fDisplay, QueuedAlready) > 1) {
         XNextEvent((Display*)fDisplay, &event);
      }
      XWindowEvent((Display*)fDisplay, gCws->fWindow, gMouseMask, &event);

      switch (ctyp) {

         case 1 :
            break;

         case 2 :
            XDrawLine((Display*)fDisplay, gCws->fWindow, gGCecho,
                      xloc, 0, xloc, gCws->fHeight);
            XDrawLine((Display*)fDisplay, gCws->fWindow, gGCecho,
                      0, yloc, gCws->fWidth, yloc);
            break;

         case 3 :
            radius = (int) TMath::Sqrt((double)((xloc-xlocp)*(xloc-xlocp) +
                                           (yloc-ylocp)*(yloc-ylocp)));
            XDrawArc((Display*)fDisplay, gCws->fWindow, gGCecho,
                     xlocp-radius, ylocp-radius,
                     2*radius, 2*radius, 0, 23040);
            break;

         case 4 :
            XDrawLine((Display*)fDisplay, gCws->fWindow, gGCecho,
                      xlocp, ylocp, xloc, yloc);
            break;

         case 5 :
            XDrawRectangle((Display*)fDisplay, gCws->fWindow, gGCecho,
                           TMath::Min(xlocp,xloc), TMath::Min(ylocp,yloc),
                           TMath::Abs(xloc-xlocp), TMath::Abs(yloc-ylocp));
            break;

         default:
            break;
      }

      xloc = event.xbutton.x;
      yloc = event.xbutton.y;

      switch (event.type) {

         case LeaveNotify :
            if (mode == 0) {
               while (1) {
                  XNextEvent((Display*)fDisplay, &event);
                  if (event.type == EnterNotify) break;
               }
            } else {
               button_press = -2;
            }
            break;

         case ButtonPress :
            button_press = event.xbutton.button ;
            xlocp = event.xbutton.x;
            ylocp = event.xbutton.y;
            XUndefineCursor( (Display*)fDisplay, gCws->fWindow );
            cursor = 0;
            break;

         case ButtonRelease :
            if (mode == 1) {
               button_press = 10+event.xbutton.button ;
               xlocp = event.xbutton.x;
               ylocp = event.xbutton.y;
            }
            break;

         case KeyPress :
            if (mode == 1) {
               button_press = event.xkey.keycode;
               xlocp = event.xbutton.x;
               ylocp = event.xbutton.y;
            }
            break;

         case KeyRelease :
            if (mode == 1) {
               button_press = -event.xkey.keycode;
               xlocp = event.xbutton.x;
               ylocp = event.xbutton.y;
            }
            break;

         default :
            break;
      }

      if (mode == 1) {
         if (button_press == 0)
            button_press = -1;
         break;
      }
   }
   x = event.xbutton.x;
   y = event.xbutton.y;

   return button_press;
}

//______________________________________________________________________________
Int_t TGX11::RequestString(int x, int y, char *text)
{
   // Request a string.
   // x,y         : position where text is displayed
   // text        : text displayed (input), edited text (output)
   //
   // Request string:
   // text is displayed and can be edited with Emacs-like keybinding
   // return termination code (0 for ESC, 1 for RETURN)

   static Cursor cursor = 0;
   static int percent = 0;  // bell volume
   Window focuswindow;
   int focusrevert;
   XEvent event;
   KeySym keysym;
   int key = -1;
   int len_text = strlen(text);
   int nt;         // defined length of text
   int pt;         // cursor position in text

   // change the cursor shape
   if (cursor == 0) {
      XKeyboardState kbstate;
      cursor = XCreateFontCursor((Display*)fDisplay, XC_question_arrow);
      XGetKeyboardControl((Display*)fDisplay, &kbstate);
      percent = kbstate.bell_percent;
   }
   if (cursor != 0)
      XDefineCursor((Display*)fDisplay, gCws->fWindow, cursor);
   for (nt = len_text; nt > 0 && text[nt-1] == ' '; nt--) { }
      pt = nt;
   XGetInputFocus((Display*)fDisplay, &focuswindow, &focusrevert);
   XSetInputFocus((Display*)fDisplay, gCws->fWindow, focusrevert, CurrentTime);
   while (key < 0) {
      char keybuf[8];
      char nbytes;
      int dx;
      int i;
      XDrawImageString((Display*)fDisplay, gCws->fWindow, *gGCtext, x, y, text, nt);
      dx = XTextWidth(gTextFont, text, nt);
      XDrawImageString((Display*)fDisplay, gCws->fWindow, *gGCtext, x + dx, y, " ", 1);
      dx = pt == 0 ? 0 : XTextWidth(gTextFont, text, pt);
      XDrawImageString((Display*)fDisplay, gCws->fWindow, *gGCinvt,
                       x + dx, y, pt < len_text ? &text[pt] : " ", 1);
      XWindowEvent((Display*)fDisplay, gCws->fWindow, gKeybdMask, &event);
      switch (event.type) {
         case ButtonPress:
         case EnterNotify:
            XSetInputFocus((Display*)fDisplay, gCws->fWindow, focusrevert, CurrentTime);
            break;
         case LeaveNotify:
            XSetInputFocus((Display*)fDisplay, focuswindow, focusrevert, CurrentTime);
            break;
         case KeyPress:
            nbytes = XLookupString(&event.xkey, keybuf, sizeof(keybuf),
                                   &keysym, 0);
            switch (keysym) {      // map cursor keys
               case XK_Left:
                  keybuf[0] = '\002';  // Control-B
                  nbytes = 1;
                  break;
               case XK_Right:
                  keybuf[0] = '\006';  // Control-F
                  nbytes = 1;
                  break;
            }
            if (nbytes == 1) {
            if (isascii(keybuf[0]) && isprint(keybuf[0])) {
               // insert character
               if (nt < len_text)
                  nt++;
               for (i = nt - 1; i > pt; i--)
                  text[i] = text[i-1];
               if (pt < len_text) {
                  text[pt] = keybuf[0];
                  pt++;
               }
            } else
               switch (keybuf[0]) {
                  // Emacs-like editing keys

                  case '\010':    // backspace
                  case '\177':    // delete
                     // delete backward
                     if (pt > 0) {
                        for (i = pt; i < nt; i++)
                           text[i-1] = text[i];
                        text[nt-1] = ' ';
                        nt--;
                        pt--;
                     }
                     break;
                  case '\001':    // ^A
                     // beginning of line
                     pt = 0;
                     break;
                  case '\002':    // ^B
                     // move backward
                     if (pt > 0)
                        pt--;
                     break;
                  case '\004':    // ^D
                     // delete forward
                     if (pt > 0) {
                        for (i = pt; i < nt; i++)
                           text[i-1] = text[i];
                        text[nt-1] = ' ';
                        pt--;
                     }
                     break;
                  case '\005':    // ^E
                     // end of line
                     pt = nt;
                     break;

                  case '\006':    // ^F
                     // move forward
                     if (pt < nt)
                        pt++;
                     break;
                  case '\013':    // ^K
                     // delete to end of line
                     for (i = pt; i < nt; i++)
                        text[i] = ' ';
                     nt = pt;
                     break;
                  case '\024':    // ^T
                     // transpose
                     if (pt > 0) {
                        char c = text[pt];
                        text[pt] = text[pt-1];
                        text[pt-1] = c;
                     }
                     break;
                  case '\012':    // newline
                  case '\015':    // return
                     key = 1;
                     break;
                  case '\033':    // escape
                     key = 0;
                     break;

                  default:
                     XBell((Display*)fDisplay, percent);
               }
            }
      }
   }
   XSetInputFocus((Display*)fDisplay, focuswindow, focusrevert, CurrentTime);

   if (cursor != 0) {
      XUndefineCursor((Display*)fDisplay, gCws->fWindow);
      cursor = 0;
   }

   return key;
}

//______________________________________________________________________________
void TGX11::RescaleWindow(int wid, unsigned int w, unsigned int h)
{
   // Rescale the window wid.
   // wid  : Window identifier
   // w    : Width
   // h    : Heigth

   int i;

   gTws = &fWindows[wid];
   if (!gTws->fOpen) return;

   // don't do anything when size did not change
   if (gTws->fWidth == w && gTws->fHeight == h) return;

   XResizeWindow((Display*)fDisplay, gTws->fWindow, w, h);

   if (gTws->fBuffer) {
      // don't free and recreate pixmap when new pixmap is smaller
      if (gTws->fWidth < w || gTws->fHeight < h) {
         XFreePixmap((Display*)fDisplay,gTws->fBuffer);
         gTws->fBuffer = XCreatePixmap((Display*)fDisplay, fRootWin, w, h, fDepth);
      }
      for (i = 0; i < kMAXGC; i++) XSetClipMask((Display*)fDisplay, gGClist[i], None);
      SetColor(gGCpxmp, 0);
      XFillRectangle( (Display*)fDisplay, gTws->fBuffer, *gGCpxmp, 0, 0, w, h);
      SetColor(gGCpxmp, 1);
      if (gTws->fDoubleBuffer) gTws->fDrawing = gTws->fBuffer;
   }
   gTws->fWidth  = w;
   gTws->fHeight = h;
}

//______________________________________________________________________________
int TGX11::ResizePixmap(int wid, unsigned int w, unsigned int h)
{
   // Resize a pixmap.
   // wid : pixmap to be resized
   // w,h : Width and height of the pixmap

   Window root;
   unsigned int wval, hval;
   int xx, yy, i;
   unsigned int ww, hh, border, depth;
   wval = w;
   hval = h;

   gTws = &fWindows[wid];

   // don't do anything when size did not change
   //  if (gTws->fWidth == wval && gTws->fHeight == hval) return 0;

   // due to round-off errors in TPad::Resize() we might get +/- 1 pixel
   // change, in those cases don't resize pixmap
   if (gTws->fWidth  >= wval-1 && gTws->fWidth  <= wval+1 &&
       gTws->fHeight >= hval-1 && gTws->fHeight <= hval+1) return 0;

   // don't free and recreate pixmap when new pixmap is smaller
   if (gTws->fWidth < wval || gTws->fHeight < hval) {
      XFreePixmap((Display*)fDisplay, gTws->fWindow);
      gTws->fWindow = XCreatePixmap((Display*)fDisplay, fRootWin, wval, hval, fDepth);
   }
   XGetGeometry((Display*)fDisplay, gTws->fWindow, &root, &xx, &yy, &ww, &hh, &border, &depth);

   for (i = 0; i < kMAXGC; i++)
      XSetClipMask((Display*)fDisplay, gGClist[i], None);

   SetColor(gGCpxmp, 0);
   XFillRectangle((Display*)fDisplay, gTws->fWindow, *gGCpxmp, 0, 0, ww, hh);
   SetColor(gGCpxmp, 1);

   // Initialise the window structure
   gTws->fDrawing = gTws->fWindow;
   gTws->fWidth   = wval;
   gTws->fHeight  = hval;

   return 1;
}

//______________________________________________________________________________
void TGX11::ResizeWindow(int wid)
{
   // Resize the current window if necessary.

   int i;
   int xval=0, yval=0;
   Window win, root=0;
   unsigned int wval=0, hval=0, border=0, depth=0;

   gTws = &fWindows[wid];

   win = gTws->fWindow;

   XGetGeometry((Display*)fDisplay, win, &root,
                &xval, &yval, &wval, &hval, &border, &depth);
   if (wval >= 65500) wval = 1;
   if (hval >= 65500) hval = 1;

   // don't do anything when size did not change
   if (gTws->fWidth == wval && gTws->fHeight == hval) return;

   XResizeWindow((Display*)fDisplay, gTws->fWindow, wval, hval);

   if (gTws->fBuffer) {
      if (gTws->fWidth < wval || gTws->fHeight < hval) {
         XFreePixmap((Display*)fDisplay,gTws->fBuffer);
         gTws->fBuffer = XCreatePixmap((Display*)fDisplay, fRootWin, wval, hval, fDepth);
      }
      for (i = 0; i < kMAXGC; i++) XSetClipMask((Display*)fDisplay, gGClist[i], None);
      SetColor(gGCpxmp, 0);
      XFillRectangle((Display*)fDisplay, gTws->fBuffer, *gGCpxmp, 0, 0, wval, hval);
      SetColor(gGCpxmp, 1);
      if (gTws->fDoubleBuffer) gTws->fDrawing = gTws->fBuffer;
   }
   gTws->fWidth  = wval;
   gTws->fHeight = hval;
}

//______________________________________________________________________________
void TGX11::SelectWindow(int wid)
{
   // Select window to which subsequent output is directed.

   XRectangle region;
   int i;

   if (wid < 0 || wid >= fMaxNumberOfWindows || !fWindows[wid].fOpen) return;

   gCws = &fWindows[wid];

   if (gCws->fClip && !gCws->fIsPixmap && !gCws->fDoubleBuffer) {
      region.x      = gCws->fXclip;
      region.y      = gCws->fYclip;
      region.width  = gCws->fWclip;
      region.height = gCws->fHclip;
      for (i = 0; i < kMAXGC; i++)
         XSetClipRectangles((Display*)fDisplay, gGClist[i], 0, 0, &region, 1, YXBanded);
   } else {
      for (i = 0; i < kMAXGC; i++)
         XSetClipMask((Display*)fDisplay, gGClist[i], None);
   }
}

//______________________________________________________________________________
void TGX11::SetCharacterUp(Float_t chupx, Float_t chupy)
{
   // Set character up vector.

   if (chupx == fCharacterUpX  && chupy == fCharacterUpY) return;

   if      (chupx == 0  && chupy == 0)  fTextAngle = 0;
   else if (chupx == 0  && chupy == 1)  fTextAngle = 0;
   else if (chupx == -1 && chupy == 0)  fTextAngle = 90;
   else if (chupx == 0  && chupy == -1) fTextAngle = 180;
   else if (chupx == 1  && chupy ==  0) fTextAngle = 270;
   else {
      fTextAngle = ((TMath::ACos(chupx/TMath::Sqrt(chupx*chupx +chupy*chupy))*180.)/TMath::Pi())-90;
      if (chupy < 0) fTextAngle = 180 - fTextAngle;
      if (TMath::Abs(fTextAngle) <= 0.01) fTextAngle = 0;
   }
   fCharacterUpX = chupx;
   fCharacterUpY = chupy;
}

//______________________________________________________________________________
void TGX11::SetClipOFF(int wid)
{
   // Turn off the clipping for the window wid.

   gTws       = &fWindows[wid];
   gTws->fClip = 0;

   for (int i = 0; i < kMAXGC; i++)
      XSetClipMask( (Display*)fDisplay, gGClist[i], None );
}

//______________________________________________________________________________
void TGX11::SetClipRegion(int wid, int x, int y, unsigned int w, unsigned int h)
{
   // Set clipping region for the window wid.
   // wid        : Window indentifier
   // x,y        : origin of clipping rectangle
   // w,h        : size of clipping rectangle;


   gTws = &fWindows[wid];
   gTws->fXclip = x;
   gTws->fYclip = y;
   gTws->fWclip = w;
   gTws->fHclip = h;
   gTws->fClip  = 1;
   if (gTws->fClip && !gTws->fIsPixmap && !gTws->fDoubleBuffer) {
      XRectangle region;
      region.x      = gTws->fXclip;
      region.y      = gTws->fYclip;
      region.width  = gTws->fWclip;
      region.height = gTws->fHclip;
      for (int i = 0; i < kMAXGC; i++)
         XSetClipRectangles((Display*)fDisplay, gGClist[i], 0, 0, &region, 1, YXBanded);
   }
}

//______________________________________________________________________________
void  TGX11::SetColor(void *gci, int ci)
{
   // Set the foreground color in GC.

   GC gc = *(GC *)gci;

   TColor *color = gROOT->GetColor(ci);
   if (color)
      SetRGB(ci, color->GetRed(), color->GetGreen(), color->GetBlue());

   XColor_t &col = GetColor(ci);
   if (fColormap && !col.fDefined) {
      col = GetColor(0);
   } else if (!fColormap && (ci < 0 || ci > 1)) {
      col = GetColor(0);
   }

   if (fDrawMode == kXor) {
      XGCValues values;
      XGetGCValues((Display*)fDisplay, gc, GCBackground, &values);
      XSetForeground((Display*)fDisplay, gc, col.fPixel ^ values.background);
   } else {
      XSetForeground((Display*)fDisplay, gc, col.fPixel);

      // make sure that foreground and background are different
      XGCValues values;
      XGetGCValues((Display*)fDisplay, gc, GCForeground | GCBackground, &values);
      if (values.foreground == values.background)
         XSetBackground((Display*)fDisplay, gc, GetColor(!ci).fPixel);
   }
}

//______________________________________________________________________________
void  TGX11::SetCursor(int wid, ECursor cursor)
{
   // Set the cursor.

   gTws = &fWindows[wid];
   XDefineCursor((Display*)fDisplay, gTws->fWindow, fCursors[cursor]);
}

//______________________________________________________________________________
void TGX11::SetDoubleBuffer(int wid, int mode)
{
   // Set the double buffer on/off on window wid.
   // wid  : Window identifier.
   //        999 means all the opened windows.
   // mode : 1 double buffer is on
   //        0 double buffer is off

   if (wid == 999) {
      for (int i = 0; i < fMaxNumberOfWindows; i++) {
         gTws = &fWindows[i];
         if (gTws->fOpen) {
            switch (mode) {
               case 1 :
                  SetDoubleBufferON();
                  break;
               default:
                  SetDoubleBufferOFF();
                  break;
            }
         }
      }
   } else {
      gTws = &fWindows[wid];
      if (!gTws->fOpen) return;
      switch (mode) {
         case 1 :
            SetDoubleBufferON();
            return;
         default:
            SetDoubleBufferOFF();
            return;
      }
   }
}

//______________________________________________________________________________
void TGX11::SetDoubleBufferOFF()
{
   // Turn double buffer mode off.

   if (!gTws->fDoubleBuffer) return;
   gTws->fDoubleBuffer = 0;
   gTws->fDrawing      = gTws->fWindow;
}

//______________________________________________________________________________
void TGX11::SetDoubleBufferON()
{
   // Turn double buffer mode on.

   if (gTws->fDoubleBuffer || gTws->fIsPixmap) return;
   if (!gTws->fBuffer) {
      gTws->fBuffer = XCreatePixmap((Display*)fDisplay, fRootWin,
                                   gTws->fWidth, gTws->fHeight, fDepth);
      SetColor(gGCpxmp, 0);
      XFillRectangle((Display*)fDisplay, gTws->fBuffer, *gGCpxmp, 0, 0, gTws->fWidth, gTws->fHeight);
      SetColor(gGCpxmp, 1);
   }
   for (int i = 0; i < kMAXGC; i++) XSetClipMask((Display*)fDisplay, gGClist[i], None);
   gTws->fDoubleBuffer  = 1;
   gTws->fDrawing       = gTws->fBuffer;
}

//______________________________________________________________________________
void TGX11::SetDrawMode(EDrawMode mode)
{
   // Set the drawing mode.
   // mode : drawing mode
   //   mode=1 copy
   //   mode=2 xor
   //   mode=3 invert
   //   mode=4 set the suitable mode for cursor echo according to
   //          the vendor

   int i;
   if (fDisplay) {
      switch (mode) {
         case kCopy:
            for (i = 0; i < kMAXGC; i++) XSetFunction((Display*)fDisplay, gGClist[i], GXcopy);
            break;

         case kXor:
            for (i = 0; i < kMAXGC; i++) XSetFunction((Display*)fDisplay, gGClist[i], GXxor);
            break;

         case kInvert:
            for (i = 0; i < kMAXGC; i++) XSetFunction((Display*)fDisplay, gGClist[i], GXinvert);
            break;
      }
   }
   fDrawMode = mode;
}

//______________________________________________________________________________
void TGX11::SetFillColor(Color_t cindex)
{
   // Set color index for fill areas.

   if (!gStyle->GetFillColor() && cindex > 1) cindex = 0;
   if (cindex >= 0) SetColor(gGCfill, Int_t(cindex));
   fFillColor = cindex;

   // invalidate fill pattern
   if (gFillPattern != 0) {
      XFreePixmap((Display*)fDisplay, gFillPattern);
      gFillPattern = 0;
   }
}

//______________________________________________________________________________
void TGX11::SetFillStyle(Style_t fstyle)
{
   // Set fill area style.
   // fstyle   : compound fill area interior style
   //    fstyle = 1000*interiorstyle + styleindex

   if (fFillStyle == fstyle) return;
   fFillStyle = fstyle;
   Int_t style = fstyle/1000;
   Int_t fasi  = fstyle%1000;
   SetFillStyleIndex(style,fasi);
}

//______________________________________________________________________________
void TGX11::SetFillStyleIndex(Int_t style, Int_t fasi)
{
   // Set fill area style index.

   static int current_fasi = 0;

   fFillStyle = 1000*style + fasi;

   switch (style) {

      case 1:         // solid
         gFillHollow = 0;
         XSetFillStyle((Display*)fDisplay, *gGCfill, FillSolid);
         break;

      case 2:         // pattern
         gFillHollow = 1;
         break;

      case 3:         // hatch
         gFillHollow = 0;
         XSetFillStyle((Display*)fDisplay, *gGCfill, FillStippled);
         if (fasi != current_fasi) {
            if (gFillPattern != 0) {
               XFreePixmap((Display*)fDisplay, gFillPattern);
               gFillPattern = 0;
            }
            int stn = (fasi >= 1 && fasi <=25) ? fasi : 2;

            gFillPattern = XCreateBitmapFromData((Display*)fDisplay, fRootWin,
                                                 (const char*)gStipples[stn], 16, 16);

            XSetStipple( (Display*)fDisplay, *gGCfill, gFillPattern );
            current_fasi = fasi;
         }
         break;

      default:
         gFillHollow = 1;
   }
}

//______________________________________________________________________________
void TGX11::SetInput(int inp)
{
   // Set input on or off.

   XSetWindowAttributes attributes;
   ULong_t attr_mask;

   if (inp == 1) {
      attributes.event_mask = gMouseMask | gKeybdMask;
      attr_mask = CWEventMask;
      XChangeWindowAttributes((Display*)fDisplay, gCws->fWindow, attr_mask, &attributes);
   } else {
      attributes.event_mask = NoEventMask;
      attr_mask = CWEventMask;
      XChangeWindowAttributes((Display*)fDisplay, gCws->fWindow, attr_mask, &attributes);
   }
}

//______________________________________________________________________________
void TGX11::SetLineColor(Color_t cindex)
{
   // Set color index for lines.

   if (cindex < 0) return;

   TAttLine::SetLineColor(cindex);

   SetColor(gGCline, Int_t(cindex));
   SetColor(gGCdash, Int_t(cindex));
}

//______________________________________________________________________________
void TGX11::SetLineType(int n, int *dash)
{
   // Set line type.
   // n         : length of dash list
   // dash(n)   : dash segment lengths
   //
   // if n <= 0 use solid lines
   // if n >  0 use dashed lines described by DASH(N)
   //    e.g. N=4,DASH=(6,3,1,3) gives a dashed-dotted line with dash length 6
   //    and a gap of 7 between dashes

   if (n <= 0) {
      gLineStyle = LineSolid;
      XSetLineAttributes((Display*)fDisplay, *gGCline, gLineWidth,
                         gLineStyle, gCapStyle, gJoinStyle);
   } else {
      gDashSize = TMath::Min((int)sizeof(gDashList),n);
      gDashLength = 0;
      for (int i = 0; i < gDashSize; i++ ) {
         gDashList[i] = dash[i];
         gDashLength += gDashList[i];
      }
      gDashOffset = 0;
      gLineStyle = LineOnOffDash;
      XSetLineAttributes((Display*)fDisplay, *gGCline, gLineWidth,
                         gLineStyle, gCapStyle, gJoinStyle);
      XSetLineAttributes((Display*)fDisplay, *gGCdash, gLineWidth,
                         gLineStyle, gCapStyle, gJoinStyle);
   }
}

//______________________________________________________________________________
void TGX11::SetLineStyle(Style_t lstyle)
{
   // Set line style.

   static Int_t dashed[2] = {3,3};
   static Int_t dotted[2] = {1,2};
   static Int_t dasheddotted[4] = {3,4,1,4};

   if (fLineStyle != lstyle) { //set style index only if different
      fLineStyle = lstyle;
      if (lstyle <= 1 ) {
         SetLineType(0,0);
      } else if (lstyle == 2 ) {
         SetLineType(2,dashed);
      } else if (lstyle == 3 ) {
         SetLineType(2,dotted);
      } else if (lstyle == 4 ) {
         SetLineType(4,dasheddotted);
      } else {
         TString st = (TString)gStyle->GetLineStyleString(lstyle);
         TObjArray *tokens = st.Tokenize(" ");
         Int_t nt;
         nt = tokens->GetEntries();
         Int_t *linestyle = new Int_t[nt];
         for (Int_t j = 0; j<nt; j++) {
            Int_t it;
            sscanf(((TObjString*)tokens->At(j))->GetName(), "%d", &it);
            linestyle[j] = (Int_t)(it/4);
         }
         SetLineType(nt,linestyle);
         delete [] linestyle;
         delete tokens;
      }
   }
}

//______________________________________________________________________________
void TGX11::SetLineWidth(Width_t width )
{
   // Set line width.
   // width   : line width in pixels

   if (fLineWidth == width) return;
   fLineWidth = width;

   if (width == 1) gLineWidth = 0;
   else            gLineWidth = width;

   if (gLineWidth < 0) return;

   XSetLineAttributes((Display*)fDisplay, *gGCline, gLineWidth,
                      gLineStyle, gCapStyle, gJoinStyle);
   XSetLineAttributes((Display*)fDisplay, *gGCdash, gLineWidth,
              gLineStyle, gCapStyle, gJoinStyle);
}

//______________________________________________________________________________
void TGX11::SetMarkerColor(Color_t cindex)
{
   // Set color index for markers.

   if (cindex < 0) return;

   TAttMarker::SetMarkerColor(cindex);

   SetColor(gGCmark, Int_t(cindex));
}

//______________________________________________________________________________
void TGX11::SetMarkerSize(Float_t msize)
{
   // Set marker size index.
   // msize  : marker scale factor

   if (msize == fMarkerSize) return;

   fMarkerSize = msize;
   if (msize < 0) return;

   SetMarkerStyle(-fMarkerStyle);
}

//______________________________________________________________________________
void TGX11::SetMarkerType(int type, int n, RXPoint *xy)
{
   // Set marker type.
   // type      : marker type
   // n         : length of marker description
   // xy        : list of points describing marker shape
   //
   // if n == 0 marker is a single point
   // if TYPE == 0 marker is hollow circle of diameter N
   // if TYPE == 1 marker is filled circle of diameter N
   // if TYPE == 2 marker is a hollow polygon describe by line XY
   // if TYPE == 3 marker is a filled polygon describe by line XY
   // if TYPE == 4 marker is described by segmented line XY
   //   e.g. TYPE=4,N=4,XY=(-3,0,3,0,0,-3,0,3) sets a plus shape of 7x7 pixels

   gMarker.type = type;
   gMarker.n = n < kMAXMK ? n : kMAXMK;
   if (gMarker.type >= 2) {
      for (int i = 0; i < gMarker.n; i++) {
         gMarker.xy[i].x = xy[i].x;
         gMarker.xy[i].y = xy[i].y;
      }
   }
}

//______________________________________________________________________________
void TGX11::SetMarkerStyle(Style_t markerstyle)
{
   // Set marker style.

   if (fMarkerStyle == markerstyle) return;
   static RXPoint shape[15];
   if (markerstyle >= 35) return;
   markerstyle  = TMath::Abs(markerstyle);
   fMarkerStyle = markerstyle;
   Int_t im = Int_t(4*fMarkerSize + 0.5);
   if (markerstyle == 2) {
      // + shaped marker
      shape[0].x = -im;  shape[0].y = 0;
      shape[1].x =  im;  shape[1].y = 0;
      shape[2].x = 0  ;  shape[2].y = -im;
      shape[3].x = 0  ;  shape[3].y = im;
      SetMarkerType(4,4,shape);
   } else if (markerstyle == 3 || markerstyle == 31) {
      // * shaped marker
      shape[0].x = -im;  shape[0].y = 0;
      shape[1].x =  im;  shape[1].y = 0;
      shape[2].x = 0  ;  shape[2].y = -im;
      shape[3].x = 0  ;  shape[3].y = im;
      im = Int_t(0.707*Float_t(im) + 0.5);
      shape[4].x = -im;  shape[4].y = -im;
      shape[5].x =  im;  shape[5].y = im;
      shape[6].x = -im;  shape[6].y = im;
      shape[7].x =  im;  shape[7].y = -im;
      SetMarkerType(4,8,shape);
   } else if (markerstyle == 4 || markerstyle == 24) {
      // O shaped marker
      SetMarkerType(0,im*2,shape);
   } else if (markerstyle == 5) {
      // X shaped marker
      im = Int_t(0.707*Float_t(im) + 0.5);
      shape[0].x = -im;  shape[0].y = -im;
      shape[1].x =  im;  shape[1].y = im;
      shape[2].x = -im;  shape[2].y = im;
      shape[3].x =  im;  shape[3].y = -im;
      SetMarkerType(4,4,shape);
   } else if (markerstyle == 6) {
      // + shaped marker (with 1 pixel)
      shape[0].x = -1 ;  shape[0].y = 0;
      shape[1].x =  1 ;  shape[1].y = 0;
      shape[2].x =  0 ;  shape[2].y = -1;
      shape[3].x =  0 ;  shape[3].y = 1;
      SetMarkerType(4,4,shape);
   } else if (markerstyle == 7) {
      // . shaped marker (with 9 pixel)
      shape[0].x = -1 ;  shape[0].y = 1;
      shape[1].x =  1 ;  shape[1].y = 1;
      shape[2].x = -1 ;  shape[2].y = 0;
      shape[3].x =  1 ;  shape[3].y = 0;
      shape[4].x = -1 ;  shape[4].y = -1;
      shape[5].x =  1 ;  shape[5].y = -1;
      SetMarkerType(4,6,shape);
   } else if (markerstyle == 8 || markerstyle == 20) {
      // O shaped marker (filled)
      SetMarkerType(1,im*2,shape);
   } else if (markerstyle == 21) {
      // full square
      shape[0].x = -im;  shape[0].y = -im;
      shape[1].x =  im;  shape[1].y = -im;
      shape[2].x =  im;  shape[2].y = im;
      shape[3].x = -im;  shape[3].y = im;
      shape[4].x = -im;  shape[4].y = -im;
      SetMarkerType(3,5,shape);
   } else if (markerstyle == 22) {
      // full triangle up
      shape[0].x = -im;  shape[0].y = im;
      shape[1].x =  im;  shape[1].y = im;
      shape[2].x =   0;  shape[2].y = -im;
      shape[3].x = -im;  shape[3].y = im;
      SetMarkerType(3,4,shape);
   } else if (markerstyle == 23) {
      // full triangle down
      shape[0].x =   0;  shape[0].y = im;
      shape[1].x =  im;  shape[1].y = -im;
      shape[2].x = -im;  shape[2].y = -im;
      shape[3].x =   0;  shape[3].y = im;
      SetMarkerType(3,4,shape);
   } else if (markerstyle == 25) {
      // open square
      shape[0].x = -im;  shape[0].y = -im;
      shape[1].x =  im;  shape[1].y = -im;
      shape[2].x =  im;  shape[2].y = im;
      shape[3].x = -im;  shape[3].y = im;
      shape[4].x = -im;  shape[4].y = -im;
      SetMarkerType(2,5,shape);
   } else if (markerstyle == 26) {
      // open triangle up
      shape[0].x = -im;  shape[0].y = im;
      shape[1].x =  im;  shape[1].y = im;
      shape[2].x =   0;  shape[2].y = -im;
      shape[3].x = -im;  shape[3].y = im;
      SetMarkerType(2,4,shape);
   } else if (markerstyle == 27) {
      // open losange
      Int_t imx = Int_t(2.66*fMarkerSize + 0.5);
      shape[0].x =-imx;  shape[0].y = 0;
      shape[1].x =   0;  shape[1].y = -im;
      shape[2].x = imx;  shape[2].y = 0;
      shape[3].x =   0;  shape[3].y = im;
      shape[4].x =-imx;  shape[4].y = 0;
      SetMarkerType(2,5,shape);
   } else if (markerstyle == 28) {
      // open cross
      Int_t imx = Int_t(1.33*fMarkerSize + 0.5);
      shape[0].x = -im;  shape[0].y =-imx;
      shape[1].x =-imx;  shape[1].y =-imx;
      shape[2].x =-imx;  shape[2].y = -im;
      shape[3].x = imx;  shape[3].y = -im;
      shape[4].x = imx;  shape[4].y =-imx;
      shape[5].x =  im;  shape[5].y =-imx;
      shape[6].x =  im;  shape[6].y = imx;
      shape[7].x = imx;  shape[7].y = imx;
      shape[8].x = imx;  shape[8].y = im;
      shape[9].x =-imx;  shape[9].y = im;
      shape[10].x=-imx;  shape[10].y= imx;
      shape[11].x= -im;  shape[11].y= imx;
      shape[12].x= -im;  shape[12].y=-imx;
      SetMarkerType(2,13,shape);
   } else if (markerstyle == 29) {
      // full star pentagone
      Int_t im1 = Int_t(0.66*fMarkerSize + 0.5);
      Int_t im2 = Int_t(2.00*fMarkerSize + 0.5);
      Int_t im3 = Int_t(2.66*fMarkerSize + 0.5);
      Int_t im4 = Int_t(1.33*fMarkerSize + 0.5);
      shape[0].x = -im;  shape[0].y = im4;
      shape[1].x =-im2;  shape[1].y =-im1;
      shape[2].x =-im3;  shape[2].y = -im;
      shape[3].x =   0;  shape[3].y =-im2;
      shape[4].x = im3;  shape[4].y = -im;
      shape[5].x = im2;  shape[5].y =-im1;
      shape[6].x =  im;  shape[6].y = im4;
      shape[7].x = im4;  shape[7].y = im4;
      shape[8].x =   0;  shape[8].y = im;
      shape[9].x =-im4;  shape[9].y = im4;
      shape[10].x= -im;  shape[10].y= im4;
      SetMarkerType(3,11,shape);
   } else if (markerstyle == 30) {
      // open star pentagone
      Int_t im1 = Int_t(0.66*fMarkerSize + 0.5);
      Int_t im2 = Int_t(2.00*fMarkerSize + 0.5);
      Int_t im3 = Int_t(2.66*fMarkerSize + 0.5);
      Int_t im4 = Int_t(1.33*fMarkerSize + 0.5);
      shape[0].x = -im;  shape[0].y = im4;
      shape[1].x =-im2;  shape[1].y =-im1;
      shape[2].x =-im3;  shape[2].y = -im;
      shape[3].x =   0;  shape[3].y =-im2;
      shape[4].x = im3;  shape[4].y = -im;
      shape[5].x = im2;  shape[5].y =-im1;
      shape[6].x =  im;  shape[6].y = im4;
      shape[7].x = im4;  shape[7].y = im4;
      shape[8].x =   0;  shape[8].y = im;
      shape[9].x =-im4;  shape[9].y = im4;
      shape[10].x= -im;  shape[10].y= im4;
      SetMarkerType(2,11,shape);
   } else if (markerstyle == 32) {
      // open triangle down
      shape[0].x =   0;  shape[0].y = im;
      shape[1].x =  im;  shape[1].y = -im;
      shape[2].x = -im;  shape[2].y = -im;
      shape[3].x =   0;  shape[3].y = im;
      SetMarkerType(2,4,shape);
   } else if (markerstyle == 33) {
      // full losange
      Int_t imx = Int_t(2.66*fMarkerSize + 0.5);
      shape[0].x =-imx;  shape[0].y = 0;
      shape[1].x =   0;  shape[1].y = -im;
      shape[2].x = imx;  shape[2].y = 0;
      shape[3].x =   0;  shape[3].y = im;
      shape[4].x =-imx;  shape[4].y = 0;
      SetMarkerType(3,5,shape);
   } else if (markerstyle == 34) {
      // full cross
      Int_t imx = Int_t(1.33*fMarkerSize + 0.5);
      shape[0].x = -im;  shape[0].y =-imx;
      shape[1].x =-imx;  shape[1].y =-imx;
      shape[2].x =-imx;  shape[2].y = -im;
      shape[3].x = imx;  shape[3].y = -im;
      shape[4].x = imx;  shape[4].y =-imx;
      shape[5].x =  im;  shape[5].y =-imx;
      shape[6].x =  im;  shape[6].y = imx;
      shape[7].x = imx;  shape[7].y = imx;
      shape[8].x = imx;  shape[8].y = im;
      shape[9].x =-imx;  shape[9].y = im;
      shape[10].x=-imx;  shape[10].y= imx;
      shape[11].x= -im;  shape[11].y= imx;
      shape[12].x= -im;  shape[12].y=-imx;
      SetMarkerType(3,13,shape);
   } else {
      // single dot
      SetMarkerType(0,0,shape);
   }
}

//______________________________________________________________________________
void TGX11::SetOpacity(Int_t percent)
{
   // Set opacity of a window. This image manipulation routine works
   // by adding to a percent amount of neutral to each pixels RGB.
   // Since it requires quite some additional color map entries is it
   // only supported on displays with more than > 8 color planes (> 256
   // colors).

   if (fDepth <= 8) return;
   if (percent == 0) return;
   // if 100 percent then just make white

   ULong_t *orgcolors = 0, *tmpc = 0;
   Int_t    maxcolors = 0, ncolors = 0, ntmpc = 0;

   // save previous allocated colors, delete at end when not used anymore
   if (gCws->fNewColors) {
      tmpc = gCws->fNewColors;
      ntmpc = gCws->fNcolors;
   }

   // get pixmap from server as image
   XImage *image = XGetImage((Display*)fDisplay, gCws->fDrawing, 0, 0, gCws->fWidth,
                             gCws->fHeight, AllPlanes, ZPixmap);
   if (!image) return;
   // collect different image colors
   int x, y;
   for (y = 0; y < (int) gCws->fHeight; y++) {
      for (x = 0; x < (int) gCws->fWidth; x++) {
         ULong_t pixel = XGetPixel(image, x, y);
         CollectImageColors(pixel, orgcolors, ncolors, maxcolors);
      }
   }
   if (ncolors == 0) {
      XDestroyImage(image);
      ::operator delete(orgcolors);
      return;
   }

   // create opaque counter parts
   MakeOpaqueColors(percent, orgcolors, ncolors);

   // put opaque colors in image
   for (y = 0; y < (int) gCws->fHeight; y++) {
      for (x = 0; x < (int) gCws->fWidth; x++) {
         ULong_t pixel = XGetPixel(image, x, y);
         Int_t idx = FindColor(pixel, orgcolors, ncolors);
         XPutPixel(image, x, y, gCws->fNewColors[idx]);
      }
   }

   // put image back in pixmap on server
   XPutImage((Display*)fDisplay, gCws->fDrawing, *gGCpxmp, image, 0, 0, 0, 0,
             gCws->fWidth, gCws->fHeight);
   XFlush((Display*)fDisplay);

   // clean up
   if (tmpc) {
      if (fRedDiv == -1)
         XFreeColors((Display*)fDisplay, fColormap, tmpc, ntmpc, 0);
      delete [] tmpc;
   }
   XDestroyImage(image);
   ::operator delete(orgcolors);
}

//______________________________________________________________________________
void TGX11::CollectImageColors(ULong_t pixel, ULong_t *&orgcolors, Int_t &ncolors,
                               Int_t &maxcolors)
{
   // Collect in orgcolors all different original image colors.

   if (maxcolors == 0) {
      ncolors   = 0;
      maxcolors = 100;
      orgcolors = (ULong_t*) ::operator new(maxcolors*sizeof(ULong_t));
   }

   for (int i = 0; i < ncolors; i++)
      if (pixel == orgcolors[i]) return;

   if (ncolors >= maxcolors) {
      orgcolors = (ULong_t*) TStorage::ReAlloc(orgcolors,
          maxcolors*2*sizeof(ULong_t), maxcolors*sizeof(ULong_t));
      maxcolors *= 2;
   }

   orgcolors[ncolors++] = pixel;
}

//______________________________________________________________________________
void TGX11::MakeOpaqueColors(Int_t percent, ULong_t *orgcolors, Int_t ncolors)
{
   // Get RGB values for orgcolors, add percent neutral to the RGB and
   // allocate fNewColors.

   if (ncolors == 0) return;

   RXColor *xcol = new RXColor[ncolors];

   int i;
   for (i = 0; i < ncolors; i++) {
      xcol[i].pixel = orgcolors[i];
      xcol[i].red   = xcol[i].green = xcol[i].blue = 0;
      xcol[i].flags = DoRed | DoGreen | DoBlue;
   }
   QueryColors(fColormap, xcol, ncolors);

   UShort_t add = percent * kBIGGEST_RGB_VALUE / 100;

   Int_t val;
   for (i = 0; i < ncolors; i++) {
      val = xcol[i].red + add;
      if (val > kBIGGEST_RGB_VALUE) val = kBIGGEST_RGB_VALUE;
      xcol[i].red = (UShort_t) val;
      val = xcol[i].green + add;
      if (val > kBIGGEST_RGB_VALUE) val = kBIGGEST_RGB_VALUE;
      xcol[i].green = (UShort_t) val;
      val = xcol[i].blue + add;
      if (val > kBIGGEST_RGB_VALUE) val = kBIGGEST_RGB_VALUE;
      xcol[i].blue = (UShort_t) val;
      if (!AllocColor(fColormap, &xcol[i]))
         Warning("MakeOpaqueColors", "failed to allocate color %hd, %hd, %hd",
                 xcol[i].red, xcol[i].green, xcol[i].blue);
      // assumes that in case of failure xcol[i].pixel is not changed
   }

   gCws->fNewColors = new ULong_t[ncolors];
   gCws->fNcolors   = ncolors;

   for (i = 0; i < ncolors; i++)
      gCws->fNewColors[i] = xcol[i].pixel;

   delete [] xcol;
}

//______________________________________________________________________________
Int_t TGX11::FindColor(ULong_t pixel, ULong_t *orgcolors, Int_t ncolors)
{
   // Returns index in orgcolors (and fNewColors) for pixel.

   for (int i = 0; i < ncolors; i++)
      if (pixel == orgcolors[i]) return i;

   Error("FindColor", "did not find color, should never happen!");

   return 0;
}

//______________________________________________________________________________
void TGX11::SetRGB(int cindex, float r, float g, float b)
{
   // Set color intensities for given color index.
   // cindex     : color index
   // r,g,b      : red, green, blue intensities between 0.0 and 1.0

   if (fColormap) {
      RXColor xcol;
      xcol.red   = (UShort_t)(r * kBIGGEST_RGB_VALUE);
      xcol.green = (UShort_t)(g * kBIGGEST_RGB_VALUE);
      xcol.blue  = (UShort_t)(b * kBIGGEST_RGB_VALUE);
      xcol.flags = DoRed | DoGreen | DoBlue;
      XColor_t &col = GetColor(cindex);
      if (col.fDefined) {
         // if color is already defined with same rgb just return
         if (col.fRed  == xcol.red && col.fGreen == xcol.green &&
             col.fBlue == xcol.blue)
            return;
         col.fDefined = kFALSE;
         if (fRedDiv == -1)
            XFreeColors((Display*)fDisplay, fColormap, &col.fPixel, 1, 0);
      }
      if (AllocColor(fColormap, &xcol)) {
         col.fDefined = kTRUE;
         col.fPixel   = xcol.pixel;
         col.fRed     = xcol.red;
         col.fGreen   = xcol.green;
         col.fBlue    = xcol.blue;
      }
   }
}

//______________________________________________________________________________
void TGX11::SetTextAlign(Short_t talign)
{
   // Set text alignment.
   // txalh   : horizontal text alignment
   // txalv   : vertical text alignment

   Int_t txalh = talign/10;
   Int_t txalv = talign%10;
   fTextAlignH = txalh;
   fTextAlignV = txalv;

   switch (txalh) {

      case 0 :
      case 1 :
         switch (txalv) {  //left
            case 1 :
               fTextAlign = 7;   //bottom
               break;
            case 2 :
               fTextAlign = 4;   //center
               break;
            case 3 :
               fTextAlign = 1;   //top
               break;
         }
         break;
      case 2 :
         switch (txalv) { //center
            case 1 :
               fTextAlign = 8;   //bottom
               break;
            case 2 :
               fTextAlign = 5;   //center
               break;
            case 3 :
               fTextAlign = 2;   //top
               break;
         }
         break;
      case 3 :
         switch (txalv) {  //right
            case 1 :
               fTextAlign = 9;   //bottom
               break;
            case 2 :
               fTextAlign = 6;   //center
               break;
            case 3 :
               fTextAlign = 3;   //top
               break;
         }
         break;
   }

   TAttText::SetTextAlign(fTextAlign);
}

//______________________________________________________________________________
void TGX11::SetTextColor(Color_t cindex)
{
   // Set color index for text.

   if (cindex < 0) return;

   TAttText::SetTextColor(cindex);

   SetColor(gGCtext, Int_t(cindex));

   XGCValues values;
   if (XGetGCValues((Display*)fDisplay, *gGCtext, GCForeground | GCBackground, &values)) {
      XSetForeground( (Display*)fDisplay, *gGCinvt, values.background );
      XSetBackground( (Display*)fDisplay, *gGCinvt, values.foreground );
   } else {
      Error("SetTextColor", "cannot get GC values");
   }
   XSetBackground((Display*)fDisplay, *gGCtext, GetColor(0).fPixel);
}

//______________________________________________________________________________
Int_t TGX11::SetTextFont(char *fontname, ETextSetMode mode)
{
   // Set text font to specified name.
   // mode       : loading flag
   // mode=0     : search if the font exist (kCheck)
   // mode=1     : search the font and load it if it exists (kLoad)
   // font       : font name
   //
   // Set text font to specified name. This function returns 0 if
   // the specified font is found, 1 if not.

   char **fontlist;
   int fontcount;
   int i;

   if (mode == kLoad) {
      for (i = 0; i < kMAXFONT; i++) {
         if (strcmp(fontname, gFont[i].name) == 0) {
            gTextFont = gFont[i].id;
            XSetFont((Display*)fDisplay, *gGCtext, gTextFont->fid);
            XSetFont((Display*)fDisplay, *gGCinvt, gTextFont->fid);
            return 0;
         }
      }
   }

   fontlist = XListFonts((Display*)fDisplay, fontname, 1, &fontcount);

   if (fontlist && fontcount != 0) {
      if (mode == kLoad) {
         if (gFont[gCurrentFontNumber].id)
            XFreeFont((Display*)fDisplay, gFont[gCurrentFontNumber].id);
         gTextFont = XLoadQueryFont((Display*)fDisplay, fontlist[0]);
         XSetFont((Display*)fDisplay, *gGCtext, gTextFont->fid);
         XSetFont((Display*)fDisplay, *gGCinvt, gTextFont->fid);
         gFont[gCurrentFontNumber].id = gTextFont;
         strlcpy(gFont[gCurrentFontNumber].name,fontname,80);
         gCurrentFontNumber++;
         if (gCurrentFontNumber == kMAXFONT) gCurrentFontNumber = 0;
      }
      XFreeFontNames(fontlist);
      return 0;
   } else {
      return 1;
   }
}

//______________________________________________________________________________
void TGX11::SetTextFont(Font_t fontnumber)
{
   // Set current text font number.

   fTextFont = fontnumber;
}

//______________________________________________________________________________
void TGX11::SetTextSize(Float_t textsize)
{
   // Set current text size.

   fTextSize = textsize;
}

//______________________________________________________________________________
void TGX11::Sync(int mode)
{
   // Set synchronisation on or off.
   // mode : synchronisation on/off
   //    mode=1  on
   //    mode<>0 off

   switch (mode) {

      case 1 :
         XSynchronize((Display*)fDisplay,1);
         break;

      default:
         XSynchronize((Display*)fDisplay,0);
         break;
   }
}

//______________________________________________________________________________
void TGX11::UpdateWindow(int mode)
{
   // Update display.
   // mode : (1) update
   //        (0) sync
   //
   // Synchronise client and server once (not permanent).
   // Copy the pixmap gCws->fDrawing on the window gCws->fWindow
   // if the double buffer is on.

   if (gCws->fDoubleBuffer) {
      XCopyArea((Display*)fDisplay, gCws->fDrawing, gCws->fWindow,
                *gGCpxmp, 0, 0, gCws->fWidth, gCws->fHeight, 0, 0);
   }
   if (mode == 1) {
      XFlush((Display*)fDisplay);
   } else {
      XSync((Display*)fDisplay, False);
   }
}

//______________________________________________________________________________
void TGX11::Warp(Int_t ix, Int_t iy, Window_t id)
{
   // Set pointer position.
   // ix       : New X coordinate of pointer
   // iy       : New Y coordinate of pointer
   // Coordinates are relative to the origin of the window id
   // or to the origin of the current window if id == 0.

   if (!id) {
      // Causes problems when calling ProcessEvents()... BadWindow
      //XWarpPointer((Display*)fDisplay, None, gCws->fWindow, 0, 0, 0, 0, ix, iy);
   } else {
      XWarpPointer((Display*)fDisplay, None, (Window) id, 0, 0, 0, 0, ix, iy);
   }
}

//______________________________________________________________________________
void TGX11::WritePixmap(int wid, unsigned int w, unsigned int h, char *pxname)
{
   // Write the pixmap wid in the bitmap file pxname.
   // wid         : Pixmap address
   // w,h         : Width and height of the pixmap.
   // lenname     : pixmap name length
   // pxname      : pixmap name

   unsigned int wval, hval;
   wval = w;
   hval = h;

   gTws = &fWindows[wid];
   XWriteBitmapFile((Display*)fDisplay, pxname, gTws->fDrawing, wval, hval, -1, -1);
}


//
// Functions for GIFencode()
//

static FILE *gOut;                      // output unit used WriteGIF and PutByte
static XImage *gXimage = 0;             // image used in WriteGIF and GetPixel

extern "C" {
   int GIFquantize(UInt_t width, UInt_t height, Int_t *ncol, Byte_t *red, Byte_t *green,
                   Byte_t *blue, Byte_t *outputBuf, Byte_t *outputCmap);
   long GIFencode(int Width, int Height, Int_t Ncol, Byte_t R[], Byte_t G[], Byte_t B[], Byte_t ScLine[],
                  void (*get_scline) (int, int, Byte_t *), void (*pb)(Byte_t));
   int GIFdecode(Byte_t *gifArr, Byte_t *pixArr, int *Width, int *Height, int *Ncols, Byte_t *R, Byte_t *G, Byte_t *B);
   int GIFinfo(Byte_t *gifArr, int *Width, int *Height, int *Ncols);
}

//______________________________________________________________________________
static void GetPixel(int y, int width, Byte_t *scline)
{
   // Get pixels in line y and put in array scline.

   for (int i = 0; i < width; i++)
      scline[i] = Byte_t(XGetPixel(gXimage, i, y));
}

//______________________________________________________________________________
static void PutByte(Byte_t b)
{
   // Put byte b in output stream.

   if (ferror(gOut) == 0) fputc(b, gOut);
}

//______________________________________________________________________________
void TGX11::ImgPickPalette(RXImage *image, Int_t &ncol, Int_t *&R, Int_t *&G, Int_t *&B)
{
   // Returns in R G B the ncol colors of the palette used by the image.
   // The image pixels are changed to index values in these R G B arrays.
   // This produces a colormap with only the used colors (so even on displays
   // with more than 8 planes we will be able to create GIF's when the image
   // contains no more than 256 different colors). If it does contain more
   // colors we will have to use GIFquantize to reduce the number of colors.
   // The R G B arrays must be deleted by the caller.

   ULong_t *orgcolors = 0;
   Int_t    maxcolors = 0, ncolors = 0;

   // collect different image colors
   int x, y;
   for (x = 0; x < (int) gCws->fWidth; x++) {
      for (y = 0; y < (int) gCws->fHeight; y++) {
         ULong_t pixel = XGetPixel(image, x, y);
         CollectImageColors(pixel, orgcolors, ncolors, maxcolors);
      }
   }

   // get RGB values belonging to pixels
   RXColor *xcol = new RXColor[ncolors];

   int i;
   for (i = 0; i < ncolors; i++) {
      xcol[i].pixel = orgcolors[i];
      xcol[i].red   = xcol[i].green = xcol[i].blue = 0;
      xcol[i].flags = DoRed | DoGreen | DoBlue;
   }
   QueryColors(fColormap, xcol, ncolors);

   // create RGB arrays and store RGB's for each color and set number of colors
   // (space must be delete by caller)
   R = new Int_t[ncolors];
   G = new Int_t[ncolors];
   B = new Int_t[ncolors];

   for (i = 0; i < ncolors; i++) {
      R[i] = xcol[i].red;
      G[i] = xcol[i].green;
      B[i] = xcol[i].blue;
   }
   ncol = ncolors;

   // update image with indices (pixels) into the new RGB colormap
   for (x = 0; x < (int) gCws->fWidth; x++) {
      for (y = 0; y < (int) gCws->fHeight; y++) {
         ULong_t pixel = XGetPixel(image, x, y);
         Int_t idx = FindColor(pixel, orgcolors, ncolors);
         XPutPixel(image, x, y, idx);
      }
   }

   // cleanup
   delete [] xcol;
   ::operator delete(orgcolors);
}

//______________________________________________________________________________
Int_t TGX11::WriteGIF(char *name)
{
   // Writes the current window into GIF file. Returns 1 in case of success,
   // 0 otherwise.

   Byte_t    scline[2000], r[256], b[256], g[256];
   Int_t    *red, *green, *blue;
   Int_t     ncol, maxcol, i;

   if (gXimage) {
      XDestroyImage(gXimage);
      gXimage = 0;
   }

   gXimage = XGetImage((Display*)fDisplay, gCws->fDrawing, 0, 0,
                       gCws->fWidth, gCws->fHeight,
                       AllPlanes, ZPixmap);

   ImgPickPalette((RXImage*)gXimage, ncol, red, green, blue);

   if (ncol > 256) {
      //GIFquantize(...);
      Error("WriteGIF", "can not create GIF of image containing more than 256 colors");
      delete [] red;
      delete [] green;
      delete [] blue;
      return 0;
   }

   maxcol = 0;
   for (i = 0; i < ncol; i++) {
      if (maxcol < red[i] )   maxcol = red[i];
      if (maxcol < green[i] ) maxcol = green[i];
      if (maxcol < blue[i] )  maxcol = blue[i];
      r[i] = 0;
      g[i] = 0;
      b[i] = 0;
   }
   if (maxcol != 0) {
      for (i = 0; i < ncol; i++) {
         r[i] = red[i] * 255/maxcol;
         g[i] = green[i] * 255/maxcol;
         b[i] = blue[i] * 255/maxcol;
      }
   }

   gOut = fopen(name, "w+");

   if (gOut) {
      GIFencode(gCws->fWidth, gCws->fHeight,
             ncol, r, g, b, scline, ::GetPixel, PutByte);
      fclose(gOut);
      i = 1;
   } else {
      Error("WriteGIF","cannot write file: %s",name);
      i = 0;
   }
   delete [] red;
   delete [] green;
   delete [] blue;
   return i;
}

//______________________________________________________________________________
void TGX11::PutImage(int offset,int itran,int x0,int y0,int nx,int ny,int xmin,
                     int ymin,int xmax,int ymax, unsigned char *image,Drawable_t wid)
{
   // Draw image.

   const int maxSegment = 20;
   int           i, n, x, y, xcur, x1, x2, y1, y2;
   unsigned char *jimg, *jbase, icol;
   int           nlines[256];
   XSegment      lines[256][maxSegment];
   Drawable_t    id;

   if (wid) {
      id = wid;
   } else {
      id = gCws->fDrawing;
   }

   for (i = 0; i < 256; i++) nlines[i] = 0;

   x1 = x0 + xmin; y1 = y0 + ny - ymax - 1;
   x2 = x0 + xmax; y2 = y0 + ny - ymin - 1;
   jbase = image + (ymin-1)*nx + xmin;

   for (y = y2; y >= y1; y--) {
      xcur = x1; jbase += nx;
      for (jimg = jbase, icol = *jimg++, x = x1+1; x <= x2; jimg++, x++) {
         if (icol != *jimg) {
            if (icol != itran) {
               n = nlines[icol]++;
               lines[icol][n].x1 = xcur; lines[icol][n].y1 = y;
               lines[icol][n].x2 = x-1;  lines[icol][n].y2 = y;
               if (nlines[icol] == maxSegment) {
                  SetColor(gGCline,(int)icol+offset);
                  XDrawSegments((Display*)fDisplay,id,*gGCline,&lines[icol][0],
                                maxSegment);
                  nlines[icol] = 0;
               }
            }
            icol = *jimg; xcur = x;
         }
      }
      if (icol != itran) {
         n = nlines[icol]++;
         lines[icol][n].x1 = xcur; lines[icol][n].y1 = y;
         lines[icol][n].x2 = x-1;  lines[icol][n].y2 = y;
         if (nlines[icol] == maxSegment) {
            SetColor(gGCline,(int)icol+offset);
            XDrawSegments((Display*)fDisplay,id,*gGCline,&lines[icol][0],
                          maxSegment);
            nlines[icol] = 0;
         }
      }
   }

   for (i = 0; i < 256; i++) {
      if (nlines[i] != 0) {
         SetColor(gGCline,i+offset);
         XDrawSegments((Display*)fDisplay,id,*gGCline,&lines[i][0],nlines[i]);
      }
   }
}

//______________________________________________________________________________
Pixmap_t TGX11::ReadGIF(int x0, int y0, const char *file, Window_t id)
{
   // If id is NULL - loads the specified gif file at position [x0,y0] in the
   // current window. Otherwise creates pixmap from gif file

   FILE  *fd;
   Seek_t filesize = 0;
   unsigned char *gifArr, *pixArr, red[256], green[256], blue[256], *j1, *j2, icol;
   int   i, j, k, width, height, ncolor, irep, offset;
   float rr, gg, bb;
   Pixmap_t pic = 0;

   fd = fopen(file, "r");
   if (!fd) {
      Error("ReadGIF", "unable to open GIF file");
      return pic;
   }

   fseek(fd, 0L, 2);
   long ft = ftell(fd);
   if (ft <=0) {
      Error("ReadGIF", "unable to open GIF file");
      fclose(fd);
      return pic;
   } else {
      filesize = Seek_t(ft);
   }
   fseek(fd, 0L, 0);

   if (!(gifArr = (unsigned char *) calloc(filesize+256,1))) {
      Error("ReadGIF", "unable to allocate array for gif");
      fclose(fd);
      return pic;
   }

   if (fread(gifArr, filesize, 1, fd) != 1) {
      Error("ReadGIF", "GIF file read failed");
      free(gifArr);
      fclose(fd);
      return pic;
   }
   fclose(fd);

   irep = GIFinfo(gifArr, &width, &height, &ncolor);
   if (irep != 0) {
      free(gifArr);
      return pic;
   }

   if (!(pixArr = (unsigned char *) calloc((width*height),1))) {
      Error("ReadGIF", "unable to allocate array for image");
      free(gifArr);
      return pic;
   }

   irep = GIFdecode(gifArr, pixArr, &width, &height, &ncolor, red, green, blue);
   if (irep != 0) {
      free(gifArr);
      free(pixArr);
      return pic;
   }

   // S E T   P A L E T T E

   offset = 8;

   for (i = 0; i < ncolor; i++) {
      rr = red[i]/255.;
      gg = green[i]/255.;
      bb = blue[i]/255.;
      j = i+offset;
      SetRGB(j,rr,gg,bb);
   }

   // O U T P U T   I M A G E

   for (i = 1; i <= height/2; i++) {
      j1 = pixArr + (i-1)*width;
      j2 = pixArr + (height-i)*width;
      for (k = 0; k < width; k++) {
         icol = *j1; *j1++ = *j2; *j2++ = icol;
      }
   }
   if (id) pic = CreatePixmap(id, width, height);
   PutImage(offset,-1,x0,y0,width,height,0,0,width-1,height-1,pixArr,pic);

   free(gifArr);
   free(pixArr);

   if (pic)
      return pic;
   else if (gCws->fDrawing)
      return (Pixmap_t)gCws->fDrawing;
   return 0;
}

//______________________________________________________________________________
unsigned char *TGX11::GetColorBits(Drawable_t /*wid*/, Int_t /*x*/, Int_t /*y*/,
                                       UInt_t /*w*/, UInt_t /*h*/)
{
   // Returns an array of pixels created from a part of drawable (defined by x, y, w, h)
   // in format:
   // b1, g1, r1, 0,  b2, g2, r2, 0 ... bn, gn, rn, 0 ..
   //
   // Pixels are numbered from left to right and from top to bottom.
   // By default all pixels from the whole drawable are returned.
   //
   // Note that return array is 32-bit aligned

   return 0;
}

//______________________________________________________________________________
Pixmap_t TGX11::CreatePixmapFromData(unsigned char * /*bits*/, UInt_t /*width*/,
                                       UInt_t /*height*/)
{
   // create pixmap from RGB data. RGB data is in format :
   // b1, g1, r1, 0,  b2, g2, r2, 0 ... bn, gn, rn, 0 ..
   //
   // Pixels are numbered from left to right and from top to bottom.
   // Note that data must be 32-bit aligned

   return (Pixmap_t)0;
}

//______________________________________________________________________________
Int_t TGX11::AddPixmap(ULong_t pixid, UInt_t w, UInt_t h)
{
   // Register pixmap created by gVirtualGL
   // w,h : Width and height of the pixmap.
   //register new pixmap
   Int_t wid = 0;

   // Select next free window number
   for (; wid < fMaxNumberOfWindows; ++wid)
      if (!fWindows[wid].fOpen)
         break;

   if (wid == fMaxNumberOfWindows) {
      Int_t newsize = fMaxNumberOfWindows + 10;
      fWindows = (XWindow_t*) TStorage::ReAlloc(
                                                fWindows, newsize * sizeof(XWindow_t),
                                                fMaxNumberOfWindows*sizeof(XWindow_t)
                                               );

      for (Int_t i = fMaxNumberOfWindows; i < newsize; ++i)
         fWindows[i].fOpen = 0;

      fMaxNumberOfWindows = newsize;
   }

   fWindows[wid].fOpen = 1;
   gCws = fWindows + wid;
   gCws->fWindow = pixid;
   gCws->fDrawing = gCws->fWindow;
   gCws->fBuffer = 0;
   gCws->fDoubleBuffer = 0;
   gCws->fIsPixmap = 1;
   gCws->fClip = 0;
   gCws->fWidth = w;
   gCws->fHeight = h;
   gCws->fNewColors = 0;
   gCws->fShared = kFALSE;

   return wid;
}

//______________________________________________________________________________
Int_t TGX11::SupportsExtension(const char *ext) const
{
   // Returns 1 if window system server supports extension given by the
   // argument, returns 0 in case extension is not supported and returns -1
   // in case of error (like server not initialized).
   // Examples:
   //   "Apple-WM" - does server run on MacOS X;
   //   "XINERAMA" - does server support Xinerama.
   // See also the output of xdpyinfo.

   Int_t major_opcode, first_event, first_error;
   if (!(Display*)fDisplay)
      return -1;
   return XQueryExtension((Display*)fDisplay, ext, &major_opcode, &first_event, &first_error);
}
 TGX11.cxx:1
 TGX11.cxx:2
 TGX11.cxx:3
 TGX11.cxx:4
 TGX11.cxx:5
 TGX11.cxx:6
 TGX11.cxx:7
 TGX11.cxx:8
 TGX11.cxx:9
 TGX11.cxx:10
 TGX11.cxx:11
 TGX11.cxx:12
 TGX11.cxx:13
 TGX11.cxx:14
 TGX11.cxx:15
 TGX11.cxx:16
 TGX11.cxx:17
 TGX11.cxx:18
 TGX11.cxx:19
 TGX11.cxx:20
 TGX11.cxx:21
 TGX11.cxx:22
 TGX11.cxx:23
 TGX11.cxx:24
 TGX11.cxx:25
 TGX11.cxx:26
 TGX11.cxx:27
 TGX11.cxx:28
 TGX11.cxx:29
 TGX11.cxx:30
 TGX11.cxx:31
 TGX11.cxx:32
 TGX11.cxx:33
 TGX11.cxx:34
 TGX11.cxx:35
 TGX11.cxx:36
 TGX11.cxx:37
 TGX11.cxx:38
 TGX11.cxx:39
 TGX11.cxx:40
 TGX11.cxx:41
 TGX11.cxx:42
 TGX11.cxx:43
 TGX11.cxx:44
 TGX11.cxx:45
 TGX11.cxx:46
 TGX11.cxx:47
 TGX11.cxx:48
 TGX11.cxx:49
 TGX11.cxx:50
 TGX11.cxx:51
 TGX11.cxx:52
 TGX11.cxx:53
 TGX11.cxx:54
 TGX11.cxx:55
 TGX11.cxx:56
 TGX11.cxx:57
 TGX11.cxx:58
 TGX11.cxx:59
 TGX11.cxx:60
 TGX11.cxx:61
 TGX11.cxx:62
 TGX11.cxx:63
 TGX11.cxx:64
 TGX11.cxx:65
 TGX11.cxx:66
 TGX11.cxx:67
 TGX11.cxx:68
 TGX11.cxx:69
 TGX11.cxx:70
 TGX11.cxx:71
 TGX11.cxx:72
 TGX11.cxx:73
 TGX11.cxx:74
 TGX11.cxx:75
 TGX11.cxx:76
 TGX11.cxx:77
 TGX11.cxx:78
 TGX11.cxx:79
 TGX11.cxx:80
 TGX11.cxx:81
 TGX11.cxx:82
 TGX11.cxx:83
 TGX11.cxx:84
 TGX11.cxx:85
 TGX11.cxx:86
 TGX11.cxx:87
 TGX11.cxx:88
 TGX11.cxx:89
 TGX11.cxx:90
 TGX11.cxx:91
 TGX11.cxx:92
 TGX11.cxx:93
 TGX11.cxx:94
 TGX11.cxx:95
 TGX11.cxx:96
 TGX11.cxx:97
 TGX11.cxx:98
 TGX11.cxx:99
 TGX11.cxx:100
 TGX11.cxx:101
 TGX11.cxx:102
 TGX11.cxx:103
 TGX11.cxx:104
 TGX11.cxx:105
 TGX11.cxx:106
 TGX11.cxx:107
 TGX11.cxx:108
 TGX11.cxx:109
 TGX11.cxx:110
 TGX11.cxx:111
 TGX11.cxx:112
 TGX11.cxx:113
 TGX11.cxx:114
 TGX11.cxx:115
 TGX11.cxx:116
 TGX11.cxx:117
 TGX11.cxx:118
 TGX11.cxx:119
 TGX11.cxx:120
 TGX11.cxx:121
 TGX11.cxx:122
 TGX11.cxx:123
 TGX11.cxx:124
 TGX11.cxx:125
 TGX11.cxx:126
 TGX11.cxx:127
 TGX11.cxx:128
 TGX11.cxx:129
 TGX11.cxx:130
 TGX11.cxx:131
 TGX11.cxx:132
 TGX11.cxx:133
 TGX11.cxx:134
 TGX11.cxx:135
 TGX11.cxx:136
 TGX11.cxx:137
 TGX11.cxx:138
 TGX11.cxx:139
 TGX11.cxx:140
 TGX11.cxx:141
 TGX11.cxx:142
 TGX11.cxx:143
 TGX11.cxx:144
 TGX11.cxx:145
 TGX11.cxx:146
 TGX11.cxx:147
 TGX11.cxx:148
 TGX11.cxx:149
 TGX11.cxx:150
 TGX11.cxx:151
 TGX11.cxx:152
 TGX11.cxx:153
 TGX11.cxx:154
 TGX11.cxx:155
 TGX11.cxx:156
 TGX11.cxx:157
 TGX11.cxx:158
 TGX11.cxx:159
 TGX11.cxx:160
 TGX11.cxx:161
 TGX11.cxx:162
 TGX11.cxx:163
 TGX11.cxx:164
 TGX11.cxx:165
 TGX11.cxx:166
 TGX11.cxx:167
 TGX11.cxx:168
 TGX11.cxx:169
 TGX11.cxx:170
 TGX11.cxx:171
 TGX11.cxx:172
 TGX11.cxx:173
 TGX11.cxx:174
 TGX11.cxx:175
 TGX11.cxx:176
 TGX11.cxx:177
 TGX11.cxx:178
 TGX11.cxx:179
 TGX11.cxx:180
 TGX11.cxx:181
 TGX11.cxx:182
 TGX11.cxx:183
 TGX11.cxx:184
 TGX11.cxx:185
 TGX11.cxx:186
 TGX11.cxx:187
 TGX11.cxx:188
 TGX11.cxx:189
 TGX11.cxx:190
 TGX11.cxx:191
 TGX11.cxx:192
 TGX11.cxx:193
 TGX11.cxx:194
 TGX11.cxx:195
 TGX11.cxx:196
 TGX11.cxx:197
 TGX11.cxx:198
 TGX11.cxx:199
 TGX11.cxx:200
 TGX11.cxx:201
 TGX11.cxx:202
 TGX11.cxx:203
 TGX11.cxx:204
 TGX11.cxx:205
 TGX11.cxx:206
 TGX11.cxx:207
 TGX11.cxx:208
 TGX11.cxx:209
 TGX11.cxx:210
 TGX11.cxx:211
 TGX11.cxx:212
 TGX11.cxx:213
 TGX11.cxx:214
 TGX11.cxx:215
 TGX11.cxx:216
 TGX11.cxx:217
 TGX11.cxx:218
 TGX11.cxx:219
 TGX11.cxx:220
 TGX11.cxx:221
 TGX11.cxx:222
 TGX11.cxx:223
 TGX11.cxx:224
 TGX11.cxx:225
 TGX11.cxx:226
 TGX11.cxx:227
 TGX11.cxx:228
 TGX11.cxx:229
 TGX11.cxx:230
 TGX11.cxx:231
 TGX11.cxx:232
 TGX11.cxx:233
 TGX11.cxx:234
 TGX11.cxx:235
 TGX11.cxx:236
 TGX11.cxx:237
 TGX11.cxx:238
 TGX11.cxx:239
 TGX11.cxx:240
 TGX11.cxx:241
 TGX11.cxx:242
 TGX11.cxx:243
 TGX11.cxx:244
 TGX11.cxx:245
 TGX11.cxx:246
 TGX11.cxx:247
 TGX11.cxx:248
 TGX11.cxx:249
 TGX11.cxx:250
 TGX11.cxx:251
 TGX11.cxx:252
 TGX11.cxx:253
 TGX11.cxx:254
 TGX11.cxx:255
 TGX11.cxx:256
 TGX11.cxx:257
 TGX11.cxx:258
 TGX11.cxx:259
 TGX11.cxx:260
 TGX11.cxx:261
 TGX11.cxx:262
 TGX11.cxx:263
 TGX11.cxx:264
 TGX11.cxx:265
 TGX11.cxx:266
 TGX11.cxx:267
 TGX11.cxx:268
 TGX11.cxx:269
 TGX11.cxx:270
 TGX11.cxx:271
 TGX11.cxx:272
 TGX11.cxx:273
 TGX11.cxx:274
 TGX11.cxx:275
 TGX11.cxx:276
 TGX11.cxx:277
 TGX11.cxx:278
 TGX11.cxx:279
 TGX11.cxx:280
 TGX11.cxx:281
 TGX11.cxx:282
 TGX11.cxx:283
 TGX11.cxx:284
 TGX11.cxx:285
 TGX11.cxx:286
 TGX11.cxx:287
 TGX11.cxx:288
 TGX11.cxx:289
 TGX11.cxx:290
 TGX11.cxx:291
 TGX11.cxx:292
 TGX11.cxx:293
 TGX11.cxx:294
 TGX11.cxx:295
 TGX11.cxx:296
 TGX11.cxx:297
 TGX11.cxx:298
 TGX11.cxx:299
 TGX11.cxx:300
 TGX11.cxx:301
 TGX11.cxx:302
 TGX11.cxx:303
 TGX11.cxx:304
 TGX11.cxx:305
 TGX11.cxx:306
 TGX11.cxx:307
 TGX11.cxx:308
 TGX11.cxx:309
 TGX11.cxx:310
 TGX11.cxx:311
 TGX11.cxx:312
 TGX11.cxx:313
 TGX11.cxx:314
 TGX11.cxx:315
 TGX11.cxx:316
 TGX11.cxx:317
 TGX11.cxx:318
 TGX11.cxx:319
 TGX11.cxx:320
 TGX11.cxx:321
 TGX11.cxx:322
 TGX11.cxx:323
 TGX11.cxx:324
 TGX11.cxx:325
 TGX11.cxx:326
 TGX11.cxx:327
 TGX11.cxx:328
 TGX11.cxx:329
 TGX11.cxx:330
 TGX11.cxx:331
 TGX11.cxx:332
 TGX11.cxx:333
 TGX11.cxx:334
 TGX11.cxx:335
 TGX11.cxx:336
 TGX11.cxx:337
 TGX11.cxx:338
 TGX11.cxx:339
 TGX11.cxx:340
 TGX11.cxx:341
 TGX11.cxx:342
 TGX11.cxx:343
 TGX11.cxx:344
 TGX11.cxx:345
 TGX11.cxx:346
 TGX11.cxx:347
 TGX11.cxx:348
 TGX11.cxx:349
 TGX11.cxx:350
 TGX11.cxx:351
 TGX11.cxx:352
 TGX11.cxx:353
 TGX11.cxx:354
 TGX11.cxx:355
 TGX11.cxx:356
 TGX11.cxx:357
 TGX11.cxx:358
 TGX11.cxx:359
 TGX11.cxx:360
 TGX11.cxx:361
 TGX11.cxx:362
 TGX11.cxx:363
 TGX11.cxx:364
 TGX11.cxx:365
 TGX11.cxx:366
 TGX11.cxx:367
 TGX11.cxx:368
 TGX11.cxx:369
 TGX11.cxx:370
 TGX11.cxx:371
 TGX11.cxx:372
 TGX11.cxx:373
 TGX11.cxx:374
 TGX11.cxx:375
 TGX11.cxx:376
 TGX11.cxx:377
 TGX11.cxx:378
 TGX11.cxx:379
 TGX11.cxx:380
 TGX11.cxx:381
 TGX11.cxx:382
 TGX11.cxx:383
 TGX11.cxx:384
 TGX11.cxx:385
 TGX11.cxx:386
 TGX11.cxx:387
 TGX11.cxx:388
 TGX11.cxx:389
 TGX11.cxx:390
 TGX11.cxx:391
 TGX11.cxx:392
 TGX11.cxx:393
 TGX11.cxx:394
 TGX11.cxx:395
 TGX11.cxx:396
 TGX11.cxx:397
 TGX11.cxx:398
 TGX11.cxx:399
 TGX11.cxx:400
 TGX11.cxx:401
 TGX11.cxx:402
 TGX11.cxx:403
 TGX11.cxx:404
 TGX11.cxx:405
 TGX11.cxx:406
 TGX11.cxx:407
 TGX11.cxx:408
 TGX11.cxx:409
 TGX11.cxx:410
 TGX11.cxx:411
 TGX11.cxx:412
 TGX11.cxx:413
 TGX11.cxx:414
 TGX11.cxx:415
 TGX11.cxx:416
 TGX11.cxx:417
 TGX11.cxx:418
 TGX11.cxx:419
 TGX11.cxx:420
 TGX11.cxx:421
 TGX11.cxx:422
 TGX11.cxx:423
 TGX11.cxx:424
 TGX11.cxx:425
 TGX11.cxx:426
 TGX11.cxx:427
 TGX11.cxx:428
 TGX11.cxx:429
 TGX11.cxx:430
 TGX11.cxx:431
 TGX11.cxx:432
 TGX11.cxx:433
 TGX11.cxx:434
 TGX11.cxx:435
 TGX11.cxx:436
 TGX11.cxx:437
 TGX11.cxx:438
 TGX11.cxx:439
 TGX11.cxx:440
 TGX11.cxx:441
 TGX11.cxx:442
 TGX11.cxx:443
 TGX11.cxx:444
 TGX11.cxx:445
 TGX11.cxx:446
 TGX11.cxx:447
 TGX11.cxx:448
 TGX11.cxx:449
 TGX11.cxx:450
 TGX11.cxx:451
 TGX11.cxx:452
 TGX11.cxx:453
 TGX11.cxx:454
 TGX11.cxx:455
 TGX11.cxx:456
 TGX11.cxx:457
 TGX11.cxx:458
 TGX11.cxx:459
 TGX11.cxx:460
 TGX11.cxx:461
 TGX11.cxx:462
 TGX11.cxx:463
 TGX11.cxx:464
 TGX11.cxx:465
 TGX11.cxx:466
 TGX11.cxx:467
 TGX11.cxx:468
 TGX11.cxx:469
 TGX11.cxx:470
 TGX11.cxx:471
 TGX11.cxx:472
 TGX11.cxx:473
 TGX11.cxx:474
 TGX11.cxx:475
 TGX11.cxx:476
 TGX11.cxx:477
 TGX11.cxx:478
 TGX11.cxx:479
 TGX11.cxx:480
 TGX11.cxx:481
 TGX11.cxx:482
 TGX11.cxx:483
 TGX11.cxx:484
 TGX11.cxx:485
 TGX11.cxx:486
 TGX11.cxx:487
 TGX11.cxx:488
 TGX11.cxx:489
 TGX11.cxx:490
 TGX11.cxx:491
 TGX11.cxx:492
 TGX11.cxx:493
 TGX11.cxx:494
 TGX11.cxx:495
 TGX11.cxx:496
 TGX11.cxx:497
 TGX11.cxx:498
 TGX11.cxx:499
 TGX11.cxx:500
 TGX11.cxx:501
 TGX11.cxx:502
 TGX11.cxx:503
 TGX11.cxx:504
 TGX11.cxx:505
 TGX11.cxx:506
 TGX11.cxx:507
 TGX11.cxx:508
 TGX11.cxx:509
 TGX11.cxx:510
 TGX11.cxx:511
 TGX11.cxx:512
 TGX11.cxx:513
 TGX11.cxx:514
 TGX11.cxx:515
 TGX11.cxx:516
 TGX11.cxx:517
 TGX11.cxx:518
 TGX11.cxx:519
 TGX11.cxx:520
 TGX11.cxx:521
 TGX11.cxx:522
 TGX11.cxx:523
 TGX11.cxx:524
 TGX11.cxx:525
 TGX11.cxx:526
 TGX11.cxx:527
 TGX11.cxx:528
 TGX11.cxx:529
 TGX11.cxx:530
 TGX11.cxx:531
 TGX11.cxx:532
 TGX11.cxx:533
 TGX11.cxx:534
 TGX11.cxx:535
 TGX11.cxx:536
 TGX11.cxx:537
 TGX11.cxx:538
 TGX11.cxx:539
 TGX11.cxx:540
 TGX11.cxx:541
 TGX11.cxx:542
 TGX11.cxx:543
 TGX11.cxx:544
 TGX11.cxx:545
 TGX11.cxx:546
 TGX11.cxx:547
 TGX11.cxx:548
 TGX11.cxx:549
 TGX11.cxx:550
 TGX11.cxx:551
 TGX11.cxx:552
 TGX11.cxx:553
 TGX11.cxx:554
 TGX11.cxx:555
 TGX11.cxx:556
 TGX11.cxx:557
 TGX11.cxx:558
 TGX11.cxx:559
 TGX11.cxx:560
 TGX11.cxx:561
 TGX11.cxx:562
 TGX11.cxx:563
 TGX11.cxx:564
 TGX11.cxx:565
 TGX11.cxx:566
 TGX11.cxx:567
 TGX11.cxx:568
 TGX11.cxx:569
 TGX11.cxx:570
 TGX11.cxx:571
 TGX11.cxx:572
 TGX11.cxx:573
 TGX11.cxx:574
 TGX11.cxx:575
 TGX11.cxx:576
 TGX11.cxx:577
 TGX11.cxx:578
 TGX11.cxx:579
 TGX11.cxx:580
 TGX11.cxx:581
 TGX11.cxx:582
 TGX11.cxx:583
 TGX11.cxx:584
 TGX11.cxx:585
 TGX11.cxx:586
 TGX11.cxx:587
 TGX11.cxx:588
 TGX11.cxx:589
 TGX11.cxx:590
 TGX11.cxx:591
 TGX11.cxx:592
 TGX11.cxx:593
 TGX11.cxx:594
 TGX11.cxx:595
 TGX11.cxx:596
 TGX11.cxx:597
 TGX11.cxx:598
 TGX11.cxx:599
 TGX11.cxx:600
 TGX11.cxx:601
 TGX11.cxx:602
 TGX11.cxx:603
 TGX11.cxx:604
 TGX11.cxx:605
 TGX11.cxx:606
 TGX11.cxx:607
 TGX11.cxx:608
 TGX11.cxx:609
 TGX11.cxx:610
 TGX11.cxx:611
 TGX11.cxx:612
 TGX11.cxx:613
 TGX11.cxx:614
 TGX11.cxx:615
 TGX11.cxx:616
 TGX11.cxx:617
 TGX11.cxx:618
 TGX11.cxx:619
 TGX11.cxx:620
 TGX11.cxx:621
 TGX11.cxx:622
 TGX11.cxx:623
 TGX11.cxx:624
 TGX11.cxx:625
 TGX11.cxx:626
 TGX11.cxx:627
 TGX11.cxx:628
 TGX11.cxx:629
 TGX11.cxx:630
 TGX11.cxx:631
 TGX11.cxx:632
 TGX11.cxx:633
 TGX11.cxx:634
 TGX11.cxx:635
 TGX11.cxx:636
 TGX11.cxx:637
 TGX11.cxx:638
 TGX11.cxx:639
 TGX11.cxx:640
 TGX11.cxx:641
 TGX11.cxx:642
 TGX11.cxx:643
 TGX11.cxx:644
 TGX11.cxx:645
 TGX11.cxx:646
 TGX11.cxx:647
 TGX11.cxx:648
 TGX11.cxx:649
 TGX11.cxx:650
 TGX11.cxx:651
 TGX11.cxx:652
 TGX11.cxx:653
 TGX11.cxx:654
 TGX11.cxx:655
 TGX11.cxx:656
 TGX11.cxx:657
 TGX11.cxx:658
 TGX11.cxx:659
 TGX11.cxx:660
 TGX11.cxx:661
 TGX11.cxx:662
 TGX11.cxx:663
 TGX11.cxx:664
 TGX11.cxx:665
 TGX11.cxx:666
 TGX11.cxx:667
 TGX11.cxx:668
 TGX11.cxx:669
 TGX11.cxx:670
 TGX11.cxx:671
 TGX11.cxx:672
 TGX11.cxx:673
 TGX11.cxx:674
 TGX11.cxx:675
 TGX11.cxx:676
 TGX11.cxx:677
 TGX11.cxx:678
 TGX11.cxx:679
 TGX11.cxx:680
 TGX11.cxx:681
 TGX11.cxx:682
 TGX11.cxx:683
 TGX11.cxx:684
 TGX11.cxx:685
 TGX11.cxx:686
 TGX11.cxx:687
 TGX11.cxx:688
 TGX11.cxx:689
 TGX11.cxx:690
 TGX11.cxx:691
 TGX11.cxx:692
 TGX11.cxx:693
 TGX11.cxx:694
 TGX11.cxx:695
 TGX11.cxx:696
 TGX11.cxx:697
 TGX11.cxx:698
 TGX11.cxx:699
 TGX11.cxx:700
 TGX11.cxx:701
 TGX11.cxx:702
 TGX11.cxx:703
 TGX11.cxx:704
 TGX11.cxx:705
 TGX11.cxx:706
 TGX11.cxx:707
 TGX11.cxx:708
 TGX11.cxx:709
 TGX11.cxx:710
 TGX11.cxx:711
 TGX11.cxx:712
 TGX11.cxx:713
 TGX11.cxx:714
 TGX11.cxx:715
 TGX11.cxx:716
 TGX11.cxx:717
 TGX11.cxx:718
 TGX11.cxx:719
 TGX11.cxx:720
 TGX11.cxx:721
 TGX11.cxx:722
 TGX11.cxx:723
 TGX11.cxx:724
 TGX11.cxx:725
 TGX11.cxx:726
 TGX11.cxx:727
 TGX11.cxx:728
 TGX11.cxx:729
 TGX11.cxx:730
 TGX11.cxx:731
 TGX11.cxx:732
 TGX11.cxx:733
 TGX11.cxx:734
 TGX11.cxx:735
 TGX11.cxx:736
 TGX11.cxx:737
 TGX11.cxx:738
 TGX11.cxx:739
 TGX11.cxx:740
 TGX11.cxx:741
 TGX11.cxx:742
 TGX11.cxx:743
 TGX11.cxx:744
 TGX11.cxx:745
 TGX11.cxx:746
 TGX11.cxx:747
 TGX11.cxx:748
 TGX11.cxx:749
 TGX11.cxx:750
 TGX11.cxx:751
 TGX11.cxx:752
 TGX11.cxx:753
 TGX11.cxx:754
 TGX11.cxx:755
 TGX11.cxx:756
 TGX11.cxx:757
 TGX11.cxx:758
 TGX11.cxx:759
 TGX11.cxx:760
 TGX11.cxx:761
 TGX11.cxx:762
 TGX11.cxx:763
 TGX11.cxx:764
 TGX11.cxx:765
 TGX11.cxx:766
 TGX11.cxx:767
 TGX11.cxx:768
 TGX11.cxx:769
 TGX11.cxx:770
 TGX11.cxx:771
 TGX11.cxx:772
 TGX11.cxx:773
 TGX11.cxx:774
 TGX11.cxx:775
 TGX11.cxx:776
 TGX11.cxx:777
 TGX11.cxx:778
 TGX11.cxx:779
 TGX11.cxx:780
 TGX11.cxx:781
 TGX11.cxx:782
 TGX11.cxx:783
 TGX11.cxx:784
 TGX11.cxx:785
 TGX11.cxx:786
 TGX11.cxx:787
 TGX11.cxx:788
 TGX11.cxx:789
 TGX11.cxx:790
 TGX11.cxx:791
 TGX11.cxx:792
 TGX11.cxx:793
 TGX11.cxx:794
 TGX11.cxx:795
 TGX11.cxx:796
 TGX11.cxx:797
 TGX11.cxx:798
 TGX11.cxx:799
 TGX11.cxx:800
 TGX11.cxx:801
 TGX11.cxx:802
 TGX11.cxx:803
 TGX11.cxx:804
 TGX11.cxx:805
 TGX11.cxx:806
 TGX11.cxx:807
 TGX11.cxx:808
 TGX11.cxx:809
 TGX11.cxx:810
 TGX11.cxx:811
 TGX11.cxx:812
 TGX11.cxx:813
 TGX11.cxx:814
 TGX11.cxx:815
 TGX11.cxx:816
 TGX11.cxx:817
 TGX11.cxx:818
 TGX11.cxx:819
 TGX11.cxx:820
 TGX11.cxx:821
 TGX11.cxx:822
 TGX11.cxx:823
 TGX11.cxx:824
 TGX11.cxx:825
 TGX11.cxx:826
 TGX11.cxx:827
 TGX11.cxx:828
 TGX11.cxx:829
 TGX11.cxx:830
 TGX11.cxx:831
 TGX11.cxx:832
 TGX11.cxx:833
 TGX11.cxx:834
 TGX11.cxx:835
 TGX11.cxx:836
 TGX11.cxx:837
 TGX11.cxx:838
 TGX11.cxx:839
 TGX11.cxx:840
 TGX11.cxx:841
 TGX11.cxx:842
 TGX11.cxx:843
 TGX11.cxx:844
 TGX11.cxx:845
 TGX11.cxx:846
 TGX11.cxx:847
 TGX11.cxx:848
 TGX11.cxx:849
 TGX11.cxx:850
 TGX11.cxx:851
 TGX11.cxx:852
 TGX11.cxx:853
 TGX11.cxx:854
 TGX11.cxx:855
 TGX11.cxx:856
 TGX11.cxx:857
 TGX11.cxx:858
 TGX11.cxx:859
 TGX11.cxx:860
 TGX11.cxx:861
 TGX11.cxx:862
 TGX11.cxx:863
 TGX11.cxx:864
 TGX11.cxx:865
 TGX11.cxx:866
 TGX11.cxx:867
 TGX11.cxx:868
 TGX11.cxx:869
 TGX11.cxx:870
 TGX11.cxx:871
 TGX11.cxx:872
 TGX11.cxx:873
 TGX11.cxx:874
 TGX11.cxx:875
 TGX11.cxx:876
 TGX11.cxx:877
 TGX11.cxx:878
 TGX11.cxx:879
 TGX11.cxx:880
 TGX11.cxx:881
 TGX11.cxx:882
 TGX11.cxx:883
 TGX11.cxx:884
 TGX11.cxx:885
 TGX11.cxx:886
 TGX11.cxx:887
 TGX11.cxx:888
 TGX11.cxx:889
 TGX11.cxx:890
 TGX11.cxx:891
 TGX11.cxx:892
 TGX11.cxx:893
 TGX11.cxx:894
 TGX11.cxx:895
 TGX11.cxx:896
 TGX11.cxx:897
 TGX11.cxx:898
 TGX11.cxx:899
 TGX11.cxx:900
 TGX11.cxx:901
 TGX11.cxx:902
 TGX11.cxx:903
 TGX11.cxx:904
 TGX11.cxx:905
 TGX11.cxx:906
 TGX11.cxx:907
 TGX11.cxx:908
 TGX11.cxx:909
 TGX11.cxx:910
 TGX11.cxx:911
 TGX11.cxx:912
 TGX11.cxx:913
 TGX11.cxx:914
 TGX11.cxx:915
 TGX11.cxx:916
 TGX11.cxx:917
 TGX11.cxx:918
 TGX11.cxx:919
 TGX11.cxx:920
 TGX11.cxx:921
 TGX11.cxx:922
 TGX11.cxx:923
 TGX11.cxx:924
 TGX11.cxx:925
 TGX11.cxx:926
 TGX11.cxx:927
 TGX11.cxx:928
 TGX11.cxx:929
 TGX11.cxx:930
 TGX11.cxx:931
 TGX11.cxx:932
 TGX11.cxx:933
 TGX11.cxx:934
 TGX11.cxx:935
 TGX11.cxx:936
 TGX11.cxx:937
 TGX11.cxx:938
 TGX11.cxx:939
 TGX11.cxx:940
 TGX11.cxx:941
 TGX11.cxx:942
 TGX11.cxx:943
 TGX11.cxx:944
 TGX11.cxx:945
 TGX11.cxx:946
 TGX11.cxx:947
 TGX11.cxx:948
 TGX11.cxx:949
 TGX11.cxx:950
 TGX11.cxx:951
 TGX11.cxx:952
 TGX11.cxx:953
 TGX11.cxx:954
 TGX11.cxx:955
 TGX11.cxx:956
 TGX11.cxx:957
 TGX11.cxx:958
 TGX11.cxx:959
 TGX11.cxx:960
 TGX11.cxx:961
 TGX11.cxx:962
 TGX11.cxx:963
 TGX11.cxx:964
 TGX11.cxx:965
 TGX11.cxx:966
 TGX11.cxx:967
 TGX11.cxx:968
 TGX11.cxx:969
 TGX11.cxx:970
 TGX11.cxx:971
 TGX11.cxx:972
 TGX11.cxx:973
 TGX11.cxx:974
 TGX11.cxx:975
 TGX11.cxx:976
 TGX11.cxx:977
 TGX11.cxx:978
 TGX11.cxx:979
 TGX11.cxx:980
 TGX11.cxx:981
 TGX11.cxx:982
 TGX11.cxx:983
 TGX11.cxx:984
 TGX11.cxx:985
 TGX11.cxx:986
 TGX11.cxx:987
 TGX11.cxx:988
 TGX11.cxx:989
 TGX11.cxx:990
 TGX11.cxx:991
 TGX11.cxx:992
 TGX11.cxx:993
 TGX11.cxx:994
 TGX11.cxx:995
 TGX11.cxx:996
 TGX11.cxx:997
 TGX11.cxx:998
 TGX11.cxx:999
 TGX11.cxx:1000
 TGX11.cxx:1001
 TGX11.cxx:1002
 TGX11.cxx:1003
 TGX11.cxx:1004
 TGX11.cxx:1005
 TGX11.cxx:1006
 TGX11.cxx:1007
 TGX11.cxx:1008
 TGX11.cxx:1009
 TGX11.cxx:1010
 TGX11.cxx:1011
 TGX11.cxx:1012
 TGX11.cxx:1013
 TGX11.cxx:1014
 TGX11.cxx:1015
 TGX11.cxx:1016
 TGX11.cxx:1017
 TGX11.cxx:1018
 TGX11.cxx:1019
 TGX11.cxx:1020
 TGX11.cxx:1021
 TGX11.cxx:1022
 TGX11.cxx:1023
 TGX11.cxx:1024
 TGX11.cxx:1025
 TGX11.cxx:1026
 TGX11.cxx:1027
 TGX11.cxx:1028
 TGX11.cxx:1029
 TGX11.cxx:1030
 TGX11.cxx:1031
 TGX11.cxx:1032
 TGX11.cxx:1033
 TGX11.cxx:1034
 TGX11.cxx:1035
 TGX11.cxx:1036
 TGX11.cxx:1037
 TGX11.cxx:1038
 TGX11.cxx:1039
 TGX11.cxx:1040
 TGX11.cxx:1041
 TGX11.cxx:1042
 TGX11.cxx:1043
 TGX11.cxx:1044
 TGX11.cxx:1045
 TGX11.cxx:1046
 TGX11.cxx:1047
 TGX11.cxx:1048
 TGX11.cxx:1049
 TGX11.cxx:1050
 TGX11.cxx:1051
 TGX11.cxx:1052
 TGX11.cxx:1053
 TGX11.cxx:1054
 TGX11.cxx:1055
 TGX11.cxx:1056
 TGX11.cxx:1057
 TGX11.cxx:1058
 TGX11.cxx:1059
 TGX11.cxx:1060
 TGX11.cxx:1061
 TGX11.cxx:1062
 TGX11.cxx:1063
 TGX11.cxx:1064
 TGX11.cxx:1065
 TGX11.cxx:1066
 TGX11.cxx:1067
 TGX11.cxx:1068
 TGX11.cxx:1069
 TGX11.cxx:1070
 TGX11.cxx:1071
 TGX11.cxx:1072
 TGX11.cxx:1073
 TGX11.cxx:1074
 TGX11.cxx:1075
 TGX11.cxx:1076
 TGX11.cxx:1077
 TGX11.cxx:1078
 TGX11.cxx:1079
 TGX11.cxx:1080
 TGX11.cxx:1081
 TGX11.cxx:1082
 TGX11.cxx:1083
 TGX11.cxx:1084
 TGX11.cxx:1085
 TGX11.cxx:1086
 TGX11.cxx:1087
 TGX11.cxx:1088
 TGX11.cxx:1089
 TGX11.cxx:1090
 TGX11.cxx:1091
 TGX11.cxx:1092
 TGX11.cxx:1093
 TGX11.cxx:1094
 TGX11.cxx:1095
 TGX11.cxx:1096
 TGX11.cxx:1097
 TGX11.cxx:1098
 TGX11.cxx:1099
 TGX11.cxx:1100
 TGX11.cxx:1101
 TGX11.cxx:1102
 TGX11.cxx:1103
 TGX11.cxx:1104
 TGX11.cxx:1105
 TGX11.cxx:1106
 TGX11.cxx:1107
 TGX11.cxx:1108
 TGX11.cxx:1109
 TGX11.cxx:1110
 TGX11.cxx:1111
 TGX11.cxx:1112
 TGX11.cxx:1113
 TGX11.cxx:1114
 TGX11.cxx:1115
 TGX11.cxx:1116
 TGX11.cxx:1117
 TGX11.cxx:1118
 TGX11.cxx:1119
 TGX11.cxx:1120
 TGX11.cxx:1121
 TGX11.cxx:1122
 TGX11.cxx:1123
 TGX11.cxx:1124
 TGX11.cxx:1125
 TGX11.cxx:1126
 TGX11.cxx:1127
 TGX11.cxx:1128
 TGX11.cxx:1129
 TGX11.cxx:1130
 TGX11.cxx:1131
 TGX11.cxx:1132
 TGX11.cxx:1133
 TGX11.cxx:1134
 TGX11.cxx:1135
 TGX11.cxx:1136
 TGX11.cxx:1137
 TGX11.cxx:1138
 TGX11.cxx:1139
 TGX11.cxx:1140
 TGX11.cxx:1141
 TGX11.cxx:1142
 TGX11.cxx:1143
 TGX11.cxx:1144
 TGX11.cxx:1145
 TGX11.cxx:1146
 TGX11.cxx:1147
 TGX11.cxx:1148
 TGX11.cxx:1149
 TGX11.cxx:1150
 TGX11.cxx:1151
 TGX11.cxx:1152
 TGX11.cxx:1153
 TGX11.cxx:1154
 TGX11.cxx:1155
 TGX11.cxx:1156
 TGX11.cxx:1157
 TGX11.cxx:1158
 TGX11.cxx:1159
 TGX11.cxx:1160
 TGX11.cxx:1161
 TGX11.cxx:1162
 TGX11.cxx:1163
 TGX11.cxx:1164
 TGX11.cxx:1165
 TGX11.cxx:1166
 TGX11.cxx:1167
 TGX11.cxx:1168
 TGX11.cxx:1169
 TGX11.cxx:1170
 TGX11.cxx:1171
 TGX11.cxx:1172
 TGX11.cxx:1173
 TGX11.cxx:1174
 TGX11.cxx:1175
 TGX11.cxx:1176
 TGX11.cxx:1177
 TGX11.cxx:1178
 TGX11.cxx:1179
 TGX11.cxx:1180
 TGX11.cxx:1181
 TGX11.cxx:1182
 TGX11.cxx:1183
 TGX11.cxx:1184
 TGX11.cxx:1185
 TGX11.cxx:1186
 TGX11.cxx:1187
 TGX11.cxx:1188
 TGX11.cxx:1189
 TGX11.cxx:1190
 TGX11.cxx:1191
 TGX11.cxx:1192
 TGX11.cxx:1193
 TGX11.cxx:1194
 TGX11.cxx:1195
 TGX11.cxx:1196
 TGX11.cxx:1197
 TGX11.cxx:1198
 TGX11.cxx:1199
 TGX11.cxx:1200
 TGX11.cxx:1201
 TGX11.cxx:1202
 TGX11.cxx:1203
 TGX11.cxx:1204
 TGX11.cxx:1205
 TGX11.cxx:1206
 TGX11.cxx:1207
 TGX11.cxx:1208
 TGX11.cxx:1209
 TGX11.cxx:1210
 TGX11.cxx:1211
 TGX11.cxx:1212
 TGX11.cxx:1213
 TGX11.cxx:1214
 TGX11.cxx:1215
 TGX11.cxx:1216
 TGX11.cxx:1217
 TGX11.cxx:1218
 TGX11.cxx:1219
 TGX11.cxx:1220
 TGX11.cxx:1221
 TGX11.cxx:1222
 TGX11.cxx:1223
 TGX11.cxx:1224
 TGX11.cxx:1225
 TGX11.cxx:1226
 TGX11.cxx:1227
 TGX11.cxx:1228
 TGX11.cxx:1229
 TGX11.cxx:1230
 TGX11.cxx:1231
 TGX11.cxx:1232
 TGX11.cxx:1233
 TGX11.cxx:1234
 TGX11.cxx:1235
 TGX11.cxx:1236
 TGX11.cxx:1237
 TGX11.cxx:1238
 TGX11.cxx:1239
 TGX11.cxx:1240
 TGX11.cxx:1241
 TGX11.cxx:1242
 TGX11.cxx:1243
 TGX11.cxx:1244
 TGX11.cxx:1245
 TGX11.cxx:1246
 TGX11.cxx:1247
 TGX11.cxx:1248
 TGX11.cxx:1249
 TGX11.cxx:1250
 TGX11.cxx:1251
 TGX11.cxx:1252
 TGX11.cxx:1253
 TGX11.cxx:1254
 TGX11.cxx:1255
 TGX11.cxx:1256
 TGX11.cxx:1257
 TGX11.cxx:1258
 TGX11.cxx:1259
 TGX11.cxx:1260
 TGX11.cxx:1261
 TGX11.cxx:1262
 TGX11.cxx:1263
 TGX11.cxx:1264
 TGX11.cxx:1265
 TGX11.cxx:1266
 TGX11.cxx:1267
 TGX11.cxx:1268
 TGX11.cxx:1269
 TGX11.cxx:1270
 TGX11.cxx:1271
 TGX11.cxx:1272
 TGX11.cxx:1273
 TGX11.cxx:1274
 TGX11.cxx:1275
 TGX11.cxx:1276
 TGX11.cxx:1277
 TGX11.cxx:1278
 TGX11.cxx:1279
 TGX11.cxx:1280
 TGX11.cxx:1281
 TGX11.cxx:1282
 TGX11.cxx:1283
 TGX11.cxx:1284
 TGX11.cxx:1285
 TGX11.cxx:1286
 TGX11.cxx:1287
 TGX11.cxx:1288
 TGX11.cxx:1289
 TGX11.cxx:1290
 TGX11.cxx:1291
 TGX11.cxx:1292
 TGX11.cxx:1293
 TGX11.cxx:1294
 TGX11.cxx:1295
 TGX11.cxx:1296
 TGX11.cxx:1297
 TGX11.cxx:1298
 TGX11.cxx:1299
 TGX11.cxx:1300
 TGX11.cxx:1301
 TGX11.cxx:1302
 TGX11.cxx:1303
 TGX11.cxx:1304
 TGX11.cxx:1305
 TGX11.cxx:1306
 TGX11.cxx:1307
 TGX11.cxx:1308
 TGX11.cxx:1309
 TGX11.cxx:1310
 TGX11.cxx:1311
 TGX11.cxx:1312
 TGX11.cxx:1313
 TGX11.cxx:1314
 TGX11.cxx:1315
 TGX11.cxx:1316
 TGX11.cxx:1317
 TGX11.cxx:1318
 TGX11.cxx:1319
 TGX11.cxx:1320
 TGX11.cxx:1321
 TGX11.cxx:1322
 TGX11.cxx:1323
 TGX11.cxx:1324
 TGX11.cxx:1325
 TGX11.cxx:1326
 TGX11.cxx:1327
 TGX11.cxx:1328
 TGX11.cxx:1329
 TGX11.cxx:1330
 TGX11.cxx:1331
 TGX11.cxx:1332
 TGX11.cxx:1333
 TGX11.cxx:1334
 TGX11.cxx:1335
 TGX11.cxx:1336
 TGX11.cxx:1337
 TGX11.cxx:1338
 TGX11.cxx:1339
 TGX11.cxx:1340
 TGX11.cxx:1341
 TGX11.cxx:1342
 TGX11.cxx:1343
 TGX11.cxx:1344
 TGX11.cxx:1345
 TGX11.cxx:1346
 TGX11.cxx:1347
 TGX11.cxx:1348
 TGX11.cxx:1349
 TGX11.cxx:1350
 TGX11.cxx:1351
 TGX11.cxx:1352
 TGX11.cxx:1353
 TGX11.cxx:1354
 TGX11.cxx:1355
 TGX11.cxx:1356
 TGX11.cxx:1357
 TGX11.cxx:1358
 TGX11.cxx:1359
 TGX11.cxx:1360
 TGX11.cxx:1361
 TGX11.cxx:1362
 TGX11.cxx:1363
 TGX11.cxx:1364
 TGX11.cxx:1365
 TGX11.cxx:1366
 TGX11.cxx:1367
 TGX11.cxx:1368
 TGX11.cxx:1369
 TGX11.cxx:1370
 TGX11.cxx:1371
 TGX11.cxx:1372
 TGX11.cxx:1373
 TGX11.cxx:1374
 TGX11.cxx:1375
 TGX11.cxx:1376
 TGX11.cxx:1377
 TGX11.cxx:1378
 TGX11.cxx:1379
 TGX11.cxx:1380
 TGX11.cxx:1381
 TGX11.cxx:1382
 TGX11.cxx:1383
 TGX11.cxx:1384
 TGX11.cxx:1385
 TGX11.cxx:1386
 TGX11.cxx:1387
 TGX11.cxx:1388
 TGX11.cxx:1389
 TGX11.cxx:1390
 TGX11.cxx:1391
 TGX11.cxx:1392
 TGX11.cxx:1393
 TGX11.cxx:1394
 TGX11.cxx:1395
 TGX11.cxx:1396
 TGX11.cxx:1397
 TGX11.cxx:1398
 TGX11.cxx:1399
 TGX11.cxx:1400
 TGX11.cxx:1401
 TGX11.cxx:1402
 TGX11.cxx:1403
 TGX11.cxx:1404
 TGX11.cxx:1405
 TGX11.cxx:1406
 TGX11.cxx:1407
 TGX11.cxx:1408
 TGX11.cxx:1409
 TGX11.cxx:1410
 TGX11.cxx:1411
 TGX11.cxx:1412
 TGX11.cxx:1413
 TGX11.cxx:1414
 TGX11.cxx:1415
 TGX11.cxx:1416
 TGX11.cxx:1417
 TGX11.cxx:1418
 TGX11.cxx:1419
 TGX11.cxx:1420
 TGX11.cxx:1421
 TGX11.cxx:1422
 TGX11.cxx:1423
 TGX11.cxx:1424
 TGX11.cxx:1425
 TGX11.cxx:1426
 TGX11.cxx:1427
 TGX11.cxx:1428
 TGX11.cxx:1429
 TGX11.cxx:1430
 TGX11.cxx:1431
 TGX11.cxx:1432
 TGX11.cxx:1433
 TGX11.cxx:1434
 TGX11.cxx:1435
 TGX11.cxx:1436
 TGX11.cxx:1437
 TGX11.cxx:1438
 TGX11.cxx:1439
 TGX11.cxx:1440
 TGX11.cxx:1441
 TGX11.cxx:1442
 TGX11.cxx:1443
 TGX11.cxx:1444
 TGX11.cxx:1445
 TGX11.cxx:1446
 TGX11.cxx:1447
 TGX11.cxx:1448
 TGX11.cxx:1449
 TGX11.cxx:1450
 TGX11.cxx:1451
 TGX11.cxx:1452
 TGX11.cxx:1453
 TGX11.cxx:1454
 TGX11.cxx:1455
 TGX11.cxx:1456
 TGX11.cxx:1457
 TGX11.cxx:1458
 TGX11.cxx:1459
 TGX11.cxx:1460
 TGX11.cxx:1461
 TGX11.cxx:1462
 TGX11.cxx:1463
 TGX11.cxx:1464
 TGX11.cxx:1465
 TGX11.cxx:1466
 TGX11.cxx:1467
 TGX11.cxx:1468
 TGX11.cxx:1469
 TGX11.cxx:1470
 TGX11.cxx:1471
 TGX11.cxx:1472
 TGX11.cxx:1473
 TGX11.cxx:1474
 TGX11.cxx:1475
 TGX11.cxx:1476
 TGX11.cxx:1477
 TGX11.cxx:1478
 TGX11.cxx:1479
 TGX11.cxx:1480
 TGX11.cxx:1481
 TGX11.cxx:1482
 TGX11.cxx:1483
 TGX11.cxx:1484
 TGX11.cxx:1485
 TGX11.cxx:1486
 TGX11.cxx:1487
 TGX11.cxx:1488
 TGX11.cxx:1489
 TGX11.cxx:1490
 TGX11.cxx:1491
 TGX11.cxx:1492
 TGX11.cxx:1493
 TGX11.cxx:1494
 TGX11.cxx:1495
 TGX11.cxx:1496
 TGX11.cxx:1497
 TGX11.cxx:1498
 TGX11.cxx:1499
 TGX11.cxx:1500
 TGX11.cxx:1501
 TGX11.cxx:1502
 TGX11.cxx:1503
 TGX11.cxx:1504
 TGX11.cxx:1505
 TGX11.cxx:1506
 TGX11.cxx:1507
 TGX11.cxx:1508
 TGX11.cxx:1509
 TGX11.cxx:1510
 TGX11.cxx:1511
 TGX11.cxx:1512
 TGX11.cxx:1513
 TGX11.cxx:1514
 TGX11.cxx:1515
 TGX11.cxx:1516
 TGX11.cxx:1517
 TGX11.cxx:1518
 TGX11.cxx:1519
 TGX11.cxx:1520
 TGX11.cxx:1521
 TGX11.cxx:1522
 TGX11.cxx:1523
 TGX11.cxx:1524
 TGX11.cxx:1525
 TGX11.cxx:1526
 TGX11.cxx:1527
 TGX11.cxx:1528
 TGX11.cxx:1529
 TGX11.cxx:1530
 TGX11.cxx:1531
 TGX11.cxx:1532
 TGX11.cxx:1533
 TGX11.cxx:1534
 TGX11.cxx:1535
 TGX11.cxx:1536
 TGX11.cxx:1537
 TGX11.cxx:1538
 TGX11.cxx:1539
 TGX11.cxx:1540
 TGX11.cxx:1541
 TGX11.cxx:1542
 TGX11.cxx:1543
 TGX11.cxx:1544
 TGX11.cxx:1545
 TGX11.cxx:1546
 TGX11.cxx:1547
 TGX11.cxx:1548
 TGX11.cxx:1549
 TGX11.cxx:1550
 TGX11.cxx:1551
 TGX11.cxx:1552
 TGX11.cxx:1553
 TGX11.cxx:1554
 TGX11.cxx:1555
 TGX11.cxx:1556
 TGX11.cxx:1557
 TGX11.cxx:1558
 TGX11.cxx:1559
 TGX11.cxx:1560
 TGX11.cxx:1561
 TGX11.cxx:1562
 TGX11.cxx:1563
 TGX11.cxx:1564
 TGX11.cxx:1565
 TGX11.cxx:1566
 TGX11.cxx:1567
 TGX11.cxx:1568
 TGX11.cxx:1569
 TGX11.cxx:1570
 TGX11.cxx:1571
 TGX11.cxx:1572
 TGX11.cxx:1573
 TGX11.cxx:1574
 TGX11.cxx:1575
 TGX11.cxx:1576
 TGX11.cxx:1577
 TGX11.cxx:1578
 TGX11.cxx:1579
 TGX11.cxx:1580
 TGX11.cxx:1581
 TGX11.cxx:1582
 TGX11.cxx:1583
 TGX11.cxx:1584
 TGX11.cxx:1585
 TGX11.cxx:1586
 TGX11.cxx:1587
 TGX11.cxx:1588
 TGX11.cxx:1589
 TGX11.cxx:1590
 TGX11.cxx:1591
 TGX11.cxx:1592
 TGX11.cxx:1593
 TGX11.cxx:1594
 TGX11.cxx:1595
 TGX11.cxx:1596
 TGX11.cxx:1597
 TGX11.cxx:1598
 TGX11.cxx:1599
 TGX11.cxx:1600
 TGX11.cxx:1601
 TGX11.cxx:1602
 TGX11.cxx:1603
 TGX11.cxx:1604
 TGX11.cxx:1605
 TGX11.cxx:1606
 TGX11.cxx:1607
 TGX11.cxx:1608
 TGX11.cxx:1609
 TGX11.cxx:1610
 TGX11.cxx:1611
 TGX11.cxx:1612
 TGX11.cxx:1613
 TGX11.cxx:1614
 TGX11.cxx:1615
 TGX11.cxx:1616
 TGX11.cxx:1617
 TGX11.cxx:1618
 TGX11.cxx:1619
 TGX11.cxx:1620
 TGX11.cxx:1621
 TGX11.cxx:1622
 TGX11.cxx:1623
 TGX11.cxx:1624
 TGX11.cxx:1625
 TGX11.cxx:1626
 TGX11.cxx:1627
 TGX11.cxx:1628
 TGX11.cxx:1629
 TGX11.cxx:1630
 TGX11.cxx:1631
 TGX11.cxx:1632
 TGX11.cxx:1633
 TGX11.cxx:1634
 TGX11.cxx:1635
 TGX11.cxx:1636
 TGX11.cxx:1637
 TGX11.cxx:1638
 TGX11.cxx:1639
 TGX11.cxx:1640
 TGX11.cxx:1641
 TGX11.cxx:1642
 TGX11.cxx:1643
 TGX11.cxx:1644
 TGX11.cxx:1645
 TGX11.cxx:1646
 TGX11.cxx:1647
 TGX11.cxx:1648
 TGX11.cxx:1649
 TGX11.cxx:1650
 TGX11.cxx:1651
 TGX11.cxx:1652
 TGX11.cxx:1653
 TGX11.cxx:1654
 TGX11.cxx:1655
 TGX11.cxx:1656
 TGX11.cxx:1657
 TGX11.cxx:1658
 TGX11.cxx:1659
 TGX11.cxx:1660
 TGX11.cxx:1661
 TGX11.cxx:1662
 TGX11.cxx:1663
 TGX11.cxx:1664
 TGX11.cxx:1665
 TGX11.cxx:1666
 TGX11.cxx:1667
 TGX11.cxx:1668
 TGX11.cxx:1669
 TGX11.cxx:1670
 TGX11.cxx:1671
 TGX11.cxx:1672
 TGX11.cxx:1673
 TGX11.cxx:1674
 TGX11.cxx:1675
 TGX11.cxx:1676
 TGX11.cxx:1677
 TGX11.cxx:1678
 TGX11.cxx:1679
 TGX11.cxx:1680
 TGX11.cxx:1681
 TGX11.cxx:1682
 TGX11.cxx:1683
 TGX11.cxx:1684
 TGX11.cxx:1685
 TGX11.cxx:1686
 TGX11.cxx:1687
 TGX11.cxx:1688
 TGX11.cxx:1689
 TGX11.cxx:1690
 TGX11.cxx:1691
 TGX11.cxx:1692
 TGX11.cxx:1693
 TGX11.cxx:1694
 TGX11.cxx:1695
 TGX11.cxx:1696
 TGX11.cxx:1697
 TGX11.cxx:1698
 TGX11.cxx:1699
 TGX11.cxx:1700
 TGX11.cxx:1701
 TGX11.cxx:1702
 TGX11.cxx:1703
 TGX11.cxx:1704
 TGX11.cxx:1705
 TGX11.cxx:1706
 TGX11.cxx:1707
 TGX11.cxx:1708
 TGX11.cxx:1709
 TGX11.cxx:1710
 TGX11.cxx:1711
 TGX11.cxx:1712
 TGX11.cxx:1713
 TGX11.cxx:1714
 TGX11.cxx:1715
 TGX11.cxx:1716
 TGX11.cxx:1717
 TGX11.cxx:1718
 TGX11.cxx:1719
 TGX11.cxx:1720
 TGX11.cxx:1721
 TGX11.cxx:1722
 TGX11.cxx:1723
 TGX11.cxx:1724
 TGX11.cxx:1725
 TGX11.cxx:1726
 TGX11.cxx:1727
 TGX11.cxx:1728
 TGX11.cxx:1729
 TGX11.cxx:1730
 TGX11.cxx:1731
 TGX11.cxx:1732
 TGX11.cxx:1733
 TGX11.cxx:1734
 TGX11.cxx:1735
 TGX11.cxx:1736
 TGX11.cxx:1737
 TGX11.cxx:1738
 TGX11.cxx:1739
 TGX11.cxx:1740
 TGX11.cxx:1741
 TGX11.cxx:1742
 TGX11.cxx:1743
 TGX11.cxx:1744
 TGX11.cxx:1745
 TGX11.cxx:1746
 TGX11.cxx:1747
 TGX11.cxx:1748
 TGX11.cxx:1749
 TGX11.cxx:1750
 TGX11.cxx:1751
 TGX11.cxx:1752
 TGX11.cxx:1753
 TGX11.cxx:1754
 TGX11.cxx:1755
 TGX11.cxx:1756
 TGX11.cxx:1757
 TGX11.cxx:1758
 TGX11.cxx:1759
 TGX11.cxx:1760
 TGX11.cxx:1761
 TGX11.cxx:1762
 TGX11.cxx:1763
 TGX11.cxx:1764
 TGX11.cxx:1765
 TGX11.cxx:1766
 TGX11.cxx:1767
 TGX11.cxx:1768
 TGX11.cxx:1769
 TGX11.cxx:1770
 TGX11.cxx:1771
 TGX11.cxx:1772
 TGX11.cxx:1773
 TGX11.cxx:1774
 TGX11.cxx:1775
 TGX11.cxx:1776
 TGX11.cxx:1777
 TGX11.cxx:1778
 TGX11.cxx:1779
 TGX11.cxx:1780
 TGX11.cxx:1781
 TGX11.cxx:1782
 TGX11.cxx:1783
 TGX11.cxx:1784
 TGX11.cxx:1785
 TGX11.cxx:1786
 TGX11.cxx:1787
 TGX11.cxx:1788
 TGX11.cxx:1789
 TGX11.cxx:1790
 TGX11.cxx:1791
 TGX11.cxx:1792
 TGX11.cxx:1793
 TGX11.cxx:1794
 TGX11.cxx:1795
 TGX11.cxx:1796
 TGX11.cxx:1797
 TGX11.cxx:1798
 TGX11.cxx:1799
 TGX11.cxx:1800
 TGX11.cxx:1801
 TGX11.cxx:1802
 TGX11.cxx:1803
 TGX11.cxx:1804
 TGX11.cxx:1805
 TGX11.cxx:1806
 TGX11.cxx:1807
 TGX11.cxx:1808
 TGX11.cxx:1809
 TGX11.cxx:1810
 TGX11.cxx:1811
 TGX11.cxx:1812
 TGX11.cxx:1813
 TGX11.cxx:1814
 TGX11.cxx:1815
 TGX11.cxx:1816
 TGX11.cxx:1817
 TGX11.cxx:1818
 TGX11.cxx:1819
 TGX11.cxx:1820
 TGX11.cxx:1821
 TGX11.cxx:1822
 TGX11.cxx:1823
 TGX11.cxx:1824
 TGX11.cxx:1825
 TGX11.cxx:1826
 TGX11.cxx:1827
 TGX11.cxx:1828
 TGX11.cxx:1829
 TGX11.cxx:1830
 TGX11.cxx:1831
 TGX11.cxx:1832
 TGX11.cxx:1833
 TGX11.cxx:1834
 TGX11.cxx:1835
 TGX11.cxx:1836
 TGX11.cxx:1837
 TGX11.cxx:1838
 TGX11.cxx:1839
 TGX11.cxx:1840
 TGX11.cxx:1841
 TGX11.cxx:1842
 TGX11.cxx:1843
 TGX11.cxx:1844
 TGX11.cxx:1845
 TGX11.cxx:1846
 TGX11.cxx:1847
 TGX11.cxx:1848
 TGX11.cxx:1849
 TGX11.cxx:1850
 TGX11.cxx:1851
 TGX11.cxx:1852
 TGX11.cxx:1853
 TGX11.cxx:1854
 TGX11.cxx:1855
 TGX11.cxx:1856
 TGX11.cxx:1857
 TGX11.cxx:1858
 TGX11.cxx:1859
 TGX11.cxx:1860
 TGX11.cxx:1861
 TGX11.cxx:1862
 TGX11.cxx:1863
 TGX11.cxx:1864
 TGX11.cxx:1865
 TGX11.cxx:1866
 TGX11.cxx:1867
 TGX11.cxx:1868
 TGX11.cxx:1869
 TGX11.cxx:1870
 TGX11.cxx:1871
 TGX11.cxx:1872
 TGX11.cxx:1873
 TGX11.cxx:1874
 TGX11.cxx:1875
 TGX11.cxx:1876
 TGX11.cxx:1877
 TGX11.cxx:1878
 TGX11.cxx:1879
 TGX11.cxx:1880
 TGX11.cxx:1881
 TGX11.cxx:1882
 TGX11.cxx:1883
 TGX11.cxx:1884
 TGX11.cxx:1885
 TGX11.cxx:1886
 TGX11.cxx:1887
 TGX11.cxx:1888
 TGX11.cxx:1889
 TGX11.cxx:1890
 TGX11.cxx:1891
 TGX11.cxx:1892
 TGX11.cxx:1893
 TGX11.cxx:1894
 TGX11.cxx:1895
 TGX11.cxx:1896
 TGX11.cxx:1897
 TGX11.cxx:1898
 TGX11.cxx:1899
 TGX11.cxx:1900
 TGX11.cxx:1901
 TGX11.cxx:1902
 TGX11.cxx:1903
 TGX11.cxx:1904
 TGX11.cxx:1905
 TGX11.cxx:1906
 TGX11.cxx:1907
 TGX11.cxx:1908
 TGX11.cxx:1909
 TGX11.cxx:1910
 TGX11.cxx:1911
 TGX11.cxx:1912
 TGX11.cxx:1913
 TGX11.cxx:1914
 TGX11.cxx:1915
 TGX11.cxx:1916
 TGX11.cxx:1917
 TGX11.cxx:1918
 TGX11.cxx:1919
 TGX11.cxx:1920
 TGX11.cxx:1921
 TGX11.cxx:1922
 TGX11.cxx:1923
 TGX11.cxx:1924
 TGX11.cxx:1925
 TGX11.cxx:1926
 TGX11.cxx:1927
 TGX11.cxx:1928
 TGX11.cxx:1929
 TGX11.cxx:1930
 TGX11.cxx:1931
 TGX11.cxx:1932
 TGX11.cxx:1933
 TGX11.cxx:1934
 TGX11.cxx:1935
 TGX11.cxx:1936
 TGX11.cxx:1937
 TGX11.cxx:1938
 TGX11.cxx:1939
 TGX11.cxx:1940
 TGX11.cxx:1941
 TGX11.cxx:1942
 TGX11.cxx:1943
 TGX11.cxx:1944
 TGX11.cxx:1945
 TGX11.cxx:1946
 TGX11.cxx:1947
 TGX11.cxx:1948
 TGX11.cxx:1949
 TGX11.cxx:1950
 TGX11.cxx:1951
 TGX11.cxx:1952
 TGX11.cxx:1953
 TGX11.cxx:1954
 TGX11.cxx:1955
 TGX11.cxx:1956
 TGX11.cxx:1957
 TGX11.cxx:1958
 TGX11.cxx:1959
 TGX11.cxx:1960
 TGX11.cxx:1961
 TGX11.cxx:1962
 TGX11.cxx:1963
 TGX11.cxx:1964
 TGX11.cxx:1965
 TGX11.cxx:1966
 TGX11.cxx:1967
 TGX11.cxx:1968
 TGX11.cxx:1969
 TGX11.cxx:1970
 TGX11.cxx:1971
 TGX11.cxx:1972
 TGX11.cxx:1973
 TGX11.cxx:1974
 TGX11.cxx:1975
 TGX11.cxx:1976
 TGX11.cxx:1977
 TGX11.cxx:1978
 TGX11.cxx:1979
 TGX11.cxx:1980
 TGX11.cxx:1981
 TGX11.cxx:1982
 TGX11.cxx:1983
 TGX11.cxx:1984
 TGX11.cxx:1985
 TGX11.cxx:1986
 TGX11.cxx:1987
 TGX11.cxx:1988
 TGX11.cxx:1989
 TGX11.cxx:1990
 TGX11.cxx:1991
 TGX11.cxx:1992
 TGX11.cxx:1993
 TGX11.cxx:1994
 TGX11.cxx:1995
 TGX11.cxx:1996
 TGX11.cxx:1997
 TGX11.cxx:1998
 TGX11.cxx:1999
 TGX11.cxx:2000
 TGX11.cxx:2001
 TGX11.cxx:2002
 TGX11.cxx:2003
 TGX11.cxx:2004
 TGX11.cxx:2005
 TGX11.cxx:2006
 TGX11.cxx:2007
 TGX11.cxx:2008
 TGX11.cxx:2009
 TGX11.cxx:2010
 TGX11.cxx:2011
 TGX11.cxx:2012
 TGX11.cxx:2013
 TGX11.cxx:2014
 TGX11.cxx:2015
 TGX11.cxx:2016
 TGX11.cxx:2017
 TGX11.cxx:2018
 TGX11.cxx:2019
 TGX11.cxx:2020
 TGX11.cxx:2021
 TGX11.cxx:2022
 TGX11.cxx:2023
 TGX11.cxx:2024
 TGX11.cxx:2025
 TGX11.cxx:2026
 TGX11.cxx:2027
 TGX11.cxx:2028
 TGX11.cxx:2029
 TGX11.cxx:2030
 TGX11.cxx:2031
 TGX11.cxx:2032
 TGX11.cxx:2033
 TGX11.cxx:2034
 TGX11.cxx:2035
 TGX11.cxx:2036
 TGX11.cxx:2037
 TGX11.cxx:2038
 TGX11.cxx:2039
 TGX11.cxx:2040
 TGX11.cxx:2041
 TGX11.cxx:2042
 TGX11.cxx:2043
 TGX11.cxx:2044
 TGX11.cxx:2045
 TGX11.cxx:2046
 TGX11.cxx:2047
 TGX11.cxx:2048
 TGX11.cxx:2049
 TGX11.cxx:2050
 TGX11.cxx:2051
 TGX11.cxx:2052
 TGX11.cxx:2053
 TGX11.cxx:2054
 TGX11.cxx:2055
 TGX11.cxx:2056
 TGX11.cxx:2057
 TGX11.cxx:2058
 TGX11.cxx:2059
 TGX11.cxx:2060
 TGX11.cxx:2061
 TGX11.cxx:2062
 TGX11.cxx:2063
 TGX11.cxx:2064
 TGX11.cxx:2065
 TGX11.cxx:2066
 TGX11.cxx:2067
 TGX11.cxx:2068
 TGX11.cxx:2069
 TGX11.cxx:2070
 TGX11.cxx:2071
 TGX11.cxx:2072
 TGX11.cxx:2073
 TGX11.cxx:2074
 TGX11.cxx:2075
 TGX11.cxx:2076
 TGX11.cxx:2077
 TGX11.cxx:2078
 TGX11.cxx:2079
 TGX11.cxx:2080
 TGX11.cxx:2081
 TGX11.cxx:2082
 TGX11.cxx:2083
 TGX11.cxx:2084
 TGX11.cxx:2085
 TGX11.cxx:2086
 TGX11.cxx:2087
 TGX11.cxx:2088
 TGX11.cxx:2089
 TGX11.cxx:2090
 TGX11.cxx:2091
 TGX11.cxx:2092
 TGX11.cxx:2093
 TGX11.cxx:2094
 TGX11.cxx:2095
 TGX11.cxx:2096
 TGX11.cxx:2097
 TGX11.cxx:2098
 TGX11.cxx:2099
 TGX11.cxx:2100
 TGX11.cxx:2101
 TGX11.cxx:2102
 TGX11.cxx:2103
 TGX11.cxx:2104
 TGX11.cxx:2105
 TGX11.cxx:2106
 TGX11.cxx:2107
 TGX11.cxx:2108
 TGX11.cxx:2109
 TGX11.cxx:2110
 TGX11.cxx:2111
 TGX11.cxx:2112
 TGX11.cxx:2113
 TGX11.cxx:2114
 TGX11.cxx:2115
 TGX11.cxx:2116
 TGX11.cxx:2117
 TGX11.cxx:2118
 TGX11.cxx:2119
 TGX11.cxx:2120
 TGX11.cxx:2121
 TGX11.cxx:2122
 TGX11.cxx:2123
 TGX11.cxx:2124
 TGX11.cxx:2125
 TGX11.cxx:2126
 TGX11.cxx:2127
 TGX11.cxx:2128
 TGX11.cxx:2129
 TGX11.cxx:2130
 TGX11.cxx:2131
 TGX11.cxx:2132
 TGX11.cxx:2133
 TGX11.cxx:2134
 TGX11.cxx:2135
 TGX11.cxx:2136
 TGX11.cxx:2137
 TGX11.cxx:2138
 TGX11.cxx:2139
 TGX11.cxx:2140
 TGX11.cxx:2141
 TGX11.cxx:2142
 TGX11.cxx:2143
 TGX11.cxx:2144
 TGX11.cxx:2145
 TGX11.cxx:2146
 TGX11.cxx:2147
 TGX11.cxx:2148
 TGX11.cxx:2149
 TGX11.cxx:2150
 TGX11.cxx:2151
 TGX11.cxx:2152
 TGX11.cxx:2153
 TGX11.cxx:2154
 TGX11.cxx:2155
 TGX11.cxx:2156
 TGX11.cxx:2157
 TGX11.cxx:2158
 TGX11.cxx:2159
 TGX11.cxx:2160
 TGX11.cxx:2161
 TGX11.cxx:2162
 TGX11.cxx:2163
 TGX11.cxx:2164
 TGX11.cxx:2165
 TGX11.cxx:2166
 TGX11.cxx:2167
 TGX11.cxx:2168
 TGX11.cxx:2169
 TGX11.cxx:2170
 TGX11.cxx:2171
 TGX11.cxx:2172
 TGX11.cxx:2173
 TGX11.cxx:2174
 TGX11.cxx:2175
 TGX11.cxx:2176
 TGX11.cxx:2177
 TGX11.cxx:2178
 TGX11.cxx:2179
 TGX11.cxx:2180
 TGX11.cxx:2181
 TGX11.cxx:2182
 TGX11.cxx:2183
 TGX11.cxx:2184
 TGX11.cxx:2185
 TGX11.cxx:2186
 TGX11.cxx:2187
 TGX11.cxx:2188
 TGX11.cxx:2189
 TGX11.cxx:2190
 TGX11.cxx:2191
 TGX11.cxx:2192
 TGX11.cxx:2193
 TGX11.cxx:2194
 TGX11.cxx:2195
 TGX11.cxx:2196
 TGX11.cxx:2197
 TGX11.cxx:2198
 TGX11.cxx:2199
 TGX11.cxx:2200
 TGX11.cxx:2201
 TGX11.cxx:2202
 TGX11.cxx:2203
 TGX11.cxx:2204
 TGX11.cxx:2205
 TGX11.cxx:2206
 TGX11.cxx:2207
 TGX11.cxx:2208
 TGX11.cxx:2209
 TGX11.cxx:2210
 TGX11.cxx:2211
 TGX11.cxx:2212
 TGX11.cxx:2213
 TGX11.cxx:2214
 TGX11.cxx:2215
 TGX11.cxx:2216
 TGX11.cxx:2217
 TGX11.cxx:2218
 TGX11.cxx:2219
 TGX11.cxx:2220
 TGX11.cxx:2221
 TGX11.cxx:2222
 TGX11.cxx:2223
 TGX11.cxx:2224
 TGX11.cxx:2225
 TGX11.cxx:2226
 TGX11.cxx:2227
 TGX11.cxx:2228
 TGX11.cxx:2229
 TGX11.cxx:2230
 TGX11.cxx:2231
 TGX11.cxx:2232
 TGX11.cxx:2233
 TGX11.cxx:2234
 TGX11.cxx:2235
 TGX11.cxx:2236
 TGX11.cxx:2237
 TGX11.cxx:2238
 TGX11.cxx:2239
 TGX11.cxx:2240
 TGX11.cxx:2241
 TGX11.cxx:2242
 TGX11.cxx:2243
 TGX11.cxx:2244
 TGX11.cxx:2245
 TGX11.cxx:2246
 TGX11.cxx:2247
 TGX11.cxx:2248
 TGX11.cxx:2249
 TGX11.cxx:2250
 TGX11.cxx:2251
 TGX11.cxx:2252
 TGX11.cxx:2253
 TGX11.cxx:2254
 TGX11.cxx:2255
 TGX11.cxx:2256
 TGX11.cxx:2257
 TGX11.cxx:2258
 TGX11.cxx:2259
 TGX11.cxx:2260
 TGX11.cxx:2261
 TGX11.cxx:2262
 TGX11.cxx:2263
 TGX11.cxx:2264
 TGX11.cxx:2265
 TGX11.cxx:2266
 TGX11.cxx:2267
 TGX11.cxx:2268
 TGX11.cxx:2269
 TGX11.cxx:2270
 TGX11.cxx:2271
 TGX11.cxx:2272
 TGX11.cxx:2273
 TGX11.cxx:2274
 TGX11.cxx:2275
 TGX11.cxx:2276
 TGX11.cxx:2277
 TGX11.cxx:2278
 TGX11.cxx:2279
 TGX11.cxx:2280
 TGX11.cxx:2281
 TGX11.cxx:2282
 TGX11.cxx:2283
 TGX11.cxx:2284
 TGX11.cxx:2285
 TGX11.cxx:2286
 TGX11.cxx:2287
 TGX11.cxx:2288
 TGX11.cxx:2289
 TGX11.cxx:2290
 TGX11.cxx:2291
 TGX11.cxx:2292
 TGX11.cxx:2293
 TGX11.cxx:2294
 TGX11.cxx:2295
 TGX11.cxx:2296
 TGX11.cxx:2297
 TGX11.cxx:2298
 TGX11.cxx:2299
 TGX11.cxx:2300
 TGX11.cxx:2301
 TGX11.cxx:2302
 TGX11.cxx:2303
 TGX11.cxx:2304
 TGX11.cxx:2305
 TGX11.cxx:2306
 TGX11.cxx:2307
 TGX11.cxx:2308
 TGX11.cxx:2309
 TGX11.cxx:2310
 TGX11.cxx:2311
 TGX11.cxx:2312
 TGX11.cxx:2313
 TGX11.cxx:2314
 TGX11.cxx:2315
 TGX11.cxx:2316
 TGX11.cxx:2317
 TGX11.cxx:2318
 TGX11.cxx:2319
 TGX11.cxx:2320
 TGX11.cxx:2321
 TGX11.cxx:2322
 TGX11.cxx:2323
 TGX11.cxx:2324
 TGX11.cxx:2325
 TGX11.cxx:2326
 TGX11.cxx:2327
 TGX11.cxx:2328
 TGX11.cxx:2329
 TGX11.cxx:2330
 TGX11.cxx:2331
 TGX11.cxx:2332
 TGX11.cxx:2333
 TGX11.cxx:2334
 TGX11.cxx:2335
 TGX11.cxx:2336
 TGX11.cxx:2337
 TGX11.cxx:2338
 TGX11.cxx:2339
 TGX11.cxx:2340
 TGX11.cxx:2341
 TGX11.cxx:2342
 TGX11.cxx:2343
 TGX11.cxx:2344
 TGX11.cxx:2345
 TGX11.cxx:2346
 TGX11.cxx:2347
 TGX11.cxx:2348
 TGX11.cxx:2349
 TGX11.cxx:2350
 TGX11.cxx:2351
 TGX11.cxx:2352
 TGX11.cxx:2353
 TGX11.cxx:2354
 TGX11.cxx:2355
 TGX11.cxx:2356
 TGX11.cxx:2357
 TGX11.cxx:2358
 TGX11.cxx:2359
 TGX11.cxx:2360
 TGX11.cxx:2361
 TGX11.cxx:2362
 TGX11.cxx:2363
 TGX11.cxx:2364
 TGX11.cxx:2365
 TGX11.cxx:2366
 TGX11.cxx:2367
 TGX11.cxx:2368
 TGX11.cxx:2369
 TGX11.cxx:2370
 TGX11.cxx:2371
 TGX11.cxx:2372
 TGX11.cxx:2373
 TGX11.cxx:2374
 TGX11.cxx:2375
 TGX11.cxx:2376
 TGX11.cxx:2377
 TGX11.cxx:2378
 TGX11.cxx:2379
 TGX11.cxx:2380
 TGX11.cxx:2381
 TGX11.cxx:2382
 TGX11.cxx:2383
 TGX11.cxx:2384
 TGX11.cxx:2385
 TGX11.cxx:2386
 TGX11.cxx:2387
 TGX11.cxx:2388
 TGX11.cxx:2389
 TGX11.cxx:2390
 TGX11.cxx:2391
 TGX11.cxx:2392
 TGX11.cxx:2393
 TGX11.cxx:2394
 TGX11.cxx:2395
 TGX11.cxx:2396
 TGX11.cxx:2397
 TGX11.cxx:2398
 TGX11.cxx:2399
 TGX11.cxx:2400
 TGX11.cxx:2401
 TGX11.cxx:2402
 TGX11.cxx:2403
 TGX11.cxx:2404
 TGX11.cxx:2405
 TGX11.cxx:2406
 TGX11.cxx:2407
 TGX11.cxx:2408
 TGX11.cxx:2409
 TGX11.cxx:2410
 TGX11.cxx:2411
 TGX11.cxx:2412
 TGX11.cxx:2413
 TGX11.cxx:2414
 TGX11.cxx:2415
 TGX11.cxx:2416
 TGX11.cxx:2417
 TGX11.cxx:2418
 TGX11.cxx:2419
 TGX11.cxx:2420
 TGX11.cxx:2421
 TGX11.cxx:2422
 TGX11.cxx:2423
 TGX11.cxx:2424
 TGX11.cxx:2425
 TGX11.cxx:2426
 TGX11.cxx:2427
 TGX11.cxx:2428
 TGX11.cxx:2429
 TGX11.cxx:2430
 TGX11.cxx:2431
 TGX11.cxx:2432
 TGX11.cxx:2433
 TGX11.cxx:2434
 TGX11.cxx:2435
 TGX11.cxx:2436
 TGX11.cxx:2437
 TGX11.cxx:2438
 TGX11.cxx:2439
 TGX11.cxx:2440
 TGX11.cxx:2441
 TGX11.cxx:2442
 TGX11.cxx:2443
 TGX11.cxx:2444
 TGX11.cxx:2445
 TGX11.cxx:2446
 TGX11.cxx:2447
 TGX11.cxx:2448
 TGX11.cxx:2449
 TGX11.cxx:2450
 TGX11.cxx:2451
 TGX11.cxx:2452
 TGX11.cxx:2453
 TGX11.cxx:2454
 TGX11.cxx:2455
 TGX11.cxx:2456
 TGX11.cxx:2457
 TGX11.cxx:2458
 TGX11.cxx:2459
 TGX11.cxx:2460
 TGX11.cxx:2461
 TGX11.cxx:2462
 TGX11.cxx:2463
 TGX11.cxx:2464
 TGX11.cxx:2465
 TGX11.cxx:2466
 TGX11.cxx:2467
 TGX11.cxx:2468
 TGX11.cxx:2469
 TGX11.cxx:2470
 TGX11.cxx:2471
 TGX11.cxx:2472
 TGX11.cxx:2473
 TGX11.cxx:2474
 TGX11.cxx:2475
 TGX11.cxx:2476
 TGX11.cxx:2477
 TGX11.cxx:2478
 TGX11.cxx:2479
 TGX11.cxx:2480
 TGX11.cxx:2481
 TGX11.cxx:2482
 TGX11.cxx:2483
 TGX11.cxx:2484
 TGX11.cxx:2485
 TGX11.cxx:2486
 TGX11.cxx:2487
 TGX11.cxx:2488
 TGX11.cxx:2489
 TGX11.cxx:2490
 TGX11.cxx:2491
 TGX11.cxx:2492
 TGX11.cxx:2493
 TGX11.cxx:2494
 TGX11.cxx:2495
 TGX11.cxx:2496
 TGX11.cxx:2497
 TGX11.cxx:2498
 TGX11.cxx:2499
 TGX11.cxx:2500
 TGX11.cxx:2501
 TGX11.cxx:2502
 TGX11.cxx:2503
 TGX11.cxx:2504
 TGX11.cxx:2505
 TGX11.cxx:2506
 TGX11.cxx:2507
 TGX11.cxx:2508
 TGX11.cxx:2509
 TGX11.cxx:2510
 TGX11.cxx:2511
 TGX11.cxx:2512
 TGX11.cxx:2513
 TGX11.cxx:2514
 TGX11.cxx:2515
 TGX11.cxx:2516
 TGX11.cxx:2517
 TGX11.cxx:2518
 TGX11.cxx:2519
 TGX11.cxx:2520
 TGX11.cxx:2521
 TGX11.cxx:2522
 TGX11.cxx:2523
 TGX11.cxx:2524
 TGX11.cxx:2525
 TGX11.cxx:2526
 TGX11.cxx:2527
 TGX11.cxx:2528
 TGX11.cxx:2529
 TGX11.cxx:2530
 TGX11.cxx:2531
 TGX11.cxx:2532
 TGX11.cxx:2533
 TGX11.cxx:2534
 TGX11.cxx:2535
 TGX11.cxx:2536
 TGX11.cxx:2537
 TGX11.cxx:2538
 TGX11.cxx:2539
 TGX11.cxx:2540
 TGX11.cxx:2541
 TGX11.cxx:2542
 TGX11.cxx:2543
 TGX11.cxx:2544
 TGX11.cxx:2545
 TGX11.cxx:2546
 TGX11.cxx:2547
 TGX11.cxx:2548
 TGX11.cxx:2549
 TGX11.cxx:2550
 TGX11.cxx:2551
 TGX11.cxx:2552
 TGX11.cxx:2553
 TGX11.cxx:2554
 TGX11.cxx:2555
 TGX11.cxx:2556
 TGX11.cxx:2557
 TGX11.cxx:2558
 TGX11.cxx:2559
 TGX11.cxx:2560
 TGX11.cxx:2561
 TGX11.cxx:2562
 TGX11.cxx:2563
 TGX11.cxx:2564
 TGX11.cxx:2565
 TGX11.cxx:2566
 TGX11.cxx:2567
 TGX11.cxx:2568
 TGX11.cxx:2569
 TGX11.cxx:2570
 TGX11.cxx:2571
 TGX11.cxx:2572
 TGX11.cxx:2573
 TGX11.cxx:2574
 TGX11.cxx:2575
 TGX11.cxx:2576
 TGX11.cxx:2577
 TGX11.cxx:2578
 TGX11.cxx:2579
 TGX11.cxx:2580
 TGX11.cxx:2581
 TGX11.cxx:2582
 TGX11.cxx:2583
 TGX11.cxx:2584
 TGX11.cxx:2585
 TGX11.cxx:2586
 TGX11.cxx:2587
 TGX11.cxx:2588
 TGX11.cxx:2589
 TGX11.cxx:2590
 TGX11.cxx:2591
 TGX11.cxx:2592
 TGX11.cxx:2593
 TGX11.cxx:2594
 TGX11.cxx:2595
 TGX11.cxx:2596
 TGX11.cxx:2597
 TGX11.cxx:2598
 TGX11.cxx:2599
 TGX11.cxx:2600
 TGX11.cxx:2601
 TGX11.cxx:2602
 TGX11.cxx:2603
 TGX11.cxx:2604
 TGX11.cxx:2605
 TGX11.cxx:2606
 TGX11.cxx:2607
 TGX11.cxx:2608
 TGX11.cxx:2609
 TGX11.cxx:2610
 TGX11.cxx:2611
 TGX11.cxx:2612
 TGX11.cxx:2613
 TGX11.cxx:2614
 TGX11.cxx:2615
 TGX11.cxx:2616
 TGX11.cxx:2617
 TGX11.cxx:2618
 TGX11.cxx:2619
 TGX11.cxx:2620
 TGX11.cxx:2621
 TGX11.cxx:2622
 TGX11.cxx:2623
 TGX11.cxx:2624
 TGX11.cxx:2625
 TGX11.cxx:2626
 TGX11.cxx:2627
 TGX11.cxx:2628
 TGX11.cxx:2629
 TGX11.cxx:2630
 TGX11.cxx:2631
 TGX11.cxx:2632
 TGX11.cxx:2633
 TGX11.cxx:2634
 TGX11.cxx:2635
 TGX11.cxx:2636
 TGX11.cxx:2637
 TGX11.cxx:2638
 TGX11.cxx:2639
 TGX11.cxx:2640
 TGX11.cxx:2641
 TGX11.cxx:2642
 TGX11.cxx:2643
 TGX11.cxx:2644
 TGX11.cxx:2645
 TGX11.cxx:2646
 TGX11.cxx:2647
 TGX11.cxx:2648
 TGX11.cxx:2649
 TGX11.cxx:2650
 TGX11.cxx:2651
 TGX11.cxx:2652
 TGX11.cxx:2653
 TGX11.cxx:2654
 TGX11.cxx:2655
 TGX11.cxx:2656
 TGX11.cxx:2657
 TGX11.cxx:2658
 TGX11.cxx:2659
 TGX11.cxx:2660
 TGX11.cxx:2661
 TGX11.cxx:2662
 TGX11.cxx:2663
 TGX11.cxx:2664
 TGX11.cxx:2665
 TGX11.cxx:2666
 TGX11.cxx:2667
 TGX11.cxx:2668
 TGX11.cxx:2669
 TGX11.cxx:2670
 TGX11.cxx:2671
 TGX11.cxx:2672
 TGX11.cxx:2673
 TGX11.cxx:2674
 TGX11.cxx:2675
 TGX11.cxx:2676
 TGX11.cxx:2677
 TGX11.cxx:2678
 TGX11.cxx:2679
 TGX11.cxx:2680
 TGX11.cxx:2681
 TGX11.cxx:2682
 TGX11.cxx:2683
 TGX11.cxx:2684
 TGX11.cxx:2685
 TGX11.cxx:2686
 TGX11.cxx:2687
 TGX11.cxx:2688
 TGX11.cxx:2689
 TGX11.cxx:2690
 TGX11.cxx:2691
 TGX11.cxx:2692
 TGX11.cxx:2693
 TGX11.cxx:2694
 TGX11.cxx:2695
 TGX11.cxx:2696
 TGX11.cxx:2697
 TGX11.cxx:2698
 TGX11.cxx:2699
 TGX11.cxx:2700
 TGX11.cxx:2701
 TGX11.cxx:2702
 TGX11.cxx:2703
 TGX11.cxx:2704
 TGX11.cxx:2705
 TGX11.cxx:2706
 TGX11.cxx:2707
 TGX11.cxx:2708
 TGX11.cxx:2709
 TGX11.cxx:2710
 TGX11.cxx:2711
 TGX11.cxx:2712
 TGX11.cxx:2713
 TGX11.cxx:2714
 TGX11.cxx:2715
 TGX11.cxx:2716
 TGX11.cxx:2717
 TGX11.cxx:2718
 TGX11.cxx:2719
 TGX11.cxx:2720
 TGX11.cxx:2721
 TGX11.cxx:2722
 TGX11.cxx:2723
 TGX11.cxx:2724
 TGX11.cxx:2725
 TGX11.cxx:2726
 TGX11.cxx:2727
 TGX11.cxx:2728
 TGX11.cxx:2729
 TGX11.cxx:2730
 TGX11.cxx:2731
 TGX11.cxx:2732
 TGX11.cxx:2733
 TGX11.cxx:2734
 TGX11.cxx:2735
 TGX11.cxx:2736
 TGX11.cxx:2737
 TGX11.cxx:2738
 TGX11.cxx:2739
 TGX11.cxx:2740
 TGX11.cxx:2741
 TGX11.cxx:2742
 TGX11.cxx:2743
 TGX11.cxx:2744
 TGX11.cxx:2745
 TGX11.cxx:2746
 TGX11.cxx:2747
 TGX11.cxx:2748
 TGX11.cxx:2749
 TGX11.cxx:2750
 TGX11.cxx:2751
 TGX11.cxx:2752
 TGX11.cxx:2753
 TGX11.cxx:2754
 TGX11.cxx:2755
 TGX11.cxx:2756
 TGX11.cxx:2757
 TGX11.cxx:2758
 TGX11.cxx:2759
 TGX11.cxx:2760
 TGX11.cxx:2761
 TGX11.cxx:2762
 TGX11.cxx:2763
 TGX11.cxx:2764
 TGX11.cxx:2765
 TGX11.cxx:2766
 TGX11.cxx:2767
 TGX11.cxx:2768
 TGX11.cxx:2769
 TGX11.cxx:2770
 TGX11.cxx:2771
 TGX11.cxx:2772
 TGX11.cxx:2773
 TGX11.cxx:2774
 TGX11.cxx:2775
 TGX11.cxx:2776
 TGX11.cxx:2777
 TGX11.cxx:2778
 TGX11.cxx:2779
 TGX11.cxx:2780
 TGX11.cxx:2781
 TGX11.cxx:2782
 TGX11.cxx:2783
 TGX11.cxx:2784
 TGX11.cxx:2785
 TGX11.cxx:2786
 TGX11.cxx:2787
 TGX11.cxx:2788
 TGX11.cxx:2789
 TGX11.cxx:2790
 TGX11.cxx:2791
 TGX11.cxx:2792
 TGX11.cxx:2793
 TGX11.cxx:2794
 TGX11.cxx:2795
 TGX11.cxx:2796
 TGX11.cxx:2797
 TGX11.cxx:2798
 TGX11.cxx:2799
 TGX11.cxx:2800
 TGX11.cxx:2801
 TGX11.cxx:2802
 TGX11.cxx:2803
 TGX11.cxx:2804
 TGX11.cxx:2805
 TGX11.cxx:2806
 TGX11.cxx:2807
 TGX11.cxx:2808
 TGX11.cxx:2809
 TGX11.cxx:2810
 TGX11.cxx:2811
 TGX11.cxx:2812
 TGX11.cxx:2813
 TGX11.cxx:2814
 TGX11.cxx:2815
 TGX11.cxx:2816
 TGX11.cxx:2817
 TGX11.cxx:2818
 TGX11.cxx:2819
 TGX11.cxx:2820
 TGX11.cxx:2821
 TGX11.cxx:2822
 TGX11.cxx:2823
 TGX11.cxx:2824
 TGX11.cxx:2825
 TGX11.cxx:2826
 TGX11.cxx:2827
 TGX11.cxx:2828
 TGX11.cxx:2829
 TGX11.cxx:2830
 TGX11.cxx:2831
 TGX11.cxx:2832
 TGX11.cxx:2833
 TGX11.cxx:2834
 TGX11.cxx:2835
 TGX11.cxx:2836
 TGX11.cxx:2837
 TGX11.cxx:2838
 TGX11.cxx:2839
 TGX11.cxx:2840
 TGX11.cxx:2841
 TGX11.cxx:2842
 TGX11.cxx:2843
 TGX11.cxx:2844
 TGX11.cxx:2845
 TGX11.cxx:2846
 TGX11.cxx:2847
 TGX11.cxx:2848
 TGX11.cxx:2849
 TGX11.cxx:2850
 TGX11.cxx:2851
 TGX11.cxx:2852
 TGX11.cxx:2853
 TGX11.cxx:2854
 TGX11.cxx:2855
 TGX11.cxx:2856
 TGX11.cxx:2857
 TGX11.cxx:2858
 TGX11.cxx:2859
 TGX11.cxx:2860
 TGX11.cxx:2861
 TGX11.cxx:2862
 TGX11.cxx:2863
 TGX11.cxx:2864
 TGX11.cxx:2865
 TGX11.cxx:2866
 TGX11.cxx:2867
 TGX11.cxx:2868
 TGX11.cxx:2869
 TGX11.cxx:2870
 TGX11.cxx:2871
 TGX11.cxx:2872
 TGX11.cxx:2873
 TGX11.cxx:2874
 TGX11.cxx:2875
 TGX11.cxx:2876
 TGX11.cxx:2877
 TGX11.cxx:2878
 TGX11.cxx:2879
 TGX11.cxx:2880
 TGX11.cxx:2881
 TGX11.cxx:2882
 TGX11.cxx:2883
 TGX11.cxx:2884
 TGX11.cxx:2885
 TGX11.cxx:2886
 TGX11.cxx:2887
 TGX11.cxx:2888
 TGX11.cxx:2889
 TGX11.cxx:2890
 TGX11.cxx:2891
 TGX11.cxx:2892
 TGX11.cxx:2893
 TGX11.cxx:2894
 TGX11.cxx:2895
 TGX11.cxx:2896
 TGX11.cxx:2897
 TGX11.cxx:2898
 TGX11.cxx:2899
 TGX11.cxx:2900
 TGX11.cxx:2901
 TGX11.cxx:2902
 TGX11.cxx:2903
 TGX11.cxx:2904
 TGX11.cxx:2905
 TGX11.cxx:2906
 TGX11.cxx:2907
 TGX11.cxx:2908
 TGX11.cxx:2909
 TGX11.cxx:2910
 TGX11.cxx:2911
 TGX11.cxx:2912
 TGX11.cxx:2913
 TGX11.cxx:2914
 TGX11.cxx:2915
 TGX11.cxx:2916
 TGX11.cxx:2917
 TGX11.cxx:2918
 TGX11.cxx:2919
 TGX11.cxx:2920
 TGX11.cxx:2921
 TGX11.cxx:2922
 TGX11.cxx:2923
 TGX11.cxx:2924
 TGX11.cxx:2925
 TGX11.cxx:2926
 TGX11.cxx:2927
 TGX11.cxx:2928
 TGX11.cxx:2929
 TGX11.cxx:2930
 TGX11.cxx:2931
 TGX11.cxx:2932
 TGX11.cxx:2933
 TGX11.cxx:2934
 TGX11.cxx:2935
 TGX11.cxx:2936
 TGX11.cxx:2937
 TGX11.cxx:2938
 TGX11.cxx:2939
 TGX11.cxx:2940
 TGX11.cxx:2941
 TGX11.cxx:2942
 TGX11.cxx:2943
 TGX11.cxx:2944
 TGX11.cxx:2945
 TGX11.cxx:2946
 TGX11.cxx:2947
 TGX11.cxx:2948
 TGX11.cxx:2949
 TGX11.cxx:2950
 TGX11.cxx:2951
 TGX11.cxx:2952
 TGX11.cxx:2953
 TGX11.cxx:2954
 TGX11.cxx:2955
 TGX11.cxx:2956
 TGX11.cxx:2957
 TGX11.cxx:2958
 TGX11.cxx:2959
 TGX11.cxx:2960
 TGX11.cxx:2961
 TGX11.cxx:2962
 TGX11.cxx:2963
 TGX11.cxx:2964
 TGX11.cxx:2965
 TGX11.cxx:2966
 TGX11.cxx:2967
 TGX11.cxx:2968
 TGX11.cxx:2969
 TGX11.cxx:2970
 TGX11.cxx:2971
 TGX11.cxx:2972
 TGX11.cxx:2973
 TGX11.cxx:2974
 TGX11.cxx:2975
 TGX11.cxx:2976
 TGX11.cxx:2977
 TGX11.cxx:2978
 TGX11.cxx:2979
 TGX11.cxx:2980
 TGX11.cxx:2981
 TGX11.cxx:2982
 TGX11.cxx:2983
 TGX11.cxx:2984
 TGX11.cxx:2985
 TGX11.cxx:2986
 TGX11.cxx:2987
 TGX11.cxx:2988
 TGX11.cxx:2989
 TGX11.cxx:2990
 TGX11.cxx:2991
 TGX11.cxx:2992
 TGX11.cxx:2993
 TGX11.cxx:2994
 TGX11.cxx:2995
 TGX11.cxx:2996
 TGX11.cxx:2997
 TGX11.cxx:2998
 TGX11.cxx:2999
 TGX11.cxx:3000
 TGX11.cxx:3001
 TGX11.cxx:3002
 TGX11.cxx:3003
 TGX11.cxx:3004
 TGX11.cxx:3005
 TGX11.cxx:3006
 TGX11.cxx:3007
 TGX11.cxx:3008
 TGX11.cxx:3009
 TGX11.cxx:3010
 TGX11.cxx:3011
 TGX11.cxx:3012
 TGX11.cxx:3013
 TGX11.cxx:3014
 TGX11.cxx:3015
 TGX11.cxx:3016
 TGX11.cxx:3017
 TGX11.cxx:3018
 TGX11.cxx:3019
 TGX11.cxx:3020
 TGX11.cxx:3021
 TGX11.cxx:3022
 TGX11.cxx:3023
 TGX11.cxx:3024
 TGX11.cxx:3025
 TGX11.cxx:3026
 TGX11.cxx:3027
 TGX11.cxx:3028
 TGX11.cxx:3029
 TGX11.cxx:3030
 TGX11.cxx:3031
 TGX11.cxx:3032
 TGX11.cxx:3033
 TGX11.cxx:3034
 TGX11.cxx:3035
 TGX11.cxx:3036
 TGX11.cxx:3037
 TGX11.cxx:3038
 TGX11.cxx:3039
 TGX11.cxx:3040
 TGX11.cxx:3041
 TGX11.cxx:3042
 TGX11.cxx:3043
 TGX11.cxx:3044
 TGX11.cxx:3045
 TGX11.cxx:3046
 TGX11.cxx:3047
 TGX11.cxx:3048
 TGX11.cxx:3049
 TGX11.cxx:3050
 TGX11.cxx:3051
 TGX11.cxx:3052
 TGX11.cxx:3053
 TGX11.cxx:3054
 TGX11.cxx:3055
 TGX11.cxx:3056
 TGX11.cxx:3057
 TGX11.cxx:3058
 TGX11.cxx:3059
 TGX11.cxx:3060
 TGX11.cxx:3061
 TGX11.cxx:3062
 TGX11.cxx:3063
 TGX11.cxx:3064
 TGX11.cxx:3065
 TGX11.cxx:3066
 TGX11.cxx:3067
 TGX11.cxx:3068
 TGX11.cxx:3069
 TGX11.cxx:3070
 TGX11.cxx:3071
 TGX11.cxx:3072
 TGX11.cxx:3073
 TGX11.cxx:3074
 TGX11.cxx:3075
 TGX11.cxx:3076
 TGX11.cxx:3077
 TGX11.cxx:3078
 TGX11.cxx:3079
 TGX11.cxx:3080
 TGX11.cxx:3081
 TGX11.cxx:3082
 TGX11.cxx:3083
 TGX11.cxx:3084
 TGX11.cxx:3085
 TGX11.cxx:3086
 TGX11.cxx:3087
 TGX11.cxx:3088
 TGX11.cxx:3089
 TGX11.cxx:3090
 TGX11.cxx:3091
 TGX11.cxx:3092
 TGX11.cxx:3093
 TGX11.cxx:3094
 TGX11.cxx:3095
 TGX11.cxx:3096
 TGX11.cxx:3097
 TGX11.cxx:3098
 TGX11.cxx:3099
 TGX11.cxx:3100
 TGX11.cxx:3101
 TGX11.cxx:3102
 TGX11.cxx:3103
 TGX11.cxx:3104
 TGX11.cxx:3105
 TGX11.cxx:3106
 TGX11.cxx:3107
 TGX11.cxx:3108
 TGX11.cxx:3109
 TGX11.cxx:3110
 TGX11.cxx:3111
 TGX11.cxx:3112
 TGX11.cxx:3113
 TGX11.cxx:3114
 TGX11.cxx:3115
 TGX11.cxx:3116
 TGX11.cxx:3117
 TGX11.cxx:3118
 TGX11.cxx:3119
 TGX11.cxx:3120
 TGX11.cxx:3121
 TGX11.cxx:3122
 TGX11.cxx:3123
 TGX11.cxx:3124
 TGX11.cxx:3125
 TGX11.cxx:3126
 TGX11.cxx:3127
 TGX11.cxx:3128
 TGX11.cxx:3129
 TGX11.cxx:3130
 TGX11.cxx:3131
 TGX11.cxx:3132
 TGX11.cxx:3133
 TGX11.cxx:3134
 TGX11.cxx:3135
 TGX11.cxx:3136
 TGX11.cxx:3137
 TGX11.cxx:3138
 TGX11.cxx:3139
 TGX11.cxx:3140
 TGX11.cxx:3141
 TGX11.cxx:3142
 TGX11.cxx:3143
 TGX11.cxx:3144
 TGX11.cxx:3145
 TGX11.cxx:3146
 TGX11.cxx:3147
 TGX11.cxx:3148
 TGX11.cxx:3149
 TGX11.cxx:3150
 TGX11.cxx:3151
 TGX11.cxx:3152
 TGX11.cxx:3153
 TGX11.cxx:3154
 TGX11.cxx:3155
 TGX11.cxx:3156
 TGX11.cxx:3157
 TGX11.cxx:3158
 TGX11.cxx:3159
 TGX11.cxx:3160
 TGX11.cxx:3161
 TGX11.cxx:3162
 TGX11.cxx:3163
 TGX11.cxx:3164
 TGX11.cxx:3165
 TGX11.cxx:3166
 TGX11.cxx:3167
 TGX11.cxx:3168
 TGX11.cxx:3169
 TGX11.cxx:3170
 TGX11.cxx:3171
 TGX11.cxx:3172
 TGX11.cxx:3173
 TGX11.cxx:3174
 TGX11.cxx:3175
 TGX11.cxx:3176
 TGX11.cxx:3177
 TGX11.cxx:3178
 TGX11.cxx:3179
 TGX11.cxx:3180
 TGX11.cxx:3181
 TGX11.cxx:3182
 TGX11.cxx:3183
 TGX11.cxx:3184
 TGX11.cxx:3185
 TGX11.cxx:3186
 TGX11.cxx:3187
 TGX11.cxx:3188
 TGX11.cxx:3189
 TGX11.cxx:3190
 TGX11.cxx:3191
 TGX11.cxx:3192
 TGX11.cxx:3193
 TGX11.cxx:3194
 TGX11.cxx:3195
 TGX11.cxx:3196
 TGX11.cxx:3197
 TGX11.cxx:3198
 TGX11.cxx:3199
 TGX11.cxx:3200
 TGX11.cxx:3201
 TGX11.cxx:3202
 TGX11.cxx:3203
 TGX11.cxx:3204
 TGX11.cxx:3205
 TGX11.cxx:3206
 TGX11.cxx:3207
 TGX11.cxx:3208
 TGX11.cxx:3209
 TGX11.cxx:3210
 TGX11.cxx:3211
 TGX11.cxx:3212
 TGX11.cxx:3213
 TGX11.cxx:3214
 TGX11.cxx:3215
 TGX11.cxx:3216
 TGX11.cxx:3217
 TGX11.cxx:3218
 TGX11.cxx:3219
 TGX11.cxx:3220
 TGX11.cxx:3221
 TGX11.cxx:3222
 TGX11.cxx:3223
 TGX11.cxx:3224
 TGX11.cxx:3225
 TGX11.cxx:3226
 TGX11.cxx:3227
 TGX11.cxx:3228
 TGX11.cxx:3229
 TGX11.cxx:3230
 TGX11.cxx:3231
 TGX11.cxx:3232
 TGX11.cxx:3233
 TGX11.cxx:3234
 TGX11.cxx:3235
 TGX11.cxx:3236
 TGX11.cxx:3237
 TGX11.cxx:3238
 TGX11.cxx:3239
 TGX11.cxx:3240
 TGX11.cxx:3241
 TGX11.cxx:3242
 TGX11.cxx:3243
 TGX11.cxx:3244
 TGX11.cxx:3245
 TGX11.cxx:3246
 TGX11.cxx:3247
 TGX11.cxx:3248
 TGX11.cxx:3249
 TGX11.cxx:3250
 TGX11.cxx:3251
 TGX11.cxx:3252
 TGX11.cxx:3253
 TGX11.cxx:3254
 TGX11.cxx:3255
 TGX11.cxx:3256
 TGX11.cxx:3257
 TGX11.cxx:3258
 TGX11.cxx:3259
 TGX11.cxx:3260
 TGX11.cxx:3261
 TGX11.cxx:3262
 TGX11.cxx:3263
 TGX11.cxx:3264
 TGX11.cxx:3265
 TGX11.cxx:3266
 TGX11.cxx:3267
 TGX11.cxx:3268
 TGX11.cxx:3269
 TGX11.cxx:3270
 TGX11.cxx:3271
 TGX11.cxx:3272
 TGX11.cxx:3273
 TGX11.cxx:3274
 TGX11.cxx:3275
 TGX11.cxx:3276
 TGX11.cxx:3277
 TGX11.cxx:3278
 TGX11.cxx:3279
 TGX11.cxx:3280
 TGX11.cxx:3281
 TGX11.cxx:3282
 TGX11.cxx:3283
 TGX11.cxx:3284
 TGX11.cxx:3285
 TGX11.cxx:3286
 TGX11.cxx:3287
 TGX11.cxx:3288
 TGX11.cxx:3289
 TGX11.cxx:3290
 TGX11.cxx:3291
 TGX11.cxx:3292
 TGX11.cxx:3293
 TGX11.cxx:3294
 TGX11.cxx:3295
 TGX11.cxx:3296
 TGX11.cxx:3297
 TGX11.cxx:3298
 TGX11.cxx:3299
 TGX11.cxx:3300
 TGX11.cxx:3301
 TGX11.cxx:3302
 TGX11.cxx:3303
 TGX11.cxx:3304
 TGX11.cxx:3305
 TGX11.cxx:3306
 TGX11.cxx:3307
 TGX11.cxx:3308
 TGX11.cxx:3309
 TGX11.cxx:3310
 TGX11.cxx:3311
 TGX11.cxx:3312
 TGX11.cxx:3313
 TGX11.cxx:3314
 TGX11.cxx:3315
 TGX11.cxx:3316
 TGX11.cxx:3317
 TGX11.cxx:3318
 TGX11.cxx:3319
 TGX11.cxx:3320
 TGX11.cxx:3321
 TGX11.cxx:3322
 TGX11.cxx:3323
 TGX11.cxx:3324
 TGX11.cxx:3325
 TGX11.cxx:3326
 TGX11.cxx:3327
 TGX11.cxx:3328
 TGX11.cxx:3329
 TGX11.cxx:3330
 TGX11.cxx:3331
 TGX11.cxx:3332
 TGX11.cxx:3333
 TGX11.cxx:3334
 TGX11.cxx:3335
 TGX11.cxx:3336
 TGX11.cxx:3337
 TGX11.cxx:3338
 TGX11.cxx:3339
 TGX11.cxx:3340
 TGX11.cxx:3341
 TGX11.cxx:3342
 TGX11.cxx:3343
 TGX11.cxx:3344
 TGX11.cxx:3345
 TGX11.cxx:3346
 TGX11.cxx:3347
 TGX11.cxx:3348
 TGX11.cxx:3349
 TGX11.cxx:3350
 TGX11.cxx:3351
 TGX11.cxx:3352
 TGX11.cxx:3353
 TGX11.cxx:3354
 TGX11.cxx:3355
 TGX11.cxx:3356
 TGX11.cxx:3357
 TGX11.cxx:3358
 TGX11.cxx:3359
 TGX11.cxx:3360
 TGX11.cxx:3361
 TGX11.cxx:3362
 TGX11.cxx:3363
 TGX11.cxx:3364
 TGX11.cxx:3365
 TGX11.cxx:3366
 TGX11.cxx:3367
 TGX11.cxx:3368
 TGX11.cxx:3369
 TGX11.cxx:3370
 TGX11.cxx:3371
 TGX11.cxx:3372
 TGX11.cxx:3373
 TGX11.cxx:3374
 TGX11.cxx:3375
 TGX11.cxx:3376
 TGX11.cxx:3377
 TGX11.cxx:3378
 TGX11.cxx:3379
 TGX11.cxx:3380
 TGX11.cxx:3381
 TGX11.cxx:3382
 TGX11.cxx:3383
 TGX11.cxx:3384
 TGX11.cxx:3385
 TGX11.cxx:3386
 TGX11.cxx:3387
 TGX11.cxx:3388
 TGX11.cxx:3389
 TGX11.cxx:3390
 TGX11.cxx:3391
 TGX11.cxx:3392