ROOT logo
// $Id: CrawlerSpiritio.cxx 2597 2011-11-13 08:03:06Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#include "CrawlerSpiritio.h"
#include "Crawler.h"
#include <Glasses/AlSource.h>
#include "CrawlerSpiritio.c7"

#include "TSPupilInfo.h"
#include "TringuRep.h"
#include "Tringula.h"
#include <Glasses/Camera.h>
#include <Stones/KeyHandling.h>
#include <Glasses/ZQueen.h>

// CrawlerSpiritio

//______________________________________________________________________________
//
// AlSource should be set to LT_CamDelta mode and buffer should be set.

ClassImp(CrawlerSpiritio);

//==============================================================================

#define KEY_CALLBACK(FOO) new KeyHandling::KeyCallback<CrawlerSpiritio>(&CrawlerSpiritio::FOO)

void CrawlerSpiritio::_init()
{
  // From ExtendioSpiritio -- restric extendio fid.
  mExtendio_fid = Crawler::FID();

  mDefZFov = 60.0f;

  m_laser_a1 = m_laser_a2 = 1e30;
}

CrawlerSpiritio::CrawlerSpiritio(const Text_t* n, const Text_t* t) :
  ExtendioSpiritio(n, t),
  mKeyIncThrottle(RegisterKey("IncThrottle", "Increase throttle", KEY_CALLBACK(IncThrottle))),
  mKeyDecThrottle(RegisterKey("DecThrottle", "Decrease throttle", KEY_CALLBACK(DecThrottle))),
  mKeyLeftWheel  (RegisterKey("LeftWheel",   "Turn wheel left",   KEY_CALLBACK(LeftWheel))),
  mKeyRightWheel (RegisterKey("RightWheel",  "Turn wheel right",  KEY_CALLBACK(RightWheel)))
{
  RegisterKey("LaserUp",    "Turn laser up",    KEY_CALLBACK(LaserSteer), LK_Up);
  RegisterKey("LaserDown",  "Turn laser down",  KEY_CALLBACK(LaserSteer), LK_Down);
  RegisterKey("LaserLeft",  "Turn laser left",  KEY_CALLBACK(LaserSteer), LK_Left);
  RegisterKey("LaserRight", "Turn laser right", KEY_CALLBACK(LaserSteer), LK_Right);
  mFirstLaserKey = mKeys.size() - 4;

  RegisterKey("FireGun", "Fire gun", KEY_CALLBACK(FireGun));

  RegisterKey("TurretHome", "Return laser to forward position", KEY_CALLBACK(TurretHome));

  _init();
}

CrawlerSpiritio::~CrawlerSpiritio()
{}

//------------------------------------------------------------------------------

Crawler* CrawlerSpiritio::get_crawler()
{
  return (Crawler*) *mExtendio;
}

//==============================================================================

void CrawlerSpiritio::AdEnlightenment()
{
  // Create the camera.

  PARENT_GLASS::AdEnlightenment();

  if (mCameraBase == 0)
  {
    assign_link<ZNode>(mCameraBase, FID(), "CrawlerCameraBase",
		       "CameraBase of CrawlerSpiritio");
    mCameraBase->SetMIRActive(false);
  }
  if (mCamera == 0)
  {
    assign_link<Camera>(mCamera, FID(), "CrawlerCamera", "Camera of CrawlerSpiritio");
    mCamera->SetMIRActive(false);
    mCameraBase->Add(*mCamera);
  }
}

//==============================================================================

void CrawlerSpiritio::Activate()
{
  // Called when TSPupilInfo installs the spiritio.

  Crawler &C = * (Crawler*) *mExtendio;

  mCameraBase->SetParent(mPupilInfo->GetTringuRep());
  mCameraBase->ref_trans().SetFromArray(mExtendio->ref_last_trans());

  mCamera->Home();

  // Move camera to laser-pos.
  // Need position marked in Crawler or somewhere else.
  // This should be in sync with Crawlers::ShootLaser().

  mCamera->Identity();
  mCamera->ref_trans().SetPos(C.RefLaserBeg());
  mCamera->SetHomeTrans();

  mPupilInfo->SetZFov(mDefZFov);

  C.SetDriveMode(Crawler::DM_Controllers);

  if (*mEngineSrc)
  {
    mEngineSrc->Loop();
  }

  PARENT_GLASS::Activate();
}

void CrawlerSpiritio::Deactivate()
{
  PARENT_GLASS::Deactivate();

  if (*mEngineSrc)
  {
    mEngineSrc->Stop();
  }

  mCameraBase->SetParent(0);

  Crawler &C = * (Crawler*) *mExtendio;
  C.SetDriveMode(Crawler::DM_ConstVelocities);
}

//==============================================================================

void CrawlerSpiritio::TimeTick(Double_t t, Double_t dt)
{
  const Float_t dtf = dt;

  Crawler &C = * (Crawler*) *mExtendio;

  mCameraBase->ref_trans().SetFromArray(mExtendio->ref_last_trans());

  // Throttle
  Int_t tdc = mKeyIncThrottle.fDownCount - mKeyDecThrottle.fDownCount;

  if (tdc)
  {
    const SDesireVarF& tv = C.RefThrottle();
    Float_t d0 = tv.GetDesire();
    Float_t d1 = tv.DeltaDesireMax(tdc, dtf);
    if (d0 < 0 && d1 > 0 && tdc > 0)
    {
      tv.SetDesire(0);
      --mKeyIncThrottle.fDownCount;
    }
    else if (d0 > 0 && d1 < 0 && tdc < 0)
    {
      tv.SetDesire(0);
      --mKeyDecThrottle.fDownCount;
    }
  }

  // Wheel
  Int_t wdc = mKeyLeftWheel.fDownCount - mKeyRightWheel.fDownCount;
  if (wdc)
  {
    const SDesireVarF& wv = C.RefWheel();
    Float_t d0 = wv.GetDesire();
    Float_t d1 = wv.DeltaDesireMax(wdc, dtf);
    if (d0 < 0 && d1 > 0 && wdc > 0)
    {
      wv.SetDesire(0);
      --mKeyLeftWheel.fDownCount;
    }
    else if (d0 > 0 && d1 < 0 && wdc < 0)
    {
      wv.SetDesire(0);
      --mKeyRightWheel.fDownCount;
    }
  }

  // Laser steering
  {
    Int_t lud = mKeys[mFirstLaserKey+LK_Up]->fDownCount - mKeys[mFirstLaserKey+LK_Down]->fDownCount;
    C.RefLaserUpDn().DeltaDesireMax(lud, dtf);
    Int_t llr = mKeys[mFirstLaserKey+LK_Left]->fDownCount - mKeys[mFirstLaserKey+LK_Right]->fDownCount;
    C.RefLaserLtRt().DeltaDesireMax(llr, dtf);

    const Float_t a1 = C.RefLaserLtRt().GetDesire();
    const Float_t a2 = C.RefLaserUpDn().GetDesire();
    if (m_laser_a1 != a1 || m_laser_a2 != a2)
    {
      mCamera->SetRotByAngles(a1, a2, 0.0f);
      m_laser_a1 = a1;
      m_laser_a2 = a2;
    }
  }

  if (*mEngineSrc)
  {
    const SDesireVarF& tv = C.RefThrottle();
    Float_t p = 0.2f + 0.8f*TMath::Abs(tv.Get())/tv.GetMax();
    if (p != mEngineSrc->GetPitch())
      mEngineSrc->SetPitch(p);
  }
}

//==============================================================================

void CrawlerSpiritio::IncThrottle(Int_t, Bool_t downp, UInt_t time_elapsed)
{
  Crawler &C = * (Crawler*) *mExtendio;

  if (downp)
  {
    if (time_elapsed < sDoubleClickTime)
    {
      const SDesireVarF& tv = C.RefThrottle();
      if (tv.IsAboveDesire())
	tv.DesireToValue();
      else if (tv.GetDesire() < 0)
	tv.SetDesire(0);
      else
	tv.SetDesire(tv.GetMax());
    }
    else
    {
      ++mKeyIncThrottle.fDownCount;
    }
  }
  else
  {
    if (mKeyIncThrottle.fDownCount > 0)
    {
      --mKeyIncThrottle.fDownCount;
    }
  }
}

void CrawlerSpiritio::DecThrottle(Int_t, Bool_t downp, UInt_t time_elapsed)
{
  Crawler &C = * (Crawler*) *mExtendio;

  if (downp)
  {
    if (time_elapsed < sDoubleClickTime)
    {
      const SDesireVarF& tv = C.RefThrottle();

      if (tv.IsBelowDesire())
	tv.DesireToValue();
      else if (tv.GetDesire() > 0)
	tv.SetDesire(0);
      else
	tv.SetDesire(tv.GetMin());
    }
    else
    {
      ++mKeyDecThrottle.fDownCount;
    }
  }
  else
  {
    if (mKeyDecThrottle.fDownCount > 0)
      --mKeyDecThrottle.fDownCount;
  }
}

void CrawlerSpiritio::SetThrottle(Float_t t)
{
  Crawler &C = * (Crawler*) *mExtendio;

  C.RefThrottle().SetDesire(t);
}

//------------------------------------------------------------------------------

void CrawlerSpiritio::LeftWheel(Int_t, Bool_t downp, UInt_t time_elapsed)
{
  Crawler &C = * (Crawler*) *mExtendio;

  if (downp)
  {
    if (time_elapsed < sDoubleClickTime)
    {
      const SDesireVarF& wv = C.RefWheel();

      if (wv.GetDesire() < 0)
	wv.SetDesire(0);
      else
	wv.DeltaDesire(wv.GetStdDesireDelta());
    }
    else
    {
      ++mKeyLeftWheel.fDownCount;
    }
  }
  else
  {
    if (mKeyLeftWheel.fDownCount > 0)
      --mKeyLeftWheel.fDownCount;
  }
}

void CrawlerSpiritio::RightWheel(Int_t, Bool_t downp, UInt_t time_elapsed)
{
  Crawler &C = * (Crawler*) *mExtendio;

  if (downp)
  {
    if (time_elapsed < sDoubleClickTime)
    {
      const SDesireVarF& wv = C.RefWheel();

      if (wv.GetDesire() > 0)
	wv.SetDesire(0);
      else
	wv.DeltaDesire(-wv.GetStdDesireDelta());
    }
    else
    {
      ++mKeyRightWheel.fDownCount;
    }
  }
  else
  {
    if (mKeyRightWheel.fDownCount > 0)
      --mKeyRightWheel.fDownCount;
  }
}

void CrawlerSpiritio::SetWheel(Float_t w)
{
  Crawler &C = * (Crawler*) *mExtendio;

  C.RefWheel().SetDesire(w);
}

//------------------------------------------------------------------------------

void CrawlerSpiritio::LaserSteer(Int_t key_idx, Bool_t downp, UInt_t time_elapsed)
{
  KeyHandling::KeyInfo& ki = * mKeys[key_idx];
  ki.fDownCount += downp ? 1 : -1;
}

void CrawlerSpiritio::FireGun(Int_t, Bool_t downp, UInt_t)
{
  Crawler &C = * (Crawler*) *mExtendio;

  // Should lock ... but we are locked already ...
  if (downp && C.RefLaserCharge().Get() > 20.0f)
  {
    C.ShootLaser();
  }
}

//------------------------------------------------------------------------------

void CrawlerSpiritio::TurretHome(Int_t, Bool_t downp, UInt_t)
{
   Crawler &C = * (Crawler*) *mExtendio;
   C.RefLaserUpDn().SetDesire(0);
   C.RefLaserLtRt().SetDesire(0);
   mPupilInfo->SetZFov(mDefZFov);
}
 CrawlerSpiritio.cxx:1
 CrawlerSpiritio.cxx:2
 CrawlerSpiritio.cxx:3
 CrawlerSpiritio.cxx:4
 CrawlerSpiritio.cxx:5
 CrawlerSpiritio.cxx:6
 CrawlerSpiritio.cxx:7
 CrawlerSpiritio.cxx:8
 CrawlerSpiritio.cxx:9
 CrawlerSpiritio.cxx:10
 CrawlerSpiritio.cxx:11
 CrawlerSpiritio.cxx:12
 CrawlerSpiritio.cxx:13
 CrawlerSpiritio.cxx:14
 CrawlerSpiritio.cxx:15
 CrawlerSpiritio.cxx:16
 CrawlerSpiritio.cxx:17
 CrawlerSpiritio.cxx:18
 CrawlerSpiritio.cxx:19
 CrawlerSpiritio.cxx:20
 CrawlerSpiritio.cxx:21
 CrawlerSpiritio.cxx:22
 CrawlerSpiritio.cxx:23
 CrawlerSpiritio.cxx:24
 CrawlerSpiritio.cxx:25
 CrawlerSpiritio.cxx:26
 CrawlerSpiritio.cxx:27
 CrawlerSpiritio.cxx:28
 CrawlerSpiritio.cxx:29
 CrawlerSpiritio.cxx:30
 CrawlerSpiritio.cxx:31
 CrawlerSpiritio.cxx:32
 CrawlerSpiritio.cxx:33
 CrawlerSpiritio.cxx:34
 CrawlerSpiritio.cxx:35
 CrawlerSpiritio.cxx:36
 CrawlerSpiritio.cxx:37
 CrawlerSpiritio.cxx:38
 CrawlerSpiritio.cxx:39
 CrawlerSpiritio.cxx:40
 CrawlerSpiritio.cxx:41
 CrawlerSpiritio.cxx:42
 CrawlerSpiritio.cxx:43
 CrawlerSpiritio.cxx:44
 CrawlerSpiritio.cxx:45
 CrawlerSpiritio.cxx:46
 CrawlerSpiritio.cxx:47
 CrawlerSpiritio.cxx:48
 CrawlerSpiritio.cxx:49
 CrawlerSpiritio.cxx:50
 CrawlerSpiritio.cxx:51
 CrawlerSpiritio.cxx:52
 CrawlerSpiritio.cxx:53
 CrawlerSpiritio.cxx:54
 CrawlerSpiritio.cxx:55
 CrawlerSpiritio.cxx:56
 CrawlerSpiritio.cxx:57
 CrawlerSpiritio.cxx:58
 CrawlerSpiritio.cxx:59
 CrawlerSpiritio.cxx:60
 CrawlerSpiritio.cxx:61
 CrawlerSpiritio.cxx:62
 CrawlerSpiritio.cxx:63
 CrawlerSpiritio.cxx:64
 CrawlerSpiritio.cxx:65
 CrawlerSpiritio.cxx:66
 CrawlerSpiritio.cxx:67
 CrawlerSpiritio.cxx:68
 CrawlerSpiritio.cxx:69
 CrawlerSpiritio.cxx:70
 CrawlerSpiritio.cxx:71
 CrawlerSpiritio.cxx:72
 CrawlerSpiritio.cxx:73
 CrawlerSpiritio.cxx:74
 CrawlerSpiritio.cxx:75
 CrawlerSpiritio.cxx:76
 CrawlerSpiritio.cxx:77
 CrawlerSpiritio.cxx:78
 CrawlerSpiritio.cxx:79
 CrawlerSpiritio.cxx:80
 CrawlerSpiritio.cxx:81
 CrawlerSpiritio.cxx:82
 CrawlerSpiritio.cxx:83
 CrawlerSpiritio.cxx:84
 CrawlerSpiritio.cxx:85
 CrawlerSpiritio.cxx:86
 CrawlerSpiritio.cxx:87
 CrawlerSpiritio.cxx:88
 CrawlerSpiritio.cxx:89
 CrawlerSpiritio.cxx:90
 CrawlerSpiritio.cxx:91
 CrawlerSpiritio.cxx:92
 CrawlerSpiritio.cxx:93
 CrawlerSpiritio.cxx:94
 CrawlerSpiritio.cxx:95
 CrawlerSpiritio.cxx:96
 CrawlerSpiritio.cxx:97
 CrawlerSpiritio.cxx:98
 CrawlerSpiritio.cxx:99
 CrawlerSpiritio.cxx:100
 CrawlerSpiritio.cxx:101
 CrawlerSpiritio.cxx:102
 CrawlerSpiritio.cxx:103
 CrawlerSpiritio.cxx:104
 CrawlerSpiritio.cxx:105
 CrawlerSpiritio.cxx:106
 CrawlerSpiritio.cxx:107
 CrawlerSpiritio.cxx:108
 CrawlerSpiritio.cxx:109
 CrawlerSpiritio.cxx:110
 CrawlerSpiritio.cxx:111
 CrawlerSpiritio.cxx:112
 CrawlerSpiritio.cxx:113
 CrawlerSpiritio.cxx:114
 CrawlerSpiritio.cxx:115
 CrawlerSpiritio.cxx:116
 CrawlerSpiritio.cxx:117
 CrawlerSpiritio.cxx:118
 CrawlerSpiritio.cxx:119
 CrawlerSpiritio.cxx:120
 CrawlerSpiritio.cxx:121
 CrawlerSpiritio.cxx:122
 CrawlerSpiritio.cxx:123
 CrawlerSpiritio.cxx:124
 CrawlerSpiritio.cxx:125
 CrawlerSpiritio.cxx:126
 CrawlerSpiritio.cxx:127
 CrawlerSpiritio.cxx:128
 CrawlerSpiritio.cxx:129
 CrawlerSpiritio.cxx:130
 CrawlerSpiritio.cxx:131
 CrawlerSpiritio.cxx:132
 CrawlerSpiritio.cxx:133
 CrawlerSpiritio.cxx:134
 CrawlerSpiritio.cxx:135
 CrawlerSpiritio.cxx:136
 CrawlerSpiritio.cxx:137
 CrawlerSpiritio.cxx:138
 CrawlerSpiritio.cxx:139
 CrawlerSpiritio.cxx:140
 CrawlerSpiritio.cxx:141
 CrawlerSpiritio.cxx:142
 CrawlerSpiritio.cxx:143
 CrawlerSpiritio.cxx:144
 CrawlerSpiritio.cxx:145
 CrawlerSpiritio.cxx:146
 CrawlerSpiritio.cxx:147
 CrawlerSpiritio.cxx:148
 CrawlerSpiritio.cxx:149
 CrawlerSpiritio.cxx:150
 CrawlerSpiritio.cxx:151
 CrawlerSpiritio.cxx:152
 CrawlerSpiritio.cxx:153
 CrawlerSpiritio.cxx:154
 CrawlerSpiritio.cxx:155
 CrawlerSpiritio.cxx:156
 CrawlerSpiritio.cxx:157
 CrawlerSpiritio.cxx:158
 CrawlerSpiritio.cxx:159
 CrawlerSpiritio.cxx:160
 CrawlerSpiritio.cxx:161
 CrawlerSpiritio.cxx:162
 CrawlerSpiritio.cxx:163
 CrawlerSpiritio.cxx:164
 CrawlerSpiritio.cxx:165
 CrawlerSpiritio.cxx:166
 CrawlerSpiritio.cxx:167
 CrawlerSpiritio.cxx:168
 CrawlerSpiritio.cxx:169
 CrawlerSpiritio.cxx:170
 CrawlerSpiritio.cxx:171
 CrawlerSpiritio.cxx:172
 CrawlerSpiritio.cxx:173
 CrawlerSpiritio.cxx:174
 CrawlerSpiritio.cxx:175
 CrawlerSpiritio.cxx:176
 CrawlerSpiritio.cxx:177
 CrawlerSpiritio.cxx:178
 CrawlerSpiritio.cxx:179
 CrawlerSpiritio.cxx:180
 CrawlerSpiritio.cxx:181
 CrawlerSpiritio.cxx:182
 CrawlerSpiritio.cxx:183
 CrawlerSpiritio.cxx:184
 CrawlerSpiritio.cxx:185
 CrawlerSpiritio.cxx:186
 CrawlerSpiritio.cxx:187
 CrawlerSpiritio.cxx:188
 CrawlerSpiritio.cxx:189
 CrawlerSpiritio.cxx:190
 CrawlerSpiritio.cxx:191
 CrawlerSpiritio.cxx:192
 CrawlerSpiritio.cxx:193
 CrawlerSpiritio.cxx:194
 CrawlerSpiritio.cxx:195
 CrawlerSpiritio.cxx:196
 CrawlerSpiritio.cxx:197
 CrawlerSpiritio.cxx:198
 CrawlerSpiritio.cxx:199
 CrawlerSpiritio.cxx:200
 CrawlerSpiritio.cxx:201
 CrawlerSpiritio.cxx:202
 CrawlerSpiritio.cxx:203
 CrawlerSpiritio.cxx:204
 CrawlerSpiritio.cxx:205
 CrawlerSpiritio.cxx:206
 CrawlerSpiritio.cxx:207
 CrawlerSpiritio.cxx:208
 CrawlerSpiritio.cxx:209
 CrawlerSpiritio.cxx:210
 CrawlerSpiritio.cxx:211
 CrawlerSpiritio.cxx:212
 CrawlerSpiritio.cxx:213
 CrawlerSpiritio.cxx:214
 CrawlerSpiritio.cxx:215
 CrawlerSpiritio.cxx:216
 CrawlerSpiritio.cxx:217
 CrawlerSpiritio.cxx:218
 CrawlerSpiritio.cxx:219
 CrawlerSpiritio.cxx:220
 CrawlerSpiritio.cxx:221
 CrawlerSpiritio.cxx:222
 CrawlerSpiritio.cxx:223
 CrawlerSpiritio.cxx:224
 CrawlerSpiritio.cxx:225
 CrawlerSpiritio.cxx:226
 CrawlerSpiritio.cxx:227
 CrawlerSpiritio.cxx:228
 CrawlerSpiritio.cxx:229
 CrawlerSpiritio.cxx:230
 CrawlerSpiritio.cxx:231
 CrawlerSpiritio.cxx:232
 CrawlerSpiritio.cxx:233
 CrawlerSpiritio.cxx:234
 CrawlerSpiritio.cxx:235
 CrawlerSpiritio.cxx:236
 CrawlerSpiritio.cxx:237
 CrawlerSpiritio.cxx:238
 CrawlerSpiritio.cxx:239
 CrawlerSpiritio.cxx:240
 CrawlerSpiritio.cxx:241
 CrawlerSpiritio.cxx:242
 CrawlerSpiritio.cxx:243
 CrawlerSpiritio.cxx:244
 CrawlerSpiritio.cxx:245
 CrawlerSpiritio.cxx:246
 CrawlerSpiritio.cxx:247
 CrawlerSpiritio.cxx:248
 CrawlerSpiritio.cxx:249
 CrawlerSpiritio.cxx:250
 CrawlerSpiritio.cxx:251
 CrawlerSpiritio.cxx:252
 CrawlerSpiritio.cxx:253
 CrawlerSpiritio.cxx:254
 CrawlerSpiritio.cxx:255
 CrawlerSpiritio.cxx:256
 CrawlerSpiritio.cxx:257
 CrawlerSpiritio.cxx:258
 CrawlerSpiritio.cxx:259
 CrawlerSpiritio.cxx:260
 CrawlerSpiritio.cxx:261
 CrawlerSpiritio.cxx:262
 CrawlerSpiritio.cxx:263
 CrawlerSpiritio.cxx:264
 CrawlerSpiritio.cxx:265
 CrawlerSpiritio.cxx:266
 CrawlerSpiritio.cxx:267
 CrawlerSpiritio.cxx:268
 CrawlerSpiritio.cxx:269
 CrawlerSpiritio.cxx:270
 CrawlerSpiritio.cxx:271
 CrawlerSpiritio.cxx:272
 CrawlerSpiritio.cxx:273
 CrawlerSpiritio.cxx:274
 CrawlerSpiritio.cxx:275
 CrawlerSpiritio.cxx:276
 CrawlerSpiritio.cxx:277
 CrawlerSpiritio.cxx:278
 CrawlerSpiritio.cxx:279
 CrawlerSpiritio.cxx:280
 CrawlerSpiritio.cxx:281
 CrawlerSpiritio.cxx:282
 CrawlerSpiritio.cxx:283
 CrawlerSpiritio.cxx:284
 CrawlerSpiritio.cxx:285
 CrawlerSpiritio.cxx:286
 CrawlerSpiritio.cxx:287
 CrawlerSpiritio.cxx:288
 CrawlerSpiritio.cxx:289
 CrawlerSpiritio.cxx:290
 CrawlerSpiritio.cxx:291
 CrawlerSpiritio.cxx:292
 CrawlerSpiritio.cxx:293
 CrawlerSpiritio.cxx:294
 CrawlerSpiritio.cxx:295
 CrawlerSpiritio.cxx:296
 CrawlerSpiritio.cxx:297
 CrawlerSpiritio.cxx:298
 CrawlerSpiritio.cxx:299
 CrawlerSpiritio.cxx:300
 CrawlerSpiritio.cxx:301
 CrawlerSpiritio.cxx:302
 CrawlerSpiritio.cxx:303
 CrawlerSpiritio.cxx:304
 CrawlerSpiritio.cxx:305
 CrawlerSpiritio.cxx:306
 CrawlerSpiritio.cxx:307
 CrawlerSpiritio.cxx:308
 CrawlerSpiritio.cxx:309
 CrawlerSpiritio.cxx:310
 CrawlerSpiritio.cxx:311
 CrawlerSpiritio.cxx:312
 CrawlerSpiritio.cxx:313
 CrawlerSpiritio.cxx:314
 CrawlerSpiritio.cxx:315
 CrawlerSpiritio.cxx:316
 CrawlerSpiritio.cxx:317
 CrawlerSpiritio.cxx:318
 CrawlerSpiritio.cxx:319
 CrawlerSpiritio.cxx:320
 CrawlerSpiritio.cxx:321
 CrawlerSpiritio.cxx:322
 CrawlerSpiritio.cxx:323
 CrawlerSpiritio.cxx:324
 CrawlerSpiritio.cxx:325
 CrawlerSpiritio.cxx:326
 CrawlerSpiritio.cxx:327
 CrawlerSpiritio.cxx:328
 CrawlerSpiritio.cxx:329
 CrawlerSpiritio.cxx:330
 CrawlerSpiritio.cxx:331
 CrawlerSpiritio.cxx:332
 CrawlerSpiritio.cxx:333
 CrawlerSpiritio.cxx:334
 CrawlerSpiritio.cxx:335
 CrawlerSpiritio.cxx:336
 CrawlerSpiritio.cxx:337
 CrawlerSpiritio.cxx:338
 CrawlerSpiritio.cxx:339
 CrawlerSpiritio.cxx:340
 CrawlerSpiritio.cxx:341
 CrawlerSpiritio.cxx:342
 CrawlerSpiritio.cxx:343
 CrawlerSpiritio.cxx:344
 CrawlerSpiritio.cxx:345
 CrawlerSpiritio.cxx:346
 CrawlerSpiritio.cxx:347
 CrawlerSpiritio.cxx:348
 CrawlerSpiritio.cxx:349
 CrawlerSpiritio.cxx:350
 CrawlerSpiritio.cxx:351
 CrawlerSpiritio.cxx:352
 CrawlerSpiritio.cxx:353
 CrawlerSpiritio.cxx:354
 CrawlerSpiritio.cxx:355
 CrawlerSpiritio.cxx:356
 CrawlerSpiritio.cxx:357
 CrawlerSpiritio.cxx:358
 CrawlerSpiritio.cxx:359
 CrawlerSpiritio.cxx:360
 CrawlerSpiritio.cxx:361
 CrawlerSpiritio.cxx:362
 CrawlerSpiritio.cxx:363
 CrawlerSpiritio.cxx:364
 CrawlerSpiritio.cxx:365
 CrawlerSpiritio.cxx:366
 CrawlerSpiritio.cxx:367
 CrawlerSpiritio.cxx:368
 CrawlerSpiritio.cxx:369
 CrawlerSpiritio.cxx:370
 CrawlerSpiritio.cxx:371
 CrawlerSpiritio.cxx:372
 CrawlerSpiritio.cxx:373
 CrawlerSpiritio.cxx:374