public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/10898: Unable to compile c++ program containing Rogue Wave usage using gcc 3.2
@ 2003-05-21  7:26 hajira_a1
  0 siblings, 0 replies; only message in thread
From: hajira_a1 @ 2003-05-21  7:26 UTC (permalink / raw)
  To: gcc-gnats; +Cc: kritika_d, archiek


>Number:         10898
>Category:       c++
>Synopsis:       Unable to compile c++ program containing Rogue Wave usage using gcc 3.2
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed May 21 07:26:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Kritika Dorairaj
>Release:        gcc 3.2
>Organization:
>Environment:
HP-UX itanium2 B.11.22 U ia64 3300317291
>Description:

>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="param.ii"
Content-Disposition: inline; filename="param.ii"

# 1 "param.C"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "param.C"
# 15 "param.C"
# 1 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h" 1
# 328 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
# 1 "/home/hak/hak/filesx/usr/rogue/rw/tooldefs.h" 1
# 185 "/home/hak/hak/filesx/usr/rogue/rw/tooldefs.h"
# 1 "/home/hak/hak/filesx/usr/rogue/rw/defs.h" 1
# 310 "/home/hak/hak/filesx/usr/rogue/rw/defs.h"
# 1 "/home/hak/hak/filesx/usr/rogue/rw/compiler.h" 1
# 311 "/home/hak/hak/filesx/usr/rogue/rw/defs.h" 2



# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stddef.h" 1 3 4
# 147 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stddef.h" 3 4
typedef long int ptrdiff_t;
# 201 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stddef.h" 3 4
typedef long unsigned int size_t;
# 315 "/home/hak/hak/filesx/usr/rogue/rw/defs.h" 2

# 328 "/home/hak/hak/filesx/usr/rogue/rw/defs.h"
typedef int RWBoolean;
# 509 "/home/hak/hak/filesx/usr/rogue/rw/defs.h"
typedef unsigned char RWByte;
typedef unsigned short RWClassID;
typedef unsigned short RWErrNo;
typedef long RWoffset;
# 523 "/home/hak/hak/filesx/usr/rogue/rw/defs.h"
class RWSize_T
{
public:
  RWSize_T(size_t n) : N_(n) {;}
  size_t value() const {return N_;}
private:
  size_t N_;
};

class RWCS_T
{
public:
  RWCS_T(const char * str) : str_(str) {;}
  const char* value() const {return str_;}
private:
  const char* str_;
};

enum RWUninitialized { rwUninitialized };
enum RWSeverity {RWWARNING, RWDEFAULT, RWFATAL};

const RWErrNo RWSUCCESS = 0;
const size_t RWDEFAULT_CAPACITY = 64;
const size_t RWDEFAULT_RESIZE = 64;
const size_t RWBITSPERBYTE = 8;
const size_t RW_NPOS = ~(size_t)0;

inline double rwmax(double a, double b) {return a>b? a : b;}
inline double rwmin(double a, double b) {return a<b? a : b;}
inline int rwmax(int a, int b) {return a>b? a : b;}
inline int rwmin(int a, int b) {return a<b? a : b;}
inline unsigned rwmax(unsigned a, unsigned b) {return a>b? a : b;}
inline unsigned rwmin(unsigned a, unsigned b) {return a<b? a : b;}
inline unsigned long rwmax(unsigned long a, unsigned long b) {return a>b? a : b;}
inline unsigned long rwmin(unsigned long a, unsigned long b) {return a<b? a : b;}

class istream;
class ostream;
class ios;
class RWvistream;
class RWvostream;
class RWFile;
class RWErrObject;







void RWThrow(RWErrObject a ...);




void RWError(RWSeverity, const char*, const char*);
# 651 "/home/hak/hak/filesx/usr/rogue/rw/defs.h"
# 1 "/home/hak/hak/filesx/usr/rogue/rw/generic.h" 1
# 44 "/home/hak/hak/filesx/usr/rogue/rw/generic.h"
# 1 "/home/hak/hak/filesx/usr/rogue/rw/defs.h" 1
# 45 "/home/hak/hak/filesx/usr/rogue/rw/generic.h" 2
# 82 "/home/hak/hak/filesx/usr/rogue/rw/generic.h"
# 1 "/home/hak/hak/filesx/usr/rogue/rw/rwwind.h" 1
# 83 "/home/hak/hak/filesx/usr/rogue/rw/generic.h" 2
# 91 "/home/hak/hak/filesx/usr/rogue/rw/generic.h"
typedef int (*GPT)(int,char*);
# 652 "/home/hak/hak/filesx/usr/rogue/rw/defs.h" 2
# 186 "/home/hak/hak/filesx/usr/rogue/rw/tooldefs.h" 2







unsigned rwToolsVersion();

class RWCollectable;
# 255 "/home/hak/hak/filesx/usr/rogue/rw/tooldefs.h"
const long MAGIC_CONSTANT = 0x8888;





const RWClassID REFFLAG = 0xFFFF;
const RWClassID INSTFLAG = 0xFFFE;
# 365 "/home/hak/hak/filesx/usr/rogue/rw/tooldefs.h"
typedef RWCollectable* RWCollectableP;
typedef RWCollectable* (*RWuserCreator)();
typedef long RWstoredValue;
typedef void* RWvoid;
typedef unsigned long RWspace;




typedef RWBoolean (*RWtestGeneric) (const void*, const void*);
typedef RWBoolean (*RWtestCollectable) (const RWCollectable*, const void*);
typedef RWBoolean (*RWtestCollectablePair)
     (const RWCollectable*, const RWCollectable*, const void*);
typedef int (*RWcompare) (const void*, const void*);




typedef void (*RWapplyGeneric)( void*, void*);
typedef void (*RWapplyCollectable)(RWCollectable*, void*);




extern "C" RWBoolean
RWbsearch(const void* key, const void* base, size_t nelem, size_t width,
          RWcompare cmf, size_t&);
# 412 "/home/hak/hak/filesx/usr/rogue/rw/tooldefs.h"
inline unsigned RWhashAddress(const void* a)
{


  return (unsigned)a ^ ((unsigned)a>>3);
}
# 329 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h" 2
# 1 "/home/hak/hak/filesx/usr/rogue/rw/ref.h" 1
# 110 "/home/hak/hak/filesx/usr/rogue/rw/ref.h"
class RWMutex;





class RWReference {
 protected:
  unsigned refs_;
 public:
  enum RWReferenceFlag { STATIC_INIT };

  RWReference(int initRef = 0) : refs_((unsigned)initRef-1) { }
  RWReference(RWReferenceFlag) { }
  unsigned references() const {return refs_+1;}
  void setRefCount(unsigned r) {refs_ = r-1;}

  void addReference() {refs_++;}
  unsigned removeReference() {return refs_--;}




};
# 330 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h" 2
# 342 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"

# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 1 3 4
# 15 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/stdsyms.h" 1 3 4
# 16 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 2 3 4

# 1 "/usr/include/sys/_inttypes.h" 1 3 4
# 104 "/usr/include/sys/_inttypes.h" 3 4
typedef signed char int8_t;



typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned int uint32_t;

typedef int intfast_t;
typedef unsigned int uintfast_t;
# 132 "/usr/include/sys/_inttypes.h" 3 4
typedef int32_t intmax_t;
typedef uint32_t uintmax_t;



typedef long intptr_t;
typedef unsigned long uintptr_t;
# 149 "/usr/include/sys/_inttypes.h" 3 4
typedef char int_least8_t;


typedef unsigned char uint_least8_t;


typedef int int_fast8_t;


typedef unsigned int uint_fast8_t;


typedef short int_least16_t;


typedef unsigned short uint_least16_t;


typedef int int_fast16_t;


typedef unsigned int uint_fast16_t;


typedef int int_least32_t;


typedef unsigned int uint_least32_t;


typedef int int_fast32_t;


typedef unsigned int uint_fast32_t;
# 214 "/usr/include/sys/_inttypes.h" 3 4
typedef uint32_t ptr32_t;
# 18 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 2 3 4
# 26 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
extern "C" {





# 1 "/usr/include/sys/_null.h" 1 3 4
# 33 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 2 3 4







# 1 "/usr/include/sys/_size_t.h" 1 3 4
# 41 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 2 3 4






#pragma builtin_milli memcmp, strncat, strncmp, memmove, strcpy
#pragma builtin_milli strncpy, strcat, strcmp, strchr, strrchr, strstr 
#pragma builtin strpbrk, strcoll, strxfrm, strtok



#pragma extern memcmp, strncat, strncmp, memmove, strcpy, strncpy, strcat
#pragma extern strcmp, strcoll, strxfrm, strchr, strpbrk, strrchr, strstr 
#pragma extern strtok, strerror
# 90 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4

     extern int memcmp(const void *, const void *, size_t);
     extern char *strncat(char *, const char *, size_t);
     extern int strncmp(const char *, const char *, size_t);
     extern void *memmove(void *, const void *, size_t);
     extern char *strcpy(char *, const char *);
     extern char *strncpy(char *, const char *, size_t);
     extern char *strcat(char *, const char *);
     extern int strcmp(const char *, const char *);
     extern int strcoll(const char *, const char *);
     extern size_t strxfrm(char *, const char *, size_t);




     extern char *strchr(const char *, int);
     extern char *strpbrk(const char *, const char *);
     extern char *strrchr(const char *, int);
     extern char *strstr(const char *, const char *);



     extern char *strtok(char *, const char *);
     extern char *strerror(int);

# 185 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
#pragma builtin_milli memchr, memcpy, memset, strcspn, strlen
#pragma extern memcpy, memchr, memset, strcspn, strspn, strlen
# 230 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4

       extern void *memcpy(void *, const void *, size_t);




       extern void *memchr(const void *, int, size_t);



       extern void *memset(void *, int, size_t);
       extern size_t strcspn(const char *, const char *);
       extern size_t strspn(const char *, const char *);





         extern size_t strlen(const char *);

# 282 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
#pragma builtin_milli memccpy 
#pragma extern memccpy
# 297 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
       extern void *memccpy(void *, const void *, int, size_t);
# 323 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
#pragma builtin strdup 
#pragma extern strdup
# 335 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
     extern char *strdup(const char *);
# 344 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
#pragma builtin strcasecmp, strncasecmp 
#pragma extern strrstr, strcasecmp, strncasecmp 
# 365 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
     extern char *strrstr(const char *, const char *);
     extern int strcasecmp(const char *, const char *);
     extern int strncasecmp(const char *, const char *, size_t);
# 376 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/string.h" 3 4
}
# 344 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h" 2



class RWCRegexp;






class RWCString;
class RWCSubString;
# 374 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
class RWCStringRef : public RWReference
{

  static RWCStringRef* getRep(size_t capac, size_t nchar);
  void unLink();

  size_t length () const {return nchars_;}
  size_t capacity () const {return capacity_;}
  char* data () const {return (char*)(this+1);}

  char& operator[](size_t i) {return ((char*)(this+1))[i];}
  char operator[](size_t i) const {return ((char*)(this+1))[i];}

  size_t first (char ) const;
  size_t first (char,size_t) const;
  size_t first (const char*) const;
  size_t first (const char*, size_t) const;
  unsigned hash ( ) const;
  unsigned hashFoldCase ( ) const;
  size_t last (char ) const;
  size_t last (char,size_t) const;


  int collate(const char*) const;


  size_t capacity_;
  size_t nchars_;

friend class RWCString;
friend class RWCSubString;
};
# 419 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
class RWCSubString
{
public:
  RWCSubString(const RWCSubString& sp)
         : str_(sp.str_), begin_(sp.begin_), extent_(sp.extent_) {;}

  RWCSubString& operator=(const char*);
  RWCSubString& operator=(const RWCString&);
  RWCSubString& operator=(const RWCSubString&);
  char& operator()(size_t i);
  char& operator[](size_t i);

  char operator()(size_t i) const;
  char operator[](size_t i) const;

  const char* startData() const;




  const char* data() const;
# 448 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
  size_t length() const {return extent_;}
  size_t start() const {return begin_;}
  void toLower();
  void toUpper();


  RWBoolean isNull() const {return begin_==RW_NPOS;}
  int operator!() const {return begin_==RW_NPOS;}

protected:

  void subStringError(size_t, size_t, size_t) const;
  void assertElement(size_t i) const;

private:


  RWCSubString(const RWCString & s, size_t start, size_t len);

  RWCString* str_;
  size_t begin_;
  size_t extent_;
# 484 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
friend
RWBoolean operator==(const RWCSubString& s1, const RWCSubString& s2);
friend
RWBoolean operator==(const RWCSubString& s1, const RWCString& s2);
friend
RWBoolean operator==(const RWCSubString& s1, const char* s2);



friend class RWCString;
};
# 504 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
class RWCString
{
public:

  enum stripType {leading = 0x1, trailing = 0x2, both = 0x3};
  enum caseCompare {exact, ignoreCase};
  enum scopeType {one, all};

  RWCString();
  RWCString(RWSize_T ic);
  RWCString(const RWCString& S)

  { data_ = S.data_; pref()->addReference(); }




  RWCString(const char * a);
  RWCString(const char * a, size_t N);
  RWCString(char c) {initChar(c);}


  RWCString(unsigned char c) {initChar(char(c));}


  RWCString(signed char c) {initChar(char(c));}


  RWCString(char, size_t N);

  RWCString(const RWCSubString& SS);

  ~RWCString();



                operator const char*() const {return data_;}



  RWCString& operator=(const char*);
  RWCString& operator=(const RWCString&);
  RWCString& operator+=(const char*);
  RWCString& operator+=(const RWCString& s);



  char& operator[](size_t);
  char& operator()(size_t);
  RWCSubString operator()(size_t start, size_t len);
  RWCSubString operator()(const RWCRegexp& re);
  RWCSubString operator()(const RWCRegexp& re, size_t start);




  RWCSubString subString(const char* pat, size_t start=0, caseCompare=exact);

  char operator[](size_t) const;
  char operator()(size_t) const;
  const RWCSubString operator()(size_t start, size_t len) const;
  const RWCSubString operator()(const RWCRegexp& pat) const;
  const RWCSubString operator()(const RWCRegexp& pat, size_t start) const;




  const RWCSubString subString(const char* pat, size_t start=0, caseCompare=exact) const;
  const RWCSubString strip(stripType s=trailing, char c=' ') const;



  RWCString& append(const char* cs);
  RWCString& append(const char* cs, size_t N);
  RWCString& append(const RWCString& s);
  RWCString& append(const RWCString& s, size_t N);
  RWCString& append(char c, size_t rep=1);
  RWspace binaryStoreSize() const {return length()+sizeof(size_t);}
  size_t capacity() const {return pref()->capacity();}
  size_t capacity(size_t N);

  int collate(const char* cs) const {return pref()->collate(cs);}
  int collate(const RWCString& st) const;

  int compareTo(const char* cs, caseCompare cmp = exact) const;
  int compareTo(const RWCString& st, caseCompare cmp = exact) const;
  RWBoolean contains(const char* pat, caseCompare cmp = exact) const;
  RWBoolean contains(const RWCString& pat, caseCompare cmp = exact) const;
  RWCString copy() const;
  const char* data() const {return data_;}
  size_t first(char c) const {return pref()->first(c);}
  size_t first(char c, size_t i) const
  { return pref()->first(c, i); }
  size_t first(const char* cs) const {return pref()->first(cs);}
  size_t first(const char* cs, size_t N) const
  { return pref()->first(cs,N); }
  unsigned hash(caseCompare cmp = exact) const;
  size_t index(const char* pat, size_t i=0, caseCompare cmp = exact)
                      const;
  size_t index(const RWCString& s, size_t i=0, caseCompare cmp = exact)
                      const;
  size_t index(const char* pat, size_t patlen, size_t i,
                      caseCompare cmp) const;
  size_t index(const RWCString& s, size_t patlen, size_t i,
                      caseCompare cmp) const;
# 617 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
  size_t index(const RWCRegexp& pat, size_t i=0) const;
  size_t index(const RWCRegexp& pat, size_t* ext, size_t i=0) const;
  RWCString& insert(size_t pos, const char*);
  RWCString& insert(size_t pos, const char*, size_t extent);
  RWCString& insert(size_t pos, const RWCString&);
  RWCString& insert(size_t pos, const RWCString&, size_t extent);
  RWBoolean isAscii() const;
  RWBoolean isNull() const {return pref()->nchars_ == 0;}
  size_t last(char c) const {return pref()->last(c);}
  size_t last(char c,size_t i) const {return pref()->last(c,i);}
  size_t length() const {return pref()->nchars_;}

  size_t mbLength() const;

  RWCString& prepend(const char*);
  RWCString& prepend(const char* cs, size_t N);
  RWCString& prepend(const RWCString& s);
  RWCString& prepend(const RWCString& s, size_t N);
  RWCString& prepend(char c, size_t rep=1);
  istream& readFile(istream&);
  istream& readLine(istream&,
                         RWBoolean skipWhite = 1);
  istream& readString(istream&);
  istream& readToDelim(istream&, char delim='\n');
  istream& readToken(istream&);
  RWCString& remove(size_t pos);
  RWCString& remove(size_t pos, size_t n);
  RWCString& replace(size_t pos, size_t n, const char*);
  RWCString& replace(size_t pos, size_t n, const char*, size_t);
  RWCString& replace(size_t pos, size_t n, const RWCString&);
  RWCString& replace(size_t pos, size_t n, const RWCString&, size_t);
# 660 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
  void resize(size_t N);
  void restoreFrom(RWvistream&);
  void restoreFrom(RWFile&);
  void saveOn(RWvostream& s) const;
  void saveOn(RWFile& f) const;
  RWCSubString strip(stripType s=trailing, char c=' ');
  void toLower();
  void toUpper();


  static size_t initialCapacity(size_t ic = 15);
  static size_t maxWaste(size_t mw = 15);
  static size_t resizeIncrement(size_t ri = 16);






  static size_t getInitialCapacity() {return initialCapac;}
  static size_t getResizeIncrement() {return resizeInc;}
  static size_t getMaxWaste() {return freeboard;}



  static unsigned hash(const RWCString&);
protected:


  RWCString(const char* a1, size_t N1, const char* a2, size_t N2);
  void assertElement(size_t) const;
  void clobber(size_t nc);
  void cow();
  void cow(size_t nc);
  static size_t adjustCapacity(size_t nc);
  void initChar(char);
private:

  void clone();
  void clone(size_t nc);



  static size_t initialCapac;
  static size_t resizeInc;
  static size_t freeboard;


  RWCStringRef* pref() const { return (((RWCStringRef*) data_) - 1); }
  char* data_;
# 722 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
friend RWCString operator+(const RWCString& s1, const RWCString& s2);
friend RWCString operator+(const RWCString& s, const char* cs);
friend RWCString operator+(const char* cs, const RWCString& s);
inline friend
RWBoolean operator==(const RWCString& s1, const RWCString& s2);
friend RWBoolean operator==(const RWCString& s1, const char* s2);



friend class RWCSubString;
friend class RWCStringRef;

};



 istream& operator>>(istream& str , RWCString& cstr);
 ostream& operator<<(ostream& str , const RWCString& cstr);





inline RWvistream& operator>>(RWvistream& str, RWCString& cstr)
                { cstr.restoreFrom(str); return str; }
inline RWFile& operator>>(RWFile& file, RWCString& cstr)
                { cstr.restoreFrom(file); return file; }
inline RWvistream& operator>>(RWvistream& str, RWCString*& cstr)
                { cstr = new RWCString; cstr->restoreFrom(str); return str; }
inline RWFile& operator>>(RWFile& file, RWCString*& cstr)
                { cstr = new RWCString; cstr->restoreFrom(file); return file; }
inline RWvostream& operator<<(RWvostream& str, const RWCString& cstr)
                { cstr.saveOn(str); return str; }
inline RWFile& operator<<(RWFile& file, const RWCString& cstr)
                { cstr.saveOn(file); return file; }

RWCString toLower(const RWCString&);
RWCString toUpper(const RWCString&);
inline unsigned rwhash(const RWCString& s) { return s.hash(); }
inline unsigned rwhash(const RWCString* s) { return s->hash(); }

RWCString strXForm(const RWCString&);
# 773 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
inline void RWCString::cow()
{ if (pref()->references() > 1) clone(); }

inline void RWCString::cow(size_t nc)
{ if (pref()->references() > 1 || capacity() < nc) clone(nc); }

inline RWCString& RWCString::append(const char* cs)
{ return replace(length(), 0, cs, strlen(cs)); }

inline RWCString& RWCString::append(const char* cs, size_t N)
{ return replace(length(), 0, cs, N); }

inline RWCString& RWCString::append(const RWCString& s)
{ return replace(length(), 0, s.data(), s.length()); }

inline RWCString& RWCString::append(const RWCString& s, size_t N)
{ return replace(length(), 0, s.data(), rwmin(N, s.length())); }

inline RWCString& RWCString::operator+=(const char* cs)
{ return append(cs, strlen(cs)); }

inline RWCString& RWCString::operator+=(const RWCString& s)
{ return append(s.data(),s.length()); }


inline int RWCString::collate(const RWCString& st) const
{ return pref()->collate(st.data()); }


inline RWBoolean RWCString::contains(const RWCString& pat, caseCompare cmp) const
{ return index(pat.data(), pat.length(), (size_t)0, cmp) != RW_NPOS; }

inline RWBoolean RWCString::contains(const char* s, caseCompare cmp) const
{ return index(s, strlen(s), (size_t)0, cmp) != RW_NPOS; }

inline size_t RWCString::index(const char* s, size_t i, caseCompare cmp) const
{ return index(s, strlen(s), i, cmp); }

inline size_t RWCString::index(const RWCString& s, size_t i, caseCompare cmp) const
{ return index(s.data(), s.length(), i, cmp); }

inline size_t RWCString::index(const RWCString& pat, size_t patlen, size_t i, caseCompare cmp) const
{ return index(pat.data(), patlen, i, cmp); }

inline RWCString& RWCString::insert(size_t pos, const char* cs)
{ return replace(pos, 0, cs, strlen(cs)); }

inline RWCString& RWCString::insert(size_t pos, const char* cs, size_t N)
{ return replace(pos, 0, cs, N); }

inline RWCString& RWCString::insert(size_t pos, const RWCString& cstr)
{ return replace(pos, 0, cstr.data(), cstr.length()); }

inline RWCString& RWCString::insert(size_t pos, const RWCString& cstr, size_t N)
{ return replace(pos, 0, cstr.data(), rwmin(N, cstr.length())); }

inline RWCString& RWCString::prepend(const char* cs)
{ return replace(0, 0, cs, strlen(cs)); }

inline RWCString& RWCString::prepend(const char* cs, size_t N)
{ return replace(0, 0, cs, N); }

inline RWCString& RWCString::prepend(const RWCString& s)
{ return replace(0, 0, s.data(), s.length()); }

inline RWCString& RWCString::prepend(const RWCString& s, size_t N)
{ return replace(0, 0, s.data(), rwmin(N, s.length())); }

inline RWCString& RWCString::remove(size_t pos)
{ return replace(pos, length()-pos, 0, 0); }

inline RWCString& RWCString::remove(size_t pos, size_t n)
{ return replace(pos, n, 0, 0); }

inline RWCString& RWCString::replace(size_t pos, size_t n, const char* cs)
{ return replace(pos, n, cs, strlen(cs)); }

inline RWCString& RWCString::replace(size_t pos, size_t n, const RWCString& cstr)
{ return replace(pos, n, cstr.data(), cstr.length()); }

inline RWCString& RWCString::replace(size_t pos, size_t n1, const RWCString& cstr, size_t n2)
{ return replace(pos, n1, cstr.data(), rwmin(cstr.length(),n2)); }

inline char& RWCString::operator()(size_t i)
{



  cow();
  return data_[i];
}


inline char RWCString::operator[](size_t i) const
{ assertElement(i); return data_[i]; }

inline char RWCString::operator()(size_t i) const
{



  return data_[i];
}
# 894 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h"
inline const char* RWCSubString::startData() const
{ return str_->data() + begin_; }




inline const char* RWCSubString::data() const
{ return str_->data() + begin_; }





inline char RWCSubString::operator[](size_t i) const
{ assertElement(i); return str_->data_[begin_+i]; }

inline char RWCSubString::operator()(size_t i) const
{



   return str_->data_[begin_+i];
}



inline RWBoolean operator==(const RWCString& s1, const RWCString& s2)
                                  { return ((s1.length() == s2.length()) &&
                                    !memcmp(s1.data(), s2.data(), s1.length())); }
inline RWBoolean operator< (const RWCString& s1, const RWCString& s2)
                                  { return s1.compareTo(s2)< 0;}



inline RWBoolean operator!=(const RWCString& s1, const RWCString& s2)
                                  { return !(s1 == s2); }
inline RWBoolean operator> (const RWCString& s1, const RWCString& s2)
                                  { return s1.compareTo(s2)> 0;}
inline RWBoolean operator<=(const RWCString& s1, const RWCString& s2)
                                  { return s1.compareTo(s2)<=0;}
inline RWBoolean operator>=(const RWCString& s1, const RWCString& s2)
                                  { return s1.compareTo(s2)>=0;}



inline RWBoolean operator!=(const RWCString& s1, const char* s2)
                                  { return !(s1 == s2); }
inline RWBoolean operator< (const RWCString& s1, const char* s2)
                                  { return s1.compareTo(s2)< 0; }
inline RWBoolean operator> (const RWCString& s1, const char* s2)
                                  { return s1.compareTo(s2)> 0; }
inline RWBoolean operator<=(const RWCString& s1, const char* s2)
                                  { return s1.compareTo(s2)<=0; }
inline RWBoolean operator>=(const RWCString& s1, const char* s2)
                                  { return s1.compareTo(s2)>=0; }

inline RWBoolean operator==(const char* s1, const RWCString& s2)
                                  { return (s2 == s1); }
inline RWBoolean operator!=(const char* s1, const RWCString& s2)
                                  { return !(s2 == s1); }
inline RWBoolean operator< (const char* s1, const RWCString& s2)
                                  { return s2.compareTo(s1)> 0; }
inline RWBoolean operator> (const char* s1, const RWCString& s2)
                                  { return s2.compareTo(s1)< 0; }
inline RWBoolean operator<=(const char* s1, const RWCString& s2)
                                  { return s2.compareTo(s1)>=0; }
inline RWBoolean operator>=(const char* s1, const RWCString& s2)
                                  { return s2.compareTo(s1)<=0; }





inline RWBoolean operator==(const RWCString& s1, const RWCSubString& s2)
                           { return (s2 == s1); }
inline RWBoolean operator==(const char* s1, const RWCSubString& s2)
                           { return (s2 == s1); }
inline RWBoolean operator!=(const RWCSubString& s1, const char* s2)
                           { return !(s1 == s2); }
inline RWBoolean operator!=(const RWCSubString& s1, const RWCString& s2)
                           { return !(s1 == s2); }


inline RWBoolean operator!=(const RWCSubString& s1, const RWCSubString& s2)
                           { return !(s1 == s2); }


inline RWBoolean operator!=(const RWCString& s1, const RWCSubString& s2)
                           { return !(s2 == s1); }
inline RWBoolean operator!=(const char* s1, const RWCSubString& s2)
                           { return !(s2 == s1); }


# 1 "/home/hak/hak/filesx/usr/rogue/rw/strmshft.h" 1
# 77 "/home/hak/hak/filesx/usr/rogue/rw/strmshft.h"
class vostream;
class vistream;
# 988 "/home/hak/hak/filesx/usr/rogue/rw/cstring.h" 2
class RWpostream;
class RWbostream;
class RWeostream;

inline RWvostream& operator<<(RWpostream& dos, const RWCString& ct) { return (RWvostream&)dos << ct; }
inline RWvostream& operator<<(RWbostream& dos, const RWCString& ct) { return (RWvostream&)dos << ct; }
inline RWvostream& operator<<(RWeostream& dos, const RWCString& ct) { return (RWvostream&)dos << ct; }
# 16 "param.C" 2
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 1 3 4
# 26 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
#pragma builtin_milli abs
#pragma extern abs
# 44 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4

         inline int abs(int d) { return (d>0)?d:-d; }

# 55 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
extern "C" {





#pragma builtin_milli div, ldiv, labs
#pragma builtin rand, srand, atoi, exit, free 
#pragma extern __nl_char_size 

#pragma extern atof

#pragma extern atoi, atol, strtod, strtol, strtoul, rand
#pragma extern srand, atexit, exit, getenv, system, div, ldiv, labs 
#pragma extern mblen, mbtowc, wctomb, mbstowcs, wcstombs, free, qsort 


#pragma extern strtof
# 82 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
   extern int __nl_char_size;
# 95 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4

   typedef struct {
        int quot;
        int rem;
   } div_t;
   typedef struct {
        long int quot;
        long int rem;
   } ldiv_t;







# 1 "/usr/include/sys/_wchar_t.h" 1 3 4
# 112 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 2 3 4
# 138 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4



       extern double atof(const char *);

     extern int atoi(const char *);
     extern long int atol(const char *);
     extern double strtod(const char *, char **);
     extern long int strtol(const char *, char **, int);
# 160 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
   extern float strtof(const char *, char **);






     extern unsigned long int strtoul(const char *, char **, int);
     extern int rand(void);
     extern void srand(unsigned int);
     extern int atexit(void (*) (void));
     extern void exit(int);
     extern char *getenv(const char *);
     extern int system(const char *);
     extern div_t div(int, int);
     extern ldiv_t ldiv(long int, long int);
     extern long int labs(long int);
     extern int mblen(const char *, size_t);
     extern int mbtowc(wchar_t *, const char *, size_t);
     extern int wctomb(char *, wchar_t);
     extern size_t mbstowcs(wchar_t *, const char *, size_t);
     extern size_t wcstombs(char *, const wchar_t *, size_t);
     extern void free(void *);
     extern void qsort(void *, size_t, size_t, int (*)(const void *, const void *));

# 216 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
#pragma builtin abort, calloc, malloc, realloc
#pragma extern bsearch, abort, calloc, malloc, realloc
# 229 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4

       extern void abort(void);
       extern void *bsearch(const void *, const void *, size_t, size_t, int (*) (const void *, const void *));
       extern void *calloc(size_t, size_t);
       extern void *malloc(size_t);
       extern void *realloc(void *, size_t);

# 290 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
#pragma extern setkey, lcong48 
# 301 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
     extern void setkey(const char *);
     extern void lcong48( unsigned short [] );
# 313 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
#pragma extern drand48, erand48, jrand48, lrand48, mrand48, nrand48 
#pragma extern srand48, seed48, putenv
# 328 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
     extern double drand48(void);
     extern double erand48(unsigned short []);
     extern long jrand48(unsigned short []);
     extern long lrand48(void);
     extern long mrand48(void);
     extern long nrand48(unsigned short []);
     extern void srand48(long);
     extern unsigned short *seed48(unsigned short []);
     extern int putenv(const char *);
# 353 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
#pragma extern clearenv, getopt, getpass, memalign
#pragma extern optarg, optind, opterr
# 364 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
       extern int clearenv(void);
       extern int getopt(int, char * const [], const char *);
       extern char *getpass(const char *);
       extern void *memalign(size_t, size_t);







     extern char *optarg;
     extern int optind;
     extern int opterr;




# 1 "/usr/include/sys/wait.h" 1 3 4
# 28 "/usr/include/sys/wait.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 1 3 4
# 63 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
                typedef int mqd_t;





     typedef int32_t dev_t;





        typedef uint32_t ino32_t;
# 89 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
       typedef int psetid_t;
# 103 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
         typedef unsigned long ino_t;





     typedef uint16_t mode_t;




     typedef uint16_t nlink_t;




    typedef int32_t fpos32_t;
# 129 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4






       typedef long fpos_t;






     typedef uint32_t fsblkcnt32_t;
# 158 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
       typedef unsigned long fsblkcnt_t;





     typedef int32_t off32_t;




     typedef int32_t sbsize32_t;
     typedef uint32_t bsize32_t;
# 194 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
        typedef long off_t;
# 205 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
        typedef long sbsize_t;
        typedef unsigned long bsize_t;





     typedef uint32_t fsfilcnt32_t;
# 228 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
        typedef unsigned long fsfilcnt_t;





     typedef int32_t blkcnt32_t;
# 250 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
        typedef long blkcnt_t;





     typedef int32_t pid_t;




     typedef int32_t lwpid_t;




     typedef int32_t gid_t;




     typedef int32_t uid_t;




     typedef int32_t tid_t;




        typedef long ssize_t;




     typedef uint16_t __site_t;




     typedef uint16_t __cnode_t;












                typedef long time_t;
# 323 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
     typedef uint32_t clock_t;







      typedef int32_t key_t;


   typedef unsigned short __ushort;

   typedef int32_t __daddr_t;
   typedef char *__caddr_t;
   typedef int32_t __swblk_t;






     typedef __caddr_t caddr_t;







     typedef int32_t id_t;




     typedef uint32_t useconds_t;






      typedef uint32_t rlim32_t;
# 383 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
       typedef unsigned long rlim_t;




   typedef __site_t site_t;



   typedef unsigned char u_char;
   typedef unsigned short u_short;
   typedef unsigned int u_int;
   typedef unsigned long u_long;
   typedef unsigned int uint;
   typedef unsigned short ushort;
   typedef unsigned char ubit8;
   typedef unsigned short ubit16;
   typedef uint32_t ubit32;
   typedef char sbit8;
   typedef short sbit16;
   typedef int32_t sbit32;

   typedef __swblk_t swblk_t;
   typedef __daddr_t daddr_t;
   typedef __cnode_t cnode_t;


# 1 "/usr/include/machine/vm/vmtypes.h" 1 3 4
# 47 "/usr/include/machine/vm/vmtypes.h" 3 4
typedef uintptr_t paddr_t;
# 59 "/usr/include/machine/vm/vmtypes.h" 3 4
typedef intptr_t page_t;







typedef int pgcnt_t[2];
typedef unsigned int upgcnt_t[2];




typedef uintptr_t physpfn_t;
typedef uintptr_t iophyspfn_t;
typedef uintptr_t pgaddr_t;

typedef uint32_t prot_t;
# 95 "/usr/include/machine/vm/vmtypes.h" 3 4
typedef int space_t[2];

typedef uint32_t rid_t;
# 411 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 2 3 4



   typedef unsigned long ulong_t;


   typedef int16_t cnt_t;
   typedef uint32_t cdno_t;
   typedef uint16_t use_t;

   typedef struct _physadr { intptr_t r[1]; } *physadr;

   typedef int spu_t;
   typedef int ldom_t;





     typedef short cpu_t;




typedef struct lkinfo {
       char *lk_name;
       int lk_flags;
       long lk_pad[2];
} lkinfo_t;

typedef unsigned long pl_t;



      typedef int32_t aid_t;
# 454 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
   typedef pid_t sid_t;
# 466 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
# 1 "/usr/include/sys/_fd_macros.h" 1 3 4
# 85 "/usr/include/sys/_fd_macros.h" 3 4
typedef int32_t __fd_mask;
# 94 "/usr/include/sys/_fd_macros.h" 3 4
   typedef struct fd_set {
     long fds_bits[(((2048)+(((sizeof(long) * 8))-1))/((sizeof(long) * 8)))];
     } fd_set;



        extern "C" {
# 146 "/usr/include/sys/_fd_macros.h" 3 4
        }
# 467 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 2 3 4
# 475 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
     typedef __fd_mask fd_mask;




        extern "C" {
# 514 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/types.h" 3 4
        }
# 29 "/usr/include/sys/wait.h" 2 3 4
# 66 "/usr/include/sys/wait.h" 3 4
    extern "C" {




#pragma extern wait, waitpid







       extern pid_t wait(int *);
       extern pid_t waitpid(pid_t, int *, int);







    }







# 1 "/usr/include/sys/resource.h" 1 3 4
# 50 "/usr/include/sys/resource.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 1 3 4
# 37 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
# 1 "/usr/include/sys/sigevent.h" 1 3 4
# 45 "/usr/include/sys/sigevent.h" 3 4
# 1 "/usr/include/sys/stdpad.h" 1 3 4
# 46 "/usr/include/sys/sigevent.h" 2 3 4





typedef union sigval {




        struct {
                double __svi_pad1a;
                uint32_t __svi_pad1b;
                int __svi_int;
        } __svi_int_s;
        struct {
                double __svi_pad2a;
                uint32_t __svi_pad2b;
                void * __svi_ptr;
        } __svi_ptr_s;
# 75 "/usr/include/sys/sigevent.h" 3 4
   } sigval_t;
# 85 "/usr/include/sys/sigevent.h" 3 4
typedef int pthread_attr_t;




typedef struct sigevent {



      int __sigev_notify;
      int __sigev_signo;
      double __sigev_reserved0a;
      sigval_t __sigev_value;



      double __sigev_pad1a;
      uint32_t __sigev_pad1b;

      void (*__sigev_notify_function)(sigval_t);




      double __sigev_pad2a;
      uint32_t __sigev_pad2b;

      pthread_attr_t *__sigev_notify_attributes;
# 126 "/usr/include/sys/sigevent.h" 3 4
        double __sigev_reserved[8];




   } sigevent_t;


  enum __sigev_types {
          __SIGEV_NONE = 1,
          __SIGEV_SIGNAL

          ,__SIGEV_THREAD

  };
# 38 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 2 3 4
# 113 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4

   struct tm {
      int tm_sec;
      int tm_min;
      int tm_hour;
      int tm_mday;
      int tm_mon;
      int tm_year;
      int tm_wday;
      int tm_yday;
      int tm_isdst;
   };

# 134 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
  struct timespec {
        time_t tv_sec;
        long tv_nsec;
};
typedef struct timespec timestruc_t;





struct itimerspec {
        struct timespec it_interval;
        struct timespec it_value;
};


typedef enum __clockid_t {
        CLOCK_INVALID = 0,
        CLOCK_REALTIME = 1,
        CLOCK_VIRTUAL = 2,
        CLOCK_PROFILE = 4,
        RTTIMER0 = 8,
        RTTIMER1 = 16
} clockid_t;



        typedef unsigned long timer_t;
# 176 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
        struct timeval {

                time_t tv_sec;



                long tv_usec;
        };



   struct itimerval {
        struct timeval it_interval;
        struct timeval it_value;
   };






   struct timezone {
        int tz_minuteswest;
        int tz_dsttime;
   };



   typedef struct __cycles {
        uint32_t hi;
        uint32_t lo;
   } cycles_t;
# 217 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
   extern "C" {
# 230 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4





#pragma extern difftime 

     extern double difftime(time_t, time_t);






#pragma extern mktime 

     extern time_t mktime(struct tm *);






#pragma extern time 

     extern time_t time(time_t *);





#pragma extern asctime 

     extern char *asctime(const struct tm *);






#pragma extern ctime 

     extern char *ctime(const time_t *);






#pragma extern gmtime 

     extern struct tm *gmtime(const time_t *);






#pragma extern localtime 

     extern struct tm *localtime(const time_t *);






#pragma extern strftime 

     extern size_t strftime(char *, size_t, const char *, const struct tm *);


# 493 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
#pragma extern clock 
# 509 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4

       extern clock_t clock(void);

# 529 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
#pragma extern tzset 






     extern void tzset(void);
# 547 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
#pragma extern tzname


   extern char *tzname[2];







#pragma extern clock_settime, clock_gettime, clock_getres 
#pragma extern timer_create, timer_delete, timer_settime 
#pragma extern timer_gettime, timer_getoverrun, nanosleep 


     extern int clock_settime(clockid_t, const struct timespec *);
     extern int clock_gettime(clockid_t, struct timespec *);
     extern int clock_getres(clockid_t, struct timespec *);
     extern int timer_create(clockid_t, struct sigevent *, timer_t *);
     extern int timer_delete(timer_t);
     extern int timer_settime(timer_t, int, const struct itimerspec *,
                              struct itimerspec *);
     extern int timer_gettime(timer_t, struct itimerspec *);
     extern int timer_getoverrun(timer_t);
     extern int nanosleep(const struct timespec *, struct timespec *);
# 597 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
#pragma extern strptime


#pragma extern timezone


#pragma extern daylight





         extern char *strptime(const char *, const char *, struct tm *);
# 620 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
       extern long timezone;




       extern int daylight;






   }
# 644 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
   extern "C" {




#pragma extern getitimer, setitimer, utimes, gettimeofday, select



     extern int getitimer(int, struct itimerval *);
     extern int setitimer(int, const struct itimerval *, struct itimerval *);
     extern int utimes(const char *, const struct timeval[2]);
     extern int gettimeofday(struct timeval *, void *);



       extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
# 671 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
   }






   extern "C" {





#pragma extern adjtime

#pragma extern getdate






#pragma extern settimeofday, stime, profil


     extern int adjtime(const struct timeval *, struct timeval *);



       extern struct tm *getdate(const char *);
# 710 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
     extern int settimeofday(const struct timeval *, const struct timezone *);
     extern int stime(const time_t *);
     extern void profil(void *, size_t, size_t, int);
# 746 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
#pragma extern getdate_err 

       extern int getdate_err;






   }
# 799 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
    struct ki_timeval {
            uint32_t pad1;
            uint32_t pad2;
    };
# 821 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/time.h" 3 4
typedef struct ki_timeval kt_t;
# 51 "/usr/include/sys/resource.h" 2 3 4
# 59 "/usr/include/sys/resource.h" 3 4
# 1 "/usr/include/sys/_rlimit_body.h" 1 3 4
# 45 "/usr/include/sys/_rlimit_body.h" 3 4
struct rlimit {
        rlim_t rlim_cur;
        rlim_t rlim_max;
};
# 60 "/usr/include/sys/resource.h" 2 3 4
# 105 "/usr/include/sys/resource.h" 3 4
struct rusage {
        struct timeval ru_utime;
        struct timeval ru_stime;

        long ru_maxrss;

        long ru_ixrss;
        long ru_idrss;
        long ru_isrss;
        long ru_minflt;
        long ru_majflt;
        long ru_nswap;
        long ru_inblock;
        long ru_oublock;
        long ru_ioch;
        long ru_msgsnd;
        long ru_msgrcv;
        long ru_nsignals;
        long ru_nvcsw;
        long ru_nivcsw;

};
# 146 "/usr/include/sys/resource.h" 3 4
   extern "C" {




#pragma extern getpriority, getrusage, setpriority 

#pragma extern getrlimit, setrlimit



   extern int getpriority (int, id_t);
   extern int getrusage (int, struct rusage *);
   extern int setpriority (int, id_t, int);

   extern int getrlimit (int, struct rlimit *);
   extern int setrlimit (int, const struct rlimit *);
# 200 "/usr/include/sys/resource.h" 3 4
   }
# 97 "/usr/include/sys/wait.h" 2 3 4
# 107 "/usr/include/sys/wait.h" 3 4
      extern "C" {




#pragma extern wait3







           extern pid_t wait3(int *, int, struct rusage *);
# 130 "/usr/include/sys/wait.h" 3 4
      }






# 1 "/usr/include/sys/signal.h" 1 3 4
# 42 "/usr/include/sys/signal.h" 3 4
# 1 "/usr/include/sys/siginfo.h" 1 3 4
# 110 "/usr/include/sys/siginfo.h" 3 4
typedef struct __siginfo {




        uint32_t __si_version, __si_size; int si_signo; int si_code; int si_errno; uint32_t __si_reserved0b; double __si_reserved0c; sigval_t si_value; union { struct { double __pad2a; uint32_t __pad2b; pid_t __pid; union { struct { double __pad2c; uint32_t __pad2d; uid_t __uid; } __kill; struct { double __pad2e; uint32_t __pad2f; int __status; } __SIGCLD; } __pdata; } __proc; struct { double __pad5a; uint32_t __pad5b; void *__addr; double __pad5c; uint32_t __pad5d; unsigned int __imm; } __fault; struct { double __pad6a; uint32_t __pad6b; int __fd; double __pad6c; uint32_t __pad6d; long __band; } __file; struct { double __pad7a; uint32_t __pad7b; void *__addr; double __pad7c; uint32_t __pad7d; void *__lockpage; double __pad7e; uint32_t __pad7f; long __dev_id; } __gfault; } __data;



        double __pad[8];




} siginfo_t;
# 153 "/usr/include/sys/siginfo.h" 3 4
# 1 "/usr/include/machine/sys/siginfo.h" 1 3 4
# 50 "/usr/include/machine/sys/siginfo.h" 3 4
enum __si_codes {
        SI_USER = -1,
        SI_QUEUE = -2,
        SI_TIMER = -3,
        SI_ASYNCIO= -4,
        SI_MESGQ = -5
};
# 154 "/usr/include/sys/siginfo.h" 2 3 4
# 43 "/usr/include/sys/signal.h" 2 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/newsig.h" 1 3 4
# 58 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/newsig.h" 3 4
     typedef struct __sigset_t {
          unsigned int sigset[8];
     } sigset_t;
# 77 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/newsig.h" 3 4
typedef struct __stack {
        uint32_t __ss_pad0;
        void *ss_sp;
        uint32_t __ss_pad1;
        int ss_flags;
        uint32_t __ss_pad2;
        size_t ss_size;
        double __ss_reserved[5];
} stack_t;

# 1 "/usr/include/machine/sys/newsig.h" 1 3 4
# 42 "/usr/include/machine/sys/newsig.h" 3 4
typedef struct {
        long double __mc_opaque[2976];
} __mcontext_t;



typedef __mcontext_t mcontext_t;
# 70 "/usr/include/machine/sys/newsig.h" 3 4
typedef struct {
# 118 "/usr/include/machine/sys/newsig.h" 3 4
        double __uc_misc_reserved[45];

} __uc_misc_t;




typedef struct __ucontext {
        __uc_misc_t __uc_misc;






        double __uc_reserved[((1024 - sizeof(__uc_misc_t)) / sizeof(double))];
        mcontext_t __uc_mcontext;
} ucontext_t;
# 88 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/sys/newsig.h" 2 3 4
# 44 "/usr/include/sys/signal.h" 2 3 4
# 66 "/usr/include/sys/signal.h" 3 4

  typedef unsigned int sig_atomic_t;

# 79 "/usr/include/sys/signal.h" 3 4
   struct sigaction {
      union {



              void (*__sa_sigaction)(int, siginfo_t *, void *);







              void (*__sa_handler)(int);
      } __handler;

      sigset_t sa_mask;


      int sa_flags;
   };
# 108 "/usr/include/sys/signal.h" 3 4
typedef int pthread_t;
# 135 "/usr/include/sys/signal.h" 3 4
   struct sigstack {

        void *ss_sp;



        int ss_onstack;
   };
# 152 "/usr/include/sys/signal.h" 3 4
   struct sigvec {
      void (*sv_handler)(int);
      int sv_mask;
      int sv_flags;
   };
# 168 "/usr/include/sys/signal.h" 3 4
   extern "C" {





#pragma extern signal, raise




     extern void (*signal(int, void (*) (int)))(int);
     extern int raise(int);

# 191 "/usr/include/sys/signal.h" 3 4
#pragma extern kill, sigemptyset, sigfillset, sigaddset, sigdelset
#pragma extern sigismember, sigaction, sigprocmask, sigsuspend
#pragma extern sigpending
#pragma extern ___sysconf


     extern int kill(pid_t, int);
     extern int sigemptyset(sigset_t *);
     extern int sigfillset(sigset_t *);
     extern int sigaddset(sigset_t *, int);
     extern int sigdelset(sigset_t *, int);
     extern int sigismember(const sigset_t *, int);
     extern int sigaction(int, const struct sigaction *, struct sigaction *);
     extern int sigprocmask(int, const sigset_t *, sigset_t *);
     extern int sigsuspend(const sigset_t *);
     extern int sigpending(sigset_t *);
     extern long ___sysconf(int);
# 226 "/usr/include/sys/signal.h" 3 4
#pragma extern sigwait

#pragma extern pthread_sigmask, pthread_kill



     extern int sigwait(const sigset_t *set, int *sig);

     extern int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset);
     extern int pthread_kill(pthread_t thread, int sig);
# 249 "/usr/include/sys/signal.h" 3 4
#pragma extern sigwaitinfo, sigtimedwait, sigqueue


     extern int sigwaitinfo(const sigset_t *set, siginfo_t *info);
     extern int sigtimedwait(const sigset_t *set, siginfo_t * info,
                             const struct timespec *timeout);
     extern int sigqueue(pid_t pid, int signo,
                         const union sigval value);
# 267 "/usr/include/sys/signal.h" 3 4
#pragma extern bsd_signal, killpg, sigaltstack, siginterrupt

#pragma extern sigstack



        extern void (*bsd_signal(int, void(*)(int)))(int);
        extern int killpg(pid_t, int);

        extern int sigstack(struct sigstack *, struct sigstack *);



        extern int sigaltstack(const stack_t *, stack_t *);
        extern int siginterrupt(int, int);
# 293 "/usr/include/sys/signal.h" 3 4
#pragma extern sigset, sighold, sigrelse, sigignore, sigpause


           extern void (*sigset(int, void (*)(int)))(int);
           extern int sighold(int);
           extern int sigrelse(int);
           extern int sigignore(int);
           extern int sigpause(int);
# 315 "/usr/include/sys/signal.h" 3 4
#pragma extern sigblock, sigsetmask, sigvector, ssignal, sigspace, gsignal





     extern long sigblock(long);
     extern long sigsetmask(long);
     extern int sigvector(int, const struct sigvec *, struct sigvec *);
     extern int (*ssignal(int, int (*) (int)))(int);



     extern ssize_t sigspace(ssize_t);
     extern int gsignal(int);
# 348 "/usr/include/sys/signal.h" 3 4
   }
# 547 "/usr/include/sys/signal.h" 3 4
# 1 "/usr/include/machine/sys/signal.h" 1 3 4
# 59 "/usr/include/machine/sys/signal.h" 3 4
# 1 "/usr/include/machine/sys/sigcontext.h" 1 3 4
# 42 "/usr/include/machine/sys/sigcontext.h" 3 4
struct sigcontext {
        struct __ucontext __uc;
};
# 60 "/usr/include/machine/sys/signal.h" 2 3 4
# 548 "/usr/include/sys/signal.h" 2 3 4
# 574 "/usr/include/sys/signal.h" 3 4
# 1 "/usr/include/machine/sys/frame.h" 1 3 4
# 50 "/usr/include/machine/sys/frame.h" 3 4
typedef struct frame_marker {
        int __scratch[4];
} frame_marker_t;
# 575 "/usr/include/sys/signal.h" 2 3 4
# 138 "/usr/include/sys/wait.h" 2 3 4
# 172 "/usr/include/sys/wait.h" 3 4
typedef enum {
        P_PID,
        P_PGID,
        P_SID,
        P_UID,
        P_GID,
        P_CID,
        P_ALL,
        P_LWPID
} idtype_t;





      extern "C" {




#pragma extern waitid



        extern int waitid(idtype_t, id_t, siginfo_t *, int);





      }
# 213 "/usr/include/sys/wait.h" 3 4
   union wait {
        int w_status;



        struct {
                unsigned short w_pad;
                unsigned int w_Retcode:8;
                unsigned int w_Coredump:1;
                unsigned int w_Termsig:7;
        } w_T;





        struct {
                unsigned short w_pad;
                unsigned int w_Stopsig:8;
                unsigned int w_Stopval:8;
        } w_S;
   };
# 248 "/usr/include/sys/wait.h" 3 4
      extern "C" {




#pragma extern wait4


   extern pid_t wait4(pid_t,int *, int, struct rusage *);




      }
# 383 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 2 3 4



#pragma extern a64l, l64a, gcvt, getsubopt, grantpt, ptsname, realpath 
#pragma extern unlockpt, valloc, initstate, setstate 
#pragma extern srandom, random




#pragma extern mkstemp, mktemp, ttyslot
# 406 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
         extern int mkstemp(char *);
         extern char *mktemp(char *);
         extern int ttyslot(void);
# 430 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
     extern long a64l(const char *);
     extern char *l64a(long);




#pragma extern fcvt, ecvt 

      extern char *fcvt(double, int, int *, int *);
      extern char *ecvt(double, int, int *, int *);


    extern char *gcvt(double, int, char *);
    extern int getsubopt(char **, char * const *, char **);
    extern int grantpt(int);
    extern char *ptsname(int);
    extern char *realpath(const char *, char *);
    extern int unlockpt(int);
    extern void *valloc(size_t);
    extern char *initstate(unsigned int, char *, size_t);
    extern char *setstate(const char *);
    extern void srandom(unsigned int);
        extern long random(void);
# 504 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
  struct mallinfo {
        int32_t arena;
        int32_t ordblks;
        int32_t smblks;
        int32_t hblks;
        int32_t hblkhd;
        int32_t usmblks;
        int32_t fsmblks;
        int32_t uordblks;
        int32_t fordblks;
        int32_t keepcost;
  };
# 525 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
     typedef long double long_double;





#pragma extern _ldecvt, _ldfcvt, _ldgcvt, _extecvt, _extfcvt, ltostr
#pragma extern ultostr, ltoa, ultoa, mallinfo, mallopt, strtold
# 552 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 1 3 4
# 29 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 3 4
extern "C" {




   struct passwd {
        char *pw_name;
        char *pw_passwd;
        uid_t pw_uid;
        gid_t pw_gid;
        char *pw_age;
        char *pw_comment;
        char *pw_gecos;
        char *pw_dir;
        char *pw_shell;
        int32_t pw_audid;
        int pw_audflg;
   };


#pragma extern getpwuid, getpwnam
# 73 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 3 4
     extern struct passwd *getpwuid(uid_t);
     extern struct passwd *getpwnam(const char *);
# 98 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 3 4
#pragma extern endpwent, getpwent, setpwent
# 109 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 3 4
     extern void endpwent(void);
     extern struct passwd *getpwent(void);
     extern void setpwent(void);
# 120 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 3 4
   struct s_passwd {
       char *pw_name;
       char *pw_passwd;
       char *pw_age;
       int32_t pw_audid;
       int pw_audflg;
   };



#pragma extern putpwent, fgetpwent, getspwent, getspwuid, getspwaid
#pragma extern getspwnam, fgetspwent, setspwent, endspwent
# 148 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 1 3 4
# 14 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdarg.h" 1 3 4
# 43 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 15 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 2 3 4
# 33 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
extern "C" {
# 51 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4

   typedef struct {
        int __cnt;
        unsigned char *__ptr;
        unsigned char *__base;
        unsigned short __flag;
        unsigned char __fileL;
        unsigned char __fileH;
   } FILE;


   typedef struct {
        int __cnt;
        unsigned char *__ptr;
        unsigned char *__base;
        unsigned short __flag;
        unsigned char __fileL;
        unsigned char __fileH;
        unsigned char *__bufendp;
        unsigned char *__newbase;
        unsigned char __smbuf[8 +2*4];



        void *__unused;





        int __filler1;
        char __filler2[8];

   } _FILEX;
# 111 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
# 1 "/usr/include/sys/_null.h" 1 3 4
# 112 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 2 3 4
# 144 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
        typedef char * __va_list;
# 186 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern __iob

   extern FILE __iob[];





#pragma builtin fclose, fflush, scanf, fscanf, sscanf, fprintf 
#pragma builtin printf, sprintf, fgetc, fputc
#pragma extern remove, tmpnam, fclose, fflush, setbuf, setvbuf, fprintf
#pragma extern fscanf, printf, scanf, sprintf, sscanf, fgetc, fgets, fputc
#pragma extern fputs, getc, getchar, gets, putc, putchar, puts, ungetc
#pragma extern fseek, ftell, rewind, clearerr, feof, ferror, perror
# 259 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4

     extern int remove(const char *);



#pragma extern rename

     extern int rename(const char *, const char *);

     extern char *tmpnam(char *);
     extern int fclose(FILE *);
     extern int fflush(FILE *);
     extern void setbuf(FILE *, char *);
     extern int setvbuf(FILE *, char *, int, size_t);
     extern int fprintf(FILE *, const char *, ...);
     extern int fscanf(FILE *, const char *,...);
     extern int printf(const char *,...);
     extern int scanf(const char *,...);
     extern int sprintf(char *, const char *,...);
     extern int sscanf(const char *, const char *,...);
     extern int fgetc(FILE *);
     extern char *fgets(char *, int, FILE *);
     extern int fputc(int, FILE *);
     extern int fputs(const char *, FILE *);
     extern int getc(FILE *);
     extern int getchar(void);
     extern char *gets(char *);
     extern int putc(int, FILE *);
     extern int putchar(int);
     extern int puts(const char *);
     extern int ungetc(int, FILE *);



#pragma builtin fopen
#pragma extern tmpfile, fgetpos, fsetpos, fopen, freopen

     extern FILE *tmpfile(void);
     extern int fgetpos(FILE *, fpos_t *);
     extern int fsetpos(FILE *, const fpos_t *);
     extern FILE *fopen(const char *, const char *);
     extern FILE *freopen(const char *, const char *, FILE *);
# 310 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
     extern int fseek(FILE *, long int, int);
     extern long int ftell(FILE *);
     extern void rewind(FILE *);
     extern void clearerr(FILE *);
     extern int feof(FILE *);
     extern int ferror(FILE *);
     extern void perror(const char *);

# 408 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern fread, fwrite
# 423 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4

       extern size_t fread(void *, size_t, size_t, FILE *);
       extern size_t fwrite(const void *, size_t, size_t, FILE *);

# 442 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern __flsbuf, __filbuf 
# 453 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
     extern int __flsbuf(unsigned char, FILE *);
     extern int __filbuf(FILE *);
# 525 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern ctermid, fileno, fdopen 
# 536 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
     extern char *ctermid(char *);
     extern int fileno(FILE *);
     extern FILE *fdopen(int, const char *);
# 556 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4

           typedef char * __not_va_list__;

# 586 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern optarg, opterr, optind, optopt, getopt, cuserid


     extern char *optarg;
     extern int optind;
     extern int opterr;
     extern int optopt;
# 602 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
       extern int getopt(int, char * const [], const char *);
       extern char *cuserid(char *);
# 615 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern getw, putw, pclose, popen, tempnam
# 626 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
     extern int getw(FILE *);
     extern int putw(int, FILE *);
     extern int pclose(FILE *);
     extern FILE *popen(const char *, const char *);
     extern char *tempnam(const char *, const char *);
# 655 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern vprintf, vfprintf, vsprintf





     extern int vprintf(const char *, __gnuc_va_list);
     extern int vfprintf(FILE *, const char *, __gnuc_va_list);
     extern int vsprintf(char *, const char *, __gnuc_va_list);






# 679 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma builtin snprintf
#pragma extern snprintf, vsnprintf, vscanf, vfscanf, vsscanf, flockfile
#pragma extern ftrylockfile, funlockfile
# 699 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
     extern int snprintf(char *, size_t, const char *,...);
     extern int vsnprintf(char *, size_t, const char *, __gnuc_va_list);
     extern int vscanf(const char *, __gnuc_va_list);
     extern int vfscanf(FILE *, const char *, __gnuc_va_list);
     extern int vsscanf(char *, const char *, __gnuc_va_list);
     extern void flockfile(FILE *);
     extern int ftrylockfile(FILE *);
     extern void funlockfile(FILE *);
# 755 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
#pragma extern __bufendtab


   extern unsigned char *__bufendtab[];
# 920 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdio.h" 3 4
}
# 149 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 2 3 4


         extern int putpwent(const struct passwd *, FILE *);
     extern struct passwd *fgetpwent(FILE *);
     extern struct s_passwd *getspwent(void);
     extern struct s_passwd *getspwuid(uid_t);
     extern struct s_passwd *getspwaid(int32_t);
     extern struct s_passwd *getspwnam(char *);
     extern struct s_passwd *fgetspwent(FILE *);
     extern void setspwent(void);
     extern void endspwent(void);
# 208 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/pwd.h" 3 4
}
# 553 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 2 3 4



# 1 "/usr/include/errno.h" 1 3 4
# 36 "/usr/include/errno.h" 3 4
#pragma extern errno


        extern int errno;

# 1 "/usr/include/sys/errno.h" 1 3 4
# 42 "/usr/include/sys/errno.h" 3 4
     extern "C" {







#pragma extern errno

         extern int errno;



     }
# 42 "/usr/include/errno.h" 2 3 4





#pragma extern perror, strerror
#pragma extern sys_nerr, sys_errlist 


extern "C" {

    extern void perror(const char*);
    extern char *strerror (int);

    extern int sys_nerr;
    extern char *sys_errlist[];
}
# 557 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 2 3 4


     extern char *_ldecvt(long_double, int, int *, int *);
     extern char *_ldfcvt(long_double, int, int *, int *);
     extern char *_ldgcvt(long_double, int, char *);

       extern char *_extecvt(long double, int, int *, int *);
       extern char *_extfcvt(long double, int, int *, int *);



#pragma extern getpw, l3tol, ltol3

     extern int getpw(int, char *);
     extern void l3tol(long *, const char *, int);
     extern void ltol3(char *, const long *, int);
     extern char *ltostr(long, int);
     extern char *ultostr(unsigned long, int);
     extern char *ltoa(long);
     extern char *ultoa(unsigned long);





     extern struct mallinfo mallinfo(void);
     extern int mallopt(int, int);
     extern long_double strtold(const char *, char **);
# 671 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stdlib.h" 3 4
}
# 17 "param.C" 2

# 1 "/usr/local/include/g++-v3/backward/fstream.h" 1 3
# 31 "/usr/local/include/g++-v3/backward/fstream.h" 3
# 1 "/usr/local/include/g++-v3/backward/backward_warning.h" 1 3
# 32 "/usr/local/include/g++-v3/backward/fstream.h" 2 3
# 1 "/usr/local/include/g++-v3/fstream" 1 3
# 44 "/usr/local/include/g++-v3/fstream" 3

# 1 "/usr/local/include/g++-v3/istream" 1 3
# 43 "/usr/local/include/g++-v3/istream" 3

# 1 "/usr/local/include/g++-v3/ios" 1 3
# 43 "/usr/local/include/g++-v3/ios" 3

# 1 "/usr/local/include/g++-v3/iosfwd" 1 3
# 43 "/usr/local/include/g++-v3/iosfwd" 3

# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++config.h" 1 3
# 34 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++config.h" 3
# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/os_defines.h" 1 3
# 62 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/os_defines.h" 3
namespace std {

  __extension__ extern "C" long long strtoll (const char *, char **, int)
    __asm ("__strtoll");
  __extension__ extern "C" unsigned long long strtoull (const char *, char **, int)
    __asm ("__strtoull");






}
# 35 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++config.h" 2 3
# 45 "/usr/local/include/g++-v3/iosfwd" 2 3
# 1 "/usr/local/include/g++-v3/bits/stringfwd.h" 1 3
# 43 "/usr/local/include/g++-v3/bits/stringfwd.h" 3



namespace std
{
  template<class _CharT>
    struct char_traits;

  template<> struct char_traits<char>;




  template< _Alloc>
    class allocator;

  template< _CharT, _Traits = char_traits<_CharT>,
           _Alloc = allocator<_CharT> >
    class basic_string;

  typedef basic_string<char> string;
  typedef basic_string<wchar_t> wstring;
}
# 46 "/usr/local/include/g++-v3/iosfwd" 2 3
# 1 "/usr/local/include/g++-v3/bits/fpos.h" 1 3
# 43 "/usr/local/include/g++-v3/bits/fpos.h" 3

# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++io.h" 1 3
# 35 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++io.h" 3
# 1 "/usr/local/include/g++-v3/cstdio" 1 3
# 48 "/usr/local/include/g++-v3/cstdio" 3


# 1 "/usr/local/include/g++-v3/cstddef" 1 3
# 47 "/usr/local/include/g++-v3/cstddef" 3

# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stddef.h" 1 3 4
# 49 "/usr/local/include/g++-v3/cstddef" 2 3

namespace std
{
  using ::ptrdiff_t;
  using ::size_t;
}
# 51 "/usr/local/include/g++-v3/cstdio" 2 3
# 97 "/usr/local/include/g++-v3/cstdio" 3
namespace std
{
  using ::FILE;
  using ::fpos_t;

  using ::clearerr;
  using ::fclose;
  using ::feof;
  using ::ferror;
  using ::fflush;
  using ::fgetc;
  using ::fgetpos;
  using ::fgets;
  using ::fopen;
  using ::fprintf;
  using ::fputc;
  using ::fputs;
  using ::fread;
  using ::freopen;
  using ::fscanf;
  using ::fseek;
  using ::fsetpos;
  using ::ftell;
  using ::fwrite;
  using ::getc;
  using ::getchar;
  using ::gets;
  using ::perror;
  using ::printf;
  using ::putc;
  using ::putchar;
  using ::puts;
  using ::remove;
  using ::rename;
  using ::rewind;
  using ::scanf;
  using ::setbuf;
  using ::setvbuf;
  using ::sprintf;
  using ::sscanf;
  using ::tmpfile;
  using ::tmpnam;
  using ::ungetc;
  using ::vfprintf;
  using ::vprintf;
  using ::vsprintf;
}
# 36 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++io.h" 2 3

# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/gthr.h" 1 3
# 102 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/gthr.h" 3
# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/gthr-single.h" 1 3
# 34 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/gthr-single.h" 3
typedef int __gthread_mutex_t;
# 211 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/gthr-single.h" 3
static inline int
__gthread_active_p (void)
{
  return 0;
}

static inline int
__gthread_mutex_lock (__gthread_mutex_t * )
{
  return 0;
}

static inline int
__gthread_mutex_trylock (__gthread_mutex_t * )
{
  return 0;
}

static inline int
__gthread_mutex_unlock (__gthread_mutex_t * )
{
  return 0;
}
# 103 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/gthr.h" 2 3
# 38 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++io.h" 2 3

namespace std
{

  typedef long streamoff;
  typedef ptrdiff_t streamsize;



  typedef fpos_t __c_streampos;

  typedef __gthread_mutex_t __c_lock;


  typedef FILE __c_file_type;


  struct __ios_flags
  {
    typedef short __int_type;

    static const __int_type _S_boolalpha = 0x0001;
    static const __int_type _S_dec = 0x0002;
    static const __int_type _S_fixed = 0x0004;
    static const __int_type _S_hex = 0x0008;
    static const __int_type _S_internal = 0x0010;
    static const __int_type _S_left = 0x0020;
    static const __int_type _S_oct = 0x0040;
    static const __int_type _S_right = 0x0080;
    static const __int_type _S_scientific = 0x0100;
    static const __int_type _S_showbase = 0x0200;
    static const __int_type _S_showpoint = 0x0400;
    static const __int_type _S_showpos = 0x0800;
    static const __int_type _S_skipws = 0x1000;
    static const __int_type _S_unitbuf = 0x2000;
    static const __int_type _S_uppercase = 0x4000;
    static const __int_type _S_adjustfield = 0x0020 | 0x0080 | 0x0010;
    static const __int_type _S_basefield = 0x0002 | 0x0040 | 0x0008;
    static const __int_type _S_floatfield = 0x0100 | 0x0004;


    static const __int_type _S_badbit = 0x01;
    static const __int_type _S_eofbit = 0x02;
    static const __int_type _S_failbit = 0x04;


    static const __int_type _S_app = 0x01;
    static const __int_type _S_ate = 0x02;
    static const __int_type _S_bin = 0x04;
    static const __int_type _S_in = 0x08;
    static const __int_type _S_out = 0x10;
    static const __int_type _S_trunc = 0x20;
  };
}
# 45 "/usr/local/include/g++-v3/bits/fpos.h" 2 3
# 1 "/usr/local/include/g++-v3/cwchar" 1 3
# 48 "/usr/local/include/g++-v3/cwchar" 3



# 1 "/usr/local/include/g++-v3/ctime" 1 3
# 48 "/usr/local/include/g++-v3/ctime" 3



# 1 "/usr/include/time.h" 1 3 4
# 27 "/usr/include/time.h" 3 4
#pragma extern get_expiration_time
# 36 "/usr/include/time.h" 3 4
     extern int get_expiration_time (struct timespec *,struct timespec *);







     extern "C" {
# 54 "/usr/include/time.h" 3 4
     }
# 52 "/usr/local/include/g++-v3/ctime" 2 3
# 64 "/usr/local/include/g++-v3/ctime" 3
namespace std
{
  using ::clock_t;
  using ::time_t;
  using ::tm;

  using ::clock;
  using ::difftime;
  using ::mktime;
  using ::time;
  using ::asctime;
  using ::ctime;
  using ::gmtime;
  using ::localtime;
  using ::strftime;
}
# 52 "/usr/local/include/g++-v3/cwchar" 2 3


# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 1 3 4
# 24 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 3 4
# 1 "/usr/include/ctype.h" 1 3 4
# 17 "/usr/include/ctype.h" 3 4
extern "C" {






#pragma extern isalnum, isalpha, iscntrl, isdigit, isgraph, islower
#pragma extern isprint, ispunct, isspace, isupper, isxdigit




     extern int isalnum(int);
     extern int isalpha(int);
     extern int iscntrl(int);
     extern int isdigit(int);
     extern int isgraph(int);
     extern int islower(int);
     extern int isprint(int);
     extern int ispunct(int);
     extern int isspace(int);
     extern int isupper(int);
     extern int isxdigit(int);

# 75 "/usr/include/ctype.h" 3 4
#pragma extern tolower, toupper
# 87 "/usr/include/ctype.h" 3 4

extern int tolower(int);
extern int toupper(int);

# 100 "/usr/include/ctype.h" 3 4
#pragma extern isascii, toascii
# 113 "/usr/include/ctype.h" 3 4
     extern int isascii(int);
     extern int toascii(int);
# 130 "/usr/include/ctype.h" 3 4
#pragma extern __tolower, __toupper
# 141 "/usr/include/ctype.h" 3 4
extern int __tolower(int);
extern int __toupper(int);
# 175 "/usr/include/ctype.h" 3 4
#pragma extern isctype, isblank
# 192 "/usr/include/ctype.h" 3 4
     extern int isctype(int, unsigned int);
     extern int isblank(int);







#pragma builtin _isalnum, _isalpha, _iscntrl, _isdigit, _isgraph, _islower
#pragma builtin _isprint, _ispunct, _isspace, _isupper, _isxdigit
#pragma extern _isalnum, _isalpha, _iscntrl, _isdigit, _isgraph, _islower
#pragma extern _isprint, _ispunct, _isspace, _isupper, _isxdigit





#pragma extern __SB_masks

     extern unsigned int *__SB_masks;

     extern int _isalnum(int);
     extern int _isalpha(int);
     extern int _iscntrl(int);
     extern int _isdigit(int);
     extern int _isgraph(int);
     extern int _islower(int);
     extern int _isprint(int);
     extern int _ispunct(int);
     extern int _isspace(int);
     extern int _isupper(int);
     extern int _isxdigit(int);
# 280 "/usr/include/ctype.h" 3 4
}
# 25 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 2 3 4


# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/stddef.h" 1 3 4
# 28 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 2 3 4
# 39 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/limits.h" 1 3 4
# 11 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/limits.h" 3 4
# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/syslimits.h" 1 3 4
# 432 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/syslimits.h" 3 4
# 1 "/usr/include/sys/param.h" 1 3 4
# 35 "/usr/include/sys/param.h" 3 4
# 1 "/usr/include/sys/sysmacros.h" 1 3 4
# 36 "/usr/include/sys/param.h" 2 3 4

# 1 "/usr/include/machine/sys/param.h" 1 3 4
# 46 "/usr/include/machine/sys/param.h" 3 4
# 1 "/usr/include/machine/sys/inline.h" 1 3 4
# 13 "/usr/include/machine/sys/inline.h" 3 4
typedef enum {
        _SZ_B = 1,
        _SZ_H = 2,
        _SZ_W = 4,
        _SZ_D = 8
} _Asm_sz;


typedef enum {
        _SEM_ACQ = 1,
        _SEM_REL = 2
} _Asm_sem;


typedef enum {
        _FASZ_W = 4,
        _FASZ_D = 8
} _Asm_fasz;


typedef enum {
        _MBTYPE_REV = 1,
        _MBTYPE_MIX = 2,
        _MBTYPE_SHUF = 3,
        _MBTYPE_ALT = 4,
        _MBTYPE_BRCST = 5
} _Asm_mbtype;


typedef enum {
        _LDHINT_NONE = 0,
        _LDHINT_NT1 = 1,
        _LDHINT_NTA = 2
} _Asm_ldhint;


typedef enum {
        _STHINT_NONE = 0,
        _STHINT_NTA = 1
} _Asm_sthint;


typedef enum {
        _LFTYPE_NONE = 0,
        _LFTYPE_FAULT = 1
} _Asm_lftype;


typedef enum {
        _LFHINT_NONE = 0,
        _LFHINT_NT1 = 1,
        _LFHINT_NT2 = 2,
        _LFHINT_NTA = 3
} _Asm_lfhint;


typedef enum {
        _REG_BANK_ZERO = 0,
        _REG_BANK_ONE = 1
} _Asm_reg_bank;


typedef enum {
        _PC_S = 1,
        _PC_D = 2,
        _PC_NONE = 3
} _Asm_pc;


typedef enum {
        _FP_NAT = (1<<8),
        _FP_QNAN = (1<<7),
        _FP_SNAN = (1<<6),
        _FP_POS = (1<<0),
        _FP_NEG = (1<<1),
        _FP_ZERO = (1<<2),
        _FP_UNNORM = (1<<3),
        _FP_NORM = (1<<4),
        _FP_INF = (1<<5)
} _Asm_fclass_type;


typedef enum {
        _FP_EQ = 1,
        _FP_LT = 2,
        _FP_LE = 3,
        _FP_GT = 4,
        _FP_GE = 5,
        _FP_UNORD = 6,
        _FP_NEQ = 7,
        _FP_NLT = 8,
        _FP_NLE = 9,
        _FP_NGT = 10,
        _FP_NGE = 11,
        _FP_ORD = 12
} _Asm_frel;


typedef enum {
        _FX_S = 1,
        _FX_ST = 2,
        _FX_U = 3,
        _FX_UT = 4
} _Asm_fx_type;


typedef enum {
        _FM_NS = 1,
        _FM_S = 2,
        _FM_SE = 3
} _Asm_fm_type;



typedef enum {
        _FR_S = 1,
        _FR_D = 2,
        _FR_EXP = 3,
        _FR_SIG = 4
} _Asm_fr_access;


typedef enum {
        _XM_L = 1,
        _XM_LU = 2,
        _XM_H = 3,
        _XM_HU = 4
} _Asm_xm_type;


typedef enum {
        _SF0 = 0,
        _SF1 = 1,
        _SF2 = 2,
        _SF3 = 3
} _Asm_sf;


typedef enum {
        _AREG0, _AREG1, _AREG2, _AREG3, _AREG4, _AREG5, _AREG6, _AREG7, _AREG8,
        _AREG9, _AREG10, _AREG11, _AREG12, _AREG13, _AREG14, _AREG15, _AREG16,
        _AREG17, _AREG18, _AREG19, _AREG20, _AREG21, _AREG22, _AREG23, _AREG24,
        _AREG25, _AREG26, _AREG27, _AREG28, _AREG29, _AREG30, _AREG31, _AREG32,
        _AREG33, _AREG34, _AREG35, _AREG36, _AREG37, _AREG38, _AREG39, _AREG40,
        _AREG41, _AREG42, _AREG43, _AREG44, _AREG45, _AREG46, _AREG47, _AREG48,
        _AREG49, _AREG50, _AREG51, _AREG52, _AREG53, _AREG54, _AREG55, _AREG56,
        _AREG57, _AREG58, _AREG59, _AREG60, _AREG61, _AREG62, _AREG63, _AREG64,
        _AREG65, _AREG66, _AREG67, _AREG68, _AREG69, _AREG70, _AREG71, _AREG72,
        _AREG73, _AREG74, _AREG75, _AREG76, _AREG77, _AREG78, _AREG79, _AREG80,
        _AREG81, _AREG82, _AREG83, _AREG84, _AREG85, _AREG86, _AREG87, _AREG88,
        _AREG89, _AREG90, _AREG91, _AREG92, _AREG93, _AREG94, _AREG95, _AREG96,
        _AREG97, _AREG98, _AREG99, _AREG100, _AREG101, _AREG102, _AREG103,
        _AREG104, _AREG105, _AREG106, _AREG107, _AREG108, _AREG109, _AREG110,
        _AREG111, _AREG112, _AREG113, _AREG114, _AREG115, _AREG116, _AREG117,
        _AREG118, _AREG119, _AREG120, _AREG121, _AREG122, _AREG123, _AREG124,
        _AREG125, _AREG126, _AREG127,

        _AREG_KR0 = _AREG0,
        _AREG_KR1 = _AREG1,
        _AREG_KR2 = _AREG2,
        _AREG_KR3 = _AREG3,
        _AREG_KR4 = _AREG4,
        _AREG_KR5 = _AREG5,
        _AREG_KR6 = _AREG6,
        _AREG_KR7 = _AREG7,
        _AREG_RSC = _AREG16,
        _AREG_BSP = _AREG17,
        _AREG_BSPSTORE = _AREG18,
        _AREG_RNAT = _AREG19,
        _AREG_CCV = _AREG32,
        _AREG_UNAT = _AREG36,
        _AREG_FPSR = _AREG40,
        _AREG_ITC = _AREG44,
        _AREG_PFS = _AREG64,
        _AREG_LC = _AREG65,
        _AREG_EC = _AREG66,


        _AREG_IOBASE = _AREG_KR0,
        _AREG_TSS = _AREG_KR1,
        _AREG_TSSD = _AREG_KR2,
        _AREG_Eflags = _AREG24,
        _AREG_CSD = _AREG25,
        _AREG_SSD = _AREG26,
        _AREG_CFLG = _AREG27,
        _AREG_FSR = _AREG28,
        _AREG_FIR = _AREG29,
        _AREG_FDR = _AREG30
} _Asm_app_reg;


typedef enum {
        _CREG0, _CREG1, _CREG2, _CREG3, _CREG4, _CREG5, _CREG6, _CREG7, _CREG8,
        _CREG9, _CREG10, _CREG11, _CREG12, _CREG13, _CREG14, _CREG15, _CREG16,
        _CREG17, _CREG18, _CREG19, _CREG20, _CREG21, _CREG22, _CREG23, _CREG24,
        _CREG25, _CREG26, _CREG27, _CREG28, _CREG29, _CREG30, _CREG31, _CREG32,
        _CREG33, _CREG34, _CREG35, _CREG36, _CREG37, _CREG38, _CREG39, _CREG40,
        _CREG41, _CREG42, _CREG43, _CREG44, _CREG45, _CREG46, _CREG47, _CREG48,
        _CREG49, _CREG50, _CREG51, _CREG52, _CREG53, _CREG54, _CREG55, _CREG56,
        _CREG57, _CREG58, _CREG59, _CREG60, _CREG61, _CREG62, _CREG63, _CREG64,
        _CREG65, _CREG66, _CREG67, _CREG68, _CREG69, _CREG70, _CREG71, _CREG72,
        _CREG73, _CREG74, _CREG75, _CREG76, _CREG77, _CREG78, _CREG79, _CREG80,
        _CREG81, _CREG82, _CREG83, _CREG84, _CREG85, _CREG86, _CREG87, _CREG88,
        _CREG89, _CREG90, _CREG91, _CREG92, _CREG93, _CREG94, _CREG95, _CREG96,
        _CREG97, _CREG98, _CREG99, _CREG100, _CREG101, _CREG102, _CREG103,
        _CREG104, _CREG105, _CREG106, _CREG107, _CREG108, _CREG109, _CREG110,
        _CREG111, _CREG112, _CREG113, _CREG114, _CREG115, _CREG116, _CREG117,
        _CREG118, _CREG119, _CREG120, _CREG121, _CREG122, _CREG123, _CREG124,
        _CREG125, _CREG126, _CREG127,

        _CREG_DCR = _CREG0,
        _CREG_ITM = _CREG1,
        _CREG_IVA = _CREG2,
        _CREG_PTA = _CREG8,
        _CREG_GPTA = _CREG9,
        _CREG_IPSR = _CREG16,
        _CREG_ISR = _CREG17,
        _CREG_IIP = _CREG19,
        _CREG_IFA = _CREG20,
        _CREG_ITIR = _CREG21,
        _CREG_IIPA = _CREG22,
        _CREG_IFS = _CREG23,
        _CREG_IIM = _CREG24,
        _CREG_IHA = _CREG25,
        _CREG_LID = _CREG64,
        _CREG_IVR = _CREG65,
        _CREG_TPR = _CREG66,
        _CREG_EOI = _CREG67,
        _CREG_IRR0 = _CREG68,
        _CREG_IRR1 = _CREG69,
        _CREG_IRR2 = _CREG70,
        _CREG_IRR3 = _CREG71,
        _CREG_ITV = _CREG72,
        _CREG_PMV = _CREG73,
        _CREG_CMCV = _CREG74,
        _CREG_LRR0 = _CREG80,
        _CREG_LRR1 = _CREG81
} _Asm_cntl_reg;


typedef enum {
        _NO_FENCE = 0x0,
        _UP_MEM_FENCE = 0x1,
        _UP_ALU_FENCE = 0x2,
        _UP_FLOP_FENCE = 0x4,
        _UP_SYS_FENCE = 0x8,
        _UP_CALL_FENCE = 0x10,
        _UP_BR_FENCE = 0x20,

        _DOWN_MEM_FENCE = 0x100,
        _DOWN_ALU_FENCE = 0x200,
        _DOWN_FLOP_FENCE= 0x400,
        _DOWN_SYS_FENCE = 0x800,
        _DOWN_CALL_FENCE= 0x1000,
        _DOWN_BR_FENCE = 0x2000
} _Asm_fence;
# 47 "/usr/include/machine/sys/param.h" 2 3 4
# 38 "/usr/include/sys/param.h" 2 3 4
# 433 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/syslimits.h" 2 3 4
# 12 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/limits.h" 2 3 4
# 40 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 2 3 4



extern "C" {










      typedef unsigned int wint_t;




      typedef unsigned int wctype_t;









#pragma extern wcscat, wcsncat, wcscpy, wcsncpy, wcslen
#pragma extern wcsspn, wcscspn, wcscmp, wcsncmp, wcswcs, wcstok 





#pragma extern wcscoll, wcsxfrm, wcswidth, iswalnum, iswalpha, iswcntrl
#pragma extern iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace
#pragma extern iswupper, iswxdigit, towlower, towupper, wctype, iswctype
#pragma extern fgetwc, fgetws, fputwc, fputws, getwc, getwchar, putwc, putwchar
#pragma extern ungetwc, wcstod, wcstol, wcstoul, wcsftime 

#pragma extern wcwidth 






#pragma extern getws, putws






# 139 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 3 4
         extern wchar_t *wcscat (wchar_t *, const wchar_t *);
         extern wchar_t *wcsncat (wchar_t *, const wchar_t *, size_t);
         extern wchar_t *wcscpy (wchar_t *, const wchar_t *);
         extern wchar_t *wcsncpy (wchar_t *, const wchar_t *, size_t);
         extern size_t wcslen (const wchar_t *);
         extern size_t wcsspn (const wchar_t *, const wchar_t *);
         extern size_t wcscspn (const wchar_t *, const wchar_t *);
         extern int wcscmp (const wchar_t *, const wchar_t *);
         extern int wcsncmp (const wchar_t *, const wchar_t *, size_t);






         extern size_t wcsftime (wchar_t *, size_t, const char *, const struct tm *);

         extern wchar_t *wcstok (wchar_t *, const wchar_t *);
# 165 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 3 4
#pragma extern wcschr, wcsrchr, wcspbrk


             extern wchar_t *wcschr (const wchar_t *, wchar_t);
             extern wchar_t *wcsrchr (const wchar_t *, wchar_t);




         extern wchar_t *wcspbrk (const wchar_t *, const wchar_t *);




         extern wchar_t *wcswcs (const wchar_t *, const wchar_t *);






         extern int wcscoll (const wchar_t *, const wchar_t *);
         extern size_t wcsxfrm (wchar_t *, const wchar_t *, size_t);


               extern int wcwidth (wchar_t);





         extern int wcswidth (const wchar_t *, size_t);



         extern int iswalnum (wint_t);
         extern int iswalpha (wint_t);
         extern int iswcntrl (wint_t);
         extern int iswdigit (wint_t);
         extern int iswgraph (wint_t);
         extern int iswlower (wint_t);
         extern int iswprint (wint_t);
         extern int iswpunct (wint_t);
         extern int iswspace (wint_t);
         extern int iswupper (wint_t);
         extern int iswxdigit (wint_t);
         extern wint_t towlower (wint_t);
         extern wint_t towupper (wint_t);
         extern wctype_t wctype (const char *);
         extern int iswctype (wint_t, wctype_t);


         extern wint_t fgetwc (FILE *);
         extern wchar_t *fgetws (wchar_t *, int, FILE *);
# 228 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 3 4
         extern wint_t fputwc (wint_t, FILE *);
         extern wint_t putwc (wint_t, FILE *);
         extern wint_t putwchar (wint_t);


         extern int fputws (const wchar_t *, FILE *);
         extern wint_t getwc (FILE *);
         extern wint_t getwchar (void);
         extern wint_t ungetwc (wint_t, FILE *);


         extern double wcstod (const wchar_t *, wchar_t **);
         extern long int wcstol (const wchar_t *, wchar_t **, int);
         extern unsigned long int wcstoul (const wchar_t *, wchar_t **, int);



         extern wchar_t *getws (wchar_t *);
         extern int putws (const wchar_t *);
# 256 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 3 4
#pragma extern iswblank







     extern int iswblank (wint_t);
# 284 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/wchar.h" 3 4
}
# 55 "/usr/local/include/g++-v3/cwchar" 2 3





extern "C"
{
  typedef struct
  {
    int __fill[6];
  } mbstate_t;
}


namespace std
{
  using ::mbstate_t;
}
# 46 "/usr/local/include/g++-v3/bits/fpos.h" 2 3

namespace std
{



  template< _StateT>
    class fpos
    {
    public:

      typedef _StateT __state_type;

    private:
      streamoff _M_off;
      __state_type _M_st;

    public:
      __state_type
      state() const { return _M_st; }

      void
      state(__state_type __st) { _M_st = __st; }



      fpos(): _M_off(streamoff()), _M_st(__state_type()) { }

      fpos(streamoff __off, __state_type __st = __state_type())
      : _M_off(__off), _M_st(__st) { }

      operator streamoff() const { return _M_off; }

      fpos&
      operator+=(streamoff __off) { _M_off += __off; return *this; }

      fpos&
      operator-=(streamoff __off) { _M_off -= __off; return *this; }

      fpos
      operator+(streamoff __off)
      {
        fpos __t(*this);
        __t += __off;
        return __t;
      }

      fpos
      operator-(streamoff __off)
      {
        fpos __t(*this);
        __t -= __off;
        return __t;
      }

      bool
      operator==(const fpos& __pos) const
      { return _M_off == __pos._M_off; }

      bool
      operator!=(const fpos& __pos) const
      { return _M_off != __pos._M_off; }

      streamoff
      _M_position() const { return _M_off; }

      void
      _M_position(streamoff __off) { _M_off = __off; }
    };


  typedef fpos<mbstate_t> streampos;



}
# 47 "/usr/local/include/g++-v3/iosfwd" 2 3
# 1 "/usr/local/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/usr/local/include/g++-v3/bits/functexcept.h" 3
# 1 "/usr/local/include/g++-v3/exception_defines.h" 1 3
# 35 "/usr/local/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 48 "/usr/local/include/g++-v3/iosfwd" 2 3

namespace std
{
  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_ios;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_streambuf;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_istream;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_ostream;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_iostream;

  template< _CharT, _Traits = char_traits<_CharT>,
            _Alloc = allocator<_CharT> >
    class basic_stringbuf;

  template< _CharT, _Traits = char_traits<_CharT>,
           _Alloc = allocator<_CharT> >
    class basic_istringstream;

  template< _CharT, _Traits = char_traits<_CharT>,
           _Alloc = allocator<_CharT> >
    class basic_ostringstream;

  template< _CharT, _Traits = char_traits<_CharT>,
           _Alloc = allocator<_CharT> >
    class basic_stringstream;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_filebuf;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_ifstream;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_ofstream;

  template< _CharT, _Traits = char_traits<_CharT> >
    class basic_fstream;

  template< _CharT, _Traits = char_traits<_CharT> >
    class istreambuf_iterator;

  template< _CharT, _Traits = char_traits<_CharT> >
    class ostreambuf_iterator;



  class ios_base;


  typedef basic_ios<char> ios;
  typedef basic_streambuf<char> streambuf;
  typedef basic_istream<char> istream;
  typedef basic_ostream<char> ostream;
  typedef basic_iostream<char> iostream;
  typedef basic_stringbuf<char> stringbuf;
  typedef basic_istringstream<char> istringstream;
  typedef basic_ostringstream<char> ostringstream;
  typedef basic_stringstream<char> stringstream;
  typedef basic_filebuf<char> filebuf;
  typedef basic_ifstream<char> ifstream;
  typedef basic_ofstream<char> ofstream;
  typedef basic_fstream<char> fstream;

  typedef basic_ios<wchar_t> wios;
  typedef basic_streambuf<wchar_t> wstreambuf;
  typedef basic_istream<wchar_t> wistream;
  typedef basic_ostream<wchar_t> wostream;
  typedef basic_iostream<wchar_t> wiostream;
  typedef basic_stringbuf<wchar_t> wstringbuf;
  typedef basic_istringstream<wchar_t> wistringstream;
  typedef basic_ostringstream<wchar_t> wostringstream;
  typedef basic_stringstream<wchar_t> wstringstream;
  typedef basic_filebuf<wchar_t> wfilebuf;
  typedef basic_ifstream<wchar_t> wifstream;
  typedef basic_ofstream<wchar_t> wofstream;
  typedef basic_fstream<wchar_t> wfstream;
}
# 45 "/usr/local/include/g++-v3/ios" 2 3
# 1 "/usr/local/include/g++-v3/exception" 1 3
# 40 "/usr/local/include/g++-v3/exception" 3
extern "C++" {

namespace std
{






  class exception
  {
  public:
    exception() throw() { }
    virtual ~exception() throw();


    virtual const char* what() const throw();
  };



  class bad_exception : public exception
  {
  public:
    bad_exception() throw() { }


    virtual ~bad_exception() throw();
  };


  typedef void (*terminate_handler) ();

  typedef void (*unexpected_handler) ();


  terminate_handler set_terminate(terminate_handler) throw();


  void terminate() __attribute__ ((__noreturn__));


  unexpected_handler set_unexpected(unexpected_handler) throw();


  void unexpected() __attribute__ ((__noreturn__));
# 98 "/usr/local/include/g++-v3/exception" 3
  bool uncaught_exception() throw();
}

namespace __gnu_cxx
{






  void __verbose_terminate_handler ();
}

}
# 46 "/usr/local/include/g++-v3/ios" 2 3
# 1 "/usr/local/include/g++-v3/bits/char_traits.h" 1 3
# 43 "/usr/local/include/g++-v3/bits/char_traits.h" 3

# 1 "/usr/local/include/g++-v3/cstring" 1 3
# 48 "/usr/local/include/g++-v3/cstring" 3
# 77 "/usr/local/include/g++-v3/cstring" 3
namespace std
{
  using ::memcpy;
  using ::memmove;
  using ::strcpy;
  using ::strncpy;
  using ::strcat;
  using ::strncat;
  using ::memcmp;
  using ::strcmp;
  using ::strcoll;
  using ::strncmp;
  using ::strxfrm;
  using ::strcspn;
  using ::strspn;
  using ::strtok;
  using ::memset;
  using ::strerror;
  using ::strlen;

  using ::memchr;

  inline void*
  memchr(void* __p, int __c, size_t __n)
  { return memchr(const_cast<const void*>(__p), __c, __n); }

  using ::strchr;

  inline char*
  strchr(char* __s1, int __n)
  { return __builtin_strchr(const_cast<const char*>(__s1), __n); }

  using ::strpbrk;

  inline char*
  strpbrk(char* __s1, const char* __s2)
  { return __builtin_strpbrk(const_cast<const char*>(__s1), __s2); }

  using ::strrchr;

  inline char*
  strrchr(char* __s1, int __n)
  { return __builtin_strrchr(const_cast<const char*>(__s1), __n); }

  using ::strstr;

  inline char*
  strstr(char* __s1, const char* __s2)
  { return __builtin_strstr(const_cast<const char*>(__s1), __s2); }
}
# 45 "/usr/local/include/g++-v3/bits/char_traits.h" 2 3


namespace std
{



  template<class _CharT>
    struct char_traits
    {
      typedef _CharT char_type;

      typedef unsigned long int_type;
      typedef streampos pos_type;
      typedef streamoff off_type;
      typedef mbstate_t state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, size_t __n)
      {
        for (size_t __i = 0; __i < __n; ++__i)
          if (!eq(__s1[__i], __s2[__i]))
            return lt(__s1[__i], __s2[__i]) ? -1 : 1;
        return 0;
      }

      static size_t
      length(const char_type* __s)
      {
        const char_type* __p = __s;
        while (*__p) ++__p;
        return (__p - __s);
      }

      static const char_type*
      find(const char_type* __s, size_t __n, const char_type& __a)
      {
        for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
          if (*__p == __a) return __p;
        return 0;
      }

      static char_type*
      move(char_type* __s1, const char_type* __s2, size_t __n)
      { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }

      static char_type*
      copy(char_type* __s1, const char_type* __s2, size_t __n)
      { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }

      static char_type*
      assign(char_type* __s, size_t __n, char_type __a)
      {
        for (char_type* __p = __s; __p < __s + __n; ++__p)
          assign(*__p, __a);
        return __s;
      }

      static char_type
      to_char_type(const int_type& __c)
      { return char_type(__c); }

      static int_type
      to_int_type(const char_type& __c) { return int_type(__c); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof() { return static_cast<int_type>(-1); }

      static int_type
      not_eof(const int_type& __c)
      { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
    };



  template<>
    struct char_traits<char>
    {
      typedef char char_type;
      typedef int int_type;
      typedef streampos pos_type;
      typedef streamoff off_type;
      typedef mbstate_t state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, size_t __n)
      { return memcmp(__s1, __s2, __n); }

      static size_t
      length(const char_type* __s)
      { return strlen(__s); }

      static const char_type*
      find(const char_type* __s, size_t __n, const char_type& __a)
      { return static_cast<const char_type*>(memchr(__s, __a, __n)); }

      static char_type*
      move(char_type* __s1, const char_type* __s2, size_t __n)
      { return static_cast<char_type*>(memmove(__s1, __s2, __n)); }

      static char_type*
      copy(char_type* __s1, const char_type* __s2, size_t __n)
      { return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }

      static char_type*
      assign(char_type* __s, size_t __n, char_type __a)
      { return static_cast<char_type*>(memset(__s, __a, __n)); }

      static char_type
      to_char_type(const int_type& __c)
      { return static_cast<char_type>(__c); }



      static int_type
      to_int_type(const char_type& __c)
      { return static_cast<int_type>(static_cast<unsigned char>(__c)); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof() { return static_cast<int_type>((-1)); }

      static int_type
      not_eof(const int_type& __c)
      { return (__c == eof()) ? 0 : __c; }
  };
# 269 "/usr/local/include/g++-v3/bits/char_traits.h" 3
  template< _CharT, _Traits>
    struct _Char_traits_match
    {
      _CharT _M_c;
      _Char_traits_match(_CharT const& __c) : _M_c(__c) { }

      bool
      operator()(_CharT const& __a) { return _Traits::eq(_M_c, __a); }
    };
}
# 47 "/usr/local/include/g++-v3/ios" 2 3

# 1 "/usr/local/include/g++-v3/bits/localefwd.h" 1 3
# 44 "/usr/local/include/g++-v3/bits/localefwd.h" 3


# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++locale.h" 1 3
# 36 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++locale.h" 3
# 1 "/usr/local/include/g++-v3/clocale" 1 3
# 48 "/usr/local/include/g++-v3/clocale" 3

# 1 "/usr/include/locale.h" 1 3 4
# 10 "/usr/include/locale.h" 3 4
  extern "C" {
# 23 "/usr/include/locale.h" 3 4
# 1 "/usr/include/sys/_null.h" 1 3 4
# 24 "/usr/include/locale.h" 2 3 4



  struct lconv {
        char *decimal_point;
        char *thousands_sep;
        char *grouping;
        char *int_curr_symbol;
        char *currency_symbol;
        char *mon_decimal_point;
        char *mon_thousands_sep;
        char *mon_grouping;
        char *positive_sign;
        char *negative_sign;
        char int_frac_digits;
        char frac_digits;
        char p_cs_precedes;
        char p_sep_by_space;
        char n_cs_precedes;
        char n_sep_by_space;
        char p_sign_posn;
        char n_sign_posn;
        };




#pragma extern setlocale, localeconv 







     extern char *setlocale(int, const char *);





     extern struct lconv *localeconv(void);

# 107 "/usr/include/locale.h" 3 4
#pragma extern __locale_names


   extern char __locale_names[6 +1][255 +1];
# 119 "/usr/include/locale.h" 3 4
  struct locale_data {
    char LC_ALL_D[59];
    char LC_COLLATE_D[59];
    char LC_CTYPE_D[59];
    char LC_MONETARY_D[59];
    char LC_NUMERIC_D[59];
    char LC_TIME_D[59];
    char LC_MESSAGES_D[59];
    };


#pragma extern getlocale 






     extern struct locale_data *getlocale(int);
# 169 "/usr/include/locale.h" 3 4
#pragma extern __err_string

extern char *__err_string;
# 188 "/usr/include/locale.h" 3 4
}
# 50 "/usr/local/include/g++-v3/clocale" 2 3





namespace std
{
  using ::lconv;
  using ::setlocale;
  using ::localeconv;
}
# 37 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/c++locale.h" 2 3

namespace std
{
  typedef int* __c_locale;
}
# 47 "/usr/local/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/usr/local/include/g++-v3/climits" 1 3
# 48 "/usr/local/include/g++-v3/climits" 3

# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/limits.h" 1 3 4
# 50 "/usr/local/include/g++-v3/climits" 2 3
# 48 "/usr/local/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/usr/local/include/g++-v3/cctype" 1 3
# 47 "/usr/local/include/g++-v3/cctype" 3
# 65 "/usr/local/include/g++-v3/cctype" 3
namespace std
{
  using ::isalnum;
  using ::isalpha;
  using ::iscntrl;
  using ::isdigit;
  using ::isgraph;
  using ::islower;
  using ::isprint;
  using ::ispunct;
  using ::isspace;
  using ::isupper;
  using ::isxdigit;
  using ::tolower;
  using ::toupper;
}
# 49 "/usr/local/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/usr/local/include/g++-v3/string" 1 3
# 44 "/usr/local/include/g++-v3/string" 3




# 1 "/usr/local/include/g++-v3/memory" 1 3
# 53 "/usr/local/include/g++-v3/memory" 3

# 1 "/usr/local/include/g++-v3/bits/stl_algobase.h" 1 3
# 67 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
# 1 "/usr/local/include/g++-v3/cstdlib" 1 3
# 48 "/usr/local/include/g++-v3/cstdlib" 3
# 84 "/usr/local/include/g++-v3/cstdlib" 3
namespace std
{
  using ::div_t;
  using ::ldiv_t;

  using ::abort;
  using ::abs;
  using ::atexit;
  using ::atof;
  using ::atoi;
  using ::atol;
  using ::bsearch;
  using ::calloc;
  using ::div;
  using ::exit;
  using ::free;
  using ::getenv;
  using ::labs;
  using ::ldiv;
  using ::malloc;
  using ::mblen;
  using ::mbstowcs;
  using ::mbtowc;
  using ::qsort;
  using ::rand;
  using ::realloc;
  using ::srand;
  using ::strtod;
  using ::strtol;
  using ::strtoul;
  using ::system;
  using ::wcstombs;
  using ::wctomb;

  inline long
  abs(long __i) { return labs(__i); }

  inline ldiv_t
  div(long __i, long __j) { return ldiv(__i, __j); }
}
# 68 "/usr/local/include/g++-v3/bits/stl_algobase.h" 2 3

# 1 "/usr/local/include/g++-v3/new" 1 3
# 44 "/usr/local/include/g++-v3/new" 3
extern "C++" {

namespace std
{


  class bad_alloc : public exception
  {
  public:
    bad_alloc() throw() { }


    virtual ~bad_alloc() throw();
  };

  struct nothrow_t { };
  extern const nothrow_t nothrow;


  typedef void (*new_handler)();

  new_handler set_new_handler(new_handler);
}
# 79 "/usr/local/include/g++-v3/new" 3
void *operator new(std::size_t) throw (std::bad_alloc);
void *operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void *) throw();
void operator delete[](void *) throw();
void *operator new(std::size_t, const std::nothrow_t&) throw();
void *operator new[](std::size_t, const std::nothrow_t&) throw();
void operator delete(void *, const std::nothrow_t&) throw();
void operator delete[](void *, const std::nothrow_t&) throw();


inline void *operator new(std::size_t, void *place) throw() { return place; }
inline void *operator new[](std::size_t, void *place) throw() { return place; }

}
# 70 "/usr/local/include/g++-v3/bits/stl_algobase.h" 2 3

# 1 "/usr/local/include/g++-v3/bits/stl_pair.h" 1 3
# 64 "/usr/local/include/g++-v3/bits/stl_pair.h" 3
namespace std
{


template <class _T1, class _T2>
struct pair {
  typedef _T1 first_type;
  typedef _T2 second_type;

  _T1 first;
  _T2 second;




  pair() : first(), second() {}




  pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}


  template <class _U1, class _U2>
  pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}
};


template <class _T1, class _T2>
inline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{
  return __x.first == __y.first && __x.second == __y.second;
}


template <class _T1, class _T2>
inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{
  return __x.first < __y.first ||
         (!(__y.first < __x.first) && __x.second < __y.second);
}


template <class _T1, class _T2>
inline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__x == __y);
}


template <class _T1, class _T2>
inline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return __y < __x;
}


template <class _T1, class _T2>
inline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__y < __x);
}


template <class _T1, class _T2>
inline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__x < __y);
}
# 140 "/usr/local/include/g++-v3/bits/stl_pair.h" 3
template <class _T1, class _T2>


inline pair<_T1, _T2> make_pair(_T1 __x, _T2 __y)



{
  return pair<_T1, _T2>(__x, __y);
}

}
# 72 "/usr/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/type_traits.h" 1 3
# 53 "/usr/local/include/g++-v3/bits/type_traits.h" 3
# 90 "/usr/local/include/g++-v3/bits/type_traits.h" 3
struct __true_type {};
struct __false_type {};

template <class _Tp>
struct __type_traits {
   typedef __true_type this_dummy_member_must_be_first;
# 113 "/usr/local/include/g++-v3/bits/type_traits.h" 3
   typedef __false_type has_trivial_default_constructor;
   typedef __false_type has_trivial_copy_constructor;
   typedef __false_type has_trivial_assignment_operator;
   typedef __false_type has_trivial_destructor;
   typedef __false_type is_POD_type;
};




template<> struct __type_traits<bool> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<char> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<signed char> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned char> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<wchar_t> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<short> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned short> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<int> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned int> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<long long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned long long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<float> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<double> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<long double> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template <class _Tp>
struct __type_traits<_Tp*> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};





template <class _Tp> struct _Is_integer {
  typedef __false_type _Integral;
};

template<> struct _Is_integer<bool> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<char> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<signed char> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned char> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<wchar_t> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<short> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned short> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<int> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned int> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<long> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned long> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<long long> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned long long> {
  typedef __true_type _Integral;
};

template< _Tp> struct _Is_normal_iterator {
   typedef __false_type _Normal;
};


namespace std
{
  template< _Iterator, _Container> class __normal_iterator;
}

template< _Iterator, _Container>
struct _Is_normal_iterator< std::__normal_iterator<_Iterator, _Container> > {
   typedef __true_type _Normal;
};
# 73 "/usr/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_iterator_base_types.h" 1 3
# 68 "/usr/local/include/g++-v3/bits/stl_iterator_base_types.h" 3

namespace std
{
# 80 "/usr/local/include/g++-v3/bits/stl_iterator_base_types.h" 3
  struct input_iterator_tag {};

  struct output_iterator_tag {};

  struct forward_iterator_tag : public input_iterator_tag {};

  struct bidirectional_iterator_tag : public forward_iterator_tag {};

  struct random_access_iterator_tag : public bidirectional_iterator_tag {};
# 100 "/usr/local/include/g++-v3/bits/stl_iterator_base_types.h" 3
  template< _Category, _Tp, _Distance = ptrdiff_t,
           _Pointer = _Tp*, _Reference = _Tp&>
    struct iterator {

      typedef _Category iterator_category;

      typedef _Tp value_type;

      typedef _Distance difference_type;

      typedef _Pointer pointer;

      typedef _Reference reference;
    };







  template< _Iterator>
    struct iterator_traits {
      typedef _Iterator::iterator_category iterator_category;
      typedef _Iterator::value_type value_type;
      typedef _Iterator::difference_type difference_type;
      typedef _Iterator::pointer pointer;
      typedef _Iterator::reference reference;
    };

  template< _Tp>
    struct iterator_traits<_Tp*> {
      typedef random_access_iterator_tag iterator_category;
      typedef _Tp value_type;
      typedef ptrdiff_t difference_type;
      typedef _Tp* pointer;
      typedef _Tp& reference;
    };

  template< _Tp>
    struct iterator_traits<const _Tp*> {
      typedef random_access_iterator_tag iterator_category;
      typedef _Tp value_type;
      typedef ptrdiff_t difference_type;
      typedef const _Tp* pointer;
      typedef const _Tp& reference;
    };







  template< _Iter>
    inline iterator_traits<_Iter>::iterator_category
    __iterator_category(const _Iter&)
    { return iterator_traits<_Iter>::iterator_category(); }

}
# 74 "/usr/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_iterator_base_funcs.h" 1 3
# 68 "/usr/local/include/g++-v3/bits/stl_iterator_base_funcs.h" 3
# 1 "/usr/local/include/g++-v3/bits/concept_check.h" 1 3
# 39 "/usr/local/include/g++-v3/bits/concept_check.h" 3
# 69 "/usr/local/include/g++-v3/bits/stl_iterator_base_funcs.h" 2 3




namespace std
{
template< _InputIterator>
  inline iterator_traits<_InputIterator>::difference_type
  __distance(_InputIterator __first, _InputIterator __last, input_iterator_tag)
  {

   

    iterator_traits<_InputIterator>::difference_type __n = 0;
    while (__first != __last) {
      ++__first; ++__n;
    }
    return __n;
  }

template< _RandomAccessIterator>
  inline iterator_traits<_RandomAccessIterator>::difference_type
  __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
             random_access_iterator_tag)
  {

   
    return __last - __first;
  }
# 111 "/usr/local/include/g++-v3/bits/stl_iterator_base_funcs.h" 3
template< _InputIterator>
  inline iterator_traits<_InputIterator>::difference_type
  distance(_InputIterator __first, _InputIterator __last)
  {

    return __distance(__first, __last, __iterator_category(__first));
  }

template< _InputIter, _Distance>
  inline void
  __advance(_InputIter& __i, _Distance __n, input_iterator_tag)
  {

   
    while (__n--) ++__i;
  }

template< _BidirectionalIterator, _Distance>
  inline void
  __advance(_BidirectionalIterator& __i, _Distance __n,
            bidirectional_iterator_tag)
  {

   

    if (__n > 0)
      while (__n--) ++__i;
    else
      while (__n++) --__i;
  }

template< _RandomAccessIterator, _Distance>
  inline void
  __advance(_RandomAccessIterator& __i, _Distance __n,
            random_access_iterator_tag)
  {

   
    __i += __n;
  }
# 164 "/usr/local/include/g++-v3/bits/stl_iterator_base_funcs.h" 3
template< _InputIterator, _Distance>
  inline void
  advance(_InputIterator& __i, _Distance __n)
  {

    __advance(__i, __n, __iterator_category(__i));
  }

}
# 75 "/usr/local/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_iterator.h" 1 3
# 68 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
namespace std
{
# 89 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Iterator>
    class reverse_iterator
    : public iterator< iterator_traits<_Iterator>::iterator_category,
                      iterator_traits<_Iterator>::value_type,
                      iterator_traits<_Iterator>::difference_type,
                      iterator_traits<_Iterator>::pointer,
                      iterator_traits<_Iterator>::reference>
    {
    protected:
      _Iterator current;

    public:
      typedef _Iterator iterator_type;
      typedef iterator_traits<_Iterator>::difference_type
                                                               difference_type;
      typedef iterator_traits<_Iterator>::reference reference;
      typedef iterator_traits<_Iterator>::pointer pointer;

    public:



      reverse_iterator() { }




      explicit
      reverse_iterator(iterator_type __x) : current(__x) { }




      reverse_iterator(const reverse_iterator& __x)
      : current(__x.current) { }





      template< _Iter>
        reverse_iterator(const reverse_iterator<_Iter>& __x)
        : current(__x.base()) { }




      iterator_type
      base() const { return current; }






      reference
      operator*() const
      {
        _Iterator __tmp = current;
        return *--__tmp;
      }






      pointer
      operator->() const { return &(operator*()); }






      reverse_iterator&
      operator++()
      {
        --current;
        return *this;
      }






      reverse_iterator
      operator++(int)
      {
        reverse_iterator __tmp = *this;
        --current;
        return __tmp;
      }






      reverse_iterator&
      operator--()
      {
        ++current;
        return *this;
      }






      reverse_iterator operator--(int)
      {
        reverse_iterator __tmp = *this;
        ++current;
        return __tmp;
      }






      reverse_iterator
      operator+(difference_type __n) const
      { return reverse_iterator(current - __n); }






      reverse_iterator&
      operator+=(difference_type __n)
      {
        current -= __n;
        return *this;
      }






      reverse_iterator
      operator-(difference_type __n) const
      { return reverse_iterator(current + __n); }






      reverse_iterator&
      operator-=(difference_type __n)
      {
        current += __n;
        return *this;
      }






      reference
      operator[](difference_type __n) const { return *(*this + __n); }
    };
# 269 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Iterator>
    inline bool
    operator==(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
    { return __x.base() == __y.base(); }

  template< _Iterator>
    inline bool
    operator<(const reverse_iterator<_Iterator>& __x,
              const reverse_iterator<_Iterator>& __y)
    { return __y.base() < __x.base(); }

  template< _Iterator>
    inline bool
    operator!=(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
    { return !(__x == __y); }

  template< _Iterator>
    inline bool
    operator>(const reverse_iterator<_Iterator>& __x,
              const reverse_iterator<_Iterator>& __y)
    { return __y < __x; }

  template< _Iterator>
    inline bool
    operator<=(const reverse_iterator<_Iterator>& __x,
                const reverse_iterator<_Iterator>& __y)
    { return !(__y < __x); }

  template< _Iterator>
    inline bool
    operator>=(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
    { return !(__x < __y); }

  template< _Iterator>
    inline reverse_iterator<_Iterator>::difference_type
    operator-(const reverse_iterator<_Iterator>& __x,
              const reverse_iterator<_Iterator>& __y)
    { return __y.base() - __x.base(); }

  template< _Iterator>
    inline reverse_iterator<_Iterator>
    operator+( reverse_iterator<_Iterator>::difference_type __n,
              const reverse_iterator<_Iterator>& __x)
    { return reverse_iterator<_Iterator>(__x.base() - __n); }
# 327 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Container>
    class back_insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:

      typedef _Container container_type;


      explicit
      back_insert_iterator(_Container& __x) : container(&__x) { }
# 353 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
      back_insert_iterator&
      operator=( _Container::const_reference __value)
      {
        container->push_back(__value);
        return *this;
      }


      back_insert_iterator&
      operator*() { return *this; }


      back_insert_iterator&
      operator++() { return *this; }


      back_insert_iterator
      operator++(int) { return *this; }
    };
# 384 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Container>
    inline back_insert_iterator<_Container>
    back_inserter(_Container& __x)
    { return back_insert_iterator<_Container>(__x); }
# 397 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Container>
    class front_insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:

      typedef _Container container_type;


      explicit front_insert_iterator(_Container& __x) : container(&__x) { }
# 422 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
      front_insert_iterator&
      operator=( _Container::const_reference __value)
      {
        container->push_front(__value);
        return *this;
      }


      front_insert_iterator&
      operator*() { return *this; }


      front_insert_iterator&
      operator++() { return *this; }


      front_insert_iterator
      operator++(int) { return *this; }
    };
# 453 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Container>
    inline front_insert_iterator<_Container>
    front_inserter(_Container& __x)
    { return front_insert_iterator<_Container>(__x); }
# 470 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Container>
    class insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;
      _Container::iterator iter;

    public:

      typedef _Container container_type;





      insert_iterator(_Container& __x, _Container::iterator __i)
      : container(&__x), iter(__i) {}
# 512 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
      insert_iterator&
      operator=(const _Container::const_reference __value)
      {
        iter = container->insert(iter, __value);
        ++iter;
        return *this;
      }


      insert_iterator&
      operator*() { return *this; }


      insert_iterator&
      operator++() { return *this; }


      insert_iterator&
      operator++(int) { return *this; }
    };
# 544 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Container, _Iterator>
    inline insert_iterator<_Container>
    inserter(_Container& __x, _Iterator __i)
    {
      return insert_iterator<_Container>(__x,
                                         _Container::iterator(__i));
    }
# 559 "/usr/local/include/g++-v3/bits/stl_iterator.h" 3
  template< _Iterator, _Container>
    class __normal_iterator
      : public iterator< iterator_traits<_Iterator>::iterator_category,
                        iterator_traits<_Iterator>::value_type,
                        iterator_traits<_Iterator>::difference_type,
                        iterator_traits<_Iterator>::pointer,
                        iterator_traits<_Iterator>::reference>
    {
    protected:
      _Iterator _M_current;

    public:
      typedef iterator_traits<_Iterator>::difference_type
                                                               difference_type;
      typedef iterator_traits<_Iterator>::reference reference;
      typedef iterator_traits<_Iterator>::pointer pointer;

      __normal_iterator() : _M_current(_Iterator()) { }

      explicit
      __normal_iterator(const _Iterator& __i) : _M_current(__i) { }


      template< _Iter>
      inline __normal_iterator(const __normal_iterator<_Iter, _Container>& __i)
        : _M_current(__i.base()) { }


      reference
      operator*() const { return *_M_current; }

      pointer
      operator->() const { return _M_current; }

      __normal_iterator&
      operator++() { ++_M_current; return *this; }

      __normal_iterator
      operator++(int) { return __normal_iterator(_M_current++); }


      __normal_iterator&
      operator--() { --_M_current; return *this; }

      __normal_iterator
      operator--(int) { return __normal_iterator(_M_current--); }


      reference
      operator[](const difference_type& __n) const
      { return _M_current[__n]; }

      __normal_iterator&
      operator+=(const difference_type& __n)
      { _M_current += __n; return *this; }

      __normal_iterator
      operator+(const difference_type& __n) const
      { return __normal_iterator(_M_current + __n); }

      __normal_iterator&
      operator-=(const difference_type& __n)
      { _M_current -= __n; return *this; }

      __normal_iterator
      operator-(const difference_type& __n) const
      { return __normal_iterator(_M_current - __n); }

      difference_type
      operator-(const __normal_iterator& __i) const
      { return _M_current - __i._M_current; }

      const _Iterator&
      base() const { return _M_current; }
    };


  template< _IteratorL, _IteratorR, _Container>
  inline bool
  operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return __lhs.base() == __rhs.base(); }

  template< _IteratorL, _IteratorR, _Container>
  inline bool
  operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return !(__lhs == __rhs); }


  template< _IteratorL, _IteratorR, _Container>
  inline bool
  operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
            const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return __lhs.base() < __rhs.base(); }

  template< _IteratorL, _IteratorR, _Container>
  inline bool
  operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
            const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return __rhs < __lhs; }

  template< _IteratorL, _IteratorR, _Container>
  inline bool
  operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return !(__rhs < __lhs); }

  template< _IteratorL, _IteratorR, _Container>
  inline bool
  operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return !(__lhs < __rhs); }

  template< _Iterator, _Container>
  inline __normal_iterator<_Iterator, _Container>
  operator+( __normal_iterator<_Iterator, _Container>::difference_type __n,
            const __normal_iterator<_Iterator, _Container>& __i)
  { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
}
# 76 "/usr/local/include/g++-v3/bits/stl_algobase.h" 2 3


namespace std
{
# 91 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _ForwardIter1, _ForwardIter2>
    inline void
    iter_swap(_ForwardIter1 __a, _ForwardIter2 __b)
    {
      typedef iterator_traits<_ForwardIter1>::value_type _ValueType1;
      typedef iterator_traits<_ForwardIter2>::value_type _ValueType2;


     
     
     
     

      _ValueType1 __tmp = *__a;
      *__a = *__b;
      *__b = __tmp;
    }
# 118 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _Tp>
    inline void
    swap(_Tp& __a, _Tp& __b)
    {

     

      _Tp __tmp = __a;
      __a = __b;
      __b = __tmp;
    }
# 146 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _Tp>
    inline const _Tp&
    min(const _Tp& __a, const _Tp& __b)
    {

     

      if (__b < __a) return __b; return __a;
    }
# 166 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _Tp>
    inline const _Tp&
    max(const _Tp& __a, const _Tp& __b)
    {

     

      if (__a < __b) return __b; return __a;
    }
# 186 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _Tp, _Compare>
    inline const _Tp&
    min(const _Tp& __a, const _Tp& __b, _Compare __comp)
    {

      if (__comp(__b, __a)) return __b; return __a;
    }
# 204 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _Tp, _Compare>
    inline const _Tp&
    max(const _Tp& __a, const _Tp& __b, _Compare __comp)
    {

      if (__comp(__a, __b)) return __b; return __a;
    }
# 221 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter, _OutputIter>
    inline _OutputIter
    __copy(_InputIter __first, _InputIter __last,
           _OutputIter __result,
           input_iterator_tag)
    {
      for ( ; __first != __last; ++__result, ++__first)
        *__result = *__first;
      return __result;
    }

  template< _RandomAccessIter, _OutputIter>
    inline _OutputIter
    __copy(_RandomAccessIter __first, _RandomAccessIter __last,
           _OutputIter __result,
           random_access_iterator_tag)
    {
      typedef iterator_traits<_RandomAccessIter>::difference_type
          _Distance;
      for (_Distance __n = __last - __first; __n > 0; --__n) {
        *__result = *__first;
        ++__first;
        ++__result;
      }
      return __result;
    }

  template< _Tp>
    inline _Tp*
    __copy_trivial(const _Tp* __first, const _Tp* __last, _Tp* __result)
    {
      memmove(__result, __first, sizeof(_Tp) * (__last - __first));
      return __result + (__last - __first);
    }

  template< _InputIter, _OutputIter>
    inline _OutputIter
    __copy_aux2(_InputIter __first, _InputIter __last,
                _OutputIter __result, __false_type)
    { return __copy(__first, __last, __result, __iterator_category(__first)); }

  template< _InputIter, _OutputIter>
    inline _OutputIter
    __copy_aux2(_InputIter __first, _InputIter __last,
                _OutputIter __result, __true_type)
    { return __copy(__first, __last, __result, __iterator_category(__first)); }

  template< _Tp>
    inline _Tp*
    __copy_aux2(_Tp* __first, _Tp* __last,
                _Tp* __result, __true_type)
    { return __copy_trivial(__first, __last, __result); }

  template< _Tp>
    inline _Tp*
    __copy_aux2(const _Tp* __first, const _Tp* __last,
                _Tp* __result, __true_type)
    { return __copy_trivial(__first, __last, __result); }

  template< _InputIter, _OutputIter>
    inline _OutputIter
    __copy_ni2(_InputIter __first, _InputIter __last,
               _OutputIter __result, __true_type)
    {
      typedef iterator_traits<_InputIter>::value_type
          _ValueType;
      typedef __type_traits<_ValueType>::has_trivial_assignment_operator
          _Trivial;
      return _OutputIter(__copy_aux2(__first, __last,
                                     __result.base(),
                                     _Trivial()));
    }

  template< _InputIter, _OutputIter>
    inline _OutputIter
    __copy_ni2(_InputIter __first, _InputIter __last,
               _OutputIter __result, __false_type)
    {
      typedef iterator_traits<_InputIter>::value_type
          _ValueType;
      typedef __type_traits<_ValueType>::has_trivial_assignment_operator
          _Trivial;
      return __copy_aux2(__first, __last,
                         __result,
                         _Trivial());
    }

  template< _InputIter, _OutputIter>
    inline _OutputIter
    __copy_ni1(_InputIter __first, _InputIter __last,
               _OutputIter __result, __true_type)
    {
      typedef _Is_normal_iterator<_OutputIter>::_Normal __Normal;
      return __copy_ni2(__first.base(), __last.base(), __result, __Normal());
    }

  template< _InputIter, _OutputIter>
    inline _OutputIter
    __copy_ni1(_InputIter __first, _InputIter __last,
               _OutputIter __result, __false_type)
    {
      typedef _Is_normal_iterator<_OutputIter>::_Normal __Normal;
      return __copy_ni2(__first, __last, __result, __Normal());
    }
# 339 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter, _OutputIter>
    inline _OutputIter
    copy(_InputIter __first, _InputIter __last, _OutputIter __result)
    {

     
     


       typedef _Is_normal_iterator<_InputIter>::_Normal __Normal;
       return __copy_ni1(__first, __last, __result, __Normal());
    }




  template< _BidirectionalIter1, _BidirectionalIter2>
    inline _BidirectionalIter2
    __copy_backward(_BidirectionalIter1 __first, _BidirectionalIter1 __last,
                    _BidirectionalIter2 __result,
                    bidirectional_iterator_tag)
    {
      while (__first != __last)
        *--__result = *--__last;
      return __result;
    }

  template< _RandomAccessIter, _BidirectionalIter>
    inline _BidirectionalIter
    __copy_backward(_RandomAccessIter __first, _RandomAccessIter __last,
                    _BidirectionalIter __result,
                    random_access_iterator_tag)
    {
      iterator_traits<_RandomAccessIter>::difference_type __n;
      for (__n = __last - __first; __n > 0; --__n)
        *--__result = *--__last;
      return __result;
    }







  template< _BidirectionalIter1, _BidirectionalIter2,
           _BoolType>
    struct __copy_backward_dispatch
    {
      static _BidirectionalIter2
      copy(_BidirectionalIter1 __first, _BidirectionalIter1 __last,
           _BidirectionalIter2 __result)
      {
        return __copy_backward(__first, __last,
                               __result,
                               __iterator_category(__first));
      }
    };

  template< _Tp>
    struct __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
    {
      static _Tp*
      copy(const _Tp* __first, const _Tp* __last, _Tp* __result)
      {
        const ptrdiff_t _Num = __last - __first;
        memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
        return __result - _Num;
      }
    };

  template< _Tp>
    struct __copy_backward_dispatch<const _Tp*, _Tp*, __true_type>
    {
      static _Tp*
      copy(const _Tp* __first, const _Tp* __last, _Tp* __result)
      {
        return __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
          ::copy(__first, __last, __result);
      }
    };

  template< _BI1, _BI2>
    inline _BI2
    __copy_backward_aux(_BI1 __first, _BI1 __last, _BI2 __result)
    {
      typedef __type_traits< iterator_traits<_BI2>::value_type>
                            ::has_trivial_assignment_operator _Trivial;
      return __copy_backward_dispatch<_BI1, _BI2, _Trivial>
                  ::copy(__first, __last, __result);
    }

  template < _BI1, _BI2>
    inline _BI2
    __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,
                                           _BI2 __result, __true_type)
    { return _BI2(__copy_backward_aux(__first, __last, __result.base())); }

  template < _BI1, _BI2>
    inline _BI2
    __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,
                                           _BI2 __result, __false_type)
    { return __copy_backward_aux(__first, __last, __result); }

  template < _BI1, _BI2>
    inline _BI2
    __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,
                                          _BI2 __result, __true_type)
    {
      typedef _Is_normal_iterator<_BI2>::_Normal __Normal;
      return __copy_backward_output_normal_iterator(__first.base(), __last.base(),
                                                    __result, __Normal());
    }

  template < _BI1, _BI2>
    inline _BI2
    __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,
                                          _BI2 __result, __false_type)
    {
      typedef _Is_normal_iterator<_BI2>::_Normal __Normal;
      return __copy_backward_output_normal_iterator(__first, __last, __result,
                                                    __Normal());
    }
# 477 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template < _BI1, _BI2>
    inline _BI2
    copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
    {

     
     
     



      typedef _Is_normal_iterator<_BI1>::_Normal __Normal;
      return __copy_backward_input_normal_iterator(__first, __last, __result,
                                                   __Normal());
    }
# 509 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _ForwardIter, _Tp>
    void
    fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __value)
    {

     

      for ( ; __first != __last; ++__first)
        *__first = __value;
    }
# 531 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _OutputIter, _Size, _Tp>
    _OutputIter
    fill_n(_OutputIter __first, _Size __n, const _Tp& __value)
    {

     

      for ( ; __n > 0; --__n, ++__first)
        *__first = __value;
      return __first;
    }



  inline void
  fill(unsigned char* __first, unsigned char* __last, const unsigned char& __c)
  {
    unsigned char __tmp = __c;
    memset(__first, __tmp, __last - __first);
  }

  inline void
  fill(signed char* __first, signed char* __last, const signed char& __c)
  {
    signed char __tmp = __c;
    memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
  }

  inline void
  fill(char* __first, char* __last, const char& __c)
  {
    char __tmp = __c;
    memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
  }

  template< _Size>
    inline unsigned char*
    fill_n(unsigned char* __first, _Size __n, const unsigned char& __c)
    {
      fill(__first, __first + __n, __c);
      return __first + __n;
    }

  template< _Size>
    inline signed char*
    fill_n(char* __first, _Size __n, const signed char& __c)
    {
      fill(__first, __first + __n, __c);
      return __first + __n;
    }

  template< _Size>
    inline char*
    fill_n(char* __first, _Size __n, const char& __c)
    {
      fill(__first, __first + __n, __c);
      return __first + __n;
    }
# 606 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter1, _InputIter2>
    pair<_InputIter1, _InputIter2>
    mismatch(_InputIter1 __first1, _InputIter1 __last1,
             _InputIter2 __first2)
    {

     
     
     

     


      while (__first1 != __last1 && *__first1 == *__first2) {
        ++__first1;
        ++__first2;
      }
      return pair<_InputIter1, _InputIter2>(__first1, __first2);
    }
# 640 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter1, _InputIter2, _BinaryPredicate>
    pair<_InputIter1, _InputIter2>
    mismatch(_InputIter1 __first1, _InputIter1 __last1,
             _InputIter2 __first2,
             _BinaryPredicate __binary_pred)
    {

     
     

      while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) {
        ++__first1;
        ++__first2;
      }
      return pair<_InputIter1, _InputIter2>(__first1, __first2);
    }
# 668 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter1, _InputIter2>
    inline bool
    equal(_InputIter1 __first1, _InputIter1 __last1,
          _InputIter2 __first2)
    {

     
     
     



      for ( ; __first1 != __last1; ++__first1, ++__first2)
        if (!(*__first1 == *__first2))
          return false;
      return true;
    }
# 699 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter1, _InputIter2, _BinaryPredicate>
    inline bool
    equal(_InputIter1 __first1, _InputIter1 __last1,
          _InputIter2 __first2,
          _BinaryPredicate __binary_pred)
    {

     
     

      for ( ; __first1 != __last1; ++__first1, ++__first2)
        if (!__binary_pred(*__first1, *__first2))
          return false;
      return true;
    }
# 732 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter1, _InputIter2>
    bool
    lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
                            _InputIter2 __first2, _InputIter2 __last2)
    {

     
     
     

     


      for ( ; __first1 != __last1 && __first2 != __last2
            ; ++__first1, ++__first2) {
        if (*__first1 < *__first2)
          return true;
        if (*__first2 < *__first1)
          return false;
      }
      return __first1 == __last1 && __first2 != __last2;
    }
# 767 "/usr/local/include/g++-v3/bits/stl_algobase.h" 3
  template< _InputIter1, _InputIter2, _Compare>
    bool
    lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
                            _InputIter2 __first2, _InputIter2 __last2,
                            _Compare __comp)
    {

     
     

      for ( ; __first1 != __last1 && __first2 != __last2
            ; ++__first1, ++__first2) {
        if (__comp(*__first1, *__first2))
          return true;
        if (__comp(*__first2, *__first1))
          return false;
      }
      return __first1 == __last1 && __first2 != __last2;
    }

  inline bool
  lexicographical_compare(const unsigned char* __first1, const unsigned char* __last1,
                          const unsigned char* __first2, const unsigned char* __last2)
  {
    const size_t __len1 = __last1 - __first1;
    const size_t __len2 = __last2 - __first2;
    const int __result = memcmp(__first1, __first2, min(__len1, __len2));
    return __result != 0 ? __result < 0 : __len1 < __len2;
  }

  inline bool
  lexicographical_compare(const char* __first1, const char* __last1,
                          const char* __first2, const char* __last2)
  {

    return lexicographical_compare((const signed char*) __first1,
                                   (const signed char*) __last1,
                                   (const signed char*) __first2,
                                   (const signed char*) __last2);






  }

}
# 55 "/usr/local/include/g++-v3/memory" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_alloc.h" 1 3
# 84 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
# 1 "/usr/local/include/g++-v3/cassert" 1 3
# 47 "/usr/local/include/g++-v3/cassert" 3

# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/assert.h" 1 3 4
# 17 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/assert.h" 3 4
 extern "C" {
# 31 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/assert.h" 3 4
#pragma extern __assert


       extern void __assert(const char *, const char *, int);
# 55 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/assert.h" 3 4
 }
# 49 "/usr/local/include/g++-v3/cassert" 2 3
# 85 "/usr/local/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/usr/local/include/g++-v3/bits/functexcept.h" 3
# 1 "/usr/local/include/g++-v3/exception_defines.h" 1 3
# 35 "/usr/local/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 86 "/usr/local/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_threads.h" 1 3
# 54 "/usr/local/include/g++-v3/bits/stl_threads.h" 3
namespace std
{




  struct _Refcount_Base
  {

    typedef size_t _RC_t;


    volatile _RC_t _M_ref_count;


    __gthread_mutex_t _M_ref_count_lock;

    _Refcount_Base(_RC_t __n) : _M_ref_count(__n)
    {

      __gthread_mutex_t __tmp = 0;
      _M_ref_count_lock = __tmp;





    }

    void
    _M_incr()
    {
      __gthread_mutex_lock(&_M_ref_count_lock);
      ++_M_ref_count;
      __gthread_mutex_unlock(&_M_ref_count_lock);
    }

    _RC_t
    _M_decr()
    {
      __gthread_mutex_lock(&_M_ref_count_lock);
      volatile _RC_t __tmp = --_M_ref_count;
      __gthread_mutex_unlock(&_M_ref_count_lock);
      return __tmp;
    }
  };
# 109 "/usr/local/include/g++-v3/bits/stl_threads.h" 3
  template<int __dummy>
    struct _Swap_lock_struct
    { static __gthread_mutex_t _S_swap_lock; };

  template<int __dummy>
    __gthread_mutex_t
    _Swap_lock_struct<__dummy>::_S_swap_lock = 0;



  inline unsigned long
  _Atomic_swap(unsigned long * __p, unsigned long __q)
  {
    __gthread_mutex_lock(&_Swap_lock_struct<0>::_S_swap_lock);
    unsigned long __result = *__p;
    *__p = __q;
    __gthread_mutex_unlock(&_Swap_lock_struct<0>::_S_swap_lock);
    return __result;
  }
# 151 "/usr/local/include/g++-v3/bits/stl_threads.h" 3
  struct _STL_mutex_lock
  {





    __gthread_mutex_t _M_lock;

    void
    _M_initialize()
    {
# 184 "/usr/local/include/g++-v3/bits/stl_threads.h" 3
    }

    void
    _M_acquire_lock()
    {



      __gthread_mutex_lock(&_M_lock);
    }

    void
    _M_release_lock()
    {



      __gthread_mutex_unlock(&_M_lock);
    }
  };
# 220 "/usr/local/include/g++-v3/bits/stl_threads.h" 3
  struct _STL_auto_lock
  {
    _STL_mutex_lock& _M_lock;

    _STL_auto_lock(_STL_mutex_lock& __lock) : _M_lock(__lock)
    { _M_lock._M_acquire_lock(); }

    ~_STL_auto_lock() { _M_lock._M_release_lock(); }

  private:
    void operator=(const _STL_auto_lock&);
    _STL_auto_lock(const _STL_auto_lock&);
  };

}
# 87 "/usr/local/include/g++-v3/bits/stl_alloc.h" 2 3

namespace std
{
# 98 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
  class __new_alloc
  {
  public:
    static void*
    allocate(size_t __n)
    { return ::operator new(__n); }

    static void
    deallocate(void* __p, size_t)
    { ::operator delete(__p); }
  };
# 121 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
  template <int __inst>
    class __malloc_alloc_template
    {
    private:
      static void* _S_oom_malloc(size_t);
      static void* _S_oom_realloc(void*, size_t);
      static void (* __malloc_alloc_oom_handler)();

    public:
      static void*
      allocate(size_t __n)
      {
        void* __result = malloc(__n);
        if (0 == __result) __result = _S_oom_malloc(__n);
        return __result;
      }

      static void
      deallocate(void* __p, size_t )
      { free(__p); }

      static void*
      reallocate(void* __p, size_t , size_t __new_sz)
      {
        void* __result = realloc(__p, __new_sz);
        if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
        return __result;
      }

      static void (* __set_malloc_handler(void (*__f)()))()
      {
        void (* __old)() = __malloc_alloc_oom_handler;
        __malloc_alloc_oom_handler = __f;
        return(__old);
      }
    };


  template <int __inst>
    void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0;

  template <int __inst>
    void*
    __malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
    {
      void (* __my_malloc_handler)();
      void* __result;

      for (;;)
        {
          __my_malloc_handler = __malloc_alloc_oom_handler;
          if (0 == __my_malloc_handler)
            std::__throw_bad_alloc();
          (*__my_malloc_handler)();
          __result = malloc(__n);
          if (__result)
            return(__result);
        }
    }

  template <int __inst>
    void*
    __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
    {
      void (* __my_malloc_handler)();
      void* __result;

      for (;;)
        {
          __my_malloc_handler = __malloc_alloc_oom_handler;
          if (0 == __my_malloc_handler)
            std::__throw_bad_alloc();
          (*__my_malloc_handler)();
          __result = realloc(__p, __n);
          if (__result)
            return(__result);
        }
    }






  typedef __new_alloc __mem_interface;
# 219 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
  template<class _Tp, class _Alloc>
  class __simple_alloc
  {
  public:
    static _Tp* allocate(size_t __n)
    { return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); }

    static _Tp* allocate()
    { return (_Tp*) _Alloc::allocate(sizeof (_Tp)); }

    static void deallocate(_Tp* __p, size_t __n)
    { if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); }

    static void deallocate(_Tp* __p)
    { _Alloc::deallocate(__p, sizeof (_Tp)); }
  };
# 251 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
  template <class _Alloc>
  class __debug_alloc
  {
  private:
    enum {_S_extra = 8};


  public:

    static void* allocate(size_t __n)
    {
      char* __result = (char*)_Alloc::allocate(__n + (int) _S_extra);
      *(size_t*)__result = __n;
      return __result + (int) _S_extra;
    }

    static void deallocate(void* __p, size_t __n)
    {
      char* __real_p = (char*)__p - (int) _S_extra;
      ((*(size_t*)__real_p == __n) ? (void)0 : __assert("_EX", "/usr/local/include/g++-v3/bits/stl_alloc.h", 270));
      _Alloc::deallocate(__real_p, __n + (int) _S_extra);
    }

    static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
    {
      char* __real_p = (char*)__p - (int) _S_extra;
      ((*(size_t*)__real_p == __old_sz) ? (void)0 : __assert("_EX", "/usr/local/include/g++-v3/bits/stl_alloc.h", 277));
      char* __result = (char*)
        _Alloc::reallocate(__real_p, __old_sz + (int) _S_extra,
                                     __new_sz + (int) _S_extra);
      *(size_t*)__result = __new_sz;
      return __result + (int) _S_extra;
    }
  };
# 324 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
template<bool __threads, int __inst>
  class __default_alloc_template
  {
  private:
    enum {_ALIGN = 8};
    enum {_MAX_BYTES = 128};
    enum {_NFREELISTS = _MAX_BYTES / _ALIGN};

    union _Obj
    {
      union _Obj* _M_free_list_link;
      char _M_client_data[1];
    };

    static _Obj* volatile _S_free_list[_NFREELISTS];


    static char* _S_start_free;
    static char* _S_end_free;
    static size_t _S_heap_size;

    static _STL_mutex_lock _S_node_allocator_lock;

    static size_t
    _S_round_up(size_t __bytes)
    { return (((__bytes) + (size_t) _ALIGN-1) & ~((size_t) _ALIGN - 1)); }

    static size_t
    _S_freelist_index(size_t __bytes)
    { return (((__bytes) + (size_t)_ALIGN-1)/(size_t)_ALIGN - 1); }



    static void*
    _S_refill(size_t __n);



    static char*
    _S_chunk_alloc(size_t __size, int& __nobjs);



    class _Lock
    {
    public:
      _Lock() { if (__threads) _S_node_allocator_lock._M_acquire_lock(); }
      ~_Lock() { if (__threads) _S_node_allocator_lock._M_release_lock(); }
    } __attribute__ ((__unused__));
    friend class _Lock;

  public:

    static void*
    allocate(size_t __n)
    {
      void* __ret = 0;

      if (__n > (size_t) _MAX_BYTES)
        __ret = __mem_interface::allocate(__n);
      else
        {
          _Obj* volatile* __my_free_list = _S_free_list
            + _S_freelist_index(__n);



          _Lock __lock_instance;
          _Obj* __restrict__ __result = *__my_free_list;
          if (__result == 0)
            __ret = _S_refill(_S_round_up(__n));
          else
            {
              *__my_free_list = __result -> _M_free_list_link;
              __ret = __result;
            }
        }
      return __ret;
    };


    static void
    deallocate(void* __p, size_t __n)
    {
      if (__n > (size_t) _MAX_BYTES)
        __mem_interface::deallocate(__p, __n);
      else
        {
          _Obj* volatile* __my_free_list
            = _S_free_list + _S_freelist_index(__n);
          _Obj* __q = (_Obj*)__p;



          _Lock __lock_instance;
          __q -> _M_free_list_link = *__my_free_list;
          *__my_free_list = __q;
        }
    }

    static void*
    reallocate(void* __p, size_t __old_sz, size_t __new_sz);
  };


  template<bool __threads, int __inst>
    inline bool
    operator==(const __default_alloc_template<__threads, __inst>&,
               const __default_alloc_template<__threads, __inst>&)
    { return true; }

  template<bool __threads, int __inst>
    inline bool
    operator!=(const __default_alloc_template<__threads, __inst>&,
               const __default_alloc_template<__threads, __inst>&)
    { return false; }





  template<bool __threads, int __inst>
    char*
    __default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size,
                                                                int& __nobjs)
    {
      char* __result;
      size_t __total_bytes = __size * __nobjs;
      size_t __bytes_left = _S_end_free - _S_start_free;

      if (__bytes_left >= __total_bytes)
      {
        __result = _S_start_free;
        _S_start_free += __total_bytes;
        return(__result);
      }
      else if (__bytes_left >= __size)
        {
          __nobjs = (int)(__bytes_left/__size);
          __total_bytes = __size * __nobjs;
          __result = _S_start_free;
          _S_start_free += __total_bytes;
          return(__result);
        }
      else
        {
          size_t __bytes_to_get =
            2 * __total_bytes + _S_round_up(_S_heap_size >> 4);

          if (__bytes_left > 0)
            {
              _Obj* volatile* __my_free_list =
                _S_free_list + _S_freelist_index(__bytes_left);

              ((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
              *__my_free_list = (_Obj*)_S_start_free;
            }
          _S_start_free = (char*) __mem_interface::allocate(__bytes_to_get);
          if (0 == _S_start_free)
            {
              size_t __i;
              _Obj* volatile* __my_free_list;
              _Obj* __p;



              __i = __size;
              for (; __i <= (size_t) _MAX_BYTES; __i += (size_t) _ALIGN)
                {
                  __my_free_list = _S_free_list + _S_freelist_index(__i);
                  __p = *__my_free_list;
                  if (0 != __p)
                    {
                      *__my_free_list = __p -> _M_free_list_link;
                      _S_start_free = (char*)__p;
                      _S_end_free = _S_start_free + __i;
                      return(_S_chunk_alloc(__size, __nobjs));


                    }
                }
              _S_end_free = 0;
              _S_start_free = (char*)__mem_interface::allocate(__bytes_to_get);


            }
          _S_heap_size += __bytes_to_get;
          _S_end_free = _S_start_free + __bytes_to_get;
          return(_S_chunk_alloc(__size, __nobjs));
        }
    }





  template<bool __threads, int __inst>
    void*
    __default_alloc_template<__threads, __inst>::_S_refill(size_t __n)
    {
      int __nobjs = 20;
      char* __chunk = _S_chunk_alloc(__n, __nobjs);
      _Obj* volatile* __my_free_list;
      _Obj* __result;
      _Obj* __current_obj;
      _Obj* __next_obj;
      int __i;

      if (1 == __nobjs) return(__chunk);
      __my_free_list = _S_free_list + _S_freelist_index(__n);


      __result = (_Obj*)__chunk;
      *__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
      for (__i = 1; ; __i++) {
        __current_obj = __next_obj;
        __next_obj = (_Obj*)((char*)__next_obj + __n);
        if (__nobjs - 1 == __i) {
          __current_obj -> _M_free_list_link = 0;
          break;
        } else {
          __current_obj -> _M_free_list_link = __next_obj;
        }
      }
      return(__result);
    }


  template<bool threads, int inst>
    void*
    __default_alloc_template<threads, inst>::reallocate(void* __p,
                                                        size_t __old_sz,
                                                        size_t __new_sz)
    {
      void* __result;
      size_t __copy_sz;

      if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
        return(realloc(__p, __new_sz));
      }
      if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
      __result = allocate(__new_sz);
      __copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
      memcpy(__result, __p, __copy_sz);
      deallocate(__p, __old_sz);
      return(__result);
    }

  template<bool __threads, int __inst>
  _STL_mutex_lock
  __default_alloc_template<__threads, __inst>::_S_node_allocator_lock
  = { 0 };

  template<bool __threads, int __inst>
  char* __default_alloc_template<__threads, __inst>::_S_start_free = 0;

  template<bool __threads, int __inst>
  char* __default_alloc_template<__threads, __inst>::_S_end_free = 0;

  template<bool __threads, int __inst>
  size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0;

  template<bool __threads, int __inst>
  __default_alloc_template<__threads, __inst>::_Obj* volatile
  __default_alloc_template<__threads, __inst>::_S_free_list[_NFREELISTS];

  typedef __default_alloc_template<true, 0> __alloc;
  typedef __default_alloc_template<false, 0> __single_client_alloc;
# 613 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
template <class _Tp>
class allocator
{
  typedef __alloc _Alloc;
public:
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef _Tp* pointer;
  typedef const _Tp* const_pointer;
  typedef _Tp& reference;
  typedef const _Tp& const_reference;
  typedef _Tp value_type;

  template <class _Tp1> struct rebind {
    typedef allocator<_Tp1> other;
  };

  allocator() throw() {}
  allocator(const allocator&) throw() {}
  template <class _Tp1> allocator(const allocator<_Tp1>&) throw() {}
  ~allocator() throw() {}

  pointer address(reference __x) const { return &__x; }
  const_pointer address(const_reference __x) const { return &__x; }



  _Tp* allocate(size_type __n, const void* = 0) {
    return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp)))
                    : 0;
  }


  void deallocate(pointer __p, size_type __n)
    { _Alloc::deallocate(__p, __n * sizeof(_Tp)); }

  size_type max_size() const throw()
    { return size_t(-1) / sizeof(_Tp); }

  void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
  void destroy(pointer __p) { __p->~_Tp(); }
};

template<>
class allocator<void> {
public:
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef void* pointer;
  typedef const void* const_pointer;
  typedef void value_type;

  template <class _Tp1> struct rebind {
    typedef allocator<_Tp1> other;
  };
};


template <class _T1, class _T2>
inline bool operator==(const allocator<_T1>&, const allocator<_T2>&)
{
  return true;
}

template <class _T1, class _T2>
inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&)
{
  return false;
}
# 695 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
template <class _Tp, class _Alloc>
struct __allocator
{
  _Alloc __underlying_alloc;

  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef _Tp* pointer;
  typedef const _Tp* const_pointer;
  typedef _Tp& reference;
  typedef const _Tp& const_reference;
  typedef _Tp value_type;

  template <class _Tp1> struct rebind {
    typedef __allocator<_Tp1, _Alloc> other;
  };

  __allocator() throw() {}
  __allocator(const __allocator& __a) throw()
    : __underlying_alloc(__a.__underlying_alloc) {}
  template <class _Tp1>
  __allocator(const __allocator<_Tp1, _Alloc>& __a) throw()
    : __underlying_alloc(__a.__underlying_alloc) {}
  ~__allocator() throw() {}

  pointer address(reference __x) const { return &__x; }
  const_pointer address(const_reference __x) const { return &__x; }


  _Tp* allocate(size_type __n, const void* = 0) {
    return __n != 0
        ? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp)))
        : 0;
  }


  void deallocate(pointer __p, size_type __n)
    { __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); }

  size_type max_size() const throw()
    { return size_t(-1) / sizeof(_Tp); }

  void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
  void destroy(pointer __p) { __p->~_Tp(); }
};

template <class _Alloc>
class __allocator<void, _Alloc> {
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef void* pointer;
  typedef const void* const_pointer;
  typedef void value_type;

  template <class _Tp1> struct rebind {
    typedef __allocator<_Tp1, _Alloc> other;
  };
};

template <class _Tp, class _Alloc>
inline bool operator==(const __allocator<_Tp, _Alloc>& __a1,
                       const __allocator<_Tp, _Alloc>& __a2)
{
  return __a1.__underlying_alloc == __a2.__underlying_alloc;
}

template <class _Tp, class _Alloc>
inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1,
                       const __allocator<_Tp, _Alloc>& __a2)
{
  return __a1.__underlying_alloc != __a2.__underlying_alloc;
}







template <int inst>
inline bool operator==(const __malloc_alloc_template<inst>&,
                       const __malloc_alloc_template<inst>&)
{
  return true;
}

template <int __inst>
inline bool operator!=(const __malloc_alloc_template<__inst>&,
                       const __malloc_alloc_template<__inst>&)
{
  return false;
}

template <class _Alloc>
inline bool operator==(const __debug_alloc<_Alloc>&,
                       const __debug_alloc<_Alloc>&) {
  return true;
}

template <class _Alloc>
inline bool operator!=(const __debug_alloc<_Alloc>&,
                       const __debug_alloc<_Alloc>&) {
  return false;
}
# 840 "/usr/local/include/g++-v3/bits/stl_alloc.h" 3
template <class _Tp, class _Allocator>
struct _Alloc_traits
{
  static const bool _S_instanceless = false;
  typedef _Allocator::template rebind<_Tp>::other allocator_type;
};

template <class _Tp, class _Allocator>
const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless;


template <class _Tp, class _Tp1>
struct _Alloc_traits<_Tp, allocator<_Tp1> >
{
  static const bool _S_instanceless = true;
  typedef __simple_alloc<_Tp, __alloc> _Alloc_type;
  typedef allocator<_Tp> allocator_type;
};




template <class _Tp, int __inst>
struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> >
{
  static const bool _S_instanceless = true;
  typedef __simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
  typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};


template <class _Tp, bool __threads, int __inst>
struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
{
  static const bool _S_instanceless = true;
  typedef __simple_alloc<_Tp, __default_alloc_template<__threads, __inst> >
          _Alloc_type;
  typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
          allocator_type;
};


template <class _Tp, class _Alloc>
struct _Alloc_traits<_Tp, __debug_alloc<_Alloc> >
{
  static const bool _S_instanceless = true;
  typedef __simple_alloc<_Tp, __debug_alloc<_Alloc> > _Alloc_type;
  typedef __allocator<_Tp, __debug_alloc<_Alloc> > allocator_type;
};




template <class _Tp, class _Tp1, int __inst>
struct _Alloc_traits<_Tp,
                     __allocator<_Tp1, __malloc_alloc_template<__inst> > >
{
  static const bool _S_instanceless = true;
  typedef __simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
  typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};


template <class _Tp, class _Tp1, bool __thr, int __inst>
struct _Alloc_traits<_Tp,
                      __allocator<_Tp1,
                                  __default_alloc_template<__thr, __inst> > >
{
  static const bool _S_instanceless = true;
  typedef __simple_alloc<_Tp, __default_alloc_template<__thr,__inst> >
          _Alloc_type;
  typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
          allocator_type;
};


template <class _Tp, class _Tp1, class _Alloc>
struct _Alloc_traits<_Tp, __allocator<_Tp1, __debug_alloc<_Alloc> > >
{
  static const bool _S_instanceless = true;
  typedef __simple_alloc<_Tp, __debug_alloc<_Alloc> > _Alloc_type;
  typedef __allocator<_Tp, __debug_alloc<_Alloc> > allocator_type;
};





  extern template class allocator<char>;
  extern template class allocator<wchar_t>;
}
# 56 "/usr/local/include/g++-v3/memory" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_construct.h" 1 3
# 67 "/usr/local/include/g++-v3/bits/stl_construct.h" 3
namespace std
{






  template <class _T1, class _T2>
    inline void
    _Construct(_T1* __p, const _T2& __value)
    { new (static_cast<void*>(__p)) _T1(__value); }







  template <class _T1>
    inline void
    _Construct(_T1* __p)
    { new (static_cast<void*>(__p)) _T1(); }
# 98 "/usr/local/include/g++-v3/bits/stl_construct.h" 3
  template <class _ForwardIterator>
    inline void
    __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
    { for ( ; __first != __last; ++__first) _Destroy(&*__first); }
# 112 "/usr/local/include/g++-v3/bits/stl_construct.h" 3
  template <class _ForwardIterator>
    inline void
    __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type)
    { }






  template <class _Tp>
    inline void
    _Destroy(_Tp* __pointer)
    { __pointer->~_Tp(); }
# 134 "/usr/local/include/g++-v3/bits/stl_construct.h" 3
  template <class _ForwardIterator>
    inline void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last)
    {
      typedef iterator_traits<_ForwardIterator>::value_type
                       _Value_type;
      typedef __type_traits<_Value_type>::has_trivial_destructor
                       _Has_trivial_destructor;

      __destroy_aux(__first, __last, _Has_trivial_destructor());
    }
}
# 57 "/usr/local/include/g++-v3/memory" 2 3

# 1 "/usr/local/include/g++-v3/bits/stl_uninitialized.h" 1 3
# 66 "/usr/local/include/g++-v3/bits/stl_uninitialized.h" 3
namespace std
{



  template< _InputIter, _ForwardIter>
    inline _ForwardIter
    __uninitialized_copy_aux(_InputIter __first, _InputIter __last,
                             _ForwardIter __result,
                             __true_type)
    { return copy(__first, __last, __result); }

  template< _InputIter, _ForwardIter>
    _ForwardIter
    __uninitialized_copy_aux(_InputIter __first, _InputIter __last,
                             _ForwardIter __result,
                             __false_type)
    {
      _ForwardIter __cur = __result;
      try {
        for ( ; __first != __last; ++__first, ++__cur)
          _Construct(&*__cur, *__first);
        return __cur;
      }
      catch(...)
        {
          _Destroy(__result, __cur);
          throw;
        }
    }
# 106 "/usr/local/include/g++-v3/bits/stl_uninitialized.h" 3
  template< _InputIter, _ForwardIter>
    inline _ForwardIter
    uninitialized_copy(_InputIter __first, _InputIter __last, _ForwardIter __result)
    {
      typedef iterator_traits<_InputIter>::value_type _ValueType;
      typedef __type_traits<_ValueType>::is_POD_type _Is_POD;
      return __uninitialized_copy_aux(__first, __last, __result, _Is_POD());
    }

  inline char*
  uninitialized_copy(const char* __first, const char* __last, char* __result)
  {
    memmove(__result, __first, __last - __first);
    return __result + (__last - __first);
  }

  inline wchar_t*
  uninitialized_copy(const wchar_t* __first, const wchar_t* __last,
                     wchar_t* __result)
  {
    memmove(__result, __first, sizeof(wchar_t) * (__last - __first));
    return __result + (__last - __first);
  }



  template< _ForwardIter, _Tp>
    inline void
    __uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
                             const _Tp& __x, __true_type)
    { fill(__first, __last, __x); }

  template< _ForwardIter, _Tp>
    void
    __uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
                             const _Tp& __x, __false_type)
    {
      _ForwardIter __cur = __first;
      try {
        for ( ; __cur != __last; ++__cur)
          _Construct(&*__cur, __x);
      }
      catch(...)
        {
          _Destroy(__first, __cur);
          throw;
        }
    }
# 164 "/usr/local/include/g++-v3/bits/stl_uninitialized.h" 3
  template< _ForwardIter, _Tp>
    inline void
    uninitialized_fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef __type_traits<_ValueType>::is_POD_type _Is_POD;
      __uninitialized_fill_aux(__first, __last, __x, _Is_POD());
    }



  template< _ForwardIter, _Size, _Tp>
    inline _ForwardIter
    __uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
                               const _Tp& __x, __true_type)
    {
      return fill_n(__first, __n, __x);
    }

  template< _ForwardIter, _Size, _Tp>
    _ForwardIter
    __uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
                               const _Tp& __x, __false_type)
    {
      _ForwardIter __cur = __first;
      try {
        for ( ; __n > 0; --__n, ++__cur)
          _Construct(&*__cur, __x);
        return __cur;
      }
      catch(...)
        {
          _Destroy(__first, __cur);
          throw;
        }
    }
# 210 "/usr/local/include/g++-v3/bits/stl_uninitialized.h" 3
  template< _ForwardIter, _Size, _Tp>
    inline _ForwardIter
    uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef __type_traits<_ValueType>::is_POD_type _Is_POD;
      return __uninitialized_fill_n_aux(__first, __n, __x, _Is_POD());
    }
# 227 "/usr/local/include/g++-v3/bits/stl_uninitialized.h" 3
  template< _InputIter1, _InputIter2, _ForwardIter>
    inline _ForwardIter
    __uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1,
                              _InputIter2 __first2, _InputIter2 __last2,
                              _ForwardIter __result)
    {
      _ForwardIter __mid = uninitialized_copy(__first1, __last1, __result);
      try {
        return uninitialized_copy(__first2, __last2, __mid);
      }
      catch(...)
        {
          _Destroy(__result, __mid);
          throw;
        }
    }




  template< _ForwardIter, _Tp, _InputIter>
    inline _ForwardIter
    __uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid,
                              const _Tp& __x,
                              _InputIter __first, _InputIter __last)
    {
      uninitialized_fill(__result, __mid, __x);
      try {
        return uninitialized_copy(__first, __last, __mid);
      }
      catch(...)
        {
          _Destroy(__result, __mid);
          throw;
        }
    }




  template< _InputIter, _ForwardIter, _Tp>
    inline void
    __uninitialized_copy_fill(_InputIter __first1, _InputIter __last1,
                              _ForwardIter __first2, _ForwardIter __last2,
                              const _Tp& __x)
    {
      _ForwardIter __mid2 = uninitialized_copy(__first1, __last1, __first2);
      try {
        uninitialized_fill(__mid2, __last2, __x);
      }
      catch(...)
        {
          _Destroy(__first2, __mid2);
          throw;
        }
    }

}
# 59 "/usr/local/include/g++-v3/memory" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_raw_storage_iter.h" 1 3
# 64 "/usr/local/include/g++-v3/bits/stl_raw_storage_iter.h" 3
namespace std
{




  template <class _ForwardIterator, class _Tp>
  class raw_storage_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _ForwardIterator _M_iter;

    public:
      explicit
      raw_storage_iterator(_ForwardIterator __x) : _M_iter(__x) {}

      raw_storage_iterator&
      operator*() { return *this; }

      raw_storage_iterator&
      operator=(const _Tp& __element)
      {
        _Construct(&*_M_iter, __element);
        return *this;
      }

      raw_storage_iterator<_ForwardIterator, _Tp>&
      operator++()
      {
        ++_M_iter;
        return *this;
      }

      raw_storage_iterator<_ForwardIterator, _Tp>
      operator++(int)
      {
        raw_storage_iterator<_ForwardIterator, _Tp> __tmp = *this;
        ++_M_iter;
        return __tmp;
      }
    };
}
# 60 "/usr/local/include/g++-v3/memory" 2 3

namespace std
{







  template <class _Tp>
  pair<_Tp*, ptrdiff_t>
  __get_temporary_buffer(ptrdiff_t __len, _Tp*)
  {
    if (__len > ptrdiff_t(2147483647 / sizeof(_Tp)))
      __len = 2147483647 / sizeof(_Tp);

    while (__len > 0) {
      _Tp* __tmp = (_Tp*) std::malloc((std::size_t)__len * sizeof(_Tp));
      if (__tmp != 0)
        return pair<_Tp*, ptrdiff_t>(__tmp, __len);
      __len /= 2;
    }

    return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0);
  }
# 102 "/usr/local/include/g++-v3/memory" 3
  template <class _Tp>
  inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len) {
    return __get_temporary_buffer(__len, (_Tp*) 0);
  }
# 114 "/usr/local/include/g++-v3/memory" 3
  template <class _Tp>
  void return_temporary_buffer(_Tp* __p) {
    std::free(__p);
  }


template <class _Tp1>
  struct auto_ptr_ref
{
   _Tp1* _M_ptr;
   auto_ptr_ref(_Tp1* __p) : _M_ptr(__p) {}
};




template <class _Tp>
  class auto_ptr
{
private:
  _Tp* _M_ptr;

public:
  typedef _Tp element_type;

  explicit auto_ptr(_Tp* __p = 0) throw() : _M_ptr(__p) {}
  auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) {}

  template <class _Tp1> auto_ptr(auto_ptr<_Tp1>& __a) throw()
    : _M_ptr(__a.release()) {}

  auto_ptr& operator=(auto_ptr& __a) throw() {
    reset(__a.release());
    return *this;
  }

  template <class _Tp1>
  auto_ptr& operator=(auto_ptr<_Tp1>& __a) throw() {
    reset(__a.release());
    return *this;
  }





  ~auto_ptr() { delete _M_ptr; }

  _Tp& operator*() const throw() {
    return *_M_ptr;
  }
  _Tp* operator->() const throw() {
    return _M_ptr;
  }
  _Tp* get() const throw() {
    return _M_ptr;
  }
  _Tp* release() throw() {
    _Tp* __tmp = _M_ptr;
    _M_ptr = 0;
    return __tmp;
  }
  void reset(_Tp* __p = 0) throw() {
    if (__p != _M_ptr) {
      delete _M_ptr;
      _M_ptr = __p;
    }
  }

public:
  auto_ptr(auto_ptr_ref<_Tp> __ref) throw()
    : _M_ptr(__ref._M_ptr) {}

  auto_ptr& operator=(auto_ptr_ref<_Tp> __ref) throw() {
    if (__ref._M_ptr != this->get()) {
      delete _M_ptr;
      _M_ptr = __ref._M_ptr;
    }
    return *this;
  }

  template <class _Tp1> operator auto_ptr_ref<_Tp1>() throw()
    { return auto_ptr_ref<_Tp>(this->release()); }
  template <class _Tp1> operator auto_ptr<_Tp1>() throw()
    { return auto_ptr<_Tp1>(this->release()); }
};

}
# 49 "/usr/local/include/g++-v3/string" 2 3



# 1 "/usr/local/include/g++-v3/bits/stl_function.h" 1 3
# 64 "/usr/local/include/g++-v3/bits/stl_function.h" 3
namespace std
{
# 101 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Arg, class _Result>
struct unary_function {
  typedef _Arg argument_type;
  typedef _Result result_type;
};




template <class _Arg1, class _Arg2, class _Result>
struct binary_function {
  typedef _Arg1 first_argument_type;
  typedef _Arg2 second_argument_type;
  typedef _Result result_type;
};
# 127 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Tp>
struct plus : public binary_function<_Tp,_Tp,_Tp> {
  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; }
};


template <class _Tp>
struct minus : public binary_function<_Tp,_Tp,_Tp> {
  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; }
};


template <class _Tp>
struct multiplies : public binary_function<_Tp,_Tp,_Tp> {
  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; }
};


template <class _Tp>
struct divides : public binary_function<_Tp,_Tp,_Tp> {
  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x / __y; }
};


template <class _Tp>
struct modulus : public binary_function<_Tp,_Tp,_Tp>
{
  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x % __y; }
};


template <class _Tp>
struct negate : public unary_function<_Tp,_Tp>
{
  _Tp operator()(const _Tp& __x) const { return -__x; }
};
# 173 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Tp>
struct equal_to : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; }
};


template <class _Tp>
struct not_equal_to : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x != __y; }
};


template <class _Tp>
struct greater : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }
};


template <class _Tp>
struct less : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }
};


template <class _Tp>
struct greater_equal : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x >= __y; }
};


template <class _Tp>
struct less_equal : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x <= __y; }
};
# 222 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Tp>
struct logical_and : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x && __y; }
};


template <class _Tp>
struct logical_or : public binary_function<_Tp,_Tp,bool>
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x || __y; }
};


template <class _Tp>
struct logical_not : public unary_function<_Tp,bool>
{
  bool operator()(const _Tp& __x) const { return !__x; }
};
# 271 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Predicate>
class unary_negate
  : public unary_function< _Predicate::argument_type, bool> {
protected:
  _Predicate _M_pred;
public:
  explicit unary_negate(const _Predicate& __x) : _M_pred(__x) {}
  bool operator()(const _Predicate::argument_type& __x) const {
    return !_M_pred(__x);
  }
};


template <class _Predicate>
inline unary_negate<_Predicate>
not1(const _Predicate& __pred)
{
  return unary_negate<_Predicate>(__pred);
}


template <class _Predicate>
class binary_negate
  : public binary_function< _Predicate::first_argument_type,
                           _Predicate::second_argument_type,
                           bool> {
protected:
  _Predicate _M_pred;
public:
  explicit binary_negate(const _Predicate& __x) : _M_pred(__x) {}
  bool operator()(const _Predicate::first_argument_type& __x,
                  const _Predicate::second_argument_type& __y) const
  {
    return !_M_pred(__x, __y);
  }
};


template <class _Predicate>
inline binary_negate<_Predicate>
not2(const _Predicate& __pred)
{
  return binary_negate<_Predicate>(__pred);
}
# 349 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Operation>
class binder1st
  : public unary_function< _Operation::second_argument_type,
                          _Operation::result_type> {
protected:
  _Operation op;
  _Operation::first_argument_type value;
public:
  binder1st(const _Operation& __x,
            const _Operation::first_argument_type& __y)
      : op(__x), value(__y) {}
  _Operation::result_type
  operator()(const _Operation::second_argument_type& __x) const {
    return op(value, __x);
  }


  _Operation::result_type
  operator()( _Operation::second_argument_type& __x) const {
    return op(value, __x);
  }

};


template <class _Operation, class _Tp>
inline binder1st<_Operation>
bind1st(const _Operation& __fn, const _Tp& __x)
{
  typedef _Operation::first_argument_type _Arg1_type;
  return binder1st<_Operation>(__fn, _Arg1_type(__x));
}


template <class _Operation>
class binder2nd
  : public unary_function< _Operation::first_argument_type,
                          _Operation::result_type> {
protected:
  _Operation op;
  _Operation::second_argument_type value;
public:
  binder2nd(const _Operation& __x,
            const _Operation::second_argument_type& __y)
      : op(__x), value(__y) {}
  _Operation::result_type
  operator()(const _Operation::first_argument_type& __x) const {
    return op(__x, value);
  }


  _Operation::result_type
  operator()( _Operation::first_argument_type& __x) const {
    return op(__x, value);
  }

};


template <class _Operation, class _Tp>
inline binder2nd<_Operation>
bind2nd(const _Operation& __fn, const _Tp& __x)
{
  typedef _Operation::second_argument_type _Arg2_type;
  return binder2nd<_Operation>(__fn, _Arg2_type(__x));
}
# 438 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Arg, class _Result>
class pointer_to_unary_function : public unary_function<_Arg, _Result> {
protected:
  _Result (*_M_ptr)(_Arg);
public:
  pointer_to_unary_function() {}
  explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) {}
  _Result operator()(_Arg __x) const { return _M_ptr(__x); }
};


template <class _Arg, class _Result>
inline pointer_to_unary_function<_Arg, _Result> ptr_fun(_Result (*__x)(_Arg))
{
  return pointer_to_unary_function<_Arg, _Result>(__x);
}


template <class _Arg1, class _Arg2, class _Result>
class pointer_to_binary_function :
  public binary_function<_Arg1,_Arg2,_Result> {
protected:
    _Result (*_M_ptr)(_Arg1, _Arg2);
public:
    pointer_to_binary_function() {}
    explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
      : _M_ptr(__x) {}
    _Result operator()(_Arg1 __x, _Arg2 __y) const {
      return _M_ptr(__x, __y);
    }
};


template <class _Arg1, class _Arg2, class _Result>
inline pointer_to_binary_function<_Arg1,_Arg2,_Result>
ptr_fun(_Result (*__x)(_Arg1, _Arg2)) {
  return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__x);
}


template <class _Tp>
struct _Identity : public unary_function<_Tp,_Tp> {
  _Tp& operator()(_Tp& __x) const { return __x; }
  const _Tp& operator()(const _Tp& __x) const { return __x; }
};

template <class _Pair>
struct _Select1st : public unary_function<_Pair, _Pair::first_type> {
  _Pair::first_type& operator()(_Pair& __x) const {
    return __x.first;
  }
  const _Pair::first_type& operator()(const _Pair& __x) const {
    return __x.first;
  }
};

template <class _Pair>
struct _Select2nd : public unary_function<_Pair, _Pair::second_type>
{
  _Pair::second_type& operator()(_Pair& __x) const {
    return __x.second;
  }
  const _Pair::second_type& operator()(const _Pair& __x) const {
    return __x.second;
  }
};
# 528 "/usr/local/include/g++-v3/bits/stl_function.h" 3
template <class _Ret, class _Tp>
class mem_fun_t : public unary_function<_Tp*,_Ret> {
public:
  explicit mem_fun_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) {}
  _Ret operator()(_Tp* __p) const { return (__p->*_M_f)(); }
private:
  _Ret (_Tp::*_M_f)();
};


template <class _Ret, class _Tp>
class const_mem_fun_t : public unary_function<const _Tp*,_Ret> {
public:
  explicit const_mem_fun_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {}
  _Ret operator()(const _Tp* __p) const { return (__p->*_M_f)(); }
private:
  _Ret (_Tp::*_M_f)() const;
};


template <class _Ret, class _Tp>
class mem_fun_ref_t : public unary_function<_Tp,_Ret> {
public:
  explicit mem_fun_ref_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) {}
  _Ret operator()(_Tp& __r) const { return (__r.*_M_f)(); }
private:
  _Ret (_Tp::*_M_f)();
};


template <class _Ret, class _Tp>
class const_mem_fun_ref_t : public unary_function<_Tp,_Ret> {
public:
  explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {}
  _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); }
private:
  _Ret (_Tp::*_M_f)() const;
};


template <class _Ret, class _Tp, class _Arg>
class mem_fun1_t : public binary_function<_Tp*,_Arg,_Ret> {
public:
  explicit mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
  _Ret operator()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
private:
  _Ret (_Tp::*_M_f)(_Arg);
};


template <class _Ret, class _Tp, class _Arg>
class const_mem_fun1_t : public binary_function<const _Tp*,_Arg,_Ret> {
public:
  explicit const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
  _Ret operator()(const _Tp* __p, _Arg __x) const
    { return (__p->*_M_f)(__x); }
private:
  _Ret (_Tp::*_M_f)(_Arg) const;
};


template <class _Ret, class _Tp, class _Arg>
class mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
public:
  explicit mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
  _Ret operator()(_Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
private:
  _Ret (_Tp::*_M_f)(_Arg);
};


template <class _Ret, class _Tp, class _Arg>
class const_mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
public:
  explicit const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
  _Ret operator()(const _Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
private:
  _Ret (_Tp::*_M_f)(_Arg) const;
};


template <class _Tp>
class mem_fun_t<void, _Tp> : public unary_function<_Tp*,void> {
public:
  explicit mem_fun_t(void (_Tp::*__pf)()) : _M_f(__pf) {}
  void operator()(_Tp* __p) const { (__p->*_M_f)(); }
private:
  void (_Tp::*_M_f)();
};


template <class _Tp>
class const_mem_fun_t<void, _Tp> : public unary_function<const _Tp*,void> {
public:
  explicit const_mem_fun_t(void (_Tp::*__pf)() const) : _M_f(__pf) {}
  void operator()(const _Tp* __p) const { (__p->*_M_f)(); }
private:
  void (_Tp::*_M_f)() const;
};


template <class _Tp>
class mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
public:
  explicit mem_fun_ref_t(void (_Tp::*__pf)()) : _M_f(__pf) {}
  void operator()(_Tp& __r) const { (__r.*_M_f)(); }
private:
  void (_Tp::*_M_f)();
};


template <class _Tp>
class const_mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
public:
  explicit const_mem_fun_ref_t(void (_Tp::*__pf)() const) : _M_f(__pf) {}
  void operator()(const _Tp& __r) const { (__r.*_M_f)(); }
private:
  void (_Tp::*_M_f)() const;
};


template <class _Tp, class _Arg>
class mem_fun1_t<void, _Tp, _Arg> : public binary_function<_Tp*,_Arg,void> {
public:
  explicit mem_fun1_t(void (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
  void operator()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
private:
  void (_Tp::*_M_f)(_Arg);
};


template <class _Tp, class _Arg>
class const_mem_fun1_t<void, _Tp, _Arg>
  : public binary_function<const _Tp*,_Arg,void> {
public:
  explicit const_mem_fun1_t(void (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
  void operator()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
private:
  void (_Tp::*_M_f)(_Arg) const;
};


template <class _Tp, class _Arg>
class mem_fun1_ref_t<void, _Tp, _Arg>
  : public binary_function<_Tp,_Arg,void> {
public:
  explicit mem_fun1_ref_t(void (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
  void operator()(_Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
private:
  void (_Tp::*_M_f)(_Arg);
};


template <class _Tp, class _Arg>
class const_mem_fun1_ref_t<void, _Tp, _Arg>
  : public binary_function<_Tp,_Arg,void> {
public:
  explicit const_mem_fun1_ref_t(void (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
  void operator()(const _Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
private:
  void (_Tp::*_M_f)(_Arg) const;
};





template <class _Ret, class _Tp>
inline mem_fun_t<_Ret,_Tp> mem_fun(_Ret (_Tp::*__f)())
  { return mem_fun_t<_Ret,_Tp>(__f); }

template <class _Ret, class _Tp>
inline const_mem_fun_t<_Ret,_Tp> mem_fun(_Ret (_Tp::*__f)() const)
  { return const_mem_fun_t<_Ret,_Tp>(__f); }

template <class _Ret, class _Tp>
inline mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)())
  { return mem_fun_ref_t<_Ret,_Tp>(__f); }

template <class _Ret, class _Tp>
inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const)
  { return const_mem_fun_ref_t<_Ret,_Tp>(__f); }

template <class _Ret, class _Tp, class _Arg>
inline mem_fun1_t<_Ret,_Tp,_Arg> mem_fun(_Ret (_Tp::*__f)(_Arg))
  { return mem_fun1_t<_Ret,_Tp,_Arg>(__f); }

template <class _Ret, class _Tp, class _Arg>
inline const_mem_fun1_t<_Ret,_Tp,_Arg> mem_fun(_Ret (_Tp::*__f)(_Arg) const)
  { return const_mem_fun1_t<_Ret,_Tp,_Arg>(__f); }

template <class _Ret, class _Tp, class _Arg>
inline mem_fun1_ref_t<_Ret,_Tp,_Arg> mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
  { return mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }

template <class _Ret, class _Tp, class _Arg>
inline const_mem_fun1_ref_t<_Ret,_Tp,_Arg>
mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
  { return const_mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }



}
# 53 "/usr/local/include/g++-v3/string" 2 3
# 1 "/usr/local/include/g++-v3/bits/basic_string.h" 1 3
# 44 "/usr/local/include/g++-v3/bits/basic_string.h" 3

# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/atomicity.h" 1 3
# 33 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/atomicity.h" 3
typedef int _Atomic_word;

static inline _Atomic_word
__attribute__ ((__unused__))
__exchange_and_add (_Atomic_word* __mem, int __val)
{
  _Atomic_word __result = *__mem;
  *__mem += __val;
  return __result;
}

static inline void
__attribute__ ((__unused__))
__atomic_add (_Atomic_word* __mem, int __val)
{
  *__mem += __val;
}
# 46 "/usr/local/include/g++-v3/bits/basic_string.h" 2 3

namespace std
{
# 88 "/usr/local/include/g++-v3/bits/basic_string.h" 3
  template< _CharT, _Traits, _Alloc>
    class basic_string
    {

    public:
      typedef _Traits traits_type;
      typedef _Traits::char_type value_type;
      typedef _Alloc allocator_type;
      typedef _Alloc::size_type size_type;
      typedef _Alloc::difference_type difference_type;
      typedef _Alloc::reference reference;
      typedef _Alloc::const_reference const_reference;
      typedef _Alloc::pointer pointer;
      typedef _Alloc::const_pointer const_pointer;
      typedef __normal_iterator<pointer, basic_string> iterator;
      typedef __normal_iterator<const_pointer, basic_string> const_iterator;
      typedef reverse_iterator<const_iterator> const_reverse_iterator;
      typedef reverse_iterator<iterator> reverse_iterator;

    private:
# 122 "/usr/local/include/g++-v3/bits/basic_string.h" 3
      struct _Rep
      {

        typedef _Alloc::template rebind<char>::other _Raw_bytes_alloc;
# 140 "/usr/local/include/g++-v3/bits/basic_string.h" 3
        static const size_type _S_max_size;
        static const _CharT _S_terminal;

        size_type _M_length;
        size_type _M_capacity;
        _Atomic_word _M_references;

        bool
        _M_is_leaked() const
        { return _M_references < 0; }

        bool
        _M_is_shared() const
        { return _M_references > 0; }

        void
        _M_set_leaked()
        { _M_references = -1; }

        void
        _M_set_sharable()
        { _M_references = 0; }

        _CharT*
        _M_refdata() throw()
        { return reinterpret_cast<_CharT*> (this + 1); }

        _CharT&
        operator[](size_t __s) throw()
        { return _M_refdata() [__s]; }

        _CharT*
        _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2)
        { return (!_M_is_leaked() && __alloc1 == __alloc2) ?
            _M_refcopy() : _M_clone(__alloc1); }


        static _Rep*
        _S_create(size_t, const _Alloc&);

        void
        _M_dispose(const _Alloc& __a)
        {
          if (__exchange_and_add(&_M_references, -1) <= 0)
            _M_destroy(__a);
        }

        void
        _M_destroy(const _Alloc&) throw();

        _CharT*
        _M_refcopy() throw()
        {
          __atomic_add(&_M_references, 1);
          return _M_refdata();
        }

        _CharT*
        _M_clone(const _Alloc&, size_type __res = 0);
      };


      struct _Alloc_hider : _Alloc
      {
        _Alloc_hider(_CharT* __dat, const _Alloc& __a)
        : _Alloc(__a), _M_p(__dat) { }

        _CharT* _M_p;
      };

    public:



      static const size_type npos = static_cast<size_type>(-1);

    private:

      mutable _Alloc_hider _M_dataplus;



      static size_type _S_empty_rep_storage[(sizeof(_Rep) + sizeof(_CharT) + sizeof(size_type) - 1)/sizeof(size_type)];

      _CharT*
      _M_data() const
      { return _M_dataplus._M_p; }

      _CharT*
      _M_data(_CharT* __p)
      { return (_M_dataplus._M_p = __p); }

      _Rep*
      _M_rep() const
      { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); }



      iterator
      _M_ibegin() const { return iterator(_M_data()); }

      iterator
      _M_iend() const { return iterator(_M_data() + this->size()); }

      void
      _M_leak()
      {
        if (!_M_rep()->_M_is_leaked())
          _M_leak_hard();
      }

      iterator
      _M_check(size_type __pos) const
      {
        if (__pos > this->size())
          __throw_out_of_range("basic_string::_M_check");
        return _M_ibegin() + __pos;
      }


      iterator
      _M_fold(size_type __pos, size_type __off) const
      {
        bool __testoff = __off < this->size() - __pos;
        size_type __newoff = __testoff ? __off : this->size() - __pos;
        return (_M_ibegin() + __pos + __newoff);
      }



      template<class _Iterator>
        static void
        _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
        {
          for (; __k1 != __k2; ++__k1, ++__p)
            traits_type::assign(*__p, *__k1);
        }

      static void
      _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2)
      { _S_copy_chars(__p, __k1.base(), __k2.base()); }

      static void
      _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
      { _S_copy_chars(__p, __k1.base(), __k2.base()); }

      static void
      _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2)
      { traits_type::copy(__p, __k1, __k2 - __k1); }

      static void
      _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
      { traits_type::copy(__p, __k1, __k2 - __k1); }

      void
      _M_mutate(size_type __pos, size_type __len1, size_type __len2);

      void
      _M_leak_hard();

      static _Rep&
      _S_empty_rep()
      { return *reinterpret_cast<_Rep*>(&_S_empty_rep_storage); }

    public:




      inline
      basic_string();

      explicit
      basic_string(const _Alloc& __a);


      basic_string(const basic_string& __str);
      basic_string(const basic_string& __str, size_type __pos,
                   size_type __n = npos);
      basic_string(const basic_string& __str, size_type __pos,
                   size_type __n, const _Alloc& __a);

      basic_string(const _CharT* __s, size_type __n,
                   const _Alloc& __a = _Alloc());
      basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
      basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc());

      template<class _InputIterator>
        basic_string(_InputIterator __beg, _InputIterator __end,
                     const _Alloc& __a = _Alloc());

      ~basic_string()
      { _M_rep()->_M_dispose(this->get_allocator()); }

      basic_string&
      operator=(const basic_string& __str) { return this->assign(__str); }

      basic_string&
      operator=(const _CharT* __s) { return this->assign(__s); }

      basic_string&
      operator=(_CharT __c) { return this->assign(1, __c); }


      iterator
      begin()
      {
        _M_leak();
        return iterator(_M_data());
      }

      const_iterator
      begin() const
      { return const_iterator(_M_data()); }

      iterator
      end()
      {
         _M_leak();
         return iterator(_M_data() + this->size());
      }

      const_iterator
      end() const
      { return const_iterator(_M_data() + this->size()); }

      reverse_iterator
      rbegin()
      { return reverse_iterator(this->end()); }

      const_reverse_iterator
      rbegin() const
      { return const_reverse_iterator(this->end()); }

      reverse_iterator
      rend()
      { return reverse_iterator(this->begin()); }

      const_reverse_iterator
      rend() const
      { return const_reverse_iterator(this->begin()); }

    public:

      size_type
      size() const { return _M_rep()->_M_length; }

      size_type
      length() const { return _M_rep()->_M_length; }

      size_type
      max_size() const { return _Rep::_S_max_size; }

      void
      resize(size_type __n, _CharT __c);

      void
      resize(size_type __n) { this->resize(__n, _CharT()); }

      size_type
      capacity() const { return _M_rep()->_M_capacity; }

      void
      reserve(size_type __res_arg = 0);

      void
      clear() { _M_mutate(0, this->size(), 0); }

      bool
      empty() const { return this->size() == 0; }


      const_reference
      operator[] (size_type __pos) const
      { return _M_data()[__pos]; }

      reference
      operator[](size_type __pos)
      {
        _M_leak();
        return _M_data()[__pos];
      }

      const_reference
      at(size_type __n) const
      {
        if (__n >= this->size())
          __throw_out_of_range("basic_string::at");
        return _M_data()[__n];
      }

      reference
      at(size_type __n)
      {
        if (__n >= size())
          __throw_out_of_range("basic_string::at");
        _M_leak();
        return _M_data()[__n];
      }


      basic_string&
      operator+=(const basic_string& __str) { return this->append(__str); }

      basic_string&
      operator+=(const _CharT* __s) { return this->append(__s); }

      basic_string&
      operator+=(_CharT __c) { return this->append(size_type(1), __c); }

      basic_string&
      append(const basic_string& __str);

      basic_string&
      append(const basic_string& __str, size_type __pos, size_type __n);

      basic_string&
      append(const _CharT* __s, size_type __n);

      basic_string&
      append(const _CharT* __s)
      { return this->append(__s, traits_type::length(__s)); }

      basic_string&
      append(size_type __n, _CharT __c);

      template<class _InputIterator>
        basic_string&
        append(_InputIterator __first, _InputIterator __last)
        { return this->replace(_M_iend(), _M_iend(), __first, __last); }

      void
      push_back(_CharT __c)
      { this->replace(_M_iend(), _M_iend(), 1, __c); }

      basic_string&
      assign(const basic_string& __str);

      basic_string&
      assign(const basic_string& __str, size_type __pos, size_type __n)
      {
        const size_type __strsize = __str.size();
        if (__pos > __strsize)
          __throw_out_of_range("basic_string::assign");
        const bool __testn = __n < __strsize - __pos;
        const size_type __newsize = __testn ? __n : __strsize - __pos;
        return this->assign(__str._M_data() + __pos, __newsize);
      }

      basic_string&
      assign(const _CharT* __s, size_type __n)
      {
        if (__n > this->max_size())
          __throw_length_error("basic_string::assign");
        if (_M_rep()->_M_is_shared() || less<const _CharT*>()(__s, _M_data())
            || less<const _CharT*>()(_M_data() + this->size(), __s))
          return _M_replace_safe(_M_ibegin(), _M_iend(), __s, __s + __n);
        else
          {

            const size_type __pos = __s - _M_data();
            if (__pos >= __n)
              traits_type::copy(_M_data(), __s, __n);
            else if (__pos)
              traits_type::move(_M_data(), __s, __n);
            _M_rep()->_M_length = __n;
            _M_data()[__n] = _Rep::_S_terminal;
            return *this;
          }
      }

      basic_string&
      assign(const _CharT* __s)
      { return this->assign(__s, traits_type::length(__s)); }

      basic_string&
      assign(size_type __n, _CharT __c)
      { return this->replace(_M_ibegin(), _M_iend(), __n, __c); }

      template<class _InputIterator>
        basic_string&
        assign(_InputIterator __first, _InputIterator __last)
        { return this->replace(_M_ibegin(), _M_iend(), __first, __last); }

      void
      insert(iterator __p, size_type __n, _CharT __c)
      { this->replace(__p, __p, __n, __c); }

      template<class _InputIterator>
        void insert(iterator __p, _InputIterator __beg, _InputIterator __end)
        { this->replace(__p, __p, __beg, __end); }

      basic_string&
      insert(size_type __pos1, const basic_string& __str)
      { return this->insert(__pos1, __str, 0, __str.size()); }

      basic_string&
      insert(size_type __pos1, const basic_string& __str,
             size_type __pos2, size_type __n)
      {
        const size_type __strsize = __str.size();
        if (__pos2 > __strsize)
          __throw_out_of_range("basic_string::insert");
        const bool __testn = __n < __strsize - __pos2;
        const size_type __newsize = __testn ? __n : __strsize - __pos2;
        return this->insert(__pos1, __str._M_data() + __pos2, __newsize);
      }

      basic_string&
      insert(size_type __pos, const _CharT* __s, size_type __n)
      {
        const size_type __size = this->size();
        if (__pos > __size)
          __throw_out_of_range("basic_string::insert");
        if (__size > this->max_size() - __n)
          __throw_length_error("basic_string::insert");
        if (_M_rep()->_M_is_shared() || less<const _CharT*>()(__s, _M_data())
            || less<const _CharT*>()(_M_data() + __size, __s))
          return _M_replace_safe(_M_ibegin() + __pos, _M_ibegin() + __pos,
                                 __s, __s + __n);
        else
          {



            const size_type __off = __s - _M_data();
            _M_mutate(__pos, 0, __n);
            __s = _M_data() + __off;
            _CharT* __p = _M_data() + __pos;
            if (__s + __n <= __p)
              traits_type::copy(__p, __s, __n);
            else if (__s >= __p)
              traits_type::copy(__p, __s + __n, __n);
            else
              {
                traits_type::copy(__p, __s, __p - __s);
                traits_type::copy(__p + (__p - __s), __p + __n, __n - (__p - __s));
              }
            return *this;
          }
       }

      basic_string&
      insert(size_type __pos, const _CharT* __s)
      { return this->insert(__pos, __s, traits_type::length(__s)); }

      basic_string&
      insert(size_type __pos, size_type __n, _CharT __c)
      {
        this->insert(_M_check(__pos), __n, __c);
        return *this;
      }

      iterator
      insert(iterator __p, _CharT __c = _CharT())
      {
        size_type __pos = __p - _M_ibegin();
        this->insert(_M_check(__pos), size_type(1), __c);
        _M_rep()->_M_set_leaked();
        return this->_M_ibegin() + __pos;
      }

      basic_string&
      erase(size_type __pos = 0, size_type __n = npos)
      {
        return this->replace(_M_check(__pos), _M_fold(__pos, __n),
                             _M_data(), _M_data());
      }

      iterator
      erase(iterator __position)
      {
        size_type __i = __position - _M_ibegin();
        this->replace(__position, __position + 1, _M_data(), _M_data());
        _M_rep()->_M_set_leaked();
        return _M_ibegin() + __i;
      }

      iterator
      erase(iterator __first, iterator __last)
      {
        size_type __i = __first - _M_ibegin();
        this->replace(__first, __last, _M_data(), _M_data());
        _M_rep()->_M_set_leaked();
       return _M_ibegin() + __i;
      }

      basic_string&
      replace(size_type __pos, size_type __n, const basic_string& __str)
      { return this->replace(__pos, __n, __str._M_data(), __str.size()); }

      basic_string&
      replace(size_type __pos1, size_type __n1, const basic_string& __str,
              size_type __pos2, size_type __n2);

      basic_string&
      replace(size_type __pos, size_type __n1, const _CharT* __s,
              size_type __n2)
      {
        const size_type __size = this->size();
        if (__pos > __size)
          __throw_out_of_range("basic_string::replace");
        if (__size - __n1 > this->max_size() - __n2)
          __throw_length_error("basic_string::replace");
        const bool __testn1 = __n1 < __size - __pos;
        const size_type __foldn1 = __testn1 ? __n1 : __size - __pos;
        if (_M_rep()->_M_is_shared() || less<const _CharT*>()(__s, _M_data())
            || less<const _CharT*>()(_M_data() + __size, __s))
          return _M_replace_safe(_M_ibegin() + __pos,
                                 _M_ibegin() + __pos + __foldn1, __s, __s + __n2);
        else return this->replace(_M_check(__pos), _M_fold(__pos, __n1),
                                  __s, __s + __n2);
      }

      basic_string&
      replace(size_type __pos, size_type __n1, const _CharT* __s)
      { return this->replace(__pos, __n1, __s, traits_type::length(__s)); }

      basic_string&
      replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
      { return this->replace(_M_check(__pos), _M_fold(__pos, __n1), __n2, __c); }

      basic_string&
      replace(iterator __i1, iterator __i2, const basic_string& __str)
      { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }

      basic_string&
      replace(iterator __i1, iterator __i2,
                           const _CharT* __s, size_type __n)
      { return this->replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n); }

      basic_string&
      replace(iterator __i1, iterator __i2, const _CharT* __s)
      { return this->replace(__i1, __i2, __s, traits_type::length(__s)); }

      basic_string&
      replace(iterator __i1, iterator __i2, size_type __n, _CharT __c);

      template<class _InputIterator>
        basic_string&
        replace(iterator __i1, iterator __i2,
                _InputIterator __k1, _InputIterator __k2)
        { return _M_replace(__i1, __i2, __k1, __k2,
             iterator_traits<_InputIterator>::iterator_category()); }

    private:
      template<class _InputIterator>
        basic_string&
        _M_replace(iterator __i1, iterator __i2, _InputIterator __k1,
                   _InputIterator __k2, input_iterator_tag);

      template<class _ForwardIterator>
        basic_string&
        _M_replace_safe(iterator __i1, iterator __i2, _ForwardIterator __k1,
                   _ForwardIterator __k2);



      template<class _InIter>
        static _CharT*
        _S_construct_aux(_InIter __beg, _InIter __end, const _Alloc& __a,
                         __false_type)
        {
          typedef iterator_traits<_InIter>::iterator_category _Tag;
          return _S_construct(__beg, __end, __a, _Tag());
        }

      template<class _InIter>
        static _CharT*
        _S_construct_aux(_InIter __beg, _InIter __end, const _Alloc& __a,
                         __true_type)
        {
          return _S_construct(static_cast<size_type>(__beg),
                              static_cast<value_type>(__end), __a);
        }

      template<class _InIter>
        static _CharT*
        _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a)
        {
          typedef _Is_integer<_InIter>::_Integral _Integral;
          return _S_construct_aux(__beg, __end, __a, _Integral());
        }


      template<class _InIter>
        static _CharT*
         _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                      input_iterator_tag);



      template<class _FwdIter>
        static _CharT*
        _S_construct(_FwdIter __beg, _FwdIter __end, const _Alloc& __a,
                     forward_iterator_tag);

      static _CharT*
      _S_construct(size_type __req, _CharT __c, const _Alloc& __a);

    public:

      size_type
      copy(_CharT* __s, size_type __n, size_type __pos = 0) const;

      void
      swap(basic_string<_CharT, _Traits, _Alloc>& __s);


      const _CharT*
      c_str() const
      {

        size_type __n = this->size();
        traits_type::assign(_M_data()[__n], _Rep::_S_terminal);
        return _M_data();
      }

      const _CharT*
      data() const { return _M_data(); }

      allocator_type
      get_allocator() const { return _M_dataplus; }

      size_type
      find(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      find(const basic_string& __str, size_type __pos = 0) const
      { return this->find(__str.data(), __pos, __str.size()); }

      size_type
      find(const _CharT* __s, size_type __pos = 0) const
      { return this->find(__s, __pos, traits_type::length(__s)); }

      size_type
      find(_CharT __c, size_type __pos = 0) const;

      size_type
      rfind(const basic_string& __str, size_type __pos = npos) const
      { return this->rfind(__str.data(), __pos, __str.size()); }

      size_type
      rfind(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      rfind(const _CharT* __s, size_type __pos = npos) const
      { return this->rfind(__s, __pos, traits_type::length(__s)); }

      size_type
      rfind(_CharT __c, size_type __pos = npos) const;

      size_type
      find_first_of(const basic_string& __str, size_type __pos = 0) const
      { return this->find_first_of(__str.data(), __pos, __str.size()); }

      size_type
      find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      find_first_of(const _CharT* __s, size_type __pos = 0) const
      { return this->find_first_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_first_of(_CharT __c, size_type __pos = 0) const
      { return this->find(__c, __pos); }

      size_type
      find_last_of(const basic_string& __str, size_type __pos = npos) const
      { return this->find_last_of(__str.data(), __pos, __str.size()); }

      size_type
      find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      find_last_of(const _CharT* __s, size_type __pos = npos) const
      { return this->find_last_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_last_of(_CharT __c, size_type __pos = npos) const
      { return this->rfind(__c, __pos); }

      size_type
      find_first_not_of(const basic_string& __str, size_type __pos = 0) const
      { return this->find_first_not_of(__str.data(), __pos, __str.size()); }

      size_type
      find_first_not_of(const _CharT* __s, size_type __pos,
                        size_type __n) const;

      size_type
      find_first_not_of(const _CharT* __s, size_type __pos = 0) const
      { return this->find_first_not_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_first_not_of(_CharT __c, size_type __pos = 0) const;

      size_type
      find_last_not_of(const basic_string& __str, size_type __pos = npos) const
      { return this->find_last_not_of(__str.data(), __pos, __str.size()); }

      size_type
      find_last_not_of(const _CharT* __s, size_type __pos,
                       size_type __n) const;
      size_type
      find_last_not_of(const _CharT* __s, size_type __pos = npos) const
      { return this->find_last_not_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_last_not_of(_CharT __c, size_type __pos = npos) const;

      basic_string
      substr(size_type __pos = 0, size_type __n = npos) const
      {
        if (__pos > this->size())
          __throw_out_of_range("basic_string::substr");
        return basic_string(*this, __pos, __n);
      }

      int
      compare(const basic_string& __str) const
      {
        size_type __size = this->size();
        size_type __osize = __str.size();
        size_type __len = min(__size, __osize);

        int __r = traits_type::compare(_M_data(), __str.data(), __len);
        if (!__r)
          __r = __size - __osize;
        return __r;
      }

      int
      compare(size_type __pos, size_type __n, const basic_string& __str) const;

      int
      compare(size_type __pos1, size_type __n1, const basic_string& __str,
              size_type __pos2, size_type __n2) const;

      int
      compare(const _CharT* __s) const;



      int
      compare(size_type __pos, size_type __n1, const _CharT* __s) const;

      int
      compare(size_type __pos, size_type __n1, const _CharT* __s,
              size_type __n2) const;
  };


  template< _CharT, _Traits, _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>::
    basic_string()
    : _M_dataplus(_S_empty_rep()._M_refcopy(), _Alloc()) { }


  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    {
      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
      __str.append(__rhs);
      return __str;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(const _CharT* __lhs,
              const basic_string<_CharT,_Traits,_Alloc>& __rhs);

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);

  template< _CharT, _Traits, _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
             const _CharT* __rhs)
    {
      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
      __str.append(__rhs);
      return __str;
    }

  template< _CharT, _Traits, _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef __string_type::size_type __size_type;
      __string_type __str(__lhs);
      __str.append(__size_type(1), __rhs);
      return __str;
    }


  template< _CharT, _Traits, _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) == 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator==(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) == 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) == 0; }


  template< _CharT, _Traits, _Alloc>
    inline bool
    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) != 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator!=(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) != 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) != 0; }


  template< _CharT, _Traits, _Alloc>
    inline bool
    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) < 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const _CharT* __rhs)
    { return __lhs.compare(__rhs) < 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator<(const _CharT* __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) > 0; }


  template< _CharT, _Traits, _Alloc>
    inline bool
    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) > 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const _CharT* __rhs)
    { return __lhs.compare(__rhs) > 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator>(const _CharT* __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) < 0; }


  template< _CharT, _Traits, _Alloc>
    inline bool
    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) <= 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) <= 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator<=(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
  { return __rhs.compare(__lhs) >= 0; }


  template< _CharT, _Traits, _Alloc>
    inline bool
    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) >= 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) >= 0; }

  template< _CharT, _Traits, _Alloc>
    inline bool
    operator>=(const _CharT* __lhs,
             const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) <= 0; }


  template< _CharT, _Traits, _Alloc>
    inline void
    swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
         basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { __lhs.swap(__rhs); }

  template< _CharT, _Traits, _Alloc>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __is,
               basic_string<_CharT, _Traits, _Alloc>& __str);

  template< _CharT, _Traits, _Alloc>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __os,
               const basic_string<_CharT, _Traits, _Alloc>& __str);

  template< _CharT, _Traits, _Alloc>
    basic_istream<_CharT,_Traits>&
    getline(basic_istream<_CharT, _Traits>& __is,
            basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);

  template< _CharT, _Traits, _Alloc>
    inline basic_istream<_CharT,_Traits>&
    getline(basic_istream<_CharT, _Traits>& __is,
            basic_string<_CharT, _Traits, _Alloc>& __str);
}
# 54 "/usr/local/include/g++-v3/string" 2 3


# 1 "/usr/local/include/g++-v3/algorithm" 1 3
# 65 "/usr/local/include/g++-v3/algorithm" 3




# 1 "/usr/local/include/g++-v3/bits/stl_algo.h" 1 3
# 64 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
# 1 "/usr/local/include/g++-v3/bits/stl_heap.h" 1 3
# 63 "/usr/local/include/g++-v3/bits/stl_heap.h" 3
namespace std
{



  template< _RandomAccessIterator, _Distance, _Tp>
    void
    __push_heap(_RandomAccessIterator __first,
                _Distance __holeIndex, _Distance __topIndex, _Tp __value)
    {
      _Distance __parent = (__holeIndex - 1) / 2;
      while (__holeIndex > __topIndex && *(__first + __parent) < __value) {
        *(__first + __holeIndex) = *(__first + __parent);
        __holeIndex = __parent;
        __parent = (__holeIndex - 1) / 2;
      }
      *(__first + __holeIndex) = __value;
    }

  template< _RandomAccessIterator>
    inline void
    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef iterator_traits<_RandomAccessIterator>::value_type
          _ValueType;
      typedef iterator_traits<_RandomAccessIterator>::difference_type
          _DistanceType;


     

     

      __push_heap(__first, _DistanceType((__last - __first) - 1), _DistanceType(0),
                  _ValueType(*(__last - 1)));
    }

  template< _RandomAccessIterator, _Distance, _Tp,
            _Compare>
    void
    __push_heap(_RandomAccessIterator __first, _Distance __holeIndex,
                _Distance __topIndex, _Tp __value, _Compare __comp)
    {
      _Distance __parent = (__holeIndex - 1) / 2;
      while (__holeIndex > __topIndex && __comp(*(__first + __parent), __value)) {
        *(__first + __holeIndex) = *(__first + __parent);
        __holeIndex = __parent;
        __parent = (__holeIndex - 1) / 2;
      }
      *(__first + __holeIndex) = __value;
    }

  template< _RandomAccessIterator, _Compare>
    inline void
    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
              _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIterator>::value_type
          _ValueType;
      typedef iterator_traits<_RandomAccessIterator>::difference_type
          _DistanceType;


     


      __push_heap(__first, _DistanceType((__last - __first) - 1), _DistanceType(0),
                  _ValueType(*(__last - 1)), __comp);
    }

  template< _RandomAccessIterator, _Distance, _Tp>
    void
    __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
                  _Distance __len, _Tp __value)
    {
      _Distance __topIndex = __holeIndex;
      _Distance __secondChild = 2 * __holeIndex + 2;
      while (__secondChild < __len) {
        if (*(__first + __secondChild) < *(__first + (__secondChild - 1)))
          __secondChild--;
        *(__first + __holeIndex) = *(__first + __secondChild);
        __holeIndex = __secondChild;
        __secondChild = 2 * (__secondChild + 1);
      }
      if (__secondChild == __len) {
        *(__first + __holeIndex) = *(__first + (__secondChild - 1));
        __holeIndex = __secondChild - 1;
      }
      __push_heap(__first, __holeIndex, __topIndex, __value);
    }

  template< _RandomAccessIterator, _Tp>
    inline void
    __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
               _RandomAccessIterator __result, _Tp __value)
    {
      typedef iterator_traits<_RandomAccessIterator>::difference_type _Distance;
      *__result = *__first;
      __adjust_heap(__first, _Distance(0), _Distance(__last - __first), __value);
    }

  template< _RandomAccessIterator>
    inline void
    pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef iterator_traits<_RandomAccessIterator>::value_type _ValueType;


     

     

      __pop_heap(__first, __last - 1, __last - 1, _ValueType(*(__last - 1)));
    }

  template< _RandomAccessIterator, _Distance,
           _Tp, _Compare>
    void
    __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
                  _Distance __len, _Tp __value, _Compare __comp)
    {
      _Distance __topIndex = __holeIndex;
      _Distance __secondChild = 2 * __holeIndex + 2;
      while (__secondChild < __len) {
        if (__comp(*(__first + __secondChild), *(__first + (__secondChild - 1))))
          __secondChild--;
        *(__first + __holeIndex) = *(__first + __secondChild);
        __holeIndex = __secondChild;
        __secondChild = 2 * (__secondChild + 1);
      }
      if (__secondChild == __len) {
        *(__first + __holeIndex) = *(__first + (__secondChild - 1));
        __holeIndex = __secondChild - 1;
      }
      __push_heap(__first, __holeIndex, __topIndex, __value, __comp);
    }

  template< _RandomAccessIterator, _Tp, _Compare>
    inline void
    __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
               _RandomAccessIterator __result, _Tp __value, _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIterator>::difference_type _Distance;
      *__result = *__first;
      __adjust_heap(__first, _Distance(0), _Distance(__last - __first),
                    __value, __comp);
    }

  template< _RandomAccessIterator, _Compare>
    inline void
    pop_heap(_RandomAccessIterator __first,
             _RandomAccessIterator __last, _Compare __comp)
    {

     


      typedef iterator_traits<_RandomAccessIterator>::value_type _ValueType;
      __pop_heap(__first, __last - 1, __last - 1, _ValueType(*(__last - 1)), __comp);
    }

  template< _RandomAccessIterator>
    void
    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef iterator_traits<_RandomAccessIterator>::value_type
          _ValueType;
      typedef iterator_traits<_RandomAccessIterator>::difference_type
          _DistanceType;


     

     

      if (__last - __first < 2) return;
      _DistanceType __len = __last - __first;
      _DistanceType __parent = (__len - 2)/2;

      while (true) {
        __adjust_heap(__first, __parent, __len, _ValueType(*(__first + __parent)));
        if (__parent == 0) return;
        __parent--;
      }
    }

  template< _RandomAccessIterator, _Compare>
    inline void
    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
              _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIterator>::value_type
          _ValueType;
      typedef iterator_traits<_RandomAccessIterator>::difference_type
          _DistanceType;


     


      if (__last - __first < 2) return;
      _DistanceType __len = __last - __first;
      _DistanceType __parent = (__len - 2)/2;

      while (true) {
        __adjust_heap(__first, __parent, __len,
                      _ValueType(*(__first + __parent)), __comp);
        if (__parent == 0) return;
        __parent--;
      }
    }

  template< _RandomAccessIterator>
    void
    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     


      while (__last - __first > 1)
        pop_heap(__first, __last--);
    }

  template< _RandomAccessIterator, _Compare>
    void
    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
              _Compare __comp)
    {

     


      while (__last - __first > 1)
        pop_heap(__first, __last--, __comp);
    }

}
# 65 "/usr/local/include/g++-v3/bits/stl_algo.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_tempbuf.h" 1 3
# 64 "/usr/local/include/g++-v3/bits/stl_tempbuf.h" 3
namespace std
{
# 74 "/usr/local/include/g++-v3/bits/stl_tempbuf.h" 3
template <class _ForwardIterator, class _Tp>
  class _Temporary_buffer
{

 

  ptrdiff_t _M_original_len;
  ptrdiff_t _M_len;
  _Tp* _M_buffer;


  void _M_allocate_buffer() {
    _M_original_len = _M_len;
    _M_buffer = 0;

    if (_M_len > (ptrdiff_t)(2147483647 / sizeof(_Tp)))
      _M_len = 2147483647 / sizeof(_Tp);

    while (_M_len > 0) {
      _M_buffer = (_Tp*) malloc(_M_len * sizeof(_Tp));
      if (_M_buffer)
        break;
      _M_len /= 2;
    }
  }

  void _M_initialize_buffer(const _Tp&, __true_type) {}
  void _M_initialize_buffer(const _Tp& val, __false_type) {
    uninitialized_fill_n(_M_buffer, _M_len, val);
  }

public:

  ptrdiff_t size() const { return _M_len; }

  ptrdiff_t requested_size() const { return _M_original_len; }

  _Tp* begin() { return _M_buffer; }

  _Tp* end() { return _M_buffer + _M_len; }

  _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) {

    typedef __type_traits<_Tp>::has_trivial_default_constructor
            _Trivial;

    try {
      _M_len = distance(__first, __last);
      _M_allocate_buffer();
      if (_M_len > 0)
        _M_initialize_buffer(*__first, _Trivial());
    }
    catch(...)
      {
        free(_M_buffer);
        _M_buffer = 0;
        _M_len = 0;
        throw;
      }
  }

  ~_Temporary_buffer() {
    _Destroy(_M_buffer, _M_buffer + _M_len);
    free(_M_buffer);
  }

private:

  _Temporary_buffer(const _Temporary_buffer&) {}
  void operator=(const _Temporary_buffer&) {}
};

}
# 66 "/usr/local/include/g++-v3/bits/stl_algo.h" 2 3



namespace std
{
# 84 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _Tp>
  inline const _Tp&
    __median(const _Tp& __a, const _Tp& __b, const _Tp& __c)
    {

     
      if (__a < __b)
        if (__b < __c)
          return __b;
        else if (__a < __c)
          return __c;
        else
          return __a;
      else if (__a < __c)
        return __a;
      else if (__b < __c)
        return __c;
      else
        return __b;
    }
# 118 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _Tp, _Compare>
    inline const _Tp&
    __median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp)
    {

     
      if (__comp(__a, __b))
        if (__comp(__b, __c))
          return __b;
        else if (__comp(__a, __c))
          return __c;
        else
          return __a;
      else if (__comp(__a, __c))
        return __a;
      else if (__comp(__b, __c))
        return __c;
      else
        return __b;
    }
# 150 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _Function>
    _Function
    for_each(_InputIter __first, _InputIter __last, _Function __f)
    {

     
      for ( ; __first != __last; ++__first)
        __f(*__first);
      return __f;
    }






  template< _InputIter, _Tp>
    inline _InputIter
    find(_InputIter __first, _InputIter __last,
         const _Tp& __val,
         input_iterator_tag)
    {
      while (__first != __last && !(*__first == __val))
        ++__first;
      return __first;
    }






  template< _InputIter, _Predicate>
    inline _InputIter
    find_if(_InputIter __first, _InputIter __last,
            _Predicate __pred,
            input_iterator_tag)
    {
      while (__first != __last && !__pred(*__first))
        ++__first;
      return __first;
    }






  template< _RandomAccessIter, _Tp>
    _RandomAccessIter
    find(_RandomAccessIter __first, _RandomAccessIter __last,
         const _Tp& __val,
         random_access_iterator_tag)
    {
      iterator_traits<_RandomAccessIter>::difference_type __trip_count
        = (__last - __first) >> 2;

      for ( ; __trip_count > 0 ; --__trip_count) {
        if (*__first == __val) return __first;
        ++__first;

        if (*__first == __val) return __first;
        ++__first;

        if (*__first == __val) return __first;
        ++__first;

        if (*__first == __val) return __first;
        ++__first;
      }

      switch(__last - __first) {
      case 3:
        if (*__first == __val) return __first;
        ++__first;
      case 2:
        if (*__first == __val) return __first;
        ++__first;
      case 1:
        if (*__first == __val) return __first;
        ++__first;
      case 0:
      default:
        return __last;
      }
    }






  template< _RandomAccessIter, _Predicate>
    _RandomAccessIter
    find_if(_RandomAccessIter __first, _RandomAccessIter __last,
            _Predicate __pred,
            random_access_iterator_tag)
    {
      iterator_traits<_RandomAccessIter>::difference_type __trip_count
        = (__last - __first) >> 2;

      for ( ; __trip_count > 0 ; --__trip_count) {
        if (__pred(*__first)) return __first;
        ++__first;

        if (__pred(*__first)) return __first;
        ++__first;

        if (__pred(*__first)) return __first;
        ++__first;

        if (__pred(*__first)) return __first;
        ++__first;
      }

      switch(__last - __first) {
      case 3:
        if (__pred(*__first)) return __first;
        ++__first;
      case 2:
        if (__pred(*__first)) return __first;
        ++__first;
      case 1:
        if (__pred(*__first)) return __first;
        ++__first;
      case 0:
      default:
        return __last;
      }
    }
# 289 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _Tp>
    inline _InputIter
    find(_InputIter __first, _InputIter __last,
         const _Tp& __val)
    {

     
     

      return find(__first, __last, __val, __iterator_category(__first));
    }
# 309 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _Predicate>
    inline _InputIter
    find_if(_InputIter __first, _InputIter __last,
            _Predicate __pred)
    {

     
     

      return find_if(__first, __last, __pred, __iterator_category(__first));
    }
# 329 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter>
    _ForwardIter
    adjacent_find(_ForwardIter __first, _ForwardIter __last)
    {

     
     

      if (__first == __last)
        return __last;
      _ForwardIter __next = __first;
      while(++__next != __last) {
        if (*__first == *__next)
          return __first;
        __first = __next;
      }
      return __last;
    }
# 358 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _BinaryPredicate>
    _ForwardIter
    adjacent_find(_ForwardIter __first, _ForwardIter __last,
                  _BinaryPredicate __binary_pred)
    {

     
     


      if (__first == __last)
        return __last;
      _ForwardIter __next = __first;
      while(++__next != __last) {
        if (__binary_pred(*__first, *__next))
          return __first;
        __first = __next;
      }
      return __last;
    }
# 387 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _Tp>
    iterator_traits<_InputIter>::difference_type
    count(_InputIter __first, _InputIter __last, const _Tp& __value)
    {

     
     

     
      iterator_traits<_InputIter>::difference_type __n = 0;
      for ( ; __first != __last; ++__first)
        if (*__first == __value)
          ++__n;
      return __n;
    }
# 411 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _Predicate>
    iterator_traits<_InputIter>::difference_type
    count_if(_InputIter __first, _InputIter __last, _Predicate __pred)
    {

     
     

      iterator_traits<_InputIter>::difference_type __n = 0;
      for ( ; __first != __last; ++__first)
        if (__pred(*__first))
          ++__n;
      return __n;
    }
# 450 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter1, _ForwardIter2>
    _ForwardIter1
    search(_ForwardIter1 __first1, _ForwardIter1 __last1,
           _ForwardIter2 __first2, _ForwardIter2 __last2)
    {

     
     
     




      if (__first1 == __last1 || __first2 == __last2)
        return __first1;


      _ForwardIter2 __tmp(__first2);
      ++__tmp;
      if (__tmp == __last2)
        return find(__first1, __last1, *__first2);



      _ForwardIter2 __p1, __p;

      __p1 = __first2; ++__p1;

      _ForwardIter1 __current = __first1;

      while (__first1 != __last1) {
        __first1 = find(__first1, __last1, *__first2);
        if (__first1 == __last1)
          return __last1;

        __p = __p1;
        __current = __first1;
        if (++__current == __last1)
          return __last1;

        while (*__current == *__p) {
          if (++__p == __last2)
            return __first1;
          if (++__current == __last1)
            return __last1;
        }

        ++__first1;
      }
      return __first1;
    }
# 522 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter1, _ForwardIter2, _BinaryPred>
    _ForwardIter1
    search(_ForwardIter1 __first1, _ForwardIter1 __last1,
           _ForwardIter2 __first2, _ForwardIter2 __last2,
           _BinaryPred __predicate)
    {

     
     
     




      if (__first1 == __last1 || __first2 == __last2)
        return __first1;


      _ForwardIter2 __tmp(__first2);
      ++__tmp;
      if (__tmp == __last2) {
        while (__first1 != __last1 && !__predicate(*__first1, *__first2))
          ++__first1;
        return __first1;
      }



      _ForwardIter2 __p1, __p;

      __p1 = __first2; ++__p1;

      _ForwardIter1 __current = __first1;

      while (__first1 != __last1) {
        while (__first1 != __last1) {
          if (__predicate(*__first1, *__first2))
            break;
          ++__first1;
        }
        while (__first1 != __last1 && !__predicate(*__first1, *__first2))
          ++__first1;
        if (__first1 == __last1)
          return __last1;

        __p = __p1;
        __current = __first1;
        if (++__current == __last1) return __last1;

        while (__predicate(*__current, *__p)) {
          if (++__p == __last2)
            return __first1;
          if (++__current == __last1)
            return __last1;
        }

        ++__first1;
      }
      return __first1;
    }
# 596 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Integer, _Tp>
    _ForwardIter
    search_n(_ForwardIter __first, _ForwardIter __last,
             _Integer __count, const _Tp& __val)
    {

     
     

     

      if (__count <= 0)
        return __first;
      else {
        __first = find(__first, __last, __val);
        while (__first != __last) {
          _Integer __n = __count - 1;
          _ForwardIter __i = __first;
          ++__i;
          while (__i != __last && __n != 0 && *__i == __val) {
            ++__i;
            --__n;
          }
          if (__n == 0)
            return __first;
          else
            __first = find(__i, __last, __val);
        }
        return __last;
      }
    }
# 643 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Integer, _Tp,
           _BinaryPred>
    _ForwardIter
    search_n(_ForwardIter __first, _ForwardIter __last,
             _Integer __count, const _Tp& __val,
             _BinaryPred __binary_pred)
    {

     
     


      if (__count <= 0)
        return __first;
      else {
        while (__first != __last) {
          if (__binary_pred(*__first, __val))
            break;
          ++__first;
        }
        while (__first != __last) {
          _Integer __n = __count - 1;
          _ForwardIter __i = __first;
          ++__i;
          while (__i != __last && __n != 0 && __binary_pred(*__i, __val)) {
            ++__i;
            --__n;
          }
          if (__n == 0)
            return __first;
          else {
            while (__i != __last) {
              if (__binary_pred(*__i, __val))
                break;
              ++__i;
            }
            __first = __i;
          }
        }
        return __last;
      }
    }
# 697 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter1, _ForwardIter2>
    _ForwardIter2
    swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1,
                _ForwardIter2 __first2)
    {

     
     
     


     



      for ( ; __first1 != __last1; ++__first1, ++__first2)
        iter_swap(__first1, __first2);
      return __first2;
    }
# 732 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter, _UnaryOperation>
    _OutputIter
    transform(_InputIter __first, _InputIter __last,
              _OutputIter __result, _UnaryOperation __unary_op)
    {

     
     



      for ( ; __first != __last; ++__first, ++__result)
        *__result = __unary_op(*__first);
      return __result;
    }
# 765 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter1, _InputIter2, _OutputIter,
           _BinaryOperation>
    _OutputIter
    transform(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2, _OutputIter __result,
              _BinaryOperation __binary_op)
    {

     
     
     



      for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
        *__result = __binary_op(*__first1, *__first2);
      return __result;
    }
# 796 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Tp>
    void
    replace(_ForwardIter __first, _ForwardIter __last,
            const _Tp& __old_value, const _Tp& __new_value)
    {

     
     

     


      for ( ; __first != __last; ++__first)
        if (*__first == __old_value)
          *__first = __new_value;
    }
# 825 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Predicate, _Tp>
    void
    replace_if(_ForwardIter __first, _ForwardIter __last,
               _Predicate __pred, const _Tp& __new_value)
    {

     
     

     


      for ( ; __first != __last; ++__first)
        if (__pred(*__first))
          *__first = __new_value;
    }
# 856 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter, _Tp>
    _OutputIter
    replace_copy(_InputIter __first, _InputIter __last,
                 _OutputIter __result,
                 const _Tp& __old_value, const _Tp& __new_value)
    {

     
     

     


      for ( ; __first != __last; ++__first, ++__result)
        *__result = *__first == __old_value ? __new_value : *__first;
      return __result;
    }
# 888 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter, _Predicate,
           _Tp>
    _OutputIter
    replace_copy_if(_InputIter __first, _InputIter __last,
                    _OutputIter __result,
                    _Predicate __pred, const _Tp& __new_value)
    {

     
     

     


      for ( ; __first != __last; ++__first, ++__result)
        *__result = __pred(*__first) ? __new_value : *__first;
      return __result;
    }
# 918 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Generator>
    void
    generate(_ForwardIter __first, _ForwardIter __last, _Generator __gen)
    {

     
     


      for ( ; __first != __last; ++__first)
        *__first = __gen();
    }
# 942 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _OutputIter, _Size, _Generator>
    _OutputIter
    generate_n(_OutputIter __first, _Size __n, _Generator __gen)
    {

     



      for ( ; __n > 0; --__n, ++__first)
        *__first = __gen();
      return __first;
    }
# 969 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter, _Tp>
    _OutputIter
    remove_copy(_InputIter __first, _InputIter __last,
                _OutputIter __result, const _Tp& __value)
    {

     
     

     


      for ( ; __first != __last; ++__first)
        if (!(*__first == __value)) {
          *__result = *__first;
          ++__result;
        }
      return __result;
    }
# 1003 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter, _Predicate>
    _OutputIter
    remove_copy_if(_InputIter __first, _InputIter __last,
                   _OutputIter __result, _Predicate __pred)
    {

     
     

     


      for ( ; __first != __last; ++__first)
        if (!__pred(*__first)) {
          *__result = *__first;
          ++__result;
        }
      return __result;
    }
# 1039 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Tp>
    _ForwardIter
    remove(_ForwardIter __first, _ForwardIter __last,
           const _Tp& __value)
    {

     
     

     


      __first = find(__first, __last, __value);
      _ForwardIter __i = __first;
      return __first == __last ? __first
                               : remove_copy(++__i, __last, __first, __value);
    }
# 1073 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Predicate>
    _ForwardIter
    remove_if(_ForwardIter __first, _ForwardIter __last,
              _Predicate __pred)
    {

     
     


      __first = find_if(__first, __last, __pred);
      _ForwardIter __i = __first;
      return __first == __last ? __first
                               : remove_copy_if(++__i, __last, __first, __pred);
    }







  template< _InputIter, _OutputIter>
    _OutputIter
    __unique_copy(_InputIter __first, _InputIter __last,
                  _OutputIter __result,
                  output_iterator_tag)
    {

      iterator_traits<_InputIter>::value_type __value = *__first;
      *__result = __value;
      while (++__first != __last)
        if (!(__value == *__first)) {
          __value = *__first;
          *++__result = __value;
        }
      return ++__result;
    }







  template< _InputIter, _ForwardIter>
    _ForwardIter
    __unique_copy(_InputIter __first, _InputIter __last,
                  _ForwardIter __result,
                  forward_iterator_tag)
    {

      *__result = *__first;
      while (++__first != __last)
        if (!(*__result == *__first))
          *++__result = *__first;
      return ++__result;
    }
# 1143 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter>
    inline _OutputIter
    unique_copy(_InputIter __first, _InputIter __last,
                _OutputIter __result)
    {

     
     

     


      typedef iterator_traits<_OutputIter>::iterator_category _IterType;

      if (__first == __last) return __result;
      return __unique_copy(__first, __last, __result, _IterType());
    }
# 1168 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter, _BinaryPredicate>
    _OutputIter
    __unique_copy(_InputIter __first, _InputIter __last,
                  _OutputIter __result,
                  _BinaryPredicate __binary_pred,
                  output_iterator_tag)
    {

     



      iterator_traits<_InputIter>::value_type __value = *__first;
      *__result = __value;
      while (++__first != __last)
        if (!__binary_pred(__value, *__first)) {
          __value = *__first;
          *++__result = __value;
        }
      return ++__result;
    }
# 1197 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _ForwardIter, _BinaryPredicate>
    _ForwardIter
    __unique_copy(_InputIter __first, _InputIter __last,
                  _ForwardIter __result,
                  _BinaryPredicate __binary_pred,
                  forward_iterator_tag)
    {

     



      *__result = *__first;
      while (++__first != __last)
        if (!__binary_pred(*__result, *__first)) *++__result = *__first;
      return ++__result;
    }
# 1230 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _OutputIter, _BinaryPredicate>
    inline _OutputIter
    unique_copy(_InputIter __first, _InputIter __last,
                _OutputIter __result,
                _BinaryPredicate __binary_pred)
    {

     
     


      typedef iterator_traits<_OutputIter>::iterator_category _IterType;

      if (__first == __last) return __result;
      return __unique_copy(__first, __last,
__result, __binary_pred, _IterType());
    }
# 1261 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter>
    _ForwardIter
    unique(_ForwardIter __first, _ForwardIter __last)
    {

         
         


          __first = adjacent_find(__first, __last);
          return unique_copy(__first, __last, __first);
    }
# 1288 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _BinaryPredicate>
    _ForwardIter
    unique(_ForwardIter __first, _ForwardIter __last,
           _BinaryPredicate __binary_pred)
    {

     
     



      __first = adjacent_find(__first, __last, __binary_pred);
      return unique_copy(__first, __last, __first, __binary_pred);
    }







  template< _BidirectionalIter>
    void
    __reverse(_BidirectionalIter __first, _BidirectionalIter __last,
                          bidirectional_iterator_tag)
    {
          while (true)
            if (__first == __last || __first == --__last)
                  return;
            else
                  iter_swap(__first++, __last);
    }







  template< _RandomAccessIter>
    void
    __reverse(_RandomAccessIter __first, _RandomAccessIter __last,
                          random_access_iterator_tag)
    {
          while (__first < __last)
            iter_swap(__first++, --__last);
    }
# 1347 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _BidirectionalIter>
    inline void
    reverse(_BidirectionalIter __first, _BidirectionalIter __last)
    {

         

          __reverse(__first, __last, __iterator_category(__first));
    }
# 1372 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _BidirectionalIter, _OutputIter>
    _OutputIter
    reverse_copy(_BidirectionalIter __first, _BidirectionalIter __last,
                             _OutputIter __result)
    {

     
     


      while (__first != __last) {
        --__last;
        *__result = *__last;
        ++__result;
      }
      return __result;
    }







  template< _EuclideanRingElement>
    _EuclideanRingElement
    __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
    {
      while (__n != 0) {
        _EuclideanRingElement __t = __m % __n;
        __m = __n;
        __n = __t;
      }
      return __m;
    }






  template< _ForwardIter>
    void
    __rotate(_ForwardIter __first,
             _ForwardIter __middle,
             _ForwardIter __last,
              forward_iterator_tag)
    {
      if ((__first == __middle) || (__last == __middle))
        return;

      _ForwardIter __first2 = __middle;
      do {
        swap(*__first++, *__first2++);
        if (__first == __middle)
          __middle = __first2;
      } while (__first2 != __last);

      __first2 = __middle;

      while (__first2 != __last) {
        swap(*__first++, *__first2++);
        if (__first == __middle)
          __middle = __first2;
        else if (__first2 == __last)
          __first2 = __middle;
      }
    }






  template< _BidirectionalIter>
    void
    __rotate(_BidirectionalIter __first,
             _BidirectionalIter __middle,
             _BidirectionalIter __last,
              bidirectional_iterator_tag)
    {

     


      if ((__first == __middle) || (__last == __middle))
        return;

      __reverse(__first, __middle, bidirectional_iterator_tag());
      __reverse(__middle, __last, bidirectional_iterator_tag());

      while (__first != __middle && __middle != __last)
        swap (*__first++, *--__last);

      if (__first == __middle) {
        __reverse(__middle, __last, bidirectional_iterator_tag());
      }
      else {
        __reverse(__first, __middle, bidirectional_iterator_tag());
      }
    }






  template< _RandomAccessIter>
    void
    __rotate(_RandomAccessIter __first,
             _RandomAccessIter __middle,
             _RandomAccessIter __last,
             random_access_iterator_tag)
    {

     


      if ((__first == __middle) || (__last == __middle))
        return;

      typedef iterator_traits<_RandomAccessIter>::difference_type _Distance;
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;

      _Distance __n = __last - __first;
      _Distance __k = __middle - __first;
      _Distance __l = __n - __k;

      if (__k == __l) {
        swap_ranges(__first, __middle, __middle);
        return;
      }

      _Distance __d = __gcd(__n, __k);

      for (_Distance __i = 0; __i < __d; __i++) {
        _ValueType __tmp = *__first;
        _RandomAccessIter __p = __first;

        if (__k < __l) {
          for (_Distance __j = 0; __j < __l/__d; __j++) {
            if (__p > __first + __l) {
              *__p = *(__p - __l);
              __p -= __l;
            }

            *__p = *(__p + __k);
            __p += __k;
          }
        }

        else {
          for (_Distance __j = 0; __j < __k/__d - 1; __j ++) {
            if (__p < __last - __k) {
              *__p = *(__p + __k);
              __p += __k;
            }

            *__p = * (__p - __l);
            __p -= __l;
          }
        }

        *__p = __tmp;
        ++__first;
      }
    }
# 1549 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter>
    inline void
    rotate(_ForwardIter __first, _ForwardIter __middle, _ForwardIter __last)
    {

     

      typedef iterator_traits<_ForwardIter>::iterator_category _IterType;
      __rotate(__first, __middle, __last, _IterType());
    }
# 1570 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _OutputIter>
    _OutputIter
    rotate_copy(_ForwardIter __first, _ForwardIter __middle,
                _ForwardIter __last, _OutputIter __result)
    {

     
     


      return copy(__first, __middle, copy(__middle, __last, __result));
    }
# 1593 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _Distance>
    inline _Distance
    __random_number(_Distance __n)
    {

      return lrand48() % __n;



    }
# 1613 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter>
    inline void
    random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last)
    {

     


      if (__first == __last) return;
      for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
        iter_swap(__i, __first + __random_number((__i - __first) + 1));
    }
# 1635 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter, _RandomNumberGenerator>
    void
    random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last,
                   _RandomNumberGenerator& __rand)
    {

     


      if (__first == __last) return;
      for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
        iter_swap(__i, __first + __rand((__i - __first) + 1));
    }







  template< _ForwardIter, _Predicate>
    _ForwardIter
    __partition(_ForwardIter __first, _ForwardIter __last,
                _Predicate __pred,
                forward_iterator_tag)
    {
      if (__first == __last) return __first;

      while (__pred(*__first))
        if (++__first == __last) return __first;

      _ForwardIter __next = __first;

      while (++__next != __last)
        if (__pred(*__next)) {
          swap(*__first, *__next);
          ++__first;
        }

      return __first;
    }






  template< _BidirectionalIter, _Predicate>
    _BidirectionalIter
    __partition(_BidirectionalIter __first, _BidirectionalIter __last,
                _Predicate __pred,
                bidirectional_iterator_tag)
    {
      while (true) {
        while (true)
          if (__first == __last)
            return __first;
          else if (__pred(*__first))
            ++__first;
          else
            break;
        --__last;
        while (true)
          if (__first == __last)
            return __first;
          else if (!__pred(*__last))
            --__last;
          else
            break;
        iter_swap(__first, __last);
        ++__first;
      }
    }
# 1718 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Predicate>
    inline _ForwardIter
    partition(_ForwardIter __first, _ForwardIter __last,
              _Predicate __pred)
    {

     
     


      return __partition(__first, __last, __pred, __iterator_category(__first));
    }







  template< _ForwardIter, _Predicate, _Distance>
    _ForwardIter
    __inplace_stable_partition(_ForwardIter __first, _ForwardIter __last,
                               _Predicate __pred, _Distance __len)
    {
      if (__len == 1)
        return __pred(*__first) ? __last : __first;
      _ForwardIter __middle = __first;
      advance(__middle, __len / 2);
      _ForwardIter __begin = __inplace_stable_partition(__first, __middle,
                                                        __pred,
                                                        __len / 2);
      _ForwardIter __end = __inplace_stable_partition(__middle, __last,
                                                      __pred,
                                                      __len - __len / 2);
      rotate(__begin, __middle, __end);
      advance(__begin, distance(__middle, __end));
      return __begin;
    }






  template< _ForwardIter, _Pointer, _Predicate,
           _Distance>
    _ForwardIter
    __stable_partition_adaptive(_ForwardIter __first, _ForwardIter __last,
                                _Predicate __pred, _Distance __len,
                                _Pointer __buffer,
                                _Distance __buffer_size)
    {
      if (__len <= __buffer_size) {
        _ForwardIter __result1 = __first;
        _Pointer __result2 = __buffer;
        for ( ; __first != __last ; ++__first)
          if (__pred(*__first)) {
            *__result1 = *__first;
            ++__result1;
          }
          else {
            *__result2 = *__first;
            ++__result2;
          }
        copy(__buffer, __result2, __result1);
        return __result1;
      }
      else {
        _ForwardIter __middle = __first;
        advance(__middle, __len / 2);
        _ForwardIter __begin = __stable_partition_adaptive(__first, __middle,
                                                           __pred,
                                                           __len / 2,
                                                           __buffer, __buffer_size);
        _ForwardIter __end = __stable_partition_adaptive( __middle, __last,
                                                          __pred,
                                                          __len - __len / 2,
                                                          __buffer, __buffer_size);
        rotate(__begin, __middle, __end);
        advance(__begin, distance(__middle, __end));
        return __begin;
      }
    }
# 1811 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter, _Predicate>
    _ForwardIter
    stable_partition(_ForwardIter __first, _ForwardIter __last,
                     _Predicate __pred)
    {

     
     


      if (__first == __last)
        return __first;
      else
      {
        typedef iterator_traits<_ForwardIter>::value_type _ValueType;
        typedef iterator_traits<_ForwardIter>::difference_type _DistanceType;

        _Temporary_buffer<_ForwardIter, _ValueType> __buf(__first, __last);
        if (__buf.size() > 0)
          return __stable_partition_adaptive(__first, __last, __pred,
                                             _DistanceType(__buf.requested_size()),
                                             __buf.begin(), __buf.size());
        else
          return __inplace_stable_partition(__first, __last, __pred,
                                            _DistanceType(__buf.requested_size()));
      }
    }






  template< _RandomAccessIter, _Tp>
    _RandomAccessIter
    __unguarded_partition(_RandomAccessIter __first, _RandomAccessIter __last,
                          _Tp __pivot)
    {
      while (true) {
        while (*__first < __pivot)
          ++__first;
        --__last;
        while (__pivot < *__last)
          --__last;
        if (!(__first < __last))
          return __first;
        iter_swap(__first, __last);
        ++__first;
      }
    }






  template< _RandomAccessIter, _Tp, _Compare>
    _RandomAccessIter
    __unguarded_partition(_RandomAccessIter __first, _RandomAccessIter __last,
                          _Tp __pivot, _Compare __comp)
    {
      while (true) {
        while (__comp(*__first, __pivot))
          ++__first;
        --__last;
        while (__comp(__pivot, *__last))
          --__last;
        if (!(__first < __last))
          return __first;
        iter_swap(__first, __last);
        ++__first;
      }
    }
# 1892 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  enum { _M_threshold = 16 };






  template< _RandomAccessIter, _Tp>
    void
    __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val)
    {
      _RandomAccessIter __next = __last;
      --__next;
      while (__val < *__next) {
        *__last = *__next;
        __last = __next;
        --__next;
      }
      *__last = __val;
    }






  template< _RandomAccessIter, _Tp, _Compare>
    void
    __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val, _Compare __comp)
    {
      _RandomAccessIter __next = __last;
      --__next;
      while (__comp(__val, *__next)) {
        *__last = *__next;
        __last = __next;
        --__next;
      }
      *__last = __val;
    }






  template< _RandomAccessIter>
    void
    __insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last)
    {
      if (__first == __last) return;

      for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
      {
        iterator_traits<_RandomAccessIter>::value_type __val = *__i;
        if (__val < *__first) {
          copy_backward(__first, __i, __i + 1);
          *__first = __val;
        }
        else
          __unguarded_linear_insert(__i, __val);
      }
    }






  template< _RandomAccessIter, _Compare>
    void
    __insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                     _Compare __comp)
    {
      if (__first == __last) return;

      for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
      {
        iterator_traits<_RandomAccessIter>::value_type __val = *__i;
        if (__comp(__val, *__first)) {
          copy_backward(__first, __i, __i + 1);
          *__first = __val;
        }
        else
          __unguarded_linear_insert(__i, __val, __comp);
      }
    }






  template< _RandomAccessIter>
    inline void
    __unguarded_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;

      for (_RandomAccessIter __i = __first; __i != __last; ++__i)
        __unguarded_linear_insert(__i, _ValueType(*__i));
    }






  template< _RandomAccessIter, _Compare>
    inline void
    __unguarded_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                               _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;

      for (_RandomAccessIter __i = __first; __i != __last; ++__i)
        __unguarded_linear_insert(__i, _ValueType(*__i), __comp);
    }






  template< _RandomAccessIter>
    void
    __final_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last)
    {
      if (__last - __first > _M_threshold) {
        __insertion_sort(__first, __first + _M_threshold);
        __unguarded_insertion_sort(__first + _M_threshold, __last);
      }
      else
        __insertion_sort(__first, __last);
    }






  template< _RandomAccessIter, _Compare>
    void
    __final_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Compare __comp)
    {
      if (__last - __first > _M_threshold) {
        __insertion_sort(__first, __first + _M_threshold, __comp);
        __unguarded_insertion_sort(__first + _M_threshold, __last, __comp);
      }
      else
        __insertion_sort(__first, __last, __comp);
    }






  template< _Size>
    inline _Size
    __lg(_Size __n)
    {
      _Size __k;
      for (__k = 0; __n != 1; __n >>= 1) ++__k;
      return __k;
    }






  template< _RandomAccessIter, _Size>
    void
    __introsort_loop(_RandomAccessIter __first, _RandomAccessIter __last,
                     _Size __depth_limit)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;

      while (__last - __first > _M_threshold) {
        if (__depth_limit == 0) {
          partial_sort(__first, __last, __last);
          return;
        }
        --__depth_limit;
        _RandomAccessIter __cut =
          __unguarded_partition(__first, __last,
                                _ValueType(__median(*__first,
                                                    *(__first + (__last - __first)/2),
                                                    *(__last - 1))));
        __introsort_loop(__cut, __last, __depth_limit);
        __last = __cut;
      }
    }






  template< _RandomAccessIter, _Size, _Compare>
    void
    __introsort_loop(_RandomAccessIter __first, _RandomAccessIter __last,
                     _Size __depth_limit, _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;

      while (__last - __first > _M_threshold) {
        if (__depth_limit == 0) {
          partial_sort(__first, __last, __last, __comp);
          return;
        }
        --__depth_limit;
        _RandomAccessIter __cut =
          __unguarded_partition(__first, __last,
                                _ValueType(__median(*__first,
                                                    *(__first + (__last - __first)/2),
                                                    *(__last - 1), __comp)),
           __comp);
        __introsort_loop(__cut, __last, __depth_limit, __comp);
        __last = __cut;
      }
    }
# 2124 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter>
    inline void
    sort(_RandomAccessIter __first, _RandomAccessIter __last)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;


     

     

      if (__first != __last) {
        __introsort_loop(__first, __last, __lg(__last - __first) * 2);
        __final_insertion_sort(__first, __last);
      }
    }
# 2150 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter, _Compare>
    inline void
    sort(_RandomAccessIter __first, _RandomAccessIter __last, _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;


     

     

      if (__first != __last) {
        __introsort_loop(__first, __last, __lg(__last - __first) * 2, __comp);
        __final_insertion_sort(__first, __last, __comp);
      }
    }







  template< _RandomAccessIter>
    void
    __inplace_stable_sort(_RandomAccessIter __first, _RandomAccessIter __last)
    {
      if (__last - __first < 15) {
        __insertion_sort(__first, __last);
        return;
      }
      _RandomAccessIter __middle = __first + (__last - __first) / 2;
      __inplace_stable_sort(__first, __middle);
      __inplace_stable_sort(__middle, __last);
      __merge_without_buffer(__first, __middle, __last,
                             __middle - __first,
                             __last - __middle);
    }






  template< _RandomAccessIter, _Compare>
    void
    __inplace_stable_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                          _Compare __comp)
    {
      if (__last - __first < 15) {
        __insertion_sort(__first, __last, __comp);
        return;
      }
      _RandomAccessIter __middle = __first + (__last - __first) / 2;
      __inplace_stable_sort(__first, __middle, __comp);
      __inplace_stable_sort(__middle, __last, __comp);
      __merge_without_buffer(__first, __middle, __last,
                             __middle - __first,
                             __last - __middle,
                             __comp);
    }

  template< _RandomAccessIter1, _RandomAccessIter2,
           _Distance>
    void
    __merge_sort_loop(_RandomAccessIter1 __first, _RandomAccessIter1 __last,
                      _RandomAccessIter2 __result, _Distance __step_size)
    {
      _Distance __two_step = 2 * __step_size;

      while (__last - __first >= __two_step) {
        __result = merge(__first, __first + __step_size,
                         __first + __step_size, __first + __two_step,
                         __result);
        __first += __two_step;
      }

      __step_size = min(_Distance(__last - __first), __step_size);
      merge(__first, __first + __step_size, __first + __step_size, __last,
            __result);
    }

  template< _RandomAccessIter1, _RandomAccessIter2,
           _Distance, _Compare>
    void
    __merge_sort_loop(_RandomAccessIter1 __first, _RandomAccessIter1 __last,
                      _RandomAccessIter2 __result, _Distance __step_size,
                      _Compare __comp)
    {
      _Distance __two_step = 2 * __step_size;

      while (__last - __first >= __two_step) {
        __result = merge(__first, __first + __step_size,
                         __first + __step_size, __first + __two_step,
                         __result,
                         __comp);
        __first += __two_step;
      }
      __step_size = min(_Distance(__last - __first), __step_size);

      merge(__first, __first + __step_size,
            __first + __step_size, __last,
            __result,
            __comp);
    }

  enum { _M_chunk_size = 7 };

  template< _RandomAccessIter, _Distance>
    void
    __chunk_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Distance __chunk_size)
    {
      while (__last - __first >= __chunk_size) {
        __insertion_sort(__first, __first + __chunk_size);
        __first += __chunk_size;
      }
      __insertion_sort(__first, __last);
    }

  template< _RandomAccessIter, _Distance, _Compare>
    void
    __chunk_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Distance __chunk_size, _Compare __comp)
    {
      while (__last - __first >= __chunk_size) {
        __insertion_sort(__first, __first + __chunk_size, __comp);
        __first += __chunk_size;
      }
      __insertion_sort(__first, __last, __comp);
    }

  template< _RandomAccessIter, _Pointer>
    void
    __merge_sort_with_buffer(_RandomAccessIter __first, _RandomAccessIter __last,
                             _Pointer __buffer)
    {
      typedef iterator_traits<_RandomAccessIter>::difference_type _Distance;

      _Distance __len = __last - __first;
      _Pointer __buffer_last = __buffer + __len;

      _Distance __step_size = _M_chunk_size;
      __chunk_insertion_sort(__first, __last, __step_size);

      while (__step_size < __len) {
        __merge_sort_loop(__first, __last, __buffer, __step_size);
        __step_size *= 2;
        __merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
        __step_size *= 2;
      }
    }

  template< _RandomAccessIter, _Pointer, _Compare>
    void
    __merge_sort_with_buffer(_RandomAccessIter __first, _RandomAccessIter __last,
                             _Pointer __buffer, _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIter>::difference_type _Distance;

      _Distance __len = __last - __first;
      _Pointer __buffer_last = __buffer + __len;

      _Distance __step_size = _M_chunk_size;
      __chunk_insertion_sort(__first, __last, __step_size, __comp);

      while (__step_size < __len) {
        __merge_sort_loop(__first, __last, __buffer, __step_size, __comp);
        __step_size *= 2;
        __merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp);
        __step_size *= 2;
      }
    }

  template< _RandomAccessIter, _Pointer, _Distance>
    void
    __stable_sort_adaptive(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Pointer __buffer, _Distance __buffer_size)
    {
      _Distance __len = (__last - __first + 1) / 2;
      _RandomAccessIter __middle = __first + __len;
      if (__len > __buffer_size) {
        __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size);
        __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size);
      }
      else {
        __merge_sort_with_buffer(__first, __middle, __buffer);
        __merge_sort_with_buffer(__middle, __last, __buffer);
      }
      __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
                       _Distance(__last - __middle), __buffer, __buffer_size);
    }

  template< _RandomAccessIter, _Pointer, _Distance,
           _Compare>
    void
    __stable_sort_adaptive(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Pointer __buffer, _Distance __buffer_size,
                           _Compare __comp)
    {
      _Distance __len = (__last - __first + 1) / 2;
      _RandomAccessIter __middle = __first + __len;
      if (__len > __buffer_size) {
        __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size,
                               __comp);
        __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size,
                               __comp);
      }
      else {
        __merge_sort_with_buffer(__first, __middle, __buffer, __comp);
        __merge_sort_with_buffer(__middle, __last, __buffer, __comp);
      }
      __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
                       _Distance(__last - __middle), __buffer, __buffer_size,
                       __comp);
    }
# 2375 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter>
    inline void
    stable_sort(_RandomAccessIter __first, _RandomAccessIter __last)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;
      typedef iterator_traits<_RandomAccessIter>::difference_type _DistanceType;


     

     

      _Temporary_buffer<_RandomAccessIter, _ValueType> buf(__first, __last);
      if (buf.begin() == 0)
        __inplace_stable_sort(__first, __last);
      else
        __stable_sort_adaptive(__first, __last, buf.begin(), _DistanceType(buf.size()));
    }
# 2403 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter, _Compare>
    inline void
    stable_sort(_RandomAccessIter __first, _RandomAccessIter __last, _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;
      typedef iterator_traits<_RandomAccessIter>::difference_type _DistanceType;


     

     


      _Temporary_buffer<_RandomAccessIter, _ValueType> buf(__first, __last);
      if (buf.begin() == 0)
        __inplace_stable_sort(__first, __last, __comp);
      else
        __stable_sort_adaptive(__first, __last, buf.begin(), _DistanceType(buf.size()),
                               __comp);
    }
# 2433 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter>
    void
    partial_sort(_RandomAccessIter __first,
                 _RandomAccessIter __middle,
                 _RandomAccessIter __last)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;


     

     

      make_heap(__first, __middle);
      for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
        if (*__i < *__first)
          __pop_heap(__first, __middle, __i, _ValueType(*__i));
      sort_heap(__first, __middle);
    }
# 2463 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter, _Compare>
    void
    partial_sort(_RandomAccessIter __first,
                 _RandomAccessIter __middle,
                 _RandomAccessIter __last,
                 _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;


     

     


      make_heap(__first, __middle, __comp);
      for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
        if (__comp(*__i, *__first))
          __pop_heap(__first, __middle, __i, _ValueType(*__i), __comp);
      sort_heap(__first, __middle, __comp);
    }
# 2495 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _RandomAccessIter>
    _RandomAccessIter
    partial_sort_copy(_InputIter __first, _InputIter __last,
                      _RandomAccessIter __result_first,
                      _RandomAccessIter __result_last)
    {
      typedef iterator_traits<_InputIter>::value_type _InputValueType;
      typedef iterator_traits<_RandomAccessIter>::value_type _OutputValueType;
      typedef iterator_traits<_RandomAccessIter>::difference_type _DistanceType;


     
     
     
     

      if (__result_first == __result_last) return __result_last;
      _RandomAccessIter __result_real_last = __result_first;
      while(__first != __last && __result_real_last != __result_last) {
        *__result_real_last = *__first;
        ++__result_real_last;
        ++__first;
      }
      make_heap(__result_first, __result_real_last);
      while (__first != __last) {
        if (*__first < *__result_first)
          __adjust_heap(__result_first, _DistanceType(0),
                        _DistanceType(__result_real_last - __result_first),
                        _InputValueType(*__first));
        ++__first;
      }
      sort_heap(__result_first, __result_real_last);
      return __result_real_last;
    }
# 2541 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _InputIter, _RandomAccessIter, _Compare>
    _RandomAccessIter
    partial_sort_copy(_InputIter __first, _InputIter __last,
                      _RandomAccessIter __result_first,
                      _RandomAccessIter __result_last,
                      _Compare __comp)
    {
      typedef iterator_traits<_InputIter>::value_type _InputValueType;
      typedef iterator_traits<_RandomAccessIter>::value_type _OutputValueType;
      typedef iterator_traits<_RandomAccessIter>::difference_type _DistanceType;


     
     
     
     


      if (__result_first == __result_last) return __result_last;
      _RandomAccessIter __result_real_last = __result_first;
      while(__first != __last && __result_real_last != __result_last) {
        *__result_real_last = *__first;
        ++__result_real_last;
        ++__first;
      }
      make_heap(__result_first, __result_real_last, __comp);
      while (__first != __last) {
        if (__comp(*__first, *__result_first))
          __adjust_heap(__result_first, _DistanceType(0),
                        _DistanceType(__result_real_last - __result_first),
                        _InputValueType(*__first),
                        __comp);
        ++__first;
      }
      sort_heap(__result_first, __result_real_last, __comp);
      return __result_real_last;
    }
# 2588 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter>
    void
    nth_element(_RandomAccessIter __first,
                _RandomAccessIter __nth,
                _RandomAccessIter __last)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;


     
     

      while (__last - __first > 3) {
        _RandomAccessIter __cut =
          __unguarded_partition(__first, __last,
                                _ValueType(__median(*__first,
                                                    *(__first + (__last - __first)/2),
                                                    *(__last - 1))));
        if (__cut <= __nth)
          __first = __cut;
        else
          __last = __cut;
      }
      __insertion_sort(__first, __last);
    }
# 2624 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _RandomAccessIter, _Compare>
    void
    nth_element(_RandomAccessIter __first,
                _RandomAccessIter __nth,
                _RandomAccessIter __last,
                            _Compare __comp)
    {
      typedef iterator_traits<_RandomAccessIter>::value_type _ValueType;


     
     


      while (__last - __first > 3) {
        _RandomAccessIter __cut =
          __unguarded_partition(__first, __last,
                                _ValueType(__median(*__first,
                                                    *(__first + (__last - __first)/2),
                                                    *(__last - 1),
                                                    __comp)),
                                __comp);
        if (__cut <= __nth)
          __first = __cut;
        else
          __last = __cut;
      }
      __insertion_sort(__first, __last, __comp);
    }




  template< _ForwardIter, _Tp>
    _ForwardIter
    lower_bound(_ForwardIter __first, _ForwardIter __last, const _Tp& __val)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef iterator_traits<_ForwardIter>::difference_type _DistanceType;






     
     
     

      _DistanceType __len = distance(__first, __last);
      _DistanceType __half;
      _ForwardIter __middle;

      while (__len > 0) {
        __half = __len >> 1;
        __middle = __first;
        advance(__middle, __half);
        if (*__middle < __val) {
          __first = __middle;
          ++__first;
          __len = __len - __half - 1;
        }
        else
          __len = __half;
      }
      return __first;
    }

  template< _ForwardIter, _Tp, _Compare>
    _ForwardIter
    lower_bound(_ForwardIter __first, _ForwardIter __last,
                const _Tp& __val, _Compare __comp)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef iterator_traits<_ForwardIter>::difference_type _DistanceType;


     
     

      _DistanceType __len = distance(__first, __last);
      _DistanceType __half;
      _ForwardIter __middle;

      while (__len > 0) {
        __half = __len >> 1;
        __middle = __first;
        advance(__middle, __half);
        if (__comp(*__middle, __val)) {
          __first = __middle;
          ++__first;
          __len = __len - __half - 1;
        }
        else
          __len = __half;
      }
      return __first;
    }

  template< _ForwardIter, _Tp>
    _ForwardIter
    upper_bound(_ForwardIter __first, _ForwardIter __last, const _Tp& __val)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef iterator_traits<_ForwardIter>::difference_type _DistanceType;



     
     
     

      _DistanceType __len = distance(__first, __last);
      _DistanceType __half;
      _ForwardIter __middle;

      while (__len > 0) {
        __half = __len >> 1;
        __middle = __first;
        advance(__middle, __half);
        if (__val < *__middle)
          __len = __half;
        else {
          __first = __middle;
          ++__first;
          __len = __len - __half - 1;
        }
      }
      return __first;
    }

  template< _ForwardIter, _Tp, _Compare>
    _ForwardIter
    upper_bound(_ForwardIter __first, _ForwardIter __last,
                const _Tp& __val, _Compare __comp)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef iterator_traits<_ForwardIter>::difference_type _DistanceType;


     
     

      _DistanceType __len = distance(__first, __last);
      _DistanceType __half;
      _ForwardIter __middle;

      while (__len > 0) {
        __half = __len >> 1;
        __middle = __first;
        advance(__middle, __half);
        if (__comp(__val, *__middle))
          __len = __half;
        else {
          __first = __middle;
          ++__first;
          __len = __len - __half - 1;
        }
      }
      return __first;
    }

  template< _ForwardIter, _Tp>
    pair<_ForwardIter, _ForwardIter>
    equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef iterator_traits<_ForwardIter>::difference_type _DistanceType;



     
     
     

      _DistanceType __len = distance(__first, __last);
      _DistanceType __half;
      _ForwardIter __middle, __left, __right;

      while (__len > 0) {
        __half = __len >> 1;
        __middle = __first;
        advance(__middle, __half);
        if (*__middle < __val) {
          __first = __middle;
          ++__first;
          __len = __len - __half - 1;
        }
        else if (__val < *__middle)
          __len = __half;
        else {
          __left = lower_bound(__first, __middle, __val);
          advance(__first, __len);
          __right = upper_bound(++__middle, __first, __val);
          return pair<_ForwardIter, _ForwardIter>(__left, __right);
        }
      }
      return pair<_ForwardIter, _ForwardIter>(__first, __first);
    }

  template< _ForwardIter, _Tp, _Compare>
    pair<_ForwardIter, _ForwardIter>
    equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
                _Compare __comp)
    {
      typedef iterator_traits<_ForwardIter>::value_type _ValueType;
      typedef iterator_traits<_ForwardIter>::difference_type _DistanceType;


     
     
     

      _DistanceType __len = distance(__first, __last);
      _DistanceType __half;
      _ForwardIter __middle, __left, __right;

      while (__len > 0) {
        __half = __len >> 1;
        __middle = __first;
        advance(__middle, __half);
        if (__comp(*__middle, __val)) {
          __first = __middle;
          ++__first;
          __len = __len - __half - 1;
        }
        else if (__comp(__val, *__middle))
          __len = __half;
        else {
          __left = lower_bound(__first, __middle, __val, __comp);
          advance(__first, __len);
          __right = upper_bound(++__middle, __first, __val, __comp);
          return pair<_ForwardIter, _ForwardIter>(__left, __right);
        }
      }
      return pair<_ForwardIter, _ForwardIter>(__first, __first);
    }

  template< _ForwardIter, _Tp>
    bool
    binary_search(_ForwardIter __first, _ForwardIter __last,
                  const _Tp& __val)
    {


     
     

     

      _ForwardIter __i = lower_bound(__first, __last, __val);
      return __i != __last && !(__val < *__i);
    }

  template< _ForwardIter, _Tp, _Compare>
    bool
    binary_search(_ForwardIter __first, _ForwardIter __last,
                  const _Tp& __val, _Compare __comp)
    {

     
     

     


      _ForwardIter __i = lower_bound(__first, __last, __val, __comp);
      return __i != __last && !__comp(__val, *__i);
    }



  template< _InputIter1, _InputIter2, _OutputIter>
    _OutputIter
    merge(_InputIter1 __first1, _InputIter1 __last1,
          _InputIter2 __first2, _InputIter2 __last2,
          _OutputIter __result)
    {

     
     
     

     


     


      while (__first1 != __last1 && __first2 != __last2) {
        if (*__first2 < *__first1) {
          *__result = *__first2;
          ++__first2;
        }
        else {
          *__result = *__first1;
          ++__first1;
        }
        ++__result;
      }
      return copy(__first2, __last2, copy(__first1, __last1, __result));
    }

  template< _InputIter1, _InputIter2, _OutputIter,
           _Compare>
    _OutputIter
    merge(_InputIter1 __first1, _InputIter1 __last1,
          _InputIter2 __first2, _InputIter2 __last2,
          _OutputIter __result, _Compare __comp)
    {

     
     
     


     

     



      while (__first1 != __last1 && __first2 != __last2) {
        if (__comp(*__first2, *__first1)) {
          *__result = *__first2;
          ++__first2;
        }
        else {
          *__result = *__first1;
          ++__first1;
        }
        ++__result;
      }
      return copy(__first2, __last2, copy(__first1, __last1, __result));
    }



  template< _BidirectionalIter, _Distance>
    void
    __merge_without_buffer(_BidirectionalIter __first,
                           _BidirectionalIter __middle,
                           _BidirectionalIter __last,
                           _Distance __len1, _Distance __len2)
    {
      if (__len1 == 0 || __len2 == 0)
        return;
      if (__len1 + __len2 == 2) {
        if (*__middle < *__first)
              iter_swap(__first, __middle);
        return;
      }
      _BidirectionalIter __first_cut = __first;
      _BidirectionalIter __second_cut = __middle;
      _Distance __len11 = 0;
      _Distance __len22 = 0;
      if (__len1 > __len2) {
        __len11 = __len1 / 2;
        advance(__first_cut, __len11);
        __second_cut = lower_bound(__middle, __last, *__first_cut);
        __len22 = distance(__middle, __second_cut);
      }
      else {
        __len22 = __len2 / 2;
        advance(__second_cut, __len22);
        __first_cut = upper_bound(__first, __middle, *__second_cut);
        __len11 = distance(__first, __first_cut);
      }
      rotate(__first_cut, __middle, __second_cut);
      _BidirectionalIter __new_middle = __first_cut;
      advance(__new_middle, distance(__middle, __second_cut));
      __merge_without_buffer(__first, __first_cut, __new_middle,
                             __len11, __len22);
      __merge_without_buffer(__new_middle, __second_cut, __last,
                             __len1 - __len11, __len2 - __len22);
    }

  template< _BidirectionalIter, _Distance, _Compare>
    void
    __merge_without_buffer(_BidirectionalIter __first,
                           _BidirectionalIter __middle,
                           _BidirectionalIter __last,
                           _Distance __len1, _Distance __len2,
                           _Compare __comp)
    {
      if (__len1 == 0 || __len2 == 0)
        return;
      if (__len1 + __len2 == 2) {
        if (__comp(*__middle, *__first))
              iter_swap(__first, __middle);
        return;
      }
      _BidirectionalIter __first_cut = __first;
      _BidirectionalIter __second_cut = __middle;
      _Distance __len11 = 0;
      _Distance __len22 = 0;
      if (__len1 > __len2) {
        __len11 = __len1 / 2;
        advance(__first_cut, __len11);
        __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
        __len22 = distance(__middle, __second_cut);
      }
      else {
        __len22 = __len2 / 2;
        advance(__second_cut, __len22);
        __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
        __len11 = distance(__first, __first_cut);
      }
      rotate(__first_cut, __middle, __second_cut);
      _BidirectionalIter __new_middle = __first_cut;
      advance(__new_middle, distance(__middle, __second_cut));
      __merge_without_buffer(__first, __first_cut, __new_middle,
                             __len11, __len22, __comp);
      __merge_without_buffer(__new_middle, __second_cut, __last,
                             __len1 - __len11, __len2 - __len22, __comp);
    }

  template< _BidirectionalIter1, _BidirectionalIter2,
           _Distance>
    _BidirectionalIter1
    __rotate_adaptive(_BidirectionalIter1 __first,
                      _BidirectionalIter1 __middle,
                      _BidirectionalIter1 __last,
                      _Distance __len1, _Distance __len2,
                      _BidirectionalIter2 __buffer,
                      _Distance __buffer_size)
    {
      _BidirectionalIter2 __buffer_end;
      if (__len1 > __len2 && __len2 <= __buffer_size) {
        __buffer_end = copy(__middle, __last, __buffer);
        copy_backward(__first, __middle, __last);
        return copy(__buffer, __buffer_end, __first);
      }
      else if (__len1 <= __buffer_size) {
        __buffer_end = copy(__first, __middle, __buffer);
        copy(__middle, __last, __first);
        return copy_backward(__buffer, __buffer_end, __last);
      }
      else {
        rotate(__first, __middle, __last);
        advance(__first, distance(__middle, __last));
        return __first;
      }
    }

  template< _BidirectionalIter1, _BidirectionalIter2,
           _BidirectionalIter3>
    _BidirectionalIter3
    __merge_backward(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
                     _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
                     _BidirectionalIter3 __result)
    {
      if (__first1 == __last1)
        return copy_backward(__first2, __last2, __result);
      if (__first2 == __last2)
        return copy_backward(__first1, __last1, __result);
      --__last1;
      --__last2;
      while (true) {
        if (*__last2 < *__last1) {
          *--__result = *__last1;
          if (__first1 == __last1)
            return copy_backward(__first2, ++__last2, __result);
          --__last1;
        }
        else {
          *--__result = *__last2;
          if (__first2 == __last2)
            return copy_backward(__first1, ++__last1, __result);
          --__last2;
        }
      }
    }

  template< _BidirectionalIter1, _BidirectionalIter2,
           _BidirectionalIter3, _Compare>
    _BidirectionalIter3
    __merge_backward(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
                     _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
                     _BidirectionalIter3 __result,
                     _Compare __comp)
    {
      if (__first1 == __last1)
        return copy_backward(__first2, __last2, __result);
      if (__first2 == __last2)
        return copy_backward(__first1, __last1, __result);
      --__last1;
      --__last2;
      while (true) {
        if (__comp(*__last2, *__last1)) {
          *--__result = *__last1;
          if (__first1 == __last1)
            return copy_backward(__first2, ++__last2, __result);
          --__last1;
        }
        else {
          *--__result = *__last2;
          if (__first2 == __last2)
            return copy_backward(__first1, ++__last1, __result);
          --__last2;
        }
      }
    }

  template< _BidirectionalIter, _Distance, _Pointer>
    void
    __merge_adaptive(_BidirectionalIter __first,
                     _BidirectionalIter __middle,
                     _BidirectionalIter __last,
                     _Distance __len1, _Distance __len2,
                     _Pointer __buffer, _Distance __buffer_size)
    {
          if (__len1 <= __len2 && __len1 <= __buffer_size) {
            _Pointer __buffer_end = copy(__first, __middle, __buffer);
            merge(__buffer, __buffer_end, __middle, __last, __first);
          }
          else if (__len2 <= __buffer_size) {
            _Pointer __buffer_end = copy(__middle, __last, __buffer);
            __merge_backward(__first, __middle, __buffer, __buffer_end, __last);
          }
          else {
            _BidirectionalIter __first_cut = __first;
            _BidirectionalIter __second_cut = __middle;
            _Distance __len11 = 0;
            _Distance __len22 = 0;
            if (__len1 > __len2) {
                  __len11 = __len1 / 2;
                  advance(__first_cut, __len11);
                  __second_cut = lower_bound(__middle, __last, *__first_cut);
                  __len22 = distance(__middle, __second_cut);
            }
            else {
                  __len22 = __len2 / 2;
                  advance(__second_cut, __len22);
                  __first_cut = upper_bound(__first, __middle, *__second_cut);
                  __len11 = distance(__first, __first_cut);
            }
            _BidirectionalIter __new_middle =
                  __rotate_adaptive(__first_cut, __middle, __second_cut,
                                    __len1 - __len11, __len22, __buffer,
                                    __buffer_size);
            __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                             __len22, __buffer, __buffer_size);
            __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                             __len2 - __len22, __buffer, __buffer_size);
          }
    }

  template< _BidirectionalIter, _Distance, _Pointer,
           _Compare>
    void
    __merge_adaptive(_BidirectionalIter __first,
                     _BidirectionalIter __middle,
                     _BidirectionalIter __last,
                     _Distance __len1, _Distance __len2,
                     _Pointer __buffer, _Distance __buffer_size,
                     _Compare __comp)
    {
          if (__len1 <= __len2 && __len1 <= __buffer_size) {
            _Pointer __buffer_end = copy(__first, __middle, __buffer);
            merge(__buffer, __buffer_end, __middle, __last, __first, __comp);
          }
          else if (__len2 <= __buffer_size) {
            _Pointer __buffer_end = copy(__middle, __last, __buffer);
            __merge_backward(__first, __middle, __buffer, __buffer_end, __last,
                                             __comp);
          }
          else {
            _BidirectionalIter __first_cut = __first;
            _BidirectionalIter __second_cut = __middle;
            _Distance __len11 = 0;
            _Distance __len22 = 0;
            if (__len1 > __len2) {
                  __len11 = __len1 / 2;
                  advance(__first_cut, __len11);
                  __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
                  __len22 = distance(__middle, __second_cut);
            }
            else {
                  __len22 = __len2 / 2;
                  advance(__second_cut, __len22);
                  __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
                  __len11 = distance(__first, __first_cut);
            }
            _BidirectionalIter __new_middle =
                  __rotate_adaptive(__first_cut, __middle, __second_cut,
                                    __len1 - __len11, __len22, __buffer,
                                    __buffer_size);
            __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                             __len22, __buffer, __buffer_size, __comp);
            __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                             __len2 - __len22, __buffer, __buffer_size, __comp);
          }
    }

  template< _BidirectionalIter>
    void
    inplace_merge(_BidirectionalIter __first,
                  _BidirectionalIter __middle,
                  _BidirectionalIter __last)
    {
      typedef iterator_traits<_BidirectionalIter>::value_type
          _ValueType;
      typedef iterator_traits<_BidirectionalIter>::difference_type
          _DistanceType;


     

     

      if (__first == __middle || __middle == __last)
        return;

      _DistanceType __len1 = distance(__first, __middle);
      _DistanceType __len2 = distance(__middle, __last);

      _Temporary_buffer<_BidirectionalIter, _ValueType> __buf(__first, __last);
      if (__buf.begin() == 0)
        __merge_without_buffer(__first, __middle, __last, __len1, __len2);
      else
        __merge_adaptive(__first, __middle, __last, __len1, __len2,
                         __buf.begin(), _DistanceType(__buf.size()));
    }

  template< _BidirectionalIter, _Compare>
    void
    inplace_merge(_BidirectionalIter __first,
                  _BidirectionalIter __middle,
                  _BidirectionalIter __last,
                  _Compare __comp)
    {
      typedef iterator_traits<_BidirectionalIter>::value_type
          _ValueType;
      typedef iterator_traits<_BidirectionalIter>::difference_type
          _DistanceType;


     

     


      if (__first == __middle || __middle == __last)
        return;

      _DistanceType __len1 = distance(__first, __middle);
      _DistanceType __len2 = distance(__middle, __last);

      _Temporary_buffer<_BidirectionalIter, _ValueType> __buf(__first, __last);
      if (__buf.begin() == 0)
        __merge_without_buffer(__first, __middle, __last, __len1, __len2, __comp);
      else
        __merge_adaptive(__first, __middle, __last, __len1, __len2,
                         __buf.begin(), _DistanceType(__buf.size()),
                         __comp);
    }






  template< _InputIter1, _InputIter2>
    bool
    includes(_InputIter1 __first1, _InputIter1 __last1,
             _InputIter2 __first2, _InputIter2 __last2)
    {

     
     
     


     


      while (__first1 != __last1 && __first2 != __last2)
        if (*__first2 < *__first1)
          return false;
        else if(*__first1 < *__first2)
          ++__first1;
        else
          ++__first1, ++__first2;

      return __first2 == __last2;
    }

  template< _InputIter1, _InputIter2, _Compare>
    bool
    includes(_InputIter1 __first1, _InputIter1 __last1,
             _InputIter2 __first2, _InputIter2 __last2, _Compare __comp)
    {

     
     
     


     



      while (__first1 != __last1 && __first2 != __last2)
        if (__comp(*__first2, *__first1))
          return false;
        else if(__comp(*__first1, *__first2))
          ++__first1;
        else
          ++__first1, ++__first2;

      return __first2 == __last2;
    }

  template< _InputIter1, _InputIter2, _OutputIter>
    _OutputIter
    set_union(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2, _InputIter2 __last2,
              _OutputIter __result)
    {

     
     
     

     


     


      while (__first1 != __last1 && __first2 != __last2) {
        if (*__first1 < *__first2) {
          *__result = *__first1;
          ++__first1;
        }
        else if (*__first2 < *__first1) {
          *__result = *__first2;
          ++__first2;
        }
        else {
          *__result = *__first1;
          ++__first1;
          ++__first2;
        }
        ++__result;
      }
      return copy(__first2, __last2, copy(__first1, __last1, __result));
    }

  template< _InputIter1, _InputIter2, _OutputIter,
           _Compare>
    _OutputIter
    set_union(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2, _InputIter2 __last2,
              _OutputIter __result, _Compare __comp)
    {

     
     
     


     

     



      while (__first1 != __last1 && __first2 != __last2) {
        if (__comp(*__first1, *__first2)) {
          *__result = *__first1;
          ++__first1;
        }
        else if (__comp(*__first2, *__first1)) {
          *__result = *__first2;
          ++__first2;
        }
        else {
          *__result = *__first1;
          ++__first1;
          ++__first2;
        }
        ++__result;
      }
      return copy(__first2, __last2, copy(__first1, __last1, __result));
    }

  template< _InputIter1, _InputIter2, _OutputIter>
    _OutputIter
    set_intersection(_InputIter1 __first1, _InputIter1 __last1,
                     _InputIter2 __first2, _InputIter2 __last2,
                     _OutputIter __result)
    {

     
     
     

     


     


      while (__first1 != __last1 && __first2 != __last2)
        if (*__first1 < *__first2)
          ++__first1;
        else if (*__first2 < *__first1)
          ++__first2;
        else {
          *__result = *__first1;
          ++__first1;
          ++__first2;
          ++__result;
        }
      return __result;
    }

  template< _InputIter1, _InputIter2, _OutputIter,
           _Compare>
    _OutputIter
    set_intersection(_InputIter1 __first1, _InputIter1 __last1,
                     _InputIter2 __first2, _InputIter2 __last2,
                     _OutputIter __result, _Compare __comp)
    {

     
     
     


     

     



      while (__first1 != __last1 && __first2 != __last2)
        if (__comp(*__first1, *__first2))
          ++__first1;
        else if (__comp(*__first2, *__first1))
          ++__first2;
        else {
          *__result = *__first1;
          ++__first1;
          ++__first2;
          ++__result;
        }
      return __result;
    }

  template< _InputIter1, _InputIter2, _OutputIter>
    _OutputIter
    set_difference(_InputIter1 __first1, _InputIter1 __last1,
                   _InputIter2 __first2, _InputIter2 __last2,
                   _OutputIter __result)
    {

     
     
     

     


     


      while (__first1 != __last1 && __first2 != __last2)
        if (*__first1 < *__first2) {
          *__result = *__first1;
          ++__first1;
          ++__result;
        }
        else if (*__first2 < *__first1)
          ++__first2;
        else {
          ++__first1;
          ++__first2;
        }
      return copy(__first1, __last1, __result);
    }

  template< _InputIter1, _InputIter2, _OutputIter,
           _Compare>
    _OutputIter
    set_difference(_InputIter1 __first1, _InputIter1 __last1,
                   _InputIter2 __first2, _InputIter2 __last2,
                   _OutputIter __result, _Compare __comp)
    {

     
     
     


     

     



      while (__first1 != __last1 && __first2 != __last2)
        if (__comp(*__first1, *__first2)) {
          *__result = *__first1;
          ++__first1;
          ++__result;
        }
        else if (__comp(*__first2, *__first1))
          ++__first2;
        else {
          ++__first1;
          ++__first2;
        }
      return copy(__first1, __last1, __result);
    }

  template< _InputIter1, _InputIter2, _OutputIter>
    _OutputIter
    set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2,
                             _OutputIter __result)
    {

     
     
     

     


     


      while (__first1 != __last1 && __first2 != __last2)
        if (*__first1 < *__first2) {
          *__result = *__first1;
          ++__first1;
          ++__result;
        }
        else if (*__first2 < *__first1) {
          *__result = *__first2;
          ++__first2;
          ++__result;
        }
        else {
          ++__first1;
          ++__first2;
        }
      return copy(__first2, __last2, copy(__first1, __last1, __result));
    }

  template< _InputIter1, _InputIter2, _OutputIter,
           _Compare>
    _OutputIter
    set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2,
                             _OutputIter __result,
                             _Compare __comp)
    {

     
     
     


     

     



      while (__first1 != __last1 && __first2 != __last2)
        if (__comp(*__first1, *__first2)) {
          *__result = *__first1;
          ++__first1;
          ++__result;
        }
        else if (__comp(*__first2, *__first1)) {
          *__result = *__first2;
          ++__first2;
          ++__result;
        }
        else {
          ++__first1;
          ++__first2;
        }
      return copy(__first2, __last2, copy(__first1, __last1, __result));
    }




  template< _ForwardIter>
    _ForwardIter
    max_element(_ForwardIter __first, _ForwardIter __last)
    {

     
     


      if (__first == __last) return __first;
      _ForwardIter __result = __first;
      while (++__first != __last)
        if (*__result < *__first)
          __result = __first;
      return __result;
    }

  template< _ForwardIter, _Compare>
    _ForwardIter
    max_element(_ForwardIter __first, _ForwardIter __last,
                _Compare __comp)
    {

     
     



      if (__first == __last) return __first;
      _ForwardIter __result = __first;
      while (++__first != __last)
        if (__comp(*__result, *__first)) __result = __first;
      return __result;
    }

  template< _ForwardIter>
    _ForwardIter
    min_element(_ForwardIter __first, _ForwardIter __last)
    {

     
     


      if (__first == __last) return __first;
      _ForwardIter __result = __first;
      while (++__first != __last)
        if (*__first < *__result)
          __result = __first;
      return __result;
    }

  template< _ForwardIter, _Compare>
    _ForwardIter
    min_element(_ForwardIter __first, _ForwardIter __last,
                _Compare __comp)
    {

     
     



      if (__first == __last) return __first;
      _ForwardIter __result = __first;
      while (++__first != __last)
        if (__comp(*__first, *__result))
          __result = __first;
      return __result;
    }




  template< _BidirectionalIter>
    bool
    next_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
    {

     
     


      if (__first == __last)
        return false;
      _BidirectionalIter __i = __first;
      ++__i;
      if (__i == __last)
        return false;
      __i = __last;
      --__i;

      for(;;) {
        _BidirectionalIter __ii = __i;
        --__i;
        if (*__i < *__ii) {
          _BidirectionalIter __j = __last;
          while (!(*__i < *--__j))
            {}
          iter_swap(__i, __j);
          reverse(__ii, __last);
          return true;
        }
        if (__i == __first) {
          reverse(__first, __last);
          return false;
        }
      }
    }

  template< _BidirectionalIter, _Compare>
    bool
    next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
                     _Compare __comp)
    {

     
     



      if (__first == __last)
        return false;
      _BidirectionalIter __i = __first;
      ++__i;
      if (__i == __last)
        return false;
      __i = __last;
      --__i;

      for(;;) {
        _BidirectionalIter __ii = __i;
        --__i;
        if (__comp(*__i, *__ii)) {
          _BidirectionalIter __j = __last;
          while (!__comp(*__i, *--__j))
            {}
          iter_swap(__i, __j);
          reverse(__ii, __last);
          return true;
        }
        if (__i == __first) {
          reverse(__first, __last);
          return false;
        }
      }
    }

  template< _BidirectionalIter>
    bool
    prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
    {

     
     


      if (__first == __last)
        return false;
      _BidirectionalIter __i = __first;
      ++__i;
      if (__i == __last)
        return false;
      __i = __last;
      --__i;

      for(;;) {
        _BidirectionalIter __ii = __i;
        --__i;
        if (*__ii < *__i) {
          _BidirectionalIter __j = __last;
          while (!(*--__j < *__i))
            {}
          iter_swap(__i, __j);
          reverse(__ii, __last);
          return true;
        }
        if (__i == __first) {
          reverse(__first, __last);
          return false;
        }
      }
    }

  template< _BidirectionalIter, _Compare>
    bool
    prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
                     _Compare __comp)
    {

     
     



      if (__first == __last)
        return false;
      _BidirectionalIter __i = __first;
      ++__i;
      if (__i == __last)
        return false;
      __i = __last;
      --__i;

      for(;;) {
        _BidirectionalIter __ii = __i;
        --__i;
        if (__comp(*__ii, *__i)) {
          _BidirectionalIter __j = __last;
          while (!__comp(*--__j, *__i))
            {}
          iter_swap(__i, __j);
          reverse(__ii, __last);
          return true;
        }
        if (__i == __first) {
          reverse(__first, __last);
          return false;
        }
      }
    }



  template< _InputIter, _ForwardIter>
    _InputIter
    find_first_of(_InputIter __first1, _InputIter __last1,
                  _ForwardIter __first2, _ForwardIter __last2)
    {

     
     
     



      for ( ; __first1 != __last1; ++__first1)
        for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
          if (*__first1 == *__iter)
            return __first1;
      return __last1;
    }

  template< _InputIter, _ForwardIter, _BinaryPredicate>
    _InputIter
    find_first_of(_InputIter __first1, _InputIter __last1,
                  _ForwardIter __first2, _ForwardIter __last2,
                  _BinaryPredicate __comp)
    {

     
     
     


     



      for ( ; __first1 != __last1; ++__first1)
        for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
          if (__comp(*__first1, *__iter))
            return __first1;
      return __last1;
    }
# 3891 "/usr/local/include/g++-v3/bits/stl_algo.h" 3
  template< _ForwardIter1, _ForwardIter2>
    _ForwardIter1
    __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
               _ForwardIter2 __first2, _ForwardIter2 __last2,
               forward_iterator_tag, forward_iterator_tag)
    {
      if (__first2 == __last2)
        return __last1;
      else {
        _ForwardIter1 __result = __last1;
        while (1) {
          _ForwardIter1 __new_result
            = search(__first1, __last1, __first2, __last2);
          if (__new_result == __last1)
            return __result;
          else {
            __result = __new_result;
            __first1 = __new_result;
            ++__first1;
          }
        }
      }
    }

  template< _ForwardIter1, _ForwardIter2,
           _BinaryPredicate>
    _ForwardIter1
    __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
               _ForwardIter2 __first2, _ForwardIter2 __last2,
               forward_iterator_tag, forward_iterator_tag,
               _BinaryPredicate __comp)
    {
      if (__first2 == __last2)
        return __last1;
      else {
        _ForwardIter1 __result = __last1;
        while (1) {
          _ForwardIter1 __new_result
            = search(__first1, __last1, __first2, __last2, __comp);
          if (__new_result == __last1)
            return __result;
          else {
            __result = __new_result;
            __first1 = __new_result;
            ++__first1;
          }
        }
      }
    }


  template< _BidirectionalIter1, _BidirectionalIter2>
    _BidirectionalIter1
    __find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
               _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
               bidirectional_iterator_tag, bidirectional_iterator_tag)
    {

     
     

      typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
      typedef reverse_iterator<_BidirectionalIter2> _RevIter2;

      _RevIter1 __rlast1(__first1);
      _RevIter2 __rlast2(__first2);
      _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
                                   _RevIter2(__last2), __rlast2);

      if (__rresult == __rlast1)
        return __last1;
      else {
        _BidirectionalIter1 __result = __rresult.base();
        advance(__result, -distance(__first2, __last2));
        return __result;
      }
    }

  template< _BidirectionalIter1, _BidirectionalIter2,
           _BinaryPredicate>
    _BidirectionalIter1
    __find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
               _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
               bidirectional_iterator_tag, bidirectional_iterator_tag,
               _BinaryPredicate __comp)
    {

     
     

      typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
      typedef reverse_iterator<_BidirectionalIter2> _RevIter2;

      _RevIter1 __rlast1(__first1);
      _RevIter2 __rlast2(__first2);
      _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
                                   _RevIter2(__last2), __rlast2,
                                   __comp);

      if (__rresult == __rlast1)
        return __last1;
      else {
        _BidirectionalIter1 __result = __rresult.base();
        advance(__result, -distance(__first2, __last2));
        return __result;
      }
    }



  template< _ForwardIter1, _ForwardIter2>
    inline _ForwardIter1
    find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
             _ForwardIter2 __first2, _ForwardIter2 __last2)
    {

     
     
     



      return __find_end(__first1, __last1, __first2, __last2,
                        __iterator_category(__first1),
                        __iterator_category(__first2));
    }

  template< _ForwardIter1, _ForwardIter2,
           _BinaryPredicate>
    inline _ForwardIter1
    find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
             _ForwardIter2 __first2, _ForwardIter2 __last2,
             _BinaryPredicate __comp)
    {

     
     
     



      return __find_end(__first1, __last1, __first2, __last2,
                        __iterator_category(__first1),
                        __iterator_category(__first2),
                        __comp);
    }

}
# 70 "/usr/local/include/g++-v3/algorithm" 2 3
# 57 "/usr/local/include/g++-v3/string" 2 3
# 1 "/usr/local/include/g++-v3/bits/basic_string.tcc" 1 3
# 45 "/usr/local/include/g++-v3/bits/basic_string.tcc" 3

namespace std
{
  template< _CharT, _Traits, _Alloc>
    const basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    _Rep::_S_max_size = (((npos - sizeof(_Rep))/sizeof(_CharT)) - 1) / 4;

  template< _CharT, _Traits, _Alloc>
    const _CharT
    basic_string<_CharT, _Traits, _Alloc>::
    _Rep::_S_terminal = _CharT();

  template< _CharT, _Traits, _Alloc>
    const basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::npos;



  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::_S_empty_rep_storage[
    (sizeof(_Rep) + sizeof(_CharT) + sizeof(size_type) - 1)/sizeof(size_type)];





  template< _CharT, _Traits, _Alloc>
    template< _InIter>
      _CharT*
      basic_string<_CharT, _Traits, _Alloc>::
      _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                   input_iterator_tag)
      {
        if (__beg == __end && __a == _Alloc())
          return _S_empty_rep()._M_refcopy();

        _CharT __buf[100];
        size_type __i = 0;
        while (__beg != __end && __i < sizeof(__buf) / sizeof(_CharT))
          {
            __buf[__i++] = *__beg;
            ++__beg;
          }
        _Rep* __r = _Rep::_S_create(__i, __a);
        traits_type::copy(__r->_M_refdata(), __buf, __i);
        __r->_M_length = __i;
        try
          {



            for (;;)
              {
                _CharT* __p = __r->_M_refdata() + __r->_M_length;
                _CharT* __last = __r->_M_refdata() + __r->_M_capacity;
                for (;;)
                  {
                    if (__beg == __end)
                      {
                        __r->_M_length = __p - __r->_M_refdata();
                        *__p = _Rep::_S_terminal;
                        return __r->_M_refdata();
                      }
                    if (__p == __last)
                      break;
                    *__p++ = *__beg;
                    ++__beg;
                  }

                size_type __len = __p - __r->_M_refdata();
                _Rep* __another = _Rep::_S_create(__len + 1, __a);
                traits_type::copy(__another->_M_refdata(),
                                  __r->_M_refdata(), __len);
                __r->_M_destroy(__a);
                __r = __another;
                __r->_M_length = __len;
              }
          }
        catch(...)
          {
            __r->_M_destroy(__a);
            throw;
          }
        return 0;
      }

  template< _CharT, _Traits, _Alloc>
    template <class _InIter>
      _CharT*
      basic_string<_CharT, _Traits, _Alloc>::
      _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                   forward_iterator_tag)
      {
        size_type __dnew = static_cast<size_type>(distance(__beg, __end));


        if (__builtin_expect(__beg == _InIter(0), 0))
          __throw_logic_error("attempt to create string with null pointer");

        if (__beg == __end && __a == _Alloc())
          return _S_empty_rep()._M_refcopy();


        _Rep* __r = _Rep::_S_create(__dnew, __a);
        try
          { _S_copy_chars(__r->_M_refdata(), __beg, __end); }
        catch(...)
          {
            __r->_M_destroy(__a);
            throw;
          }
        __r->_M_length = __dnew;

        __r->_M_refdata()[__dnew] = _Rep::_S_terminal;
        return __r->_M_refdata();
      }

  template< _CharT, _Traits, _Alloc>
    _CharT*
    basic_string<_CharT, _Traits, _Alloc>::
    _S_construct(size_type __n, _CharT __c, const _Alloc& __a)
    {
      if (__n == 0 && __a == _Alloc())
        return _S_empty_rep()._M_refcopy();


      _Rep* __r = _Rep::_S_create(__n, __a);
      try
        {
          if (__n)
            traits_type::assign(__r->_M_refdata(), __n, __c);
        }
      catch(...)
        {
          __r->_M_destroy(__a);
          throw;
        }
      __r->_M_length = __n;
      __r->_M_refdata()[__n] = _Rep::_S_terminal;
      return __r->_M_refdata();
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str)
    : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(), __str.get_allocator()),
                 __str.get_allocator())
    { }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _Alloc& __a)
    : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a)
    { }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str, size_type __pos, size_type __n)
    : _M_dataplus(_S_construct(__str._M_check(__pos),
                               __str._M_fold(__pos, __n), _Alloc()), _Alloc())
    { }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str, size_type __pos,
                 size_type __n, const _Alloc& __a)
    : _M_dataplus(_S_construct(__str._M_check(__pos),
                               __str._M_fold(__pos, __n), __a), __a)
    { }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _CharT* __s, size_type __n, const _Alloc& __a)
    : _M_dataplus(_S_construct(__s, __s + __n, __a), __a)
    { }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _CharT* __s, const _Alloc& __a)
    : _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) : 0,
                               __a), __a)
    { }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(size_type __n, _CharT __c, const _Alloc& __a)
    : _M_dataplus(_S_construct(__n, __c, __a), __a)
    { }

  template< _CharT, _Traits, _Alloc>
    template< _InputIter>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(_InputIter __beg, _InputIter __end, const _Alloc& __a)
    : _M_dataplus(_S_construct(__beg, __end, __a), __a)
    { }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::assign(const basic_string& __str)
    {
      if (_M_rep() != __str._M_rep())
        {

          allocator_type __a = this->get_allocator();
          _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator());
          _M_rep()->_M_dispose(__a);
          _M_data(__tmp);
        }
      return *this;
    }

  template< _CharT, _Traits, _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _M_destroy(const _Alloc& __a) throw ()
    {
      size_type __size = sizeof(_Rep) + (_M_capacity + 1) * sizeof(_CharT);
      _Raw_bytes_alloc(__a).deallocate(reinterpret_cast<char*>(this), __size);
    }

  template< _CharT, _Traits, _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::_M_leak_hard()
    {
      if (_M_rep()->_M_is_shared())
        _M_mutate(0, 0, 0);
      _M_rep()->_M_set_leaked();
    }







  template< _CharT, _Traits, _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::
    _M_mutate(size_type __pos, size_type __len1, size_type __len2)
    {
      size_type __old_size = this->size();
      const size_type __new_size = __old_size + __len2 - __len1;
      const _CharT* __src = _M_data() + __pos + __len1;
      const size_type __how_much = __old_size - __pos - __len1;

      if (_M_rep()->_M_is_shared() || __new_size > capacity())
        {

          allocator_type __a = get_allocator();


          const size_type __pagesize = 4096;
          const size_type __malloc_header_size = 4 * sizeof (void*);

          const size_type __page_capacity = (__pagesize - __malloc_header_size
                                             - sizeof(_Rep) - sizeof(_CharT))
                                             / sizeof(_CharT);
          _Rep* __r;
          if (__new_size > capacity() && __new_size > __page_capacity)

            __r = _Rep::_S_create(__new_size > 2*capacity() ?
                                  __new_size : 2*capacity(), __a);
          else
            __r = _Rep::_S_create(__new_size, __a);
          try
            {
              if (__pos)
                traits_type::copy(__r->_M_refdata(), _M_data(), __pos);
              if (__how_much)
                traits_type::copy(__r->_M_refdata() + __pos + __len2,
                                  __src, __how_much);
            }
          catch(...)
            {
              __r->_M_dispose(get_allocator());
              throw;
            }
          _M_rep()->_M_dispose(__a);
          _M_data(__r->_M_refdata());
      }
      else if (__how_much && __len1 != __len2)
        {

          traits_type::move(_M_data() + __pos + __len2, __src, __how_much);
        }
      _M_rep()->_M_set_sharable();
      _M_rep()->_M_length = __new_size;
      _M_data()[__new_size] = _Rep::_S_terminal;

    }

  template< _CharT, _Traits, _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::reserve(size_type __res)
    {
      if (__res > this->capacity() || _M_rep()->_M_is_shared())
        {
          if (__res > this->max_size())
            __throw_length_error("basic_string::reserve");

          if (__res < this->size())
            __res = this->size();
          allocator_type __a = get_allocator();
          _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
          _M_rep()->_M_dispose(__a);
          _M_data(__tmp);
        }
    }

  template< _CharT, _Traits, _Alloc>
    void basic_string<_CharT, _Traits, _Alloc>::swap(basic_string& __s)
    {
      if (_M_rep()->_M_is_leaked())
        _M_rep()->_M_set_sharable();
      if (__s._M_rep()->_M_is_leaked())
        __s._M_rep()->_M_set_sharable();
      if (this->get_allocator() == __s.get_allocator())
        {
          _CharT* __tmp = _M_data();
          _M_data(__s._M_data());
          __s._M_data(__tmp);
        }

      else
        {
          basic_string __tmp1(_M_ibegin(), _M_iend(), __s.get_allocator());
          basic_string __tmp2(__s._M_ibegin(), __s._M_iend(),
                              this->get_allocator());
          *this = __tmp2;
          __s = __tmp1;
        }
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::_Rep*
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _S_create(size_t __capacity, const _Alloc& __alloc)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;


      if (__capacity > _S_max_size)



        __throw_length_error("basic_string::_S_create");




      size_t __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
# 421 "/usr/local/include/g++-v3/bits/basic_string.tcc" 3
      const size_t __pagesize = 4096;
      const size_t __subpagesize = 128;
      const size_t __malloc_header_size = 4 * sizeof (void*);
      if ((__size + __malloc_header_size) > __pagesize)
        {
          size_t __extra =
            (__pagesize - ((__size + __malloc_header_size) % __pagesize))
            % __pagesize;
          __capacity += __extra / sizeof(_CharT);
          __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
        }
      else if (__size > __subpagesize)
        {
          size_t __extra =
            (__subpagesize - ((__size + __malloc_header_size) % __subpagesize))
            % __subpagesize;
          __capacity += __extra / sizeof(_CharT);
          __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
        }



      void* __place = _Raw_bytes_alloc(__alloc).allocate(__size);
      _Rep *__p = new (__place) _Rep;
      __p->_M_capacity = __capacity;
      __p->_M_set_sharable();
      __p->_M_length = 0;
      return __p;
    }

  template< _CharT, _Traits, _Alloc>
    _CharT*
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _M_clone(const _Alloc& __alloc, size_type __res)
    {

      const size_type __requested_cap = _M_length + __res;

      const size_type __pagesize = 4096;
      const size_type __malloc_header_size = 4 * sizeof (void*);

      const size_type __page_capacity =
        (__pagesize - __malloc_header_size - sizeof(_Rep) - sizeof(_CharT))
        / sizeof(_CharT);
      _Rep* __r;
      if (__requested_cap > _M_capacity && __requested_cap > __page_capacity)

        __r = _Rep::_S_create(__requested_cap > 2*_M_capacity ?
                              __requested_cap : 2*_M_capacity, __alloc);
      else
        __r = _Rep::_S_create(__requested_cap, __alloc);

      if (_M_length)
        {
          try
            { traits_type::copy(__r->_M_refdata(), _M_refdata(), _M_length); }
          catch(...)
            {
              __r->_M_destroy(__alloc);
              throw;
            }
        }
      __r->_M_length = _M_length;
      return __r->_M_refdata();
    }

  template< _CharT, _Traits, _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::resize(size_type __n, _CharT __c)
    {
      if (__n > max_size())
        __throw_length_error("basic_string::resize");
      size_type __size = this->size();
      if (__size < __n)
        this->append(__n - __size, __c);
      else if (__n < __size)
        this->erase(__n);

    }
# 508 "/usr/local/include/g++-v3/bits/basic_string.tcc" 3
  template< _CharT, _Traits, _Alloc>
    template< _InputIter>
      basic_string<_CharT, _Traits, _Alloc>&
      basic_string<_CharT, _Traits, _Alloc>::
      _M_replace(iterator __i1, iterator __i2, _InputIter __k1,
                 _InputIter __k2, input_iterator_tag)
      {

        basic_string __s(__k1, __k2);
        return _M_replace_safe(__i1, __i2, __s._M_ibegin(), __s._M_iend());
      }






  template< _CharT, _Traits, _Alloc>
    template< _ForwardIter>
      basic_string<_CharT, _Traits, _Alloc>&
      basic_string<_CharT, _Traits, _Alloc>::
      _M_replace_safe(iterator __i1, iterator __i2, _ForwardIter __k1,
                      _ForwardIter __k2)
      {
        size_type __dnew = static_cast<size_type>(distance(__k1, __k2));
        size_type __dold = __i2 - __i1;
        size_type __dmax = this->max_size();

        if (__dmax <= __dnew)
          __throw_length_error("basic_string::_M_replace");
        size_type __off = __i1 - _M_ibegin();
        _M_mutate(__off, __dold, __dnew);


        if (__dnew)
          _S_copy_chars(_M_data() + __off, __k1, __k2);

        return *this;
      }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    replace(size_type __pos1, size_type __n1, const basic_string& __str,
            size_type __pos2, size_type __n2)
    {
      const size_type __strsize = __str.size();
      if (__pos2 > __strsize)
        __throw_out_of_range("basic_string::replace");
      const bool __testn2 = __n2 < __strsize - __pos2;
      const size_type __foldn2 = __testn2 ? __n2 : __strsize - __pos2;
      return this->replace(__pos1, __n1,
                           __str._M_data() + __pos2, __foldn2);
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(const basic_string& __str)
    {



      size_type __size = __str.size();
      size_type __len = __size + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
      return _M_replace_safe(_M_iend(), _M_iend(), __str._M_ibegin(),
                             __str._M_iend());
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(const basic_string& __str, size_type __pos, size_type __n)
    {



      size_type __len = min(__str.size() - __pos, __n) + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
      return _M_replace_safe(_M_iend(), _M_iend(), __str._M_check(__pos),
                             __str._M_fold(__pos, __n));
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(const _CharT* __s, size_type __n)
    {
      size_type __len = __n + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
      return _M_replace_safe(_M_iend(), _M_iend(), __s, __s + __n);
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(size_type __n, _CharT __c)
    {
      size_type __len = __n + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
       return this->replace(_M_iend(), _M_iend(), __n, __c);
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>
    operator+(const _CharT* __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef __string_type::size_type __size_type;
      __size_type __len = _Traits::length(__lhs);
      __string_type __str;
      __str.reserve(__len + __rhs.size());
      __str.append(__lhs, __lhs + __len);
      __str.append(__rhs);
      return __str;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>
    operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef __string_type::size_type __size_type;
      __string_type __str;
      __size_type __len = __rhs.size();
      __str.reserve(__len + 1);
      __str.append(__size_type(1), __lhs);
      __str.append(__rhs);
      return __str;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    replace(iterator __i1, iterator __i2, size_type __n2, _CharT __c)
    {
      size_type __n1 = __i2 - __i1;
      size_type __off1 = __i1 - _M_ibegin();
      if (max_size() - (this->size() - __n1) <= __n2)
        __throw_length_error("basic_string::replace");
      _M_mutate (__off1, __n1, __n2);

      if (__n2)
        traits_type::assign(_M_data() + __off1, __n2, __c);
      return *this;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    copy(_CharT* __s, size_type __n, size_type __pos) const
    {
      if (__pos > this->size())
        __throw_out_of_range("basic_string::copy");

      if (__n > this->size() - __pos)
        __n = this->size() - __pos;

      traits_type::copy(__s, _M_data() + __pos, __n);

      return __n;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      size_t __xpos = __pos;
      const _CharT* __data = _M_data();
      for (; __xpos + __n <= __size; ++__xpos)
        if (traits_type::compare(__data + __xpos, __s, __n) == 0)
          return __xpos;
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      size_type __ret = npos;
      if (__pos < __size)
        {
          const _CharT* __data = _M_data();
          size_type __n = __size - __pos;
          const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
          if (__p)
            __ret = __p - __data;
        }
      return __ret;
    }


  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    rfind(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      if (__n <= __size)
        {
          __pos = std::min(__size - __n, __pos);
          const _CharT* __data = _M_data();
          do
            {
              if (traits_type::compare(__data + __pos, __s, __n) == 0)
                return __pos;
            }
          while (__pos-- > 0);
        }
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    rfind(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      if (__size)
        {
          size_t __xpos = __size - 1;
          if (__xpos > __pos)
            __xpos = __pos;

          for (++__xpos; __xpos-- > 0; )
            if (traits_type::eq(_M_data()[__xpos], __c))
              return __xpos;
        }
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      for (; __n && __pos < this->size(); ++__pos)
        {
          const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
          if (__p)
            return __pos;
        }
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      if (__size && __n)
        {
          if (--__size > __pos)
            __size = __pos;
          do
            {
              if (traits_type::find(__s, __n, _M_data()[__size]))
                return __size;
            }
          while (__size-- != 0);
        }
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_t __xpos = __pos;
      for (; __xpos < this->size(); ++__xpos)
        if (!traits_type::find(__s, __n, _M_data()[__xpos]))
          return __xpos;
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_not_of(_CharT __c, size_type __pos) const
    {
      size_t __xpos = __pos;
      for (; __xpos < this->size(); ++__xpos)
        if (!traits_type::eq(_M_data()[__xpos], __c))
          return __xpos;
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      if (__size)
        {
          if (--__size > __pos)
            __size = __pos;
          do
            {
              if (!traits_type::find(__s, __n, _M_data()[__size]))
                return __size;
            }
          while (__size--);
        }
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_not_of(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      if (__size)
        {
          if (--__size > __pos)
            __size = __pos;
          do
            {
              if (!traits_type::eq(_M_data()[__size], __c))
                return __size;
            }
          while (__size--);
        }
      return npos;
    }

  template< _CharT, _Traits, _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(size_type __pos, size_type __n, const basic_string& __str) const
    {
      size_type __size = this->size();
      size_type __osize = __str.size();
      if (__pos > __size)
        __throw_out_of_range("basic_string::compare");

      size_type __rsize= min(__size - __pos, __n);
      size_type __len = min(__rsize, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
      if (!__r)
        __r = __rsize - __osize;
      return __r;
    }

  template< _CharT, _Traits, _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(size_type __pos1, size_type __n1, const basic_string& __str,
            size_type __pos2, size_type __n2) const
    {
      size_type __size = this->size();
      size_type __osize = __str.size();
      if (__pos1 > __size || __pos2 > __osize)
        __throw_out_of_range("basic_string::compare");

      size_type __rsize = min(__size - __pos1, __n1);
      size_type __rosize = min(__osize - __pos2, __n2);
      size_type __len = min(__rsize, __rosize);
      int __r = traits_type::compare(_M_data() + __pos1,
                                     __str.data() + __pos2, __len);
      if (!__r)
        __r = __rsize - __rosize;
      return __r;
    }


  template< _CharT, _Traits, _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(const _CharT* __s) const
    {
      size_type __size = this->size();
      int __r = traits_type::compare(_M_data(), __s, __size);
      if (!__r)
        __r = __size - traits_type::length(__s);
      return __r;
    }


  template< _CharT, _Traits, _Alloc>
    int
    basic_string <_CharT, _Traits, _Alloc>::
    compare(size_type __pos, size_type __n1, const _CharT* __s) const
    {
      size_type __size = this->size();
      if (__pos > __size)
        __throw_out_of_range("basic_string::compare");

      size_type __osize = traits_type::length(__s);
      size_type __rsize = min(__size - __pos, __n1);
      size_type __len = min(__rsize, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
      if (!__r)
        __r = __rsize - __osize;
      return __r;
    }

  template< _CharT, _Traits, _Alloc>
    int
    basic_string <_CharT, _Traits, _Alloc>::
    compare(size_type __pos, size_type __n1, const _CharT* __s,
            size_type __n2) const
    {
      size_type __size = this->size();
      if (__pos > __size)
        __throw_out_of_range("basic_string::compare");

      size_type __osize = min(traits_type::length(__s), __n2);
      size_type __rsize = min(__size - __pos, __n1);
      size_type __len = min(__rsize, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
      if (!__r)
        __r = __rsize - __osize;
      return __r;
    }

  template <class _CharT, class _Traits, class _Alloc>
    void
    _S_string_copy(const basic_string<_CharT, _Traits, _Alloc>& __str,
                   _CharT* __buf, _Alloc::size_type __bufsiz)
    {
      typedef _Alloc::size_type size_type;
      size_type __strsize = __str.size();
      size_type __bytes = min(__strsize, __bufsiz - 1);
      _Traits::copy(__buf, __str.data(), __bytes);
      __buf[__bytes] = _CharT();
    }




  extern template class basic_string<char>;
  extern template
    basic_istream<char>&
    operator>>(basic_istream<char>&, string&);
  extern template
    basic_ostream<char>&
    operator<<(basic_ostream<char>&, const string&);
  extern template
    basic_istream<char>&
    getline(basic_istream<char>&, string&, char);
  extern template
    basic_istream<char>&
    getline(basic_istream<char>&, string&);

  extern template class basic_string<wchar_t>;
  extern template
    basic_istream<wchar_t>&
    operator>>(basic_istream<wchar_t>&, wstring&);
  extern template
    basic_ostream<wchar_t>&
    operator<<(basic_ostream<wchar_t>&, const wstring&);
  extern template
    basic_istream<wchar_t>&
    getline(basic_istream<wchar_t>&, wstring&, wchar_t);
  extern template
    basic_istream<wchar_t>&
    getline(basic_istream<wchar_t>&, wstring&);
}
# 58 "/usr/local/include/g++-v3/string" 2 3
# 50 "/usr/local/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/usr/local/include/g++-v3/bits/functexcept.h" 3
# 1 "/usr/local/include/g++-v3/exception_defines.h" 1 3
# 35 "/usr/local/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 51 "/usr/local/include/g++-v3/bits/localefwd.h" 2 3



namespace std
{
# 64 "/usr/local/include/g++-v3/bits/localefwd.h" 3
  template< _Tp, _Alloc>
    class vector;
  class locale;


  template< _CharT>
    inline bool
    isspace(_CharT, const locale&);

  template< _CharT>
    inline bool
    isprint(_CharT, const locale&);

  template< _CharT>
    inline bool
    iscntrl(_CharT, const locale&);

  template< _CharT>
    inline bool
    isupper(_CharT, const locale&);

  template< _CharT>
    inline bool
    islower(_CharT, const locale&);

  template< _CharT>
    inline bool
    isalpha(_CharT, const locale&);

  template< _CharT>
    inline bool
    isdigit(_CharT, const locale&);

  template< _CharT>
    inline bool
    ispunct(_CharT, const locale&);

  template< _CharT>
    inline bool
    isxdigit(_CharT, const locale&);

  template< _CharT>
    inline bool
    isalnum(_CharT, const locale&);

  template< _CharT>
    inline bool
    isgraph(_CharT, const locale&);

  template< _CharT>
    inline _CharT
    toupper(_CharT, const locale&);

  template< _CharT>
    inline _CharT
    tolower(_CharT, const locale&);



  class ctype_base;
  template< _CharT>
    class ctype;
  template<> class ctype<char>;



  template< _CharT>
    class ctype_byname;


  class codecvt_base;
  class __enc_traits;
  template< _InternT, _ExternT, _StateT>
    class codecvt;
  template<> class codecvt<char, char, mbstate_t>;



  template< _InternT, _ExternT, _StateT>
    class codecvt_byname;


  template< _CharT, _InIter = istreambuf_iterator<_CharT> >
    class num_get;
  template< _CharT, _OutIter = ostreambuf_iterator<_CharT> >
    class num_put;
  template< _CharT> class numpunct;
  template< _CharT> class numpunct_byname;


  template< _CharT>
    class collate;
  template< _CharT> class
    collate_byname;


  class time_base;
  template< _CharT, _InIter = istreambuf_iterator<_CharT> >
    class time_get;
  template< _CharT, _InIter = istreambuf_iterator<_CharT> >
    class time_get_byname;
  template< _CharT, _OutIter = ostreambuf_iterator<_CharT> >
    class time_put;
  template< _CharT, _OutIter = ostreambuf_iterator<_CharT> >
    class time_put_byname;


  class money_base;
  template< _CharT, _InIter = istreambuf_iterator<_CharT> >
    class money_get;
  template< _CharT, _OutIter = ostreambuf_iterator<_CharT> >
    class money_put;
  template< _CharT, bool _Intl = false>
    class moneypunct;
  template< _CharT, bool _Intl = false>
    class moneypunct_byname;


  class messages_base;
  template< _CharT>
    class messages;
  template< _CharT>
    class messages_byname;


  class locale
  {
  public:

    typedef unsigned int category;


    class facet;
    class id;
    class _Impl;

    friend class facet;
    friend class _Impl;

    template< _Facet>
      friend const _Facet&
      use_facet(const locale&);

    template< _Facet>
      friend bool
      has_facet(const locale&) throw();



    static const category none = 0;
    static const category ctype = 1L << 0;
    static const category numeric = 1L << 1;
    static const category collate = 1L << 2;
    static const category time = 1L << 3;
    static const category monetary = 1L << 4;
    static const category messages = 1L << 5;
    static const category all = (collate | ctype | monetary |
                                           numeric | time | messages);


    locale() throw();

    locale(const locale& __other) throw();

    explicit
    locale(const char* __std_name);

    locale(const locale& __base, const char* __s, category __cat);

    locale(const locale& __base, const locale& __add, category __cat);

    template< _Facet>
      locale(const locale& __other, _Facet* __f);

    ~locale() throw();

    const locale&
    operator=(const locale& __other) throw();

    template< _Facet>
      locale
      combine(const locale& __other) const;


    string
    name() const;

    bool
    operator==(const locale& __other) const throw ();

    inline bool
    operator!=(const locale& __other) const throw ()
    { return !(this->operator==(__other)); }

    template< _Char, _Traits, _Alloc>
      bool
      operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,
                 const basic_string<_Char, _Traits, _Alloc>& __s2) const;


    static locale
    global(const locale&);

    static const locale&
    classic();

  private:

    _Impl* _M_impl;


    static _Impl* _S_classic;


    static _Impl* _S_global;

    static const size_t _S_num_categories = 6;
    static const size_t _S_num_facets = 14;

    explicit
    locale(_Impl*) throw();

    static inline void
    _S_initialize()
    {
      if (!_S_classic)
        classic();
    }

    static category
    _S_normalize_category(category);

    void
    _M_coalesce(const locale& __base, const locale& __add, category __cat);
  };



  class locale::_Impl
  {
  public:

    typedef vector<facet*, allocator<facet*> > __vec_facet;


    friend class locale;
    friend class locale::facet;

    template< _Facet>
      friend const _Facet&
      use_facet(const locale&);

    template< _Facet>
      friend bool
      has_facet(const locale&) throw();

  private:

    _Atomic_word _M_references;
    __vec_facet* _M_facets;
    string _M_names[_S_num_categories];
    static const locale::id* const _S_id_ctype[];
    static const locale::id* const _S_id_numeric[];
    static const locale::id* const _S_id_collate[];
    static const locale::id* const _S_id_time[];
    static const locale::id* const _S_id_monetary[];
    static const locale::id* const _S_id_messages[];
    static const locale::id* const* const _S_facet_categories[];

    inline void
    _M_add_reference() throw()
    { __atomic_add(&_M_references, 1); }

    inline void
    _M_remove_reference() throw()
    {
      if (__exchange_and_add(&_M_references, -1) == 1)
        {
          try
            { delete this; }
          catch(...)
            { }
        }
    }

    _Impl(const _Impl&, size_t);
    _Impl(string __name, size_t);
   ~_Impl() throw();

    inline bool
    _M_check_same_name()
    {
      bool __ret = true;
      for (size_t i = 0; i < _S_num_categories - 1; ++i)
        __ret &= _M_names[i] == _M_names[i + 1];
      return __ret;
    }

    void
    _M_replace_categories(const _Impl*, category);

    void
    _M_replace_category(const _Impl*, const locale::id* const*);

    void
    _M_replace_facet(const _Impl*, const locale::id*);

    void
    _M_install_facet(const locale::id*, facet*);

    template< _Facet>
      inline void
      _M_init_facet(_Facet* __facet)
      { _M_install_facet(&_Facet::id, __facet); }
  };

  template< _Facet>
    locale::locale(const locale& __other, _Facet* __f)
    {
      _M_impl = new _Impl(*__other._M_impl, 1);
      _M_impl->_M_install_facet(&_Facet::id, __f);
      for (size_t __i = 0; __i < _S_num_categories; ++__i)
        _M_impl->_M_names[__i] = "*";
    }


  class locale::facet
  {
    friend class locale;
    friend class locale::_Impl;
    friend class __enc_traits;

  private:
    _Atomic_word _M_references;

  protected:


    static __c_locale _S_c_locale;

    explicit
    facet(size_t __refs = 0) throw();

    virtual
    ~facet();

    static void
    _S_create_c_locale(__c_locale& __cloc, const char* __s);

    static __c_locale
    _S_clone_c_locale(__c_locale& __cloc);

    static void
    _S_destroy_c_locale(__c_locale& __cloc);

  private:
    void
    _M_add_reference() throw();

    void
    _M_remove_reference() throw();

    facet(const facet&);

    void
    operator=(const facet&);
  };



  class locale::id
  {
  private:
    friend class locale;
    friend class locale::_Impl;
    template< _Facet>
      friend const _Facet&
      use_facet(const locale&);
    template< _Facet>
      friend bool
      has_facet(const locale&) throw ();




    mutable size_t _M_index;


    static _Atomic_word _S_highwater;

    void
    operator=(const id&);

    id(const id&);

  public:


    id();
  };

  template< _Facet>
    const _Facet&
    use_facet(const locale& __loc);

  template< _Facet>
    bool
    has_facet(const locale& __loc) throw();
}
# 49 "/usr/local/include/g++-v3/ios" 2 3
# 1 "/usr/local/include/g++-v3/bits/ios_base.h" 1 3
# 44 "/usr/local/include/g++-v3/bits/ios_base.h" 3



namespace std
{




  enum _Ios_Fmtflags { _M_ios_fmtflags_end = 1L << 16 };

  inline _Ios_Fmtflags
  operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
  { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }

  inline _Ios_Fmtflags
  operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
  { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }

  inline _Ios_Fmtflags
  operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
  { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }

  inline _Ios_Fmtflags
  operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
  { return __a = __a | __b; }

  inline _Ios_Fmtflags
  operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
  { return __a = __a & __b; }

  inline _Ios_Fmtflags
  operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
  { return __a = __a ^ __b; }

  inline _Ios_Fmtflags
  operator~(_Ios_Fmtflags __a)
  { return _Ios_Fmtflags(~static_cast<int>(__a)); }


  enum _Ios_Openmode { _M_ios_openmode_end = 1L << 16 };

  inline _Ios_Openmode
  operator&(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }

  inline _Ios_Openmode
  operator|(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }

  inline _Ios_Openmode
  operator^(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }

  inline _Ios_Openmode
  operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
  { return __a = __a | __b; }

  inline _Ios_Openmode
  operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
  { return __a = __a & __b; }

  inline _Ios_Openmode
  operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
  { return __a = __a ^ __b; }

  inline _Ios_Openmode
  operator~(_Ios_Openmode __a)
  { return _Ios_Openmode(~static_cast<int>(__a)); }


  enum _Ios_Iostate { _M_ios_iostate_end = 1L << 16 };

  inline _Ios_Iostate
  operator&(_Ios_Iostate __a, _Ios_Iostate __b)
  { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }

  inline _Ios_Iostate
  operator|(_Ios_Iostate __a, _Ios_Iostate __b)
  { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }

  inline _Ios_Iostate
  operator^(_Ios_Iostate __a, _Ios_Iostate __b)
  { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }

  inline _Ios_Iostate
  operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
  { return __a = __a | __b; }

  inline _Ios_Iostate
  operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
  { return __a = __a & __b; }

  inline _Ios_Iostate
  operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
  { return __a = __a ^ __b; }

  inline _Ios_Iostate
  operator~(_Ios_Iostate __a)
  { return _Ios_Iostate(~static_cast<int>(__a)); }

  enum _Ios_Seekdir { _M_ios_seekdir_end = 1L << 16 };


  class ios_base
  {
  public:


    class failure : public exception
    {
    public:


      explicit
      failure(const string& __str) throw();

      virtual
      ~failure() throw();

      virtual const char*
      what() const throw();

    private:
      enum { _M_bufsize = 256 };
      char _M_name[_M_bufsize];

    };


    typedef _Ios_Fmtflags fmtflags;

    static const fmtflags boolalpha = fmtflags(__ios_flags::_S_boolalpha);
    static const fmtflags dec = fmtflags(__ios_flags::_S_dec);
    static const fmtflags fixed = fmtflags(__ios_flags::_S_fixed);
    static const fmtflags hex = fmtflags(__ios_flags::_S_hex);
    static const fmtflags internal = fmtflags(__ios_flags::_S_internal);
    static const fmtflags left = fmtflags(__ios_flags::_S_left);
    static const fmtflags oct = fmtflags(__ios_flags::_S_oct);
    static const fmtflags right = fmtflags(__ios_flags::_S_right);
    static const fmtflags scientific = fmtflags(__ios_flags::_S_scientific);
    static const fmtflags showbase = fmtflags(__ios_flags::_S_showbase);
    static const fmtflags showpoint = fmtflags(__ios_flags::_S_showpoint);
    static const fmtflags showpos = fmtflags(__ios_flags::_S_showpos);
    static const fmtflags skipws = fmtflags(__ios_flags::_S_skipws);
    static const fmtflags unitbuf = fmtflags(__ios_flags::_S_unitbuf);
    static const fmtflags uppercase = fmtflags(__ios_flags::_S_uppercase);
    static const fmtflags adjustfield = fmtflags(__ios_flags::_S_adjustfield);
    static const fmtflags basefield = fmtflags(__ios_flags::_S_basefield);
    static const fmtflags floatfield = fmtflags(__ios_flags::_S_floatfield);


    typedef _Ios_Iostate iostate;
    static const iostate badbit = iostate(__ios_flags::_S_badbit);
    static const iostate eofbit = iostate(__ios_flags::_S_eofbit);
    static const iostate failbit = iostate(__ios_flags::_S_failbit);
    static const iostate goodbit = iostate(0);


    typedef _Ios_Openmode openmode;
    static const openmode app = openmode(__ios_flags::_S_app);
    static const openmode ate = openmode(__ios_flags::_S_ate);
    static const openmode binary = openmode(__ios_flags::_S_bin);
    static const openmode in = openmode(__ios_flags::_S_in);
    static const openmode out = openmode(__ios_flags::_S_out);
    static const openmode trunc = openmode(__ios_flags::_S_trunc);


    typedef _Ios_Seekdir seekdir;
    static const seekdir beg = seekdir(0);
    static const seekdir cur = seekdir(1);
    static const seekdir end = seekdir(2);
# 224 "/usr/local/include/g++-v3/bits/ios_base.h" 3
    enum event
    {
      erase_event,
      imbue_event,
      copyfmt_event
    };

    typedef void (*event_callback) (event, ios_base&, int);

    void
    register_callback(event_callback __fn, int __index);

  protected:

    streamsize _M_precision;
    streamsize _M_width;
    fmtflags _M_flags;



    struct _Callback_list
    {

      _Callback_list* _M_next;
      ios_base::event_callback _M_fn;
      int _M_index;
      _Atomic_word _M_refcount;

      _Callback_list(ios_base::event_callback __fn, int __index,
                     _Callback_list* __cb)
      : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }

      void
      _M_add_reference() { __atomic_add(&_M_refcount, 1); }

      int
      _M_remove_reference() { return __exchange_and_add(&_M_refcount, -1); }

    };

     _Callback_list* _M_callbacks;

    void
    _M_call_callbacks(event __ev) throw();

    void
    _M_dispose_callbacks(void);


    struct _Words
    {
      void* _M_pword;
      long _M_iword;
    };

    static const int _S_local_words = 8;
    _Words _M_word_array[_S_local_words];
    _Words _M_dummy;
    _Words* _M_words;
    int _M_word_limit;

    _Words&
    _M_grow_words(int __index);


    locale _M_ios_locale;

    void
    _M_init();

  public:





    class Init
    {
      friend class ios_base;
    public:
      Init();
      ~Init();

      static void
      _S_ios_create(bool __sync);

      static void
      _S_ios_destroy();

    private:
      static int _S_ios_base_init;
      static bool _S_synced_with_stdio;
    };


    inline fmtflags
    flags() const { return _M_flags; }

    inline fmtflags
    flags(fmtflags __fmtfl)
    {
      fmtflags __old = _M_flags;
      _M_flags = __fmtfl;
      return __old;
    }

    inline fmtflags
    setf(fmtflags __fmtfl)
    {
      fmtflags __old = _M_flags;
      _M_flags |= __fmtfl;
      return __old;
    }

    inline fmtflags
    setf(fmtflags __fmtfl, fmtflags __mask)
    {
      fmtflags __old = _M_flags;
      _M_flags &= ~__mask;
      _M_flags |= (__fmtfl & __mask);
      return __old;
    }

    inline void
    unsetf(fmtflags __mask) { _M_flags &= ~__mask; }

    inline streamsize
    precision() const { return _M_precision; }

    inline streamsize
    precision(streamsize __prec)
    {
      streamsize __old = _M_precision;
      _M_precision = __prec;
      return __old;
    }

    inline streamsize
    width() const { return _M_width; }

    inline streamsize
    width(streamsize __wide)
    {
      streamsize __old = _M_width;
      _M_width = __wide;
      return __old;
    }

    static bool
    sync_with_stdio(bool __sync = true);


    locale
    imbue(const locale& __loc);

    inline locale
    getloc() const { return _M_ios_locale; }


    static int
    xalloc() throw();

    inline long&
    iword(int __ix)
    {
      _Words& __word = (__ix < _M_word_limit)
                        ? _M_words[__ix] : _M_grow_words(__ix);
      return __word._M_iword;
    }

    inline void*&
    pword(int __ix)
    {
      _Words& __word = (__ix < _M_word_limit)
                        ? _M_words[__ix] : _M_grow_words(__ix);
      return __word._M_pword;
    }


    ~ios_base();

  protected:
    ios_base();



  private:
    ios_base(const ios_base&);

    ios_base&
    operator=(const ios_base&);

  };


  inline ios_base&
  boolalpha(ios_base& __base)
  {
    __base.setf(ios_base::boolalpha);
    return __base;
  }

  inline ios_base&
  noboolalpha(ios_base& __base)
  {
    __base.unsetf(ios_base::boolalpha);
    return __base;
  }

  inline ios_base&
  showbase(ios_base& __base)
  {
    __base.setf(ios_base::showbase);
    return __base;
  }

  inline ios_base&
  noshowbase(ios_base& __base)
  {
    __base.unsetf(ios_base::showbase);
    return __base;
  }

  inline ios_base&
  showpoint(ios_base& __base)
  {
    __base.setf(ios_base::showpoint);
    return __base;
  }

  inline ios_base&
  noshowpoint(ios_base& __base)
  {
    __base.unsetf(ios_base::showpoint);
    return __base;
  }

  inline ios_base&
  showpos(ios_base& __base)
  {
    __base.setf(ios_base::showpos);
    return __base;
  }

  inline ios_base&
  noshowpos(ios_base& __base)
  {
    __base.unsetf(ios_base::showpos);
    return __base;
  }

  inline ios_base&
  skipws(ios_base& __base)
  {
    __base.setf(ios_base::skipws);
    return __base;
  }

  inline ios_base&
  noskipws(ios_base& __base)
  {
    __base.unsetf(ios_base::skipws);
    return __base;
  }

  inline ios_base&
  uppercase(ios_base& __base)
  {
    __base.setf(ios_base::uppercase);
    return __base;
  }

  inline ios_base&
  nouppercase(ios_base& __base)
  {
    __base.unsetf(ios_base::uppercase);
    return __base;
  }

  inline ios_base&
  unitbuf(ios_base& __base)
  {
     __base.setf(ios_base::unitbuf);
     return __base;
  }

  inline ios_base&
  nounitbuf(ios_base& __base)
  {
     __base.unsetf(ios_base::unitbuf);
     return __base;
  }


  inline ios_base&
  internal(ios_base& __base)
  {
     __base.setf(ios_base::internal, ios_base::adjustfield);
     return __base;
  }

  inline ios_base&
  left(ios_base& __base)
  {
    __base.setf(ios_base::left, ios_base::adjustfield);
    return __base;
  }

  inline ios_base&
  right(ios_base& __base)
  {
    __base.setf(ios_base::right, ios_base::adjustfield);
    return __base;
  }


  inline ios_base&
  dec(ios_base& __base)
  {
    __base.setf(ios_base::dec, ios_base::basefield);
    return __base;
  }

  inline ios_base&
  hex(ios_base& __base)
  {
    __base.setf(ios_base::hex, ios_base::basefield);
    return __base;
  }

  inline ios_base&
  oct(ios_base& __base)
  {
    __base.setf(ios_base::oct, ios_base::basefield);
    return __base;
  }


  inline ios_base&
  fixed(ios_base& __base)
  {
    __base.setf(ios_base::fixed, ios_base::floatfield);
    return __base;
  }

  inline ios_base&
  scientific(ios_base& __base)
  {
    __base.setf(ios_base::scientific, ios_base::floatfield);
    return __base;
  }

}
# 50 "/usr/local/include/g++-v3/ios" 2 3
# 1 "/usr/local/include/g++-v3/streambuf" 1 3
# 44 "/usr/local/include/g++-v3/streambuf" 3







namespace std
{
  template< _CharT, _Traits>
    streamsize
    __copy_streambufs(basic_ios<_CharT, _Traits>& _ios,
                      basic_streambuf<_CharT, _Traits>* __sbin,
                      basic_streambuf<_CharT, _Traits>* __sbout);


  template< _CharT, _Traits>
    class basic_streambuf
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef traits_type::int_type int_type;
      typedef traits_type::pos_type pos_type;
      typedef traits_type::off_type off_type;


      typedef ctype<char_type> __ctype_type;
      typedef basic_streambuf<char_type, traits_type> __streambuf_type;

      friend class basic_ios<char_type, traits_type>;
      friend class basic_istream<char_type, traits_type>;
      friend class basic_ostream<char_type, traits_type>;
      friend class istreambuf_iterator<char_type, traits_type>;
      friend class ostreambuf_iterator<char_type, traits_type>;

      friend streamsize
      __copy_streambufs<>(basic_ios<char_type, traits_type>& __ios,
                          __streambuf_type* __sbin,__streambuf_type* __sbout);

    protected:





      char_type* _M_buf;


      int_type _M_buf_size;


      int_type _M_buf_size_opt;



      bool _M_buf_unified;






      char_type* _M_in_beg;
      char_type* _M_in_cur;
      char_type* _M_in_end;
      char_type* _M_out_beg;
      char_type* _M_out_cur;
      char_type* _M_out_end;


      ios_base::openmode _M_mode;


      locale _M_buf_locale;


      bool _M_buf_locale_init;






      int_type _M_pback_size;
      char_type* _M_pback;
      char_type* _M_pback_cur_save;
      char_type* _M_pback_end_save;
      bool _M_pback_init;




      void
      _M_pback_create()
      {
        if (!_M_pback_init)
          {
            int_type __dist = _M_in_end - _M_in_cur;
            int_type __len = min(_M_pback_size, __dist);
            traits_type::copy(_M_pback, _M_in_cur, __len);
            _M_pback_cur_save = _M_in_cur;
            _M_pback_end_save = _M_in_end;
            this->setg(_M_pback, _M_pback, _M_pback + __len);
            _M_pback_init = true;
          }
      }




      void
      _M_pback_destroy()
      {
        if (_M_pback_init)
          {

            int_type __off_cur = _M_in_cur - _M_pback;


            int_type __off_end = 0;
            int_type __pback_len = _M_in_end - _M_pback;
            int_type __save_len = _M_pback_end_save - _M_buf;
            if (__pback_len > __save_len)
              __off_end = __pback_len - __save_len;

            this->setg(_M_buf, _M_pback_cur_save + __off_cur,
                       _M_pback_end_save + __off_end);
            _M_pback_cur_save = __null;
            _M_pback_end_save = __null;
            _M_pback_init = false;
          }
      }



      void
      _M_in_cur_move(off_type __n)
      {
        bool __testout = _M_out_cur;
        _M_in_cur += __n;
        if (__testout && _M_buf_unified)
          _M_out_cur += __n;
      }
# 198 "/usr/local/include/g++-v3/streambuf" 3
      void
      _M_out_cur_move(off_type __n)
      {
        bool __testin = _M_in_cur;

        _M_out_cur += __n;
        if (__testin && _M_buf_unified)
          _M_in_cur += __n;
        if (_M_out_cur > _M_out_end)
          {
            _M_out_end = _M_out_cur;

            if (__testin)
              _M_in_end += __n;
          }
      }




      off_type
      _M_out_buf_size()
      {
        off_type __ret = 0;
        if (_M_out_cur)
          {

            if (_M_out_beg == _M_buf)
              __ret = _M_out_beg + _M_buf_size - _M_out_cur;

            else
              __ret = _M_out_end - _M_out_cur;
          }
        return __ret;
      }
# 241 "/usr/local/include/g++-v3/streambuf" 3
      void
      _M_set_indeterminate(void)
      {
        if (_M_mode & ios_base::in)
          this->setg(_M_buf, _M_buf, _M_buf);
        if (_M_mode & ios_base::out)
          this->setp(_M_buf, _M_buf);
      }

      void
      _M_set_determinate(off_type __off)
      {
        bool __testin = _M_mode & ios_base::in;
        bool __testout = _M_mode & ios_base::out;
        if (__testin)
          this->setg(_M_buf, _M_buf, _M_buf + __off);
        if (__testout)
          this->setp(_M_buf, _M_buf + __off);
      }

      bool
      _M_is_indeterminate(void)
      {
        bool __ret = false;

        if (_M_buf)
          {
            if (_M_mode & ios_base::in)
              __ret = _M_in_beg == _M_in_cur && _M_in_cur == _M_in_end;
            if (_M_mode & ios_base::out)
              __ret = _M_out_beg == _M_out_cur && _M_out_cur == _M_out_end;
          }
        return __ret;
      }

  public:
      virtual
      ~basic_streambuf()
      {
        _M_buf_unified = false;
        _M_buf_size = 0;
        _M_buf_size_opt = 0;
        _M_mode = ios_base::openmode(0);
        _M_buf_locale_init = false;
      }


      locale
      pubimbue(const locale &__loc)
      {
        locale __tmp(this->getloc());
        this->imbue(__loc);
        return __tmp;
      }

      locale
      getloc() const
      {
        if (_M_buf_locale_init)
          return _M_buf_locale;
        else
          return locale();
      }


      __streambuf_type*
      pubsetbuf(char_type* __s, streamsize __n)
      { return this->setbuf(__s, __n); }

      pos_type
      pubseekoff(off_type __off, ios_base::seekdir __way,
                 ios_base::openmode __mode = ios_base::in | ios_base::out)
      { return this->seekoff(__off, __way, __mode); }

      pos_type
      pubseekpos(pos_type __sp,
                 ios_base::openmode __mode = ios_base::in | ios_base::out)
      { return this->seekpos(__sp, __mode); }

      int
      pubsync() { return this->sync(); }



      streamsize
      in_avail()
      {
        streamsize __ret;
        if (_M_in_cur && _M_in_cur < _M_in_end)
          {
            if (_M_pback_init)
              {
                int_type __save_len = _M_pback_end_save - _M_pback_cur_save;
                int_type __pback_len = _M_in_cur - _M_pback;
                __ret = __save_len - __pback_len;
              }
            else
              __ret = this->egptr() - this->gptr();
          }
        else
          __ret = this->showmanyc();
        return __ret;
      }

      int_type
      snextc()
      {
        int_type __eof = traits_type::eof();
        return (this->sbumpc() == __eof ? __eof : this->sgetc());
      }

      int_type
      sbumpc();

      int_type
      sgetc()
      {
        int_type __ret;
        if (_M_in_cur && _M_in_cur < _M_in_end)
          __ret = traits_type::to_int_type(*(this->gptr()));
        else
          __ret = this->underflow();
        return __ret;
      }

      streamsize
      sgetn(char_type* __s, streamsize __n)
      { return this->xsgetn(__s, __n); }


      int_type
      sputbackc(char_type __c);

      int_type
      sungetc();


      int_type
      sputc(char_type __c);

      streamsize
      sputn(const char_type* __s, streamsize __n)
      { return this->xsputn(__s, __n); }

    protected:
      basic_streambuf()
      : _M_buf(__null), _M_buf_size(0),
      _M_buf_size_opt(static_cast<int_type>(1024)), _M_buf_unified(false),
      _M_in_beg(0), _M_in_cur(0), _M_in_end(0), _M_out_beg(0), _M_out_cur(0),
      _M_out_end(0), _M_mode(ios_base::openmode(0)), _M_buf_locale(locale()),
      _M_buf_locale_init(false), _M_pback_size(1), _M_pback(__null),
      _M_pback_cur_save(__null), _M_pback_end_save(__null), _M_pback_init(false)
      { }


      char_type*
      eback() const { return _M_in_beg; }

      char_type*
      gptr() const { return _M_in_cur; }

      char_type*
      egptr() const { return _M_in_end; }

      void
      gbump(int __n) { _M_in_cur += __n; }

      void
      setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
      {
        _M_in_beg = __gbeg;
        _M_in_cur = __gnext;
        _M_in_end = __gend;
        if (!(_M_mode & ios_base::in) && __gbeg && __gnext && __gend)
          _M_mode = _M_mode | ios_base::in;
      }


      char_type*
      pbase() const { return _M_out_beg; }

      char_type*
      pptr() const { return _M_out_cur; }

      char_type*
      epptr() const { return _M_out_end; }

      void
      pbump(int __n) { _M_out_cur += __n; }

      void
      setp(char_type* __pbeg, char_type* __pend)
      {
        _M_out_beg = _M_out_cur = __pbeg;
        _M_out_end = __pend;
        if (!(_M_mode & ios_base::out) && __pbeg && __pend)
          _M_mode = _M_mode | ios_base::out;
      }



      virtual void
      imbue(const locale& __loc)
      {
        _M_buf_locale_init = true;
        if (_M_buf_locale != __loc)
          _M_buf_locale = __loc;
      }


      virtual basic_streambuf<char_type,_Traits>*
      setbuf(char_type*, streamsize)
      { return this; }

      virtual pos_type
      seekoff(off_type, ios_base::seekdir,
              ios_base::openmode = ios_base::in | ios_base::out)
      { return pos_type(off_type(-1)); }

      virtual pos_type
      seekpos(pos_type,
              ios_base::openmode = ios_base::in | ios_base::out)
      { return pos_type(off_type(-1)); }

      virtual int
      sync() { return 0; }


      virtual streamsize
      showmanyc() { return 0; }

      virtual streamsize
      xsgetn(char_type* __s, streamsize __n);

      virtual int_type
      underflow()
      { return traits_type::eof(); }

      virtual int_type
      uflow()
      {
        int_type __ret = traits_type::eof();
        bool __testeof = this->underflow() == __ret;
        bool __testpending = _M_in_cur && _M_in_cur < _M_in_end;
        if (!__testeof && __testpending)
          {
            __ret = traits_type::to_int_type(*_M_in_cur);
            ++_M_in_cur;
            if (_M_buf_unified && _M_mode & ios_base::out)
              ++_M_out_cur;
          }
        return __ret;
      }


      virtual int_type
      pbackfail(int_type = traits_type::eof())
      { return traits_type::eof(); }


      virtual streamsize
      xsputn(const char_type* __s, streamsize __n);

      virtual int_type
      overflow(int_type = traits_type::eof())
      { return traits_type::eof(); }
# 522 "/usr/local/include/g++-v3/streambuf" 3
    private:
      basic_streambuf(const __streambuf_type&) { };

      __streambuf_type&
      operator=(const __streambuf_type&) { return *this; };

    };
}





# 1 "/usr/local/include/g++-v3/bits/streambuf.tcc" 1 3
# 39 "/usr/local/include/g++-v3/bits/streambuf.tcc" 3

namespace std
{
  template< _CharT, _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sbumpc()
    {
      int_type __ret;
      if (_M_in_cur && _M_in_cur < _M_in_end)
        {
          char_type __c = *gptr();
          _M_in_cur_move(1);
          __ret = traits_type::to_int_type(__c);
        }
      else
        __ret = this->uflow();
      return __ret;
    }

  template< _CharT, _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sputbackc(char_type __c)
    {
      int_type __ret;
      bool __testpos = _M_in_cur && _M_in_beg < _M_in_cur;
      bool __testne = _M_in_cur && !traits_type::eq(__c, this->gptr()[-1]);
      if (!__testpos || __testne)
        __ret = pbackfail(traits_type::to_int_type(__c));
      else
        {
          _M_in_cur_move(-1);
          __ret = traits_type::to_int_type(*this->gptr());
        }
      return __ret;
    }

  template< _CharT, _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sungetc()
    {
      int_type __ret;
      if (_M_in_cur && _M_in_beg < _M_in_cur)
        {
          _M_in_cur_move(-1);
          __ret = traits_type::to_int_type(*_M_in_cur);
        }
      else
        __ret = this->pbackfail();
      return __ret;
    }






  template< _CharT, _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sputc(char_type __c)
    {
      int_type __ret;
      if (_M_out_buf_size())
        {
          *_M_out_cur = __c;
          _M_out_cur_move(1);
          __ret = traits_type::to_int_type(__c);
        }
      else
        __ret = this->overflow(traits_type::to_int_type(__c));
      return __ret;
    }

  template< _CharT, _Traits>
    streamsize
    basic_streambuf<_CharT, _Traits>::
    xsgetn(char_type* __s, streamsize __n)
    {
      streamsize __ret = 0;
      while (__ret < __n)
        {
          size_t __buf_len = _M_in_end - _M_in_cur;
          if (__buf_len > 0)
            {
              size_t __remaining = __n - __ret;
              size_t __len = min(__buf_len, __remaining);
              traits_type::copy(__s, _M_in_cur, __len);
              __ret += __len;
              __s += __len;
              _M_in_cur_move(__len);
            }

          if (__ret < __n)
            {
              int_type __c = this->uflow();
              if (__c != traits_type::eof())
                {
                  traits_type::assign(*__s++, traits_type::to_char_type(__c));
                  ++__ret;
                }
              else
                break;
            }
        }
      return __ret;
    }






  template< _CharT, _Traits>
    streamsize
    basic_streambuf<_CharT, _Traits>::
    xsputn(const char_type* __s, streamsize __n)
    {
      streamsize __ret = 0;
      while (__ret < __n)
        {
          off_type __buf_len = _M_out_buf_size();
          if (__buf_len > 0)
            {
              off_type __remaining = __n - __ret;
              off_type __len = min(__buf_len, __remaining);
              traits_type::copy(_M_out_cur, __s, __len);
              __ret += __len;
              __s += __len;
              _M_out_cur_move(__len);
            }

          if (__ret < __n)
            {
              int_type __c = this->overflow(traits_type::to_int_type(*__s));
              if (__c != traits_type::eof())
                {
                  ++__ret;
                  ++__s;
                }
              else
                break;
            }
        }
      return __ret;
    }





  template< _CharT, _Traits>
    streamsize
    __copy_streambufs(basic_ios<_CharT, _Traits>& __ios,
                      basic_streambuf<_CharT, _Traits>* __sbin,
                      basic_streambuf<_CharT, _Traits>* __sbout)
  {
      typedef _Traits::int_type int_type;

      streamsize __ret = 0;
      streamsize __bufsize = __sbin->in_avail();
      streamsize __xtrct;
      bool __testput = __sbout->_M_mode & ios_base::out;
      try
        {
          while (__testput && __bufsize != -1)
            {
              __xtrct = __sbout->sputn(__sbin->gptr(), __bufsize);
              __ret += __xtrct;
              __sbin->_M_in_cur_move(__xtrct);
              if (__xtrct == __bufsize)
                {
                  if (__sbin->sgetc() == _Traits::eof())
                    break;
                  __bufsize = __sbin->in_avail();
                }
              else
                break;
            }
        }
      catch(exception& __fail)
        {
          __ios.setstate(ios_base::failbit);
          if ((__ios.exceptions() & ios_base::failbit) != 0)
            throw;
        }
      return __ret;
    }




  extern template class basic_streambuf<char>;
  extern template
    streamsize
    __copy_streambufs(basic_ios<char>&, basic_streambuf<char>*,
                      basic_streambuf<char>*);

  extern template class basic_streambuf<wchar_t>;
  extern template
    streamsize
    __copy_streambufs(basic_ios<wchar_t>&, basic_streambuf<wchar_t>*,
                      basic_streambuf<wchar_t>*);
}
# 536 "/usr/local/include/g++-v3/streambuf" 2 3
# 51 "/usr/local/include/g++-v3/ios" 2 3
# 1 "/usr/local/include/g++-v3/bits/basic_ios.h" 1 3
# 39 "/usr/local/include/g++-v3/bits/basic_ios.h" 3

# 1 "/usr/local/include/g++-v3/bits/streambuf_iterator.h" 1 3
# 41 "/usr/local/include/g++-v3/bits/streambuf_iterator.h" 3

namespace std
{
  template< _CharT, _Traits>
    class ostreambuf_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef basic_streambuf<_CharT, _Traits> streambuf_type;
      typedef basic_ostream<_CharT, _Traits> ostream_type;

    private:
      streambuf_type* _M_sbuf;
      bool _M_failed;

    public:
      inline
      ostreambuf_iterator(ostream_type& __s) throw ()
      : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }

      ostreambuf_iterator(streambuf_type* __s) throw ()
      : _M_sbuf(__s), _M_failed(!_M_sbuf) { }

      ostreambuf_iterator&
      operator=(_CharT __c);

      ostreambuf_iterator&
      operator*() throw()
      { return *this; }

      ostreambuf_iterator&
      operator++(int) throw()
      { return *this; }

      ostreambuf_iterator&
      operator++() throw()
      { return *this; }

      bool
      failed() const throw()
      { return _M_failed; }
    };

  template< _CharT, _Traits>
    inline ostreambuf_iterator<_CharT, _Traits>&
    ostreambuf_iterator<_CharT, _Traits>::operator=(_CharT __c)
    {
      if (!_M_failed &&
          _Traits::eq_int_type(_M_sbuf->sputc(__c),_Traits::eof()))
      _M_failed = true;
      return *this;
    }



  template< _CharT, _Traits>
    class istreambuf_iterator
    : public iterator<input_iterator_tag, _CharT, _Traits::off_type,
                      _CharT*, _CharT&>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef _Traits::int_type int_type;
      typedef basic_streambuf<_CharT, _Traits> streambuf_type;
      typedef basic_istream<_CharT, _Traits> istream_type;

    private:







      streambuf_type* _M_sbuf;
      int_type _M_c;

    public:
      istreambuf_iterator() throw()
      : _M_sbuf(__null), _M_c(-2) { }

      istreambuf_iterator(istream_type& __s) throw()
      : _M_sbuf(__s.rdbuf()), _M_c(-2) { }

      istreambuf_iterator(streambuf_type* __s) throw()
      : _M_sbuf(__s), _M_c(-2) { }




      char_type
      operator*() const
      {

        char_type __ret;
        if (_M_sbuf && _M_c != static_cast<int_type>(-2))
          __ret = _M_c;
        else if (_M_sbuf)
          __ret = traits_type::to_char_type(_M_sbuf->sgetc());
        else
          __ret = static_cast<char_type>(traits_type::eof());
        return __ret;
      }

      istreambuf_iterator&
      operator++()
      {
        if (_M_sbuf)
          _M_sbuf->sbumpc();
        _M_c = -2;
        return *this;
      }

      istreambuf_iterator
      operator++(int)
      {
        istreambuf_iterator __old = *this;
        if (_M_sbuf)
          __old._M_c = _M_sbuf->sbumpc();
        _M_c = -2;
        return __old;
      }

      bool
      equal(const istreambuf_iterator& __b)
      {
        int_type __eof = traits_type::eof();
        bool __thiseof = !_M_sbuf || _M_sbuf->sgetc() == __eof;
        bool __beof = !__b._M_sbuf || __b._M_sbuf->sgetc() == __eof;
        return (__thiseof && __beof || (!__thiseof && !__beof));
      }




      bool
      equal(const istreambuf_iterator& __b) const
      {
        int_type __eof = traits_type::eof();
        bool __thiseof = !_M_sbuf || _M_sbuf->sgetc() == __eof;
        bool __beof = !__b._M_sbuf || __b._M_sbuf->sgetc() == __eof;
        return (__thiseof && __beof || (!__thiseof && !__beof));
      }

    };

  template< _CharT, _Traits>
    inline bool
    operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
               const istreambuf_iterator<_CharT, _Traits>& __b)
    { return __a.equal(__b); }

  template< _CharT, _Traits>
    inline bool
    operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
               const istreambuf_iterator<_CharT, _Traits>& __b)
    { return !__a.equal(__b); }
}
# 41 "/usr/local/include/g++-v3/bits/basic_ios.h" 2 3
# 1 "/usr/local/include/g++-v3/bits/locale_facets.h" 1 3
# 44 "/usr/local/include/g++-v3/bits/locale_facets.h" 3





# 1 "/usr/local/include/g++-v3/ios" 1 3
# 50 "/usr/local/include/g++-v3/bits/locale_facets.h" 2 3

namespace std
{


# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/ctype_base.h" 1 3
# 36 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/ctype_base.h" 3
  struct ctype_base
  {

    typedef const int* __to_type;



    typedef unsigned int mask;
    static const mask upper = 0x400;
    static const mask lower = 0x040;
    static const mask alpha = 0x001;
    static const mask digit = 0x010;
    static const mask xdigit = 0x800;
    static const mask space = 0x200;
    static const mask print = 0x080;
    static const mask graph = 0x020;
    static const mask cntrl = 0x008;
    static const mask punct = 0x100;
    static const mask alnum = 0x002;
  };
# 56 "/usr/local/include/g++-v3/bits/locale_facets.h" 2 3


  template< _CharT>
    class __ctype_abstract_base : public locale::facet, public ctype_base
    {
    public:

      typedef _CharT char_type;

      bool
      is(mask __m, char_type __c) const
      { return this->do_is(__m, __c); }

      const char_type*
      is(const char_type *__lo, const char_type *__hi, mask *__vec) const
      { return this->do_is(__lo, __hi, __vec); }

      const char_type*
      scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
      { return this->do_scan_is(__m, __lo, __hi); }

      const char_type*
      scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
      { return this->do_scan_not(__m, __lo, __hi); }

      char_type
      toupper(char_type __c) const
      { return this->do_toupper(__c); }

      const char_type*
      toupper(char_type *__lo, const char_type* __hi) const
      { return this->do_toupper(__lo, __hi); }

      char_type
      tolower(char_type __c) const
      { return this->do_tolower(__c); }

      const char_type*
      tolower(char_type* __lo, const char_type* __hi) const
      { return this->do_tolower(__lo, __hi); }

      char_type
      widen(char __c) const
      { return this->do_widen(__c); }

      const char*
      widen(const char* __lo, const char* __hi, char_type* __to) const
      { return this->do_widen(__lo, __hi, __to); }

      char
      narrow(char_type __c, char __dfault) const
      { return this->do_narrow(__c, __dfault); }

      const char_type*
      narrow(const char_type* __lo, const char_type* __hi,
              char __dfault, char *__to) const
      { return this->do_narrow(__lo, __hi, __dfault, __to); }

    protected:
      explicit
      __ctype_abstract_base(size_t __refs = 0): locale::facet(__refs) { }

      virtual
      ~__ctype_abstract_base() { }

      virtual bool
      do_is(mask __m, char_type __c) const = 0;

      virtual const char_type*
      do_is(const char_type* __lo, const char_type* __hi,
            mask* __vec) const = 0;

      virtual const char_type*
      do_scan_is(mask __m, const char_type* __lo,
                 const char_type* __hi) const = 0;

      virtual const char_type*
      do_scan_not(mask __m, const char_type* __lo,
                  const char_type* __hi) const = 0;

      virtual char_type
      do_toupper(char_type) const = 0;

      virtual const char_type*
      do_toupper(char_type* __lo, const char_type* __hi) const = 0;

      virtual char_type
      do_tolower(char_type) const = 0;

      virtual const char_type*
      do_tolower(char_type* __lo, const char_type* __hi) const = 0;

      virtual char_type
      do_widen(char) const = 0;

      virtual const char*
      do_widen(const char* __lo, const char* __hi,
               char_type* __dest) const = 0;

      virtual char
      do_narrow(char_type, char __dfault) const = 0;

      virtual const char_type*
      do_narrow(const char_type* __lo, const char_type* __hi,
                 char __dfault, char* __dest) const = 0;
    };


  template< _CharT>
    class ctype : public __ctype_abstract_base<_CharT>
    {
    public:

      typedef _CharT char_type;
      typedef ctype::mask mask;

      explicit
      ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }

      static locale::id id;

   protected:
      virtual
      ~ctype();

      virtual bool
      do_is(mask __m, char_type __c) const;

      virtual const char_type*
      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;

      virtual const char_type*
      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;

      virtual const char_type*
      do_scan_not(mask __m, const char_type* __lo,
                  const char_type* __hi) const;

      virtual char_type
      do_toupper(char_type __c) const;

      virtual const char_type*
      do_toupper(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_tolower(char_type __c) const;

      virtual const char_type*
      do_tolower(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_widen(char __c) const;

      virtual const char*
      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;

      virtual char
      do_narrow(char_type, char __dfault) const;

      virtual const char_type*
      do_narrow(const char_type* __lo, const char_type* __hi,
                char __dfault, char* __dest) const;
    };

  template< _CharT>
    locale::id ctype<_CharT>::id;


  template<>
    class ctype<char> : public __ctype_abstract_base<char>
    {
    public:

      typedef char char_type;

    protected:

      __c_locale _M_c_locale_ctype;
      bool _M_del;
      __to_type _M_toupper;
      __to_type _M_tolower;
      const mask* _M_table;

    public:
      static locale::id id;
      static const size_t table_size = 1 + static_cast<unsigned char>(-1);

      explicit
      ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);

      explicit
      ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false,
            size_t __refs = 0);

      inline bool
      is(mask __m, char __c) const;

      inline const char*
      is(const char* __lo, const char* __hi, mask* __vec) const;

      inline const char*
      scan_is(mask __m, const char* __lo, const char* __hi) const;

      inline const char*
      scan_not(mask __m, const char* __lo, const char* __hi) const;

    protected:
      const mask*
      table() const throw()
      { return _M_table; }

      static const mask*
      classic_table() throw();

      virtual
      ~ctype();

      virtual bool
      do_is(mask __m, char_type __c) const;

      virtual const char_type*
      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;

      virtual const char_type*
      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;

      virtual const char_type*
      do_scan_not(mask __m, const char_type* __lo,
                  const char_type* __hi) const;

      virtual char_type
      do_toupper(char_type) const;

      virtual const char_type*
      do_toupper(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_tolower(char_type) const;

      virtual const char_type*
      do_tolower(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_widen(char) const;

      virtual const char*
      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;

      virtual char
      do_narrow(char_type, char __dfault) const;

      virtual const char_type*
      do_narrow(const char_type* __lo, const char_type* __hi,
                char __dfault, char* __dest) const;
    };

  template<>
    const ctype<char>&
    use_facet<ctype<char> >(const locale& __loc);
# 392 "/usr/local/include/g++-v3/bits/locale_facets.h" 3
# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/ctype_inline.h" 1 3
# 37 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/ctype_inline.h" 3
  bool
  ctype<char>::
  is(mask __m, char __c) const
  { return _M_table[(unsigned char)(__c)] & __m; }

  const char*
  ctype<char>::
  is(const char* __low, const char* __high, mask* __vec) const
  {
    const int __bitmasksize = 11;
    for (;__low < __high; ++__vec, ++__low)
      {
        mask __m = _M_table[*__low];
        int __i = 0;
        while (__i < __bitmasksize && !(__m & static_cast<mask>(1 << __i)))
          ++__i;
        *__vec = static_cast<mask>(1 << __i);
      }
    return __high;
  }

  const char*
  ctype<char>::
  scan_is(mask __m, const char* __low, const char* __high) const
  {
    while (__low < __high && !this->is(__m, *__low))
      ++__low;
    return __low;
  }

  const char*
  ctype<char>::
  scan_not(mask __m, const char* __low, const char* __high) const
  {
    while (__low < __high && this->is(__m, *__low) != 0)
      ++__low;
    return __low;
  }
# 393 "/usr/local/include/g++-v3/bits/locale_facets.h" 2 3


  template< _CharT>
    class ctype_byname : public ctype<_CharT>
    {
    public:
      typedef _CharT char_type;

      explicit
      ctype_byname(const char* __s, size_t __refs = 0);

    protected:
      virtual
      ~ctype_byname() { };
    };


  template<>
    ctype_byname<char>::ctype_byname(const char*, size_t refs);

  template<>
    ctype_byname<wchar_t>::ctype_byname(const char*, size_t refs);


# 1 "/usr/local/include/g++-v3/bits/codecvt.h" 1 3
# 45 "/usr/local/include/g++-v3/bits/codecvt.h" 3


  class codecvt_base
  {
  public:
    enum result
    {
      ok,
      partial,
      error,
      noconv
    };
  };





  template< _InternT, _ExternT, _StateT>
    class __codecvt_abstract_base
    : public locale::facet, public codecvt_base
    {
    public:

      typedef codecvt_base::result result;
      typedef _InternT intern_type;
      typedef _ExternT extern_type;
      typedef _StateT state_type;


      result
      out(state_type& __state, const intern_type* __from,
          const intern_type* __from_end, const intern_type*& __from_next,
          extern_type* __to, extern_type* __to_end,
          extern_type*& __to_next) const
      {
        return this->do_out(__state, __from, __from_end, __from_next,
                            __to, __to_end, __to_next);
      }

      result
      unshift(state_type& __state, extern_type* __to, extern_type* __to_end,
              extern_type*& __to_next) const
      { return this->do_unshift(__state, __to,__to_end,__to_next); }

      result
      in(state_type& __state, const extern_type* __from,
         const extern_type* __from_end, const extern_type*& __from_next,
         intern_type* __to, intern_type* __to_end,
         intern_type*& __to_next) const
      {
        return this->do_in(__state, __from, __from_end, __from_next,
                           __to, __to_end, __to_next);
      }

      int
      encoding() const throw()
      { return this->do_encoding(); }

      bool
      always_noconv() const throw()
      { return this->do_always_noconv(); }

      int
      length(const state_type& __state, const extern_type* __from,
             const extern_type* __end, size_t __max) const
      { return this->do_length(__state, __from, __end, __max); }

      int
      max_length() const throw()
      { return this->do_max_length(); }

    protected:
      explicit
      __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { }

      virtual
      ~__codecvt_abstract_base() { }

      virtual result
      do_out(state_type& __state, const intern_type* __from,
             const intern_type* __from_end, const intern_type*& __from_next,
             extern_type* __to, extern_type* __to_end,
             extern_type*& __to_next) const = 0;

      virtual result
      do_unshift(state_type& __state, extern_type* __to,
                 extern_type* __to_end, extern_type*& __to_next) const = 0;

      virtual result
      do_in(state_type& __state, const extern_type* __from,
            const extern_type* __from_end, const extern_type*& __from_next,
            intern_type* __to, intern_type* __to_end,
            intern_type*& __to_next) const = 0;

      virtual int
      do_encoding() const throw() = 0;

      virtual bool
      do_always_noconv() const throw() = 0;

      virtual int
      do_length(const state_type&, const extern_type* __from,
                const extern_type* __end, size_t __max) const = 0;

      virtual int
      do_max_length() const throw() = 0;
    };



  template< _InternT, _ExternT, _StateT>
    class codecvt
    : public __codecvt_abstract_base<_InternT, _ExternT, _StateT>
    {
    public:

      typedef codecvt_base::result result;
      typedef _InternT intern_type;
      typedef _ExternT extern_type;
      typedef _StateT state_type;


      static locale::id id;

      explicit
      codecvt(size_t __refs = 0)
      : __codecvt_abstract_base<_InternT,_ExternT,_StateT> (__refs) { }

    protected:
      virtual
      ~codecvt() { }

      virtual result
      do_out(state_type& __state, const intern_type* __from,
             const intern_type* __from_end, const intern_type*& __from_next,
             extern_type* __to, extern_type* __to_end,
             extern_type*& __to_next) const;

      virtual result
      do_unshift(state_type& __state, extern_type* __to,
                 extern_type* __to_end, extern_type*& __to_next) const;

      virtual result
      do_in(state_type& __state, const extern_type* __from,
            const extern_type* __from_end, const extern_type*& __from_next,
            intern_type* __to, intern_type* __to_end,
            intern_type*& __to_next) const;

      virtual int
      do_encoding() const throw();

      virtual bool
      do_always_noconv() const throw();

      virtual int
      do_length(const state_type&, const extern_type* __from,
                const extern_type* __end, size_t __max) const;

      virtual int
      do_max_length() const throw();
    };

  template< _InternT, _ExternT, _StateT>
    locale::id codecvt<_InternT, _ExternT, _StateT>::id;


  template<>
    class codecvt<char, char, mbstate_t>
    : public __codecvt_abstract_base<char, char, mbstate_t>
    {
    public:

      typedef char intern_type;
      typedef char extern_type;
      typedef mbstate_t state_type;


      static locale::id id;

      explicit
      codecvt(size_t __refs = 0);

    protected:
      virtual
      ~codecvt();

      virtual result
      do_out(state_type& __state, const intern_type* __from,
             const intern_type* __from_end, const intern_type*& __from_next,
             extern_type* __to, extern_type* __to_end,
             extern_type*& __to_next) const;

      virtual result
      do_unshift(state_type& __state, extern_type* __to,
                 extern_type* __to_end, extern_type*& __to_next) const;

      virtual result
      do_in(state_type& __state, const extern_type* __from,
            const extern_type* __from_end, const extern_type*& __from_next,
            intern_type* __to, intern_type* __to_end,
            intern_type*& __to_next) const;

      virtual int
      do_encoding() const throw();

      virtual bool
      do_always_noconv() const throw();

      virtual int
      do_length(const state_type&, const extern_type* __from,
                const extern_type* __end, size_t __max) const;

      virtual int
      do_max_length() const throw();
  };
# 318 "/usr/local/include/g++-v3/bits/codecvt.h" 3
  template< _InternT, _ExternT, _StateT>
    class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT>
    {
    public:
      explicit
      codecvt_byname(const char*, size_t __refs = 0)
      : codecvt<_InternT, _ExternT, _StateT>(__refs) { }
    protected:
      virtual
      ~codecvt_byname() { }
    };
# 418 "/usr/local/include/g++-v3/bits/locale_facets.h" 2 3



  class __num_base
  {
  protected:

    static const double _S_scale_hex;


    static const double _S_scale_oct;



    static const char _S_atoms[];

    enum
    {
      _M_zero,
      _M_e = _M_zero + 10,
      _M_E = _M_zero + 11,
      _M_size = 21 + 1
    };



    static bool
    _S_format_float(const ios_base& __io, char* __fptr, char __mod,
                    streamsize __prec);


    static void
    _S_format_int(const ios_base& __io, char* __fptr, char __mod, char __modl);
  };


  template< _CharT>
    class numpunct : public locale::facet
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

    private:
      char_type _M_decimal_point;
      char_type _M_thousands_sep;
      string _M_grouping;
      string_type _M_truename;
      string_type _M_falsename;

    public:
      explicit
      numpunct(size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_numpunct(); }

      explicit
      numpunct(__c_locale __cloc, size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_numpunct(__cloc); }

      char_type
      decimal_point() const
      { return this->do_decimal_point(); }

      char_type
      thousands_sep() const
      { return this->do_thousands_sep(); }

      string
      grouping() const
      { return this->do_grouping(); }

      string_type
      truename() const
      { return this->do_truename(); }

      string_type
      falsename() const
      { return this->do_falsename(); }

    protected:
      virtual
      ~numpunct() { }

      virtual char_type
      do_decimal_point() const
      { return _M_decimal_point; }

      virtual char_type
      do_thousands_sep() const
      { return _M_thousands_sep; }

      virtual string
      do_grouping() const
      { return _M_grouping; }

      virtual string_type
      do_truename() const
      { return _M_truename; }

      virtual string_type
      do_falsename() const
      { return _M_falsename; }


      void
      _M_initialize_numpunct(__c_locale __cloc = __null);
    };

  template< _CharT>
    locale::id numpunct<_CharT>::id;

  template<>
    void
    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc);







  template< _CharT>
    class numpunct_byname : public numpunct<_CharT>
    {

      __c_locale _M_c_locale_numpunct;

    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      explicit
      numpunct_byname(const char* __s, size_t __refs = 0)
      : numpunct<_CharT>(__refs)
      {
        _S_create_c_locale(_M_c_locale_numpunct, __s);
        _M_initialize_numpunct(_M_c_locale_numpunct);
      }

    protected:
      virtual
      ~numpunct_byname()
      { _S_destroy_c_locale(_M_c_locale_numpunct); }
    };

  template< _CharT, _InIter>
    class num_get : public locale::facet, public __num_base
    {
    public:

      typedef _CharT char_type;
      typedef _InIter iter_type;

      static locale::id id;

      explicit
      num_get(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, bool& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, long& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned short& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned int& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned long& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, long long& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned long long& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, float& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, double& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, long double& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, void*& __v) const
      { return this->do_get(__in, __end, __io, __err, __v); }

    protected:
      virtual ~num_get() { }

      iter_type
      _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
                       string& __xtrc) const;

      iter_type
      _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
                     string& __xtrc, int& __base) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, long&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
              unsigned short&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             unsigned int&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             unsigned long&) const;


      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             long long&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             unsigned long long&) const;


      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             float&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             double&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             long double&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             void*&) const;
    };

  template< _CharT, _InIter>
    locale::id num_get<_CharT, _InIter>::id;

  template< _CharT, _OutIter>
    class num_put : public locale::facet, public __num_base
    {
    public:

      typedef _CharT char_type;
      typedef _OutIter iter_type;

      static locale::id id;

      explicit
      num_put(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, bool __v) const
      { return this->do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, long __v) const
      { return this->do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          unsigned long __v) const
      { return this->do_put(__s, __f, __fill, __v); }


      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, long long __v) const
      { return this->do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          unsigned long long __v) const
      { return this->do_put(__s, __f, __fill, __v); }


      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, double __v) const
      { return this->do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          long double __v) const
      { return this->do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          const void* __v) const
      { return this->do_put(__s, __f, __fill, __v); }

    protected:
      template< _ValueT>
        iter_type
        _M_convert_float(iter_type, ios_base& __io, char_type __fill,
                         char __mod, _ValueT __v) const;

      template< _ValueT>
        iter_type
        _M_convert_int(iter_type, ios_base& __io, char_type __fill,
                       char __mod, char __modl, _ValueT __v) const;

      iter_type
      _M_widen_float(iter_type, ios_base& __io, char_type __fill, char* __cs,
                     int __len) const;

      iter_type
      _M_widen_int(iter_type, ios_base& __io, char_type __fill, char* __cs,
                   int __len) const;

      iter_type
      _M_insert(iter_type, ios_base& __io, char_type __fill,
                const char_type* __ws, int __len) const;

      virtual
      ~num_put() { };

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, bool __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, long __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, unsigned long) const;


      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, long long __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, unsigned long long) const;


      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, double __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, long double __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, const void* __v) const;
    };

  template < _CharT, _OutIter>
    locale::id num_put<_CharT, _OutIter>::id;


  template< _CharT>
    class collate : public locale::facet
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

    protected:


      __c_locale _M_c_locale_collate;

    public:
      static locale::id id;

      explicit
      collate(size_t __refs = 0)
      : locale::facet(__refs)
      { _M_c_locale_collate = _S_clone_c_locale(_S_c_locale); }


      explicit
      collate(__c_locale __cloc, size_t __refs = 0)
      : locale::facet(__refs)
      { _M_c_locale_collate = _S_clone_c_locale(__cloc); }

      int
      compare(const _CharT* __lo1, const _CharT* __hi1,
              const _CharT* __lo2, const _CharT* __hi2) const
      { return this->do_compare(__lo1, __hi1, __lo2, __hi2); }

      string_type
      transform(const _CharT* __lo, const _CharT* __hi) const
      { return this->do_transform(__lo, __hi); }

      long
      hash(const _CharT* __lo, const _CharT* __hi) const
      { return this->do_hash(__lo, __hi); }


      int
      _M_compare_helper(const _CharT*, const _CharT*) const;

      size_t
      _M_transform_helper(_CharT*, const _CharT*, size_t) const;

  protected:
      virtual
      ~collate()
      { _S_destroy_c_locale(_M_c_locale_collate); }

      virtual int
      do_compare(const _CharT* __lo1, const _CharT* __hi1,
                 const _CharT* __lo2, const _CharT* __hi2) const;

      virtual string_type
      do_transform(const _CharT* __lo, const _CharT* __hi) const;

      virtual long
      do_hash(const _CharT* __lo, const _CharT* __hi) const;
    };

  template< _CharT>
    locale::id collate<_CharT>::id;


  template<>
    int
    collate<char>::_M_compare_helper(const char*, const char*) const;

  template<>
    size_t
    collate<char>::_M_transform_helper(char*, const char*, size_t) const;
# 889 "/usr/local/include/g++-v3/bits/locale_facets.h" 3
  template< _CharT>
    class collate_byname : public collate<_CharT>
    {
    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      explicit
      collate_byname(const char* __s, size_t __refs = 0)
      : collate<_CharT>(__refs)
      {
        _S_destroy_c_locale(_M_c_locale_collate);
        _S_create_c_locale(_M_c_locale_collate, __s);
      }

    protected:
      virtual
      ~collate_byname() { }
    };


  class time_base
  {
  public:
    enum dateorder { no_order, dmy, mdy, ymd, ydm };
  };

  template< _CharT>
    class __timepunct : public locale::facet
    {
    public:

      typedef _CharT __char_type;
      typedef basic_string<_CharT> __string_type;

      static locale::id id;


      static const _CharT* _S_timezones[14];

    protected:
      __c_locale _M_c_locale_timepunct;
      const char* _M_name_timepunct;
      const _CharT* _M_date_format;
      const _CharT* _M_date_era_format;
      const _CharT* _M_time_format;
      const _CharT* _M_time_era_format;
      const _CharT* _M_date_time_format;
      const _CharT* _M_date_time_era_format;
      const _CharT* _M_am;
      const _CharT* _M_pm;
      const _CharT* _M_am_pm_format;


      const _CharT* _M_day1;
      const _CharT* _M_day2;
      const _CharT* _M_day3;
      const _CharT* _M_day4;
      const _CharT* _M_day5;
      const _CharT* _M_day6;
      const _CharT* _M_day7;


      const _CharT* _M_day_a1;
      const _CharT* _M_day_a2;
      const _CharT* _M_day_a3;
      const _CharT* _M_day_a4;
      const _CharT* _M_day_a5;
      const _CharT* _M_day_a6;
      const _CharT* _M_day_a7;


      const _CharT* _M_month01;
      const _CharT* _M_month02;
      const _CharT* _M_month03;
      const _CharT* _M_month04;
      const _CharT* _M_month05;
      const _CharT* _M_month06;
      const _CharT* _M_month07;
      const _CharT* _M_month08;
      const _CharT* _M_month09;
      const _CharT* _M_month10;
      const _CharT* _M_month11;
      const _CharT* _M_month12;


      const _CharT* _M_month_a01;
      const _CharT* _M_month_a02;
      const _CharT* _M_month_a03;
      const _CharT* _M_month_a04;
      const _CharT* _M_month_a05;
      const _CharT* _M_month_a06;
      const _CharT* _M_month_a07;
      const _CharT* _M_month_a08;
      const _CharT* _M_month_a09;
      const _CharT* _M_month_a10;
      const _CharT* _M_month_a11;
      const _CharT* _M_month_a12;

    public:
      explicit
      __timepunct(size_t __refs = 0)
      : locale::facet(__refs), _M_name_timepunct("C")
      { _M_initialize_timepunct(); }

      explicit
      __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0)
      : locale::facet(__refs), _M_name_timepunct(__s)
      { _M_initialize_timepunct(__cloc); }

      void
      _M_put_helper(_CharT* __s, size_t __maxlen, const _CharT* __format,
                    const tm* __tm) const;

      void
      _M_date_formats(const _CharT** __date) const
      {

        __date[0] = _M_date_format;
        __date[1] = _M_date_era_format;
      }

      void
      _M_time_formats(const _CharT** __time) const
      {

        __time[0] = _M_time_format;
        __time[1] = _M_time_era_format;
      }

      void
      _M_ampm(const _CharT** __ampm) const
      {
        __ampm[0] = _M_am;
        __ampm[1] = _M_pm;
      }

      void
      _M_date_time_formats(const _CharT** __dt) const
      {

        __dt[0] = _M_date_time_format;
        __dt[1] = _M_date_time_era_format;
      }

      void
      _M_days(const _CharT** __days) const
      {
        __days[0] = _M_day1;
        __days[1] = _M_day2;
        __days[2] = _M_day3;
        __days[3] = _M_day4;
        __days[4] = _M_day5;
        __days[5] = _M_day6;
        __days[6] = _M_day7;
      }

      void
      _M_days_abbreviated(const _CharT** __days) const
      {
        __days[0] = _M_day_a1;
        __days[1] = _M_day_a2;
        __days[2] = _M_day_a3;
        __days[3] = _M_day_a4;
        __days[4] = _M_day_a5;
        __days[5] = _M_day_a6;
        __days[6] = _M_day_a7;
      }

      void
      _M_months(const _CharT** __months) const
      {
        __months[0] = _M_month01;
        __months[1] = _M_month02;
        __months[2] = _M_month03;
        __months[3] = _M_month04;
        __months[4] = _M_month05;
        __months[5] = _M_month06;
        __months[6] = _M_month07;
        __months[7] = _M_month08;
        __months[8] = _M_month09;
        __months[9] = _M_month10;
        __months[10] = _M_month11;
        __months[11] = _M_month12;
      }

      void
      _M_months_abbreviated(const _CharT** __months) const
      {
        __months[0] = _M_month_a01;
        __months[1] = _M_month_a02;
        __months[2] = _M_month_a03;
        __months[3] = _M_month_a04;
        __months[4] = _M_month_a05;
        __months[5] = _M_month_a06;
        __months[6] = _M_month_a07;
        __months[7] = _M_month_a08;
        __months[8] = _M_month_a09;
        __months[9] = _M_month_a10;
        __months[10] = _M_month_a11;
        __months[11] = _M_month_a12;
      }

    protected:
      virtual
      ~__timepunct()
      {
        if (_M_c_locale_timepunct)
          _S_destroy_c_locale(_M_c_locale_timepunct);
      }


      void
      _M_initialize_timepunct(__c_locale __cloc = __null);
    };

  template< _CharT>
    locale::id __timepunct<_CharT>::id;


  template<>
    const char*
    __timepunct<char>::_S_timezones[14];

  template<>
    void
    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc);

  template<>
    void
    __timepunct<char>::_M_put_helper(char*, size_t, const char*,
                                     const tm*) const;
# 1138 "/usr/local/include/g++-v3/bits/locale_facets.h" 3
  template< _CharT>
    const _CharT* __timepunct<_CharT>::_S_timezones[14];


  template< _CharT, _InIter>
    class time_get : public locale::facet, public time_base
    {
    public:

      typedef _CharT char_type;
      typedef _InIter iter_type;
      typedef basic_string<_CharT> __string_type;

      static locale::id id;

      explicit
      time_get(size_t __refs = 0)
      : locale::facet (__refs) { }

      dateorder
      date_order() const
      { return this->do_date_order(); }

      iter_type
      get_time(iter_type __beg, iter_type __end, ios_base& __io,
               ios_base::iostate& __err, tm* __tm) const
      { return this->do_get_time(__beg, __end, __io, __err, __tm); }

      iter_type
      get_date(iter_type __beg, iter_type __end, ios_base& __io,
               ios_base::iostate& __err, tm* __tm) const
      { return this->do_get_date(__beg, __end, __io, __err, __tm); }

      iter_type
      get_weekday(iter_type __beg, iter_type __end, ios_base& __io,
                  ios_base::iostate& __err, tm* __tm) const
      { return this->do_get_weekday(__beg, __end, __io, __err, __tm); }

      iter_type
      get_monthname(iter_type __beg, iter_type __end, ios_base& __io,
                    ios_base::iostate& __err, tm* __tm) const
      { return this->do_get_monthname(__beg, __end, __io, __err, __tm); }

      iter_type
      get_year(iter_type __beg, iter_type __end, ios_base& __io,
               ios_base::iostate& __err, tm* __tm) const
      { return this->do_get_year(__beg, __end, __io, __err, __tm); }

    protected:
      virtual
      ~time_get() { }

      virtual dateorder
      do_date_order() const;

      virtual iter_type
      do_get_time(iter_type __beg, iter_type __end, ios_base& __io,
                  ios_base::iostate& __err, tm* __tm) const;

      virtual iter_type
      do_get_date(iter_type __beg, iter_type __end, ios_base& __io,
                  ios_base::iostate& __err, tm* __tm) const;

      virtual iter_type
      do_get_weekday(iter_type __beg, iter_type __end, ios_base&,
                     ios_base::iostate& __err, tm* __tm) const;

      virtual iter_type
      do_get_monthname(iter_type __beg, iter_type __end, ios_base&,
                       ios_base::iostate& __err, tm* __tm) const;

      virtual iter_type
      do_get_year(iter_type __beg, iter_type __end, ios_base& __io,
                  ios_base::iostate& __err, tm* __tm) const;


      void
      _M_extract_num(iter_type& __beg, iter_type& __end, int& __member,
                     int __min, int __max, size_t __len,
                     const ctype<_CharT>& __ctype,
                     ios_base::iostate& __err) const;



      void
      _M_extract_name(iter_type& __beg, iter_type& __end, int& __member,
                      const _CharT** __names, size_t __indexlen,
                      ios_base::iostate& __err) const;


      void
      _M_extract_via_format(iter_type& __beg, iter_type& __end, ios_base& __io,
                            ios_base::iostate& __err, tm* __tm,
                            const _CharT* __format) const;
    };

  template< _CharT, _InIter>
    locale::id time_get<_CharT, _InIter>::id;

  template< _CharT, _InIter>
    class time_get_byname : public time_get<_CharT, _InIter>
    {
    public:

      typedef _CharT char_type;
      typedef _InIter iter_type;

      explicit
      time_get_byname(const char*, size_t __refs = 0)
      : time_get<_CharT, _InIter>(__refs) { }

    protected:
      virtual
      ~time_get_byname() { }
    };

  template< _CharT, _OutIter>
    class time_put : public locale::facet, public time_base
    {
    public:

      typedef _CharT char_type;
      typedef _OutIter iter_type;

      static locale::id id;

      explicit
      time_put(size_t __refs = 0)
      : locale::facet(__refs) { }

      iter_type
      put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
          const _CharT* __beg, const _CharT* __end) const;

      iter_type
      put(iter_type __s, ios_base& __io, char_type __fill,
          const tm* __tm, char __format, char __mod = 0) const
      { return this->do_put(__s, __io, __fill, __tm, __format, __mod); }

    protected:
      virtual
      ~time_put()
      { }

      virtual iter_type
      do_put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
             char __format, char __mod) const;
    };

  template< _CharT, _OutIter>
    locale::id time_put<_CharT, _OutIter>::id;

  template< _CharT, _OutIter>
    class time_put_byname : public time_put<_CharT, _OutIter>
    {
    public:

      typedef _CharT char_type;
      typedef _OutIter iter_type;

      explicit
      time_put_byname(const char* , size_t __refs = 0)
      : time_put<_CharT, _OutIter>(__refs)
      { };

    protected:
      virtual
      ~time_put_byname() { }
    };


  class money_base
  {
  public:
    enum part { none, space, symbol, sign, value };
    struct pattern { char field[4]; };

    static const pattern _S_default_pattern;



    static pattern
    _S_construct_pattern(char __precedes, char __space, char __posn);
  };

  template< _CharT, bool _Intl>
    class moneypunct : public locale::facet, public money_base
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static const bool intl = _Intl;
      static locale::id id;

    private:
      char_type _M_decimal_point;
      char_type _M_thousands_sep;
      string _M_grouping;
      string_type _M_curr_symbol;
      string_type _M_positive_sign;
      string_type _M_negative_sign;
      int _M_frac_digits;
      pattern _M_pos_format;
      pattern _M_neg_format;

    public:
      explicit
      moneypunct(size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_moneypunct(); }

      explicit
      moneypunct(__c_locale __cloc, size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_moneypunct(__cloc); }

      char_type
      decimal_point() const
      { return this->do_decimal_point(); }

      char_type
      thousands_sep() const
      { return this->do_thousands_sep(); }

      string
      grouping() const
      { return this->do_grouping(); }

      string_type
      curr_symbol() const
      { return this->do_curr_symbol(); }

      string_type
      positive_sign() const
      { return this->do_positive_sign(); }

      string_type
      negative_sign() const
      { return this->do_negative_sign(); }

      int
      frac_digits() const
      { return this->do_frac_digits(); }

      pattern
      pos_format() const
      { return this->do_pos_format(); }

      pattern
      neg_format() const
      { return this->do_neg_format(); }

    protected:
      virtual
      ~moneypunct() { }

      virtual char_type
      do_decimal_point() const
      { return _M_decimal_point; }

      virtual char_type
      do_thousands_sep() const
      { return _M_thousands_sep; }

      virtual string
      do_grouping() const
      { return _M_grouping; }

      virtual string_type
      do_curr_symbol() const
      { return _M_curr_symbol; }

      virtual string_type
      do_positive_sign() const
      { return _M_positive_sign; }

      virtual string_type
      do_negative_sign() const
      { return _M_negative_sign; }

      virtual int
      do_frac_digits() const
      { return _M_frac_digits; }

      virtual pattern
      do_pos_format() const
      { return _M_pos_format; }

      virtual pattern
      do_neg_format() const
      { return _M_neg_format; }


       void
       _M_initialize_moneypunct(__c_locale __cloc = __null);
    };

  template< _CharT, bool _Intl>
    locale::id moneypunct<_CharT, _Intl>::id;

  template< _CharT, bool _Intl>
    const bool moneypunct<_CharT, _Intl>::intl;

  template<>
    void
    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc);

  template<>
    void
    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc);
# 1459 "/usr/local/include/g++-v3/bits/locale_facets.h" 3
  template< _CharT, bool _Intl>
    class moneypunct_byname : public moneypunct<_CharT, _Intl>
    {
      __c_locale _M_c_locale_moneypunct;

    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static const bool intl = _Intl;

      explicit
      moneypunct_byname(const char* __s, size_t __refs = 0)
      : moneypunct<_CharT, _Intl>(__refs)
      {
        _S_create_c_locale(_M_c_locale_moneypunct, __s);
        _M_initialize_moneypunct(_M_c_locale_moneypunct);
      }

    protected:
      virtual
      ~moneypunct_byname()
      { _S_destroy_c_locale(_M_c_locale_moneypunct); }
    };

  template< _CharT, bool _Intl>
    const bool moneypunct_byname<_CharT, _Intl>::intl;

  template< _CharT, _InIter>
    class money_get : public locale::facet
    {
    public:

      typedef _CharT char_type;
      typedef _InIter iter_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

      explicit
      money_get(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
          ios_base::iostate& __err, long double& __units) const
      { return this->do_get(__s, __end, __intl, __io, __err, __units); }

      iter_type
      get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
          ios_base::iostate& __err, string_type& __digits) const
      { return this->do_get(__s, __end, __intl, __io, __err, __digits); }

    protected:
      virtual
      ~money_get() { }

      virtual iter_type
      do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
             ios_base::iostate& __err, long double& __units) const;

      virtual iter_type
      do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
             ios_base::iostate& __err, string_type& __digits) const;
    };

  template< _CharT, _InIter>
    locale::id money_get<_CharT, _InIter>::id;

  template< _CharT, _OutIter>
    class money_put : public locale::facet
    {
    public:
      typedef _CharT char_type;
      typedef _OutIter iter_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

      explicit
      money_put(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      put(iter_type __s, bool __intl, ios_base& __io,
          char_type __fill, long double __units) const
      { return this->do_put(__s, __intl, __io, __fill, __units); }

      iter_type
      put(iter_type __s, bool __intl, ios_base& __io,
          char_type __fill, const string_type& __digits) const
      { return this->do_put(__s, __intl, __io, __fill, __digits); }

    protected:
      virtual
      ~money_put() { }

      virtual iter_type
      do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
             long double __units) const;

      virtual iter_type
      do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
             const string_type& __digits) const;
    };

  template< _CharT, _OutIter>
    locale::id money_put<_CharT, _OutIter>::id;


  struct messages_base
  {
    typedef int catalog;
  };

  template< _CharT>
    class messages : public locale::facet, public messages_base
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

    protected:


      __c_locale _M_c_locale_messages;


      const char* _M_name_messages;


    public:
      static locale::id id;

      explicit
      messages(size_t __refs = 0)
      : locale::facet(__refs), _M_name_messages("C")
      { _M_c_locale_messages = _S_clone_c_locale(_S_c_locale); }


      explicit
      messages(__c_locale __cloc, const char* __name, size_t __refs = 0)
      : locale::facet(__refs)
      {
        _M_name_messages = __name;
        _M_c_locale_messages = _S_clone_c_locale(__cloc);
      }

      catalog
      open(const basic_string<char>& __s, const locale& __loc) const
      { return this->do_open(__s, __loc); }


      catalog
      open(const basic_string<char>&, const locale&, const char*) const;

      string_type
      get(catalog __c, int __set, int __msgid, const string_type& __s) const
      { return this->do_get(__c, __set, __msgid, __s); }

      void
      close(catalog __c) const
      { return this->do_close(__c); }

    protected:
      virtual
      ~messages()
       { _S_destroy_c_locale(_M_c_locale_messages); }

      virtual catalog
      do_open(const basic_string<char>&, const locale&) const;

      virtual string_type
      do_get(catalog, int, int, const string_type& __dfault) const;

      virtual void
      do_close(catalog) const;


      char*
      _M_convert_to_char(const string_type& __msg) const
      {

        return reinterpret_cast<char*>(const_cast<_CharT*>(__msg.c_str()));
      }


      string_type
      _M_convert_from_char(char* __msg) const
      {

        size_t __len = char_traits<char>::length(__msg) - 1;
# 1681 "/usr/local/include/g++-v3/bits/locale_facets.h" 3
        return string_type();
      }
     };

  template< _CharT>
    locale::id messages<_CharT>::id;


  template<>
    string
    messages<char>::do_get(catalog, int, int, const string&) const;


# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/messages_members.h" 1 3
# 37 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/messages_members.h" 3
  template< _CharT>
    messages<_CharT>::catalog
    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
                           const char*) const
    { return this->do_open(__s, __loc); }


  template< _CharT>
    messages<_CharT>::catalog
    messages<_CharT>::do_open(const basic_string<char>&, const locale&) const
    { return 0; }

  template< _CharT>
    messages<_CharT>::string_type
    messages<_CharT>::do_get(catalog, int, int,
                             const string_type& __dfault) const
    { return __dfault; }

  template< _CharT>
    void
    messages<_CharT>::do_close(catalog) const
    { }
# 1695 "/usr/local/include/g++-v3/bits/locale_facets.h" 2 3

  template< _CharT>
    class messages_byname : public messages<_CharT>
    {
    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      explicit
      messages_byname(const char* __s, size_t __refs = 0)
      : messages<_CharT>(__refs)
      {
        _M_name_messages = __s;
        _S_destroy_c_locale(_M_c_locale_messages);
        _S_create_c_locale(_M_c_locale_messages, __s);
      }

    protected:
      virtual
      ~messages_byname()
      { }
    };






  template< _CharT>
    inline bool
    isspace(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); }

  template< _CharT>
    inline bool
    isprint(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); }

  template< _CharT>
    inline bool
    iscntrl(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); }

  template< _CharT>
    inline bool
    isupper(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); }

  template< _CharT>
    inline bool islower(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); }

  template< _CharT>
    inline bool
    isalpha(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); }

  template< _CharT>
    inline bool
    isdigit(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); }

  template< _CharT>
    inline bool
    ispunct(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); }

  template< _CharT>
    inline bool
    isxdigit(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); }

  template< _CharT>
    inline bool
    isalnum(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); }

  template< _CharT>
    inline bool
    isgraph(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }

  template< _CharT>
    inline _CharT
    toupper(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).toupper(__c); }

  template< _CharT>
    inline _CharT
    tolower(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
}
# 42 "/usr/local/include/g++-v3/bits/basic_ios.h" 2 3

namespace std
{

  template< _CharT, _Traits>
    class basic_ios : public ios_base
    {
    public:

      typedef _CharT char_type;
      typedef _Traits::int_type int_type;
      typedef _Traits::pos_type pos_type;
      typedef _Traits::off_type off_type;
      typedef _Traits traits_type;


      typedef ctype<_CharT> __ctype_type;
      typedef ostreambuf_iterator<_CharT, _Traits> __ostreambuf_iter;
      typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
      typedef istreambuf_iterator<_CharT, _Traits> __istreambuf_iter;
      typedef num_get<_CharT, __istreambuf_iter> __numget_type;


    protected:
      basic_ostream<_CharT, _Traits>* _M_tie;
      mutable char_type _M_fill;
      mutable bool _M_fill_init;
      iostate _M_exception;

      basic_streambuf<_CharT, _Traits>* _M_streambuf;
      iostate _M_streambuf_state;


      const __ctype_type* _M_ios_fctype;

      const __numput_type* _M_fnumput;

      const __numget_type* _M_fnumget;

    public:
      const __ctype_type*
      _M_get_fctype_ios(void)
      { return _M_ios_fctype; }

      operator void*() const
      { return this->fail() ? 0 : const_cast<basic_ios*>(this); }

      bool
      operator!() const
      { return this->fail(); }

      iostate
      rdstate() const
      { return _M_streambuf_state; }

      void
      clear(iostate __state = goodbit);

      void
      setstate(iostate __state)
      { this->clear(this->rdstate() | __state); }

      bool
      good() const
      { return this->rdstate() == 0; }

      bool
      eof() const
      { return (this->rdstate() & eofbit) != 0; }

      bool
      fail() const
      { return (this->rdstate() & (badbit | failbit)) != 0; }

      bool
      bad() const
      { return (this->rdstate() & badbit) != 0; }

      iostate
      exceptions() const
      { return _M_exception; }

      void
      exceptions(iostate __except)
      {
        _M_exception = __except;
        this->clear(_M_streambuf_state);
      }


      explicit
      basic_ios(basic_streambuf<_CharT, _Traits>* __sb) : ios_base()
      { this->init(__sb); }

      virtual
      ~basic_ios() { }


      basic_ostream<_CharT, _Traits>*
      tie() const
      { return _M_tie; }

      basic_ostream<_CharT, _Traits>*
      tie(basic_ostream<_CharT, _Traits>* __tiestr)
      {
        basic_ostream<_CharT, _Traits>* __old = _M_tie;
        _M_tie = __tiestr;
        return __old;
      }

      basic_streambuf<_CharT, _Traits>*
      rdbuf() const
      { return _M_streambuf; }

      basic_streambuf<_CharT, _Traits>*
      rdbuf(basic_streambuf<_CharT, _Traits>* __sb);

      basic_ios&
      copyfmt(const basic_ios& __rhs);

      char_type
      fill() const
      {
        if (!_M_fill_init)
          {
            _M_fill = this->widen(' ');
            _M_fill_init = true;
          }
        return _M_fill;
      }

      char_type
      fill(char_type __ch)
      {
        char_type __old = this->fill();
        _M_fill = __ch;
        return __old;
      }


      locale
      imbue(const locale& __loc);

      char
      narrow(char_type __c, char __dfault) const;

      char_type
      widen(char __c) const;

    protected:

      basic_ios() : ios_base()
      { }

      void
      init(basic_streambuf<_CharT, _Traits>* __sb);

      bool
      _M_check_facet(const locale::facet* __f) const
      {
        if (!__f)
          __throw_bad_cast();
        return true;
      }

      void
      _M_cache_facets(const locale& __loc);
    };
}



# 1 "/usr/local/include/g++-v3/bits/basic_ios.tcc" 1 3
# 34 "/usr/local/include/g++-v3/bits/basic_ios.tcc" 3

namespace std
{
  template< _CharT, _Traits>
    void
    basic_ios<_CharT, _Traits>::clear(iostate __state)
    {
      if (this->rdbuf())
        _M_streambuf_state = __state;
      else
          _M_streambuf_state = __state | badbit;
      if ((this->rdstate() & this->exceptions()))
        __throw_ios_failure("basic_ios::clear(iostate) caused exception");
    }

  template< _CharT, _Traits>
    basic_streambuf<_CharT, _Traits>*
    basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
    {
      basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
      _M_streambuf = __sb;
      this->clear();
      return __old;
    }

  template< _CharT, _Traits>
    basic_ios<_CharT, _Traits>&
    basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
    {




      _Words* __words = (__rhs._M_word_limit <= _S_local_words) ?
        _M_word_array : new _Words[__rhs._M_word_limit];
# 77 "/usr/local/include/g++-v3/bits/basic_ios.tcc" 3
      _Callback_list* __cb = __rhs._M_callbacks;
      if (__cb)
        __cb->_M_add_reference();
      _M_call_callbacks(erase_event);
      if (_M_words != _M_word_array)
        delete [] _M_words;
      _M_dispose_callbacks();

      _M_callbacks = __cb;
      for (int __i = 0; __i < __rhs._M_word_limit; ++__i)
        __words[__i] = __rhs._M_words[__i];
      if (_M_words != _M_word_array)
        delete [] _M_words;
      _M_words = __words;
      _M_word_limit = __rhs._M_word_limit;

      this->flags(__rhs.flags());
      this->width(__rhs.width());
      this->precision(__rhs.precision());
      this->tie(__rhs.tie());
      this->fill(__rhs.fill());

      this->exceptions(__rhs.exceptions());

      _M_call_callbacks(copyfmt_event);
      return *this;
    }

  template< _CharT, _Traits>
    char
    basic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const
    {
      char __ret = __dfault;
      if (_M_check_facet(_M_ios_fctype))
        __ret = _M_ios_fctype->narrow(__c, __dfault);
      return __ret;
    }

  template< _CharT, _Traits>
    _CharT
    basic_ios<_CharT, _Traits>::widen(char __c) const
    {
      char_type __ret = char_type();
      if (_M_check_facet(_M_ios_fctype))
        __ret = _M_ios_fctype->widen(__c);
      return __ret;
    }


  template< _CharT, _Traits>
    locale
    basic_ios<_CharT, _Traits>::imbue(const locale& __loc)
    {
      locale __old(this->getloc());
      ios_base::imbue(__loc);
      _M_cache_facets(__loc);
      if (this->rdbuf() != 0)
        this->rdbuf()->pubimbue(__loc);
      return __old;
    }

  template< _CharT, _Traits>
    void
    basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
    {

      ios_base::_M_init();
      _M_cache_facets(_M_ios_locale);
      _M_tie = 0;
# 159 "/usr/local/include/g++-v3/bits/basic_ios.tcc" 3
      _M_fill = 0;
      _M_fill_init = false;

      _M_exception = goodbit;
      _M_streambuf = __sb;
      _M_streambuf_state = __sb ? goodbit : badbit;
    }

  template< _CharT, _Traits>
    void
    basic_ios<_CharT, _Traits>::_M_cache_facets(const locale& __loc)
    {
      if (has_facet<__ctype_type>(__loc))
        _M_ios_fctype = &use_facet<__ctype_type>(__loc);
      else
        _M_ios_fctype = 0;

      if (has_facet<__numput_type>(__loc))
        _M_fnumput = &use_facet<__numput_type>(__loc);
      else
        _M_fnumput = 0;
      if (has_facet<__numget_type>(__loc))
        _M_fnumget = &use_facet<__numget_type>(__loc);
      else
        _M_fnumget = 0;
    }




  extern template class basic_ios<char>;
  extern template class basic_ios<wchar_t>;
}
# 215 "/usr/local/include/g++-v3/bits/basic_ios.h" 2 3
# 52 "/usr/local/include/g++-v3/ios" 2 3
# 45 "/usr/local/include/g++-v3/istream" 2 3
# 1 "/usr/local/include/g++-v3/limits" 1 3
# 47 "/usr/local/include/g++-v3/limits" 3

# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/cpu_limits.h" 1 3
# 49 "/usr/local/include/g++-v3/limits" 2 3
# 890 "/usr/local/include/g++-v3/limits" 3
namespace std
{
  enum float_round_style
  {
    round_indeterminate = -1,
    round_toward_zero = 0,
    round_to_nearest = 1,
    round_toward_infinity = 2,
    round_toward_neg_infinity = 3
  };

  enum float_denorm_style
  {
    denorm_indeterminate = -1,
    denorm_absent = 0,
    denorm_present = 1
  };




  struct __numeric_limits_base
  {
    static const bool is_specialized = false;

    static const int digits = 0;
    static const int digits10 = 0;
    static const bool is_signed = false;
    static const bool is_integer = false;
    static const bool is_exact = false;
    static const int radix = 0;

    static const int min_exponent = 0;
    static const int min_exponent10 = 0;
    static const int max_exponent = 0;
    static const int max_exponent10 = 0;

    static const bool has_infinity = false;
    static const bool has_quiet_NaN = false;
    static const bool has_signaling_NaN = false;
    static const float_denorm_style has_denorm = denorm_absent;
    static const bool has_denorm_loss = false;

    static const bool is_iec559 = false;
    static const bool is_bounded = false;
    static const bool is_modulo = false;

    static const bool traps = false;
    static const bool tinyness_before = false;
    static const float_round_style round_style = round_toward_zero;
  };

  template< _Tp>
    struct numeric_limits : public __numeric_limits_base
    {
      static _Tp min() throw() { return static_cast<_Tp>(0); }
      static _Tp max() throw() { return static_cast<_Tp>(0); }
      static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
      static _Tp round_error() throw() { return static_cast<_Tp>(0); }
      static _Tp infinity() throw() { return static_cast<_Tp>(0); }
      static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
      static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
      static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
    };



  template<>
    struct numeric_limits<bool>
    {
      static const bool is_specialized = true;

      static bool min() throw()
      { return false; }

      static bool max() throw()
      { return true; }

      static const int digits = 8;
      static const int digits10 = 0;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static bool epsilon() throw()
      { return false; }
      static bool round_error() throw()
      { return false; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static bool infinity() throw()
      { return false; }
      static bool quiet_NaN() throw()
      { return false; }
      static bool signaling_NaN() throw()
      { return false; }
      static bool denorm_min() throw()
      { return false; }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;




      static const bool traps = true
               || true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };



  template<>
    struct numeric_limits<char>
    {
      static const bool is_specialized = true;

      static char min() throw()
      { return (char)(-127 - 1); }
      static char max() throw()
      { return (char)127; }

      static const int digits = 7;
      static const int digits10 = 7;
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static char epsilon() throw()
      { return char(); }
      static char round_error() throw()
      { return char(); }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static char infinity() throw()
      { return char(); }
      static char quiet_NaN() throw()
      { return char(); }
      static char signaling_NaN() throw()
      { return char(); }
      static char denorm_min() throw()
      { return static_cast<char>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1074 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<signed char>
    {
      static const bool is_specialized = true;

      static signed char min() throw()
      { return (-127 - 1); }
      static signed char max() throw()
      { return 127; }

      static const int digits = 7;
      static const int digits10 = 2;
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static signed char epsilon() throw()
      { return 0; }
      static signed char round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static signed char infinity() throw()
      { return static_cast<signed char>(0); }
      static signed char quiet_NaN() throw()
      { return static_cast<signed char>(0); }
      static signed char signaling_NaN() throw()
      { return static_cast<signed char>(0); }
      static signed char denorm_min() throw()
      { return static_cast<signed char>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1131 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<unsigned char>
    {
      static const bool is_specialized = true;

      static unsigned char min() throw()
      { return 0; }
      static unsigned char max() throw()
      { return (127 * 2 + 1); }

      static const int digits = 8;
      static const int digits10 = 2;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned char epsilon() throw()
      { return 0; }
      static unsigned char round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned char infinity() throw()
      { return static_cast<unsigned char>(0); }
      static unsigned char quiet_NaN() throw()
      { return static_cast<unsigned char>(0); }
      static unsigned char signaling_NaN() throw()
      { return static_cast<unsigned char>(0); }
      static unsigned char denorm_min() throw()
      { return static_cast<unsigned char>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };






  template<>
    struct numeric_limits<wchar_t>
    {
      static const bool is_specialized = true;

      static wchar_t min() throw()
      { return (wchar_t)0UL; }
      static wchar_t max() throw()
      { return (wchar_t)(2147483647L * 2U + 1); }

      static const int digits = 32;
      static const int digits10 = 9;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static wchar_t epsilon() throw()
      { return 0; }
      static wchar_t round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static wchar_t infinity() throw()
      { return wchar_t(); }
      static wchar_t quiet_NaN() throw()
      { return wchar_t(); }
      static wchar_t signaling_NaN() throw()
      { return wchar_t(); }
      static wchar_t denorm_min() throw()
      { return wchar_t(); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1244 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<short>
    {
      static const bool is_specialized = true;

      static short min() throw()
      { return (-32767 - 1); }
      static short max() throw()
      { return 32767; }

      static const int digits = 15;
      static const int digits10 = 4;
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static short epsilon() throw()
      { return 0; }
      static short round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static short infinity() throw()
      { return short(); }
      static short quiet_NaN() throw()
      { return short(); }
      static short signaling_NaN() throw()
      { return short(); }
      static short denorm_min() throw()
      { return short(); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1301 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<unsigned short>
    {
      static const bool is_specialized = true;

      static unsigned short min() throw()
      { return 0; }
      static unsigned short max() throw()
      { return (32767 * 2 + 1); }

      static const int digits = 16;
      static const int digits10 = 4;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned short epsilon() throw()
      { return 0; }
      static unsigned short round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned short infinity() throw()
      { return static_cast<unsigned short>(0); }
      static unsigned short quiet_NaN() throw()
      { return static_cast<unsigned short>(0); }
      static unsigned short signaling_NaN() throw()
      { return static_cast<unsigned short>(0); }
      static unsigned short denorm_min() throw()
      { return static_cast<unsigned short>(0); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };






  template<>
    struct numeric_limits<int>
    {
      static const bool is_specialized = true;

      static int min() throw()
      { return (int)(-2147483647L - 1); }
      static int max() throw()
      { return (int)2147483647L; }

      static const int digits = 31;
      static const int digits10 = 9;
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static int epsilon() throw()
      { return 0; }
      static int round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static int infinity() throw()
      { return static_cast<int>(0); }
      static int quiet_NaN() throw()
      { return static_cast<int>(0); }
      static int signaling_NaN() throw()
      { return static_cast<int>(0); }
      static int denorm_min() throw()
      { return static_cast<int>(0); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1413 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<unsigned int>
    {
      static const bool is_specialized = true;

      static unsigned int min() throw()
      { return 0; }
          static unsigned int max() throw()
      { return (unsigned)(2147483647L * 2U + 1); }

      static const int digits = 32;
      static const int digits10 = 9;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned int epsilon() throw()
      { return 0; }
      static unsigned int round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned int infinity() throw()
      { return static_cast<unsigned int>(0); }
      static unsigned int quiet_NaN() throw()
      { return static_cast<unsigned int>(0); }
      static unsigned int signaling_NaN() throw()
      { return static_cast<unsigned int>(0); }
      static unsigned int denorm_min() throw()
      { return static_cast<unsigned int>(0); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };






  template<>
    struct numeric_limits<long>
    {
      static const bool is_specialized = true;

      static long min() throw()
      { return (-2147483647L - 1); }
      static long max() throw()
      { return 2147483647L; }

      static const int digits = 31;
      static const int digits10 = 9;
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static long epsilon() throw()
      { return 0; }
      static long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static long infinity() throw()
      { return static_cast<long>(0); }
      static long quiet_NaN() throw()
      { return static_cast<long>(0); }
      static long signaling_NaN() throw()
      { return static_cast<long>(0); }
      static long denorm_min() throw()
      { return static_cast<long>(0); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1525 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<unsigned long>
    {
      static const bool is_specialized = true;

      static unsigned long min() throw()
      { return 0; }
      static unsigned long max() throw()
      { return (2147483647L * 2U + 1); }

      static const int digits = 32;
      static const int digits10 = 9;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned long epsilon() throw()
      { return 0; }
      static unsigned long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned long infinity() throw()
      { return static_cast<unsigned long>(0); }
      static unsigned long quiet_NaN() throw()
      { return static_cast<unsigned long>(0); }
      static unsigned long signaling_NaN() throw()
      { return static_cast<unsigned long>(0); }
      static unsigned long denorm_min() throw()
      { return static_cast<unsigned long>(0); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };






  template<>
    struct numeric_limits<long long>
    {
      static const bool is_specialized = true;

      static long long min() throw()
      { return (-9223372036854775807LL - 1); }
      static long long max() throw()
      { return 9223372036854775807LL; }

      static const int digits = 63;
      static const int digits10 = 18;
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static long long epsilon() throw()
      { return 0; }
      static long long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static long long infinity() throw()
      { return static_cast<long long>(0); }
      static long long quiet_NaN() throw()
      { return static_cast<long long>(0); }
      static long long signaling_NaN() throw()
      { return static_cast<long long>(0); }
      static long long denorm_min() throw()
      { return static_cast<long long>(0); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1637 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<unsigned long long>
    {
      static const bool is_specialized = true;

      static unsigned long long min() throw()
      { return 0; }
      static unsigned long long max() throw()
      { return (9223372036854775807LL * 2ULL + 1); }

      static const int digits = 64;
      static const int digits10 = 19;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned long long epsilon() throw()
      { return 0; }
      static unsigned long long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned long long infinity() throw()
      { return static_cast<unsigned long long>(0); }
      static unsigned long long quiet_NaN() throw()
      { return static_cast<unsigned long long>(0); }
      static unsigned long long signaling_NaN() throw()
      { return static_cast<unsigned long long>(0); }
      static unsigned long long denorm_min() throw()
      { return static_cast<unsigned long long>(0); }

      static const bool is_iec559 = true;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };






  template<>
    struct numeric_limits<float>
    {
      static const bool is_specialized = true;

      static float min() throw()
      { return 1.17549435e-38F; }
      static float max() throw()
      { return 3.40282347e+38F; }

      static const int digits = 24;
      static const int digits10 = 6;
      static const bool is_signed = true;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 2;
      static float epsilon() throw()
      { return 1.19209290e-07F; }
      static float round_error() throw()
      { return 1.0F; }

      static const int min_exponent = -125;
      static const int min_exponent10 = -37;
      static const int max_exponent = 128;
      static const int max_exponent10 = 38;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static float infinity() throw()
      { return 0.0F; }
      static float quiet_NaN() throw()
      { return 0.0F; }
      static float signaling_NaN() throw()
      { return 0.0F; }
      static float denorm_min() throw()
      { return 0.0F; }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };
# 1768 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<double>
    {
      static const bool is_specialized = true;

      static double min() throw()
      { return 2.2250738585072014e-308; }
      static double max() throw()
      { return 1.7976931348623157e+308; }

      static const int digits = 53;
      static const int digits10 = 15;
      static const bool is_signed = true;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 2;
      static double epsilon() throw()
      { return 2.2204460492503131e-16; }
      static double round_error() throw()
      { return 1.0; }

      static const int min_exponent = -1021;
      static const int min_exponent10 = -307;
      static const int max_exponent = 1024;
      static const int max_exponent10 = 308;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm =
              denorm_absent;
      static const bool has_denorm_loss = false;

      static double infinity() throw()
      { return 0.0; }
      static double quiet_NaN() throw()
      { return 0.0; }
      static double signaling_NaN() throw()
      { return 0.0; }
      static double denorm_min() throw()
      { return 0.0; }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style =
              round_toward_zero;
    };
# 1847 "/usr/local/include/g++-v3/limits" 3
  template<>
    struct numeric_limits<long double>
    {
      static const bool is_specialized = true;

      static long double min() throw()
      { return 3.362103143112093506262677817321752603E-4932L; }
      static long double max() throw()
      { return 1.189731495357231765085759326628007016E+4932L; }

      static const int digits = 113;
      static const int digits10 = 33;
      static const bool is_signed = true;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 2;
      static long double epsilon() throw()
      { return 1.925929944387235853055977942584927319E-34L; }
      static long double round_error() throw()
      { return 1.0L; }

      static const int min_exponent = -16381;
      static const int min_exponent10 = -4931;
      static const int max_exponent = 16384;
      static const int max_exponent10 = 4932;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN =
                false;
      static const float_denorm_style has_denorm =
                denorm_absent;
      static const bool has_denorm_loss =
                false;

      static long double infinity() throw()
      { return 0.0L; }
      static long double quiet_NaN() throw()
      { return 0.0L; }
      static long double signaling_NaN() throw()
      { return 0.0L; }
      static long double denorm_min() throw()
      { return 0.0L; }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style =
        round_toward_zero;
    };
# 1927 "/usr/local/include/g++-v3/limits" 3
}
# 46 "/usr/local/include/g++-v3/istream" 2 3

namespace std
{

  template< _CharT, _Traits>
    class basic_istream : virtual public basic_ios<_CharT, _Traits>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits::int_type int_type;
      typedef _Traits::pos_type pos_type;
      typedef _Traits::off_type off_type;
      typedef _Traits traits_type;


      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
      typedef basic_ios<_CharT, _Traits> __ios_type;
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef istreambuf_iterator<_CharT, _Traits> __istreambuf_iter;
      typedef num_get<_CharT, __istreambuf_iter> __numget_type;
      typedef ctype<_CharT> __ctype_type;

    protected:

      streamsize _M_gcount;

    public:

      explicit
      basic_istream(__streambuf_type* __sb)
      {
        this->init(__sb);
        _M_gcount = streamsize(0);
      }

      virtual
      ~basic_istream()
      { _M_gcount = streamsize(0); }


      class sentry;
      friend class sentry;



      __istream_type&
      operator>>(__istream_type& (*__pf)(__istream_type&));

      __istream_type&
      operator>>(__ios_type& (*__pf)(__ios_type&));

      __istream_type&
      operator>>(ios_base& (*__pf)(ios_base&));


      __istream_type&
      operator>>(bool& __n);

      __istream_type&
      operator>>(short& __n);

      __istream_type&
      operator>>(unsigned short& __n);

      __istream_type&
      operator>>(int& __n);

      __istream_type&
      operator>>(unsigned int& __n);

      __istream_type&
      operator>>(long& __n);

      __istream_type&
      operator>>(unsigned long& __n);


      __istream_type&
      operator>>(long long& __n);

      __istream_type&
      operator>>(unsigned long long& __n);


      __istream_type&
      operator>>(float& __f);

      __istream_type&
      operator>>(double& __f);

      __istream_type&
      operator>>(long double& __f);

      __istream_type&
      operator>>(void*& __p);

      __istream_type&
      operator>>(__streambuf_type* __sb);


      inline streamsize
      gcount(void) const
      { return _M_gcount; }

      int_type
      get(void);

      __istream_type&
      get(char_type& __c);

      __istream_type&
      get(char_type* __s, streamsize __n, char_type __delim);

      inline __istream_type&
      get(char_type* __s, streamsize __n)
      { return this->get(__s, __n, this->widen('\n')); }

      __istream_type&
      get(__streambuf_type& __sb, char_type __delim);

      inline __istream_type&
      get(__streambuf_type& __sb)
      { return this->get(__sb, this->widen('\n')); }

      __istream_type&
      getline(char_type* __s, streamsize __n, char_type __delim);

      inline __istream_type&
      getline(char_type* __s, streamsize __n)
      { return this->getline(__s, __n, this->widen('\n')); }

      __istream_type&
      ignore(streamsize __n = 1, int_type __delim = traits_type::eof());

      int_type
      peek(void);

      __istream_type&
      read(char_type* __s, streamsize __n);

      streamsize
      readsome(char_type* __s, streamsize __n);

      __istream_type&
      putback(char_type __c);

      __istream_type&
      unget(void);

      int
      sync(void);

      pos_type
      tellg(void);

      __istream_type&
      seekg(pos_type);

      __istream_type&
      seekg(off_type, ios_base::seekdir);
    };

  template< _CharT, _Traits>
    class basic_istream<_CharT, _Traits>::sentry
    {
    public:
      typedef _Traits traits_type;
      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef __istream_type::__ctype_type __ctype_type;
      typedef _Traits::int_type __int_type;

      explicit
      sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);

      operator bool() { return _M_ok; }

    private:
      bool _M_ok;
    };


  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);

  template<class _Traits>
    basic_istream<char, _Traits>&
    operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
    { return (__in >> reinterpret_cast<char&>(__c)); }

  template<class _Traits>
    basic_istream<char, _Traits>&
    operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
    { return (__in >> reinterpret_cast<char&>(__c)); }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);

  template<class _Traits>
    basic_istream<char,_Traits>&
    operator>>(basic_istream<char,_Traits>& __in, unsigned char* __s)
    { return (__in >> reinterpret_cast<char*>(__s)); }

  template<class _Traits>
    basic_istream<char,_Traits>&
    operator>>(basic_istream<char,_Traits>& __in, signed char* __s)
    { return (__in >> reinterpret_cast<char*>(__s)); }


  template< _CharT, _Traits>
    class basic_iostream
    : public basic_istream<_CharT, _Traits>,
      public basic_ostream<_CharT, _Traits>
    {
    public:

      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef basic_ostream<_CharT, _Traits> __ostream_type;

      explicit
      basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
      : __istream_type(__sb), __ostream_type(__sb)
      { }

      virtual
      ~basic_iostream() { }
    };


  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    ws(basic_istream<_CharT, _Traits>& __is);
}





# 1 "/usr/local/include/g++-v3/bits/istream.tcc" 1 3
# 36 "/usr/local/include/g++-v3/bits/istream.tcc" 3

# 1 "/usr/local/include/g++-v3/locale" 1 3
# 43 "/usr/local/include/g++-v3/locale" 3



# 1 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 1 3
# 37 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3

# 1 "/usr/local/include/g++-v3/cerrno" 1 3
# 47 "/usr/local/include/g++-v3/cerrno" 3
# 39 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 2 3


# 1 "/usr/local/include/g++-v3/cmath" 1 3
# 48 "/usr/local/include/g++-v3/cmath" 3



# 1 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 1 3 4
# 26 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
extern "C" {
# 50 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin acos, asin, atan, atan2, cos, sin, tan, cosh, sinh, tanh, exp, ldexp, log, log10, modf, pow, sqrt, ceil, fabs, floor, fmod 






   extern double acos(double);
   extern double asin(double);
   extern double atan(double);
   extern double atan2(double, double);
   extern double cos(double);
   extern double sin(double);
   extern double tan(double);
   extern double cosh(double);
   extern double sinh(double);
   extern double tanh(double);
   extern double exp(double);
   extern double frexp(double, int *);
   extern double ldexp(double, int);
   extern double log(double);
   extern double log10(double);
   extern double modf(double, double *);
   extern double pow(double, double);
   extern double sqrt(double);
   extern double ceil(double);
   extern double fabs(double);
   extern double floor(double);
   extern double fmod(double, double);


#pragma builtin acosf, asinf, atanf, atan2f, cosf, sinf, tanf, coshf, sinhf, tanhf, expf, ldexpf, logf, log10f, modff, powf, sqrtf, ceilf, fabsf, floorf, fmodf 


     extern float acosf(float);
     extern float asinf(float);
     extern float atanf(float);
     extern float atan2f(float, float);
     extern float cosf(float);
     extern float sinf(float);
     extern float tanf(float);
     extern float coshf(float);
     extern float sinhf(float);
     extern float tanhf(float);
     extern float expf(float);
     extern float frexpf(float, int *);
     extern float ldexpf(float, int);
     extern float logf(float);
     extern float log10f(float);
     extern float modff(float, float *);
     extern float powf(float, float);
     extern float sqrtf(float);
     extern float ceilf(float);
     extern float fabsf(float);
     extern float floorf(float);
     extern float fmodf(float, float);

#pragma builtin acosl, asinl, atanl, atan2l, cosl, sinl, tanl, coshl, sinhl, tanhl, expl, ldexpl, logl, log10l, modfl, powl, sqrtl, ceill, fabsl, floorl, fmodl 


     extern long double acosl(long double);
     extern long double asinl(long double);
     extern long double atanl(long double);
     extern long double atan2l(long double, long double);
     extern long double cosl(long double);
     extern long double sinl(long double);
     extern long double tanl(long double);
     extern long double coshl(long double);
     extern long double sinhl(long double);
     extern long double tanhl(long double);
     extern long double expl(long double);
     extern long double frexpl(long double, int *);
     extern long double ldexpl(long double, int);
     extern long double logl(long double);
     extern long double log10l(long double);
     extern long double modfl(long double, long double *);
     extern long double powl(long double, long double);
     extern long double sqrtl(long double);
     extern long double ceill(long double);
     extern long double fabsl(long double);
     extern long double floorl(long double);
     extern long double fmodl(long double, long double);
# 178 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
   extern int signgam;
# 189 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin erf, erfc, gamma, hypot, isnan, j0, j1, jn, lgamma, y0, y1, yn 




     extern double erf(double);
     extern double erfc(double);
     extern double gamma(double);
     extern double hypot(double, double);
     extern int isnan(double);
     extern double j0(double);
     extern double j1(double);
     extern double jn(int, double);
     extern double lgamma(double);
     extern double y0(double);
     extern double y1(double);
     extern double yn(int, double);
# 226 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin acosh, asinh, atanh, cbrt, expm1, ilogb, log1p, logb, nextafter, remainder, rint, scalb 




     extern double acosh(double);
     extern double asinh(double);
     extern double atanh(double);
     extern double cbrt(double);
     extern double expm1(double);
     extern int ilogb(double);
     extern double log1p(double);
     extern double logb(double);
     extern double nextafter(double, double);
     extern double remainder(double, double);
     extern double rint(double);
     extern double scalb(double,double);
# 267 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
       typedef float float_t;
       typedef double double_t;
# 377 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin copysign, log2, exp2, fdim, fmax, fmin, nan, scalbn, nearbyint, round, trunc, lrint, lround, _iround, cosd, sind, tand, exp10, pown, compound, annuity, fma, scalbln, tgamma, nexttoward, acosd, asind, atand, atan2d, _iceil, _ifloor, rsqrt





#pragma builtin llrint, llround, powlln, _llceil, _llfloor




     extern double copysign(double, double);
     extern double log2(double);
     extern double lgamma_r(double, int *);
     extern double exp2(double);
     extern double fdim(double, double);
     extern double fmax(double, double);
     extern double fmin(double, double);
     extern double nan(const char *);
     extern double scalbn(double, int);
     extern double nearbyint(double);
     extern double round(double);
     extern double trunc(double);
     extern double remquo(double, double, int *);
     extern long lrint(double);
     extern long lround(double);

       extern long long llrint(double);
       extern long long llround(double);

     extern double cosd(double);
     extern double sind(double);
     extern double tand(double);

       extern double exp10(double);
       extern double pown(double, int);
       extern int _iround(double);
       extern int _iceil(double);
       extern int _ifloor(double);

         extern double powlln(double, long long);
         extern long long _llceil(double);
         extern long long _llfloor(double);

       extern double compound(double, double);
       extern double annuity(double, double);
       extern double fma(double, double, double);
       extern double scalbln(double, long);
       extern double tgamma(double);
       extern double nexttoward(double, long double);
       extern double rsqrt(double);

     extern double acosd(double);
     extern double asind(double);
     extern double atand(double);
     extern double atan2d(double, double);
# 455 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin cbrtf, copysignf, nextafterf, log2f, cosdf, sindf, tandf, acosdf, asindf, atandf, atan2df, exp2f, exp10f, expm1f, log1pf, pownf, fmaf, acoshf, asinhf, atanhf, logbf, scalbf, scalbnf, scalblnf, ilogbf, hypotf, compoundf, annuityf, erff, erfcf, gammaf, lgammaf, tgammaf, nearbyintf, rintf, roundf, lrintf, lroundf, _iroundf, truncf, nanf, remainderf, fdimf, fmaxf, fminf, nexttowardf, _iceilf, _ifloorf, rsqrtf
# 465 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin powllnf, llrintf, llroundf, _llceilf, _llfloorf 




     extern float cbrtf(float);
     extern float copysignf(float, float);
     extern float nextafterf(float, float);
     extern float log2f(float);
     extern float cosdf(float);
     extern float sindf(float);
     extern float tandf(float);
     extern float acosdf(float);
     extern float asindf(float);
     extern float atandf(float);
     extern float atan2df(float, float);

       extern float exp2f(float);
       extern float exp10f(float);
       extern float expm1f(float);
       extern float log1pf(float);
       extern float pownf(float, int);

         extern float powllnf(float, long long);

       extern float fmaf(float, float, float);
       extern float acoshf(float);
       extern float asinhf(float);
       extern float atanhf(float);
       extern float logbf(float);
       extern float scalbf(float, float);
       extern float scalbnf(float, int);
       extern float scalblnf(float, long);
       extern int ilogbf(float);
       extern float hypotf(float, float);
       extern float compoundf(float, float);
       extern float annuityf(float, float);
       extern float erff(float);
       extern float erfcf(float);
       extern float gammaf(float);
       extern float lgammaf(float);
       extern float lgammaf_r(float, int *);
       extern float tgammaf(float);
       extern float nearbyintf(float);
       extern float rintf(float);
       extern float roundf(float);
       extern long lrintf(float);
       extern long lroundf(float);
       extern int _iroundf(float);
       extern int _iceilf(float);
       extern int _ifloorf(float);

         extern long long llrintf(float);
         extern long long llroundf(float);
         extern long long _llceilf(float);
         extern long long _llfloorf(float);

       extern float truncf(float);
       extern float nanf(const char *);
       extern float remainderf(float, float);
       extern float remquof(float, float, int *);
       extern float fdimf(float, float);
       extern float fmaxf(float, float);
       extern float fminf(float, float);
       extern float nexttowardf(float, long double);
       extern float rsqrtf(float);
# 632 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin acosdl, asindl, atandl, atan2dl, acoshl, asinhl, atanhl, cosdl, sindl, tandl, exp2l, exp10l, expm1l, log2l, log1pl, logbl, scalbl, scalbnl, scalblnl, ilogbl, fabsl, pownl, hypotl, cbrtl, compoundl, annuityl, erfl, erfcl, gammal, lgammal, tgammal, nearbyintl, rintl, roundl, lrintl, lroundl, _iroundl, truncl, nanl, remainderl, copysignl, nextafterl, nexttowardl, fdiml, fmaxl, fminl, fmal, _iceill, _ifloorl, rsqrtl
# 642 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma builtin powllnl, llrintl, llroundl, _llceill, _llfloorl 

       extern long double acosdl(long double);
       extern long double asindl(long double);
       extern long double atandl(long double);
       extern long double atan2dl(long double, long double);
       extern long double acoshl(long double);
       extern long double asinhl(long double);
       extern long double atanhl(long double);
       extern long double cosdl(long double);
       extern long double sindl(long double);
       extern long double tandl(long double);
       extern long double exp2l(long double);
       extern long double exp10l(long double);
       extern long double expm1l(long double);
       extern long double log2l(long double);
       extern long double log1pl(long double);
       extern long double logbl(long double);
       extern long double scalbl(long double, long double);
       extern long double scalbnl(long double, int);
       extern long double scalblnl(long double, long);
       extern int ilogbl(long double);
       extern long double pownl(long double, int);

         extern long double powllnl(long double, long long);

       extern long double hypotl(long double, long double);
       extern long double cbrtl(long double);
       extern long double compoundl(long double, long double);
       extern long double annuityl(long double, long double);
       extern long double erfl(long double);
       extern long double erfcl(long double);
       extern long double gammal(long double);
       extern long double lgammal(long double);
       extern long double lgammal_r(long double, int *);
       extern long double tgammal(long double);
       extern long double nearbyintl(long double);
       extern long double rintl(long double);
       extern long double roundl(long double);
       extern long lrintl(long double);
       extern long lroundl(long double);
       extern int _iroundl(long double);
       extern int _iceill(long double);
       extern int _ifloorl(long double);

         extern long long llrintl(long double);
         extern long long llroundl(long double);
         extern long long _llceill(long double);
         extern long long _llfloorl(long double);

       extern long double truncl(long double);
       extern long double nanl(const char *);
       extern long double remainderl(long double, long double);
       extern long double remquol(long double, long double, int *);
       extern long double copysignl(long double, long double);
       extern long double nextafterl(long double, long double);
       extern long double nexttowardl(long double, long double);
       extern long double fdiml(long double, long double);
       extern long double fmaxl(long double, long double);
       extern long double fminl(long double, long double);
       extern long double fmal(long double, long double, long double);
       extern long double rsqrtl(long double);
# 845 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma extern _DINFINITY



   extern const double _DINFINITY;
# 882 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
#pragma extern _SINFINITY, _LINFINITY, _WINFINITY, _SQNAN



     extern const float _SINFINITY;

       extern const long double _LINFINITY;
#pragma builtin _pown, _pownf, _pownl
       extern double _pown(double,int);
       extern float _pownf(float,int);
       extern long double _pownl(long double,int);

#pragma builtin _powlln, _powllnf, _powllnl
         extern double _powlln(double,long long);
         extern float _powllnf(float,long long);
         extern long double _powllnl(long double,long long);
# 911 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
     extern const float _SQNAN;
# 1089 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
       extern int _Isfinite(double);
       extern int _Isinf(double);
       extern int _Isnormal(double);
       extern int _Signbit(double);
       extern int _Isunordered(double, double);
       extern int _Isless(double, double);
       extern int _Islessequal(double, double);
       extern int _Isgreater(double, double);
       extern int _Isgreaterequal(double, double);
       extern int _Isnanf(float);
       extern int _Isfinitef(float);
       extern int _Isinff(float);
       extern int _Isnormalf(float);
       extern int _Signbitf(float);
       extern int _Isunorderedf(float, float);
       extern int _Islessf(float, float);
       extern int _Islessequalf(float, float);
       extern int _Isgreaterf(float, float);
       extern int _Isgreaterequalf(float, float);

     extern int _Islessgreater(double, double);
     extern int _Islessgreaterf(float, float);

       extern int _Fpclass(double);
       extern int _Fpclassf(float);
# 1152 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
       extern int _Isnanf128(long double);
       extern int _Isfinitef128(long double);
       extern int _Isinff128(long double);
       extern int _Isnormalf128(long double);
       extern int _Signbitf128(long double);
       extern int _Isunorderedf128(long double,long double);
       extern int _Islessf128(long double,long double);
       extern int _Islessequalf128(long double,long double);
       extern int _Isgreaterf128(long double,long double);
       extern int _Isgreaterequalf128(long double,long double);
       extern int _Islessgreaterf128(long double,long double);
       extern int _Fpclassf128(long double);
# 1211 "/usr/local/lib/gcc-lib/ia64-hp-hpux11.22/3.2/include/math.h" 3 4
}
# 52 "/usr/local/include/g++-v3/cmath" 2 3
# 79 "/usr/local/include/g++-v3/cmath" 3
namespace std
{


  template< _Tp> _Tp __cmath_power(_Tp, unsigned int);

  template< _Tp>
  inline _Tp
    __cmath_abs(_Tp __x)
    {
      return __x < _Tp() ? -__x : __x;
    }

  inline float
  abs(float __x)
  { return __builtin_fabsf(__x); }

  inline double
  abs(double __x)
  { return __builtin_fabs(__x); }

  inline long double
  abs(long double __x)
  { return __builtin_fabsl(__x); }


  inline float
  acos(float __x) { return ::acosf(__x); }





  using ::acos;


  inline long double
  acos(long double __x) { return ::acosl(__x); }






  inline float
  asin(float __x) { return ::asinf(__x); }





  using ::asin;


  inline long double
  asin(long double __x) { return ::asinl(__x); }






  inline float
  atan(float __x) { return ::atanf(__x); }





  using ::atan;


  inline long double
  atan(long double __x) { return ::atanl(__x); }






  inline float
  atan2(float __y, float __x) { return ::atan2f(__y, __x); }






  using ::atan2;


  inline long double
  atan2(long double __y, long double __x) { return ::atan2l(__y, __x); }







  inline float
  ceil(float __x) { return ::ceilf(__x); }





  using ::ceil;


  inline long double
  ceil(long double __x) { return ::ceill(__x); }





  inline float
  cos(float __x)
  { return __builtin_cosf(__x); }

  using ::cos;

  inline long double
  cos(long double __x)
  { return __builtin_cosl(__x); }


  inline float
  cosh(float __x) { return ::coshf(__x); }





  using ::cosh;


  inline long double
  cosh(long double __x) { return ::coshl(__x); }






  inline float
  exp(float __x) { return ::expf(__x); }





  using ::exp;


  inline long double
  exp(long double __x) { return ::expl(__x); }





  inline float
  fabs(float __x)
  { return __builtin_fabsf(__x); }

  using ::fabs;

  inline long double
  fabs(long double __x)
  { return __builtin_fabsl(__x); }


  inline float
  floor(float __x) { return ::floorf(__x); }





  using ::floor;


  inline long double
  floor(long double __x) { return ::floorl(__x); }






  inline float
  fmod(float __x, float __y) { return ::fmodf(__x, __y); }






  using ::fmod;


  inline long double
  fmod(long double __x, long double __y) { return ::fmodl(__x, __y); }







  inline float
  frexp(float __x, int* __exp) { return ::frexpf(__x, __exp); }





  using ::frexp;


  inline long double
  frexp(long double __x, int* __exp) { return ::frexpl(__x, __exp); }







  inline float
  ldexp(float __x, int __exp) { return ::ldexpf(__x, __exp); }






  using ::ldexp;


  inline long double
  ldexp(long double __x, int __exp) { return ::ldexpl(__x, __exp); }







  inline float
  log(float __x) { return ::logf(__x); }





  using ::log;


  inline long double
  log(long double __x) { return ::logl(__x); }






  inline float
  log10(float __x) { return ::log10f(__x); }





  using ::log10;


  inline long double
  log10(long double __x) { return ::log10l(__x); }






  inline float
  modf(float __x, float* __iptr) { return ::modff(__x, __iptr); }
# 379 "/usr/local/include/g++-v3/cmath" 3
  using ::modf;


  inline long double
  modf(long double __x, long double* __iptr) { return ::modfl(__x, __iptr); }
# 395 "/usr/local/include/g++-v3/cmath" 3
  template< _Tp>
    inline _Tp
    __pow_helper(_Tp __x, int __n)
    {
      return __n < 0
        ? _Tp(1)/__cmath_power(__x, -__n)
        : __cmath_power(__x, __n);
    }


  inline float
  pow(float __x, float __y) { return ::powf(__x, __y); }






  using ::pow;


  inline long double
  pow(long double __x, long double __y) { return ::powl(__x, __y); }






  inline float
  pow(float __x, int __n)
  { return __pow_helper(__x, __n); }

  inline double
  pow(double __x, int __i)
  { return __pow_helper(__x, __i); }

  inline long double
  pow(long double __x, int __n)
  { return __pow_helper(__x, __n); }

  inline float
  sin(float __x)
  { return __builtin_sinf(__x); }

  using ::sin;

  inline long double
  sin(long double __x)
  { return __builtin_sinl(__x); }


  inline float
  sinh(float __x) { return ::sinhf(__x); }





  using ::sinh;


  inline long double
  sinh(long double __x) { return ::sinhl(__x); }





  inline float
  sqrt(float __x)
  { return __builtin_sqrtf(__x); }

  using ::sqrt;

  inline long double
  sqrt(long double __x)
  { return __builtin_sqrtl(__x); }


  inline float
  tan(float __x) { return ::tanf(__x); }





  using ::tan;


  inline long double
  tan(long double __x) { return ::tanl(__x); }






  inline float
  tanh(float __x) { return ::tanhf(__x); }





  using ::tanh;


  inline long double
  tanh(long double __x) { return ::tanhl(__x); }




}
# 661 "/usr/local/include/g++-v3/cmath" 3
# 1 "/usr/local/include/g++-v3/bits/cmath.tcc" 1 3
# 35 "/usr/local/include/g++-v3/bits/cmath.tcc" 3
namespace std
{
  template< _Tp>
    _Tp
    __cmath_power(_Tp __x, unsigned int __n)
    {
      _Tp __y = __n % 2 ? __x : 1;

      while (__n >>= 1)
        {
          __x = __x * __x;
          if (__n % 2)
            __y = __y * __x;
        }

      return __y;
    }
}
# 662 "/usr/local/include/g++-v3/cmath" 2 3
# 42 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 2 3



# 1 "/usr/local/include/g++-v3/vector" 1 3
# 65 "/usr/local/include/g++-v3/vector" 3

# 1 "/usr/local/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/usr/local/include/g++-v3/bits/functexcept.h" 3
# 1 "/usr/local/include/g++-v3/exception_defines.h" 1 3
# 35 "/usr/local/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 67 "/usr/local/include/g++-v3/vector" 2 3




# 1 "/usr/local/include/g++-v3/bits/stl_vector.h" 1 3
# 65 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
# 1 "/usr/local/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/usr/local/include/g++-v3/bits/functexcept.h" 3
# 1 "/usr/local/include/g++-v3/exception_defines.h" 1 3
# 35 "/usr/local/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 66 "/usr/local/include/g++-v3/bits/stl_vector.h" 2 3


namespace std
{
# 78 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
template <class _Tp, class _Allocator, bool _IsStatic>
class _Vector_alloc_base {
public:
  typedef _Alloc_traits<_Tp, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return _M_data_allocator; }

  _Vector_alloc_base(const allocator_type& __a)
    : _M_data_allocator(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
  {}

protected:
  allocator_type _M_data_allocator;
  _Tp* _M_start;
  _Tp* _M_finish;
  _Tp* _M_end_of_storage;

  _Tp* _M_allocate(size_t __n)
    { return _M_data_allocator.allocate(__n); }
  void _M_deallocate(_Tp* __p, size_t __n)
    { if (__p) _M_data_allocator.deallocate(__p, __n); }
};



template <class _Tp, class _Allocator>
class _Vector_alloc_base<_Tp, _Allocator, true> {
public:
  typedef _Alloc_traits<_Tp, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return allocator_type(); }

  _Vector_alloc_base(const allocator_type&)
    : _M_start(0), _M_finish(0), _M_end_of_storage(0)
  {}

protected:
  _Tp* _M_start;
  _Tp* _M_finish;
  _Tp* _M_end_of_storage;

  typedef _Alloc_traits<_Tp, _Allocator>::_Alloc_type _Alloc_type;
  _Tp* _M_allocate(size_t __n)
    { return _Alloc_type::allocate(__n); }
  void _M_deallocate(_Tp* __p, size_t __n)
    { _Alloc_type::deallocate(__p, __n);}
};

template <class _Tp, class _Alloc>
struct _Vector_base
  : public _Vector_alloc_base<_Tp, _Alloc,
                              _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
{
  typedef _Vector_alloc_base<_Tp, _Alloc,
                             _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
          _Base;
  typedef _Base::allocator_type allocator_type;

  _Vector_base(const allocator_type& __a) : _Base(__a) {}
  _Vector_base(size_t __n, const allocator_type& __a) : _Base(__a) {
    _M_start = _M_allocate(__n);
    _M_finish = _M_start;
    _M_end_of_storage = _M_start + __n;
  }

  ~_Vector_base() { _M_deallocate(_M_start, _M_end_of_storage - _M_start); }
};
# 165 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
template <class _Tp, class _Alloc = allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
{

 

private:
  typedef _Vector_base<_Tp, _Alloc> _Base;
  typedef vector<_Tp, _Alloc> vector_type;
public:
  typedef _Tp value_type;
  typedef value_type* pointer;
  typedef const value_type* const_pointer;
  typedef __normal_iterator<pointer, vector_type> iterator;
  typedef __normal_iterator<const_pointer, vector_type> const_iterator;
  typedef value_type& reference;
  typedef const value_type& const_reference;
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;

  typedef _Base::allocator_type allocator_type;
  allocator_type get_allocator() const { return _Base::get_allocator(); }

  typedef reverse_iterator<const_iterator> const_reverse_iterator;
  typedef reverse_iterator<iterator> reverse_iterator;

protected:
  using _Base::_M_allocate;
  using _Base::_M_deallocate;
  using _Base::_M_start;
  using _Base::_M_finish;
  using _Base::_M_end_of_storage;

protected:
  void _M_insert_aux(iterator __position, const _Tp& __x);
  void _M_insert_aux(iterator __position);

public:




  iterator begin() { return iterator (_M_start); }





  const_iterator begin() const
    { return const_iterator (_M_start); }





  iterator end() { return iterator (_M_finish); }





  const_iterator end() const { return const_iterator (_M_finish); }





  reverse_iterator rbegin()
    { return reverse_iterator(end()); }





  const_reverse_iterator rbegin() const
    { return const_reverse_iterator(end()); }






  reverse_iterator rend()
    { return reverse_iterator(begin()); }






  const_reverse_iterator rend() const
    { return const_reverse_iterator(begin()); }


  size_type size() const
    { return size_type(end() - begin()); }


  size_type max_size() const
    { return size_type(-1) / sizeof(_Tp); }





  size_type capacity() const
    { return size_type(const_iterator(_M_end_of_storage) - begin()); }




  bool empty() const
    { return begin() == end(); }
# 288 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  reference operator[](size_type __n) { return *(begin() + __n); }
# 299 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  const_reference operator[](size_type __n) const { return *(begin() + __n); }

  void _M_range_check(size_type __n) const {
    if (__n >= this->size())
      __throw_out_of_range("vector");
  }
# 315 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  reference at(size_type __n)
    { _M_range_check(__n); return (*this)[__n]; }
# 327 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  const_reference at(size_type __n) const
    { _M_range_check(__n); return (*this)[__n]; }


  explicit vector(const allocator_type& __a = allocator_type())
    : _Base(__a) {}

  vector(size_type __n, const _Tp& __value,
         const allocator_type& __a = allocator_type())
    : _Base(__n, __a)
    { _M_finish = uninitialized_fill_n(_M_start, __n, __value); }

  explicit vector(size_type __n)
    : _Base(__n, allocator_type())
    { _M_finish = uninitialized_fill_n(_M_start, __n, _Tp()); }

  vector(const vector<_Tp, _Alloc>& __x)
    : _Base(__x.size(), __x.get_allocator())
    { _M_finish = uninitialized_copy(__x.begin(), __x.end(), _M_start); }


  template <class _InputIterator>
    vector(_InputIterator __first, _InputIterator __last,
           const allocator_type& __a = allocator_type())
        : _Base(__a)
        {
      typedef _Is_integer<_InputIterator>::_Integral _Integral;
      _M_initialize_aux(__first, __last, _Integral());
    }

  template <class _Integer>
    void _M_initialize_aux(_Integer __n, _Integer __value, __true_type)
        {
      _M_start = _M_allocate(__n);
      _M_end_of_storage = _M_start + __n;
      _M_finish = uninitialized_fill_n(_M_start, __n, __value);
    }

  template<class _InputIterator>
    void
        _M_initialize_aux(_InputIterator __first, _InputIterator __last, __false_type)
        {
          typedef iterator_traits<_InputIterator>::iterator_category _IterCategory;
          _M_range_initialize(__first, __last, _IterCategory());
        }

  ~vector()
  { _Destroy(_M_start, _M_finish); }

  vector<_Tp, _Alloc>& operator=(const vector<_Tp, _Alloc>& __x);
# 392 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void reserve(size_type __n) {
    if (capacity() < __n) {
      const size_type __old_size = size();
      pointer __tmp = _M_allocate_and_copy(__n, _M_start, _M_finish);
      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __tmp;
      _M_finish = __tmp + __old_size;
      _M_end_of_storage = _M_start + __n;
    }
  }
# 420 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void assign(size_type __n, const _Tp& __val) { _M_fill_assign(__n, __val); }
  void _M_fill_assign(size_type __n, const _Tp& __val);

  template<class _InputIterator>
    void
        assign(_InputIterator __first, _InputIterator __last)
        {
      typedef _Is_integer<_InputIterator>::_Integral _Integral;
      _M_assign_dispatch(__first, __last, _Integral());
    }

  template<class _Integer>
    void
        _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
    { _M_fill_assign((size_type) __n, (_Tp) __val); }

  template<class _InputIter>
    void
        _M_assign_dispatch(_InputIter __first, _InputIter __last, __false_type)
    {
          typedef iterator_traits<_InputIter>::iterator_category _IterCategory;
          _M_assign_aux(__first, __last, _IterCategory());
        }

  template <class _InputIterator>
  void _M_assign_aux(_InputIterator __first, _InputIterator __last,
                     input_iterator_tag);

  template <class _ForwardIterator>
  void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
                     forward_iterator_tag);





  reference front() { return *begin(); }





  const_reference front() const { return *begin(); }





  reference back() { return *(end() - 1); }





  const_reference back() const { return *(end() - 1); }
# 485 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void
  push_back(const _Tp& __x)
  {
    if (_M_finish != _M_end_of_storage) {
      _Construct(_M_finish, __x);
      ++_M_finish;
    }
    else
      _M_insert_aux(end(), __x);
  }
# 516 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void
  swap(vector<_Tp, _Alloc>& __x)
  {
    std::swap(_M_start, __x._M_start);
    std::swap(_M_finish, __x._M_finish);
    std::swap(_M_end_of_storage, __x._M_end_of_storage);
  }
# 535 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  iterator
  insert(iterator __position, const _Tp& __x)
  {
    size_type __n = __position - begin();
    if (_M_finish != _M_end_of_storage && __position == end()) {
      _Construct(_M_finish, __x);
      ++_M_finish;
    }
    else
      _M_insert_aux(iterator(__position), __x);
    return begin() + __n;
  }
# 559 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  iterator
  insert(iterator __position)
  {
    size_type __n = __position - begin();
    if (_M_finish != _M_end_of_storage && __position == end()) {
      _Construct(_M_finish);
      ++_M_finish;
    }
    else
      _M_insert_aux(iterator(__position));
    return begin() + __n;
  }


  template<class _InputIterator>
    void
        insert(iterator __pos, _InputIterator __first, _InputIterator __last)
        {
      typedef _Is_integer<_InputIterator>::_Integral _Integral;
      _M_insert_dispatch(__pos, __first, __last, _Integral());
    }

  template <class _Integer>
    void
        _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, __true_type)
    { _M_fill_insert(__pos, static_cast<size_type>(__n), static_cast<_Tp>(__val)); }

  template<class _InputIterator>
    void
        _M_insert_dispatch(iterator __pos,
                       _InputIterator __first, _InputIterator __last,
                       __false_type)
        {
          typedef iterator_traits<_InputIterator>::iterator_category _IterCategory;
      _M_range_insert(__pos, __first, __last, _IterCategory());
    }
# 609 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void insert (iterator __pos, size_type __n, const _Tp& __x)
    { _M_fill_insert(__pos, __n, __x); }

  void _M_fill_insert (iterator __pos, size_type __n, const _Tp& __x);
# 623 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void pop_back() {
    --_M_finish;
    _Destroy(_M_finish);
  }
# 642 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  iterator erase(iterator __position) {
    if (__position + 1 != end())
      copy(__position + 1, end(), __position);
    --_M_finish;
    _Destroy(_M_finish);
    return __position;
  }
# 665 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  iterator erase(iterator __first, iterator __last) {
    iterator __i(copy(__last, end(), __first));
    _Destroy(__i, end());
    _M_finish = _M_finish - (__last - __first);
    return __first;
  }
# 682 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void resize(size_type __new_size, const _Tp& __x) {
    if (__new_size < size())
      erase(begin() + __new_size, end());
    else
      insert(end(), __new_size - size(), __x);
  }
# 698 "/usr/local/include/g++-v3/bits/stl_vector.h" 3
  void resize(size_type __new_size) { resize(__new_size, _Tp()); }







  void clear() { erase(begin(), end()); }

protected:

  template <class _ForwardIterator>
  pointer _M_allocate_and_copy(size_type __n, _ForwardIterator __first,
                                               _ForwardIterator __last)
  {
    pointer __result = _M_allocate(__n);
    try {
      uninitialized_copy(__first, __last, __result);
      return __result;
    }
    catch(...)
      {
        _M_deallocate(__result, __n);
        throw;
      }
  }

  template <class _InputIterator>
  void _M_range_initialize(_InputIterator __first,
                           _InputIterator __last, input_iterator_tag)
  {
    for ( ; __first != __last; ++__first)
      push_back(*__first);
  }


  template <class _ForwardIterator>
  void _M_range_initialize(_ForwardIterator __first,
                           _ForwardIterator __last, forward_iterator_tag)
  {
    size_type __n = distance(__first, __last);
    _M_start = _M_allocate(__n);
    _M_end_of_storage = _M_start + __n;
    _M_finish = uninitialized_copy(__first, __last, _M_start);
  }

  template <class _InputIterator>
  void _M_range_insert(iterator __pos,
                       _InputIterator __first, _InputIterator __last,
                       input_iterator_tag);

  template <class _ForwardIterator>
  void _M_range_insert(iterator __pos,
                       _ForwardIterator __first, _ForwardIterator __last,
                       forward_iterator_tag);
};

template <class _Tp, class _Alloc>
inline bool
operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
{
  return __x.size() == __y.size() &&
         equal(__x.begin(), __x.end(), __y.begin());
}

template <class _Tp, class _Alloc>
inline bool
operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
{
  return lexicographical_compare(__x.begin(), __x.end(),
                                 __y.begin(), __y.end());
}

template <class _Tp, class _Alloc>
inline void swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
{
  __x.swap(__y);
}

template <class _Tp, class _Alloc>
inline bool
operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return !(__x == __y);
}

template <class _Tp, class _Alloc>
inline bool
operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return __y < __x;
}

template <class _Tp, class _Alloc>
inline bool
operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return !(__y < __x);
}

template <class _Tp, class _Alloc>
inline bool
operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return !(__x < __y);
}

template <class _Tp, class _Alloc>
vector<_Tp,_Alloc>&
vector<_Tp,_Alloc>::operator=(const vector<_Tp, _Alloc>& __x)
{
  if (&__x != this) {
    const size_type __xlen = __x.size();
    if (__xlen > capacity()) {
      pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(), __x.end());
      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __tmp;
      _M_end_of_storage = _M_start + __xlen;
    }
    else if (size() >= __xlen) {
      iterator __i(copy(__x.begin(), __x.end(), begin()));
      _Destroy(__i, end());
    }
    else {
      copy(__x.begin(), __x.begin() + size(), _M_start);
      uninitialized_copy(__x.begin() + size(), __x.end(), _M_finish);
    }
    _M_finish = _M_start + __xlen;
  }
  return *this;
}

template <class _Tp, class _Alloc>
void vector<_Tp, _Alloc>::_M_fill_assign(size_t __n, const value_type& __val)
{
  if (__n > capacity()) {
    vector<_Tp, _Alloc> __tmp(__n, __val, get_allocator());
    __tmp.swap(*this);
  }
  else if (__n > size()) {
    fill(begin(), end(), __val);
    _M_finish = uninitialized_fill_n(_M_finish, __n - size(), __val);
  }
  else
    erase(fill_n(begin(), __n, __val), end());
}

template <class _Tp, class _Alloc> template <class _InputIter>
void vector<_Tp, _Alloc>::_M_assign_aux(_InputIter __first, _InputIter __last,
                                        input_iterator_tag) {
  iterator __cur(begin());
  for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
    *__cur = *__first;
  if (__first == __last)
    erase(__cur, end());
  else
    insert(end(), __first, __last);
}

template <class _Tp, class _Alloc> template <class _ForwardIter>
void
vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIter __first, _ForwardIter __last,
                                   forward_iterator_tag) {
  size_type __len = distance(__first, __last);

  if (__len > capacity()) {
    pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
    _Destroy(_M_start, _M_finish);
    _M_deallocate(_M_start, _M_end_of_storage - _M_start);
    _M_start = __tmp;
    _M_end_of_storage = _M_finish = _M_start + __len;
  }
  else if (size() >= __len) {
    iterator __new_finish(copy(__first, __last, _M_start));
    _Destroy(__new_finish, end());
    _M_finish = __new_finish.base();
  }
  else {
    _ForwardIter __mid = __first;
    advance(__mid, size());
    copy(__first, __mid, _M_start);
    _M_finish = uninitialized_copy(__mid, __last, _M_finish);
  }
}

template <class _Tp, class _Alloc>
void
vector<_Tp, _Alloc>::_M_insert_aux(iterator __position, const _Tp& __x)
{
  if (_M_finish != _M_end_of_storage) {
    _Construct(_M_finish, *(_M_finish - 1));
    ++_M_finish;
    _Tp __x_copy = __x;
    copy_backward(__position, iterator(_M_finish - 2), iterator(_M_finish- 1));
    *__position = __x_copy;
  }
  else {
    const size_type __old_size = size();
    const size_type __len = __old_size != 0 ? 2 * __old_size : 1;
    iterator __new_start(_M_allocate(__len));
    iterator __new_finish(__new_start);
    try {
      __new_finish = uninitialized_copy(iterator(_M_start), __position,
                                        __new_start);
      _Construct(__new_finish.base(), __x);
      ++__new_finish;
      __new_finish = uninitialized_copy(__position, iterator(_M_finish),
                                        __new_finish);
    }
    catch(...)
      {
        _Destroy(__new_start,__new_finish);
        _M_deallocate(__new_start.base(),__len);
        throw;
      }
    _Destroy(begin(), end());
    _M_deallocate(_M_start, _M_end_of_storage - _M_start);
    _M_start = __new_start.base();
    _M_finish = __new_finish.base();
    _M_end_of_storage = __new_start.base() + __len;
  }
}

template <class _Tp, class _Alloc>
void
vector<_Tp, _Alloc>::_M_insert_aux(iterator __position)
{
  if (_M_finish != _M_end_of_storage) {
    _Construct(_M_finish, *(_M_finish - 1));
    ++_M_finish;
    copy_backward(__position, iterator(_M_finish - 2),
                  iterator(_M_finish - 1));
    *__position = _Tp();
  }
  else {
    const size_type __old_size = size();
    const size_type __len = __old_size != 0 ? 2 * __old_size : 1;
    pointer __new_start = _M_allocate(__len);
    pointer __new_finish = __new_start;
    try {
      __new_finish = uninitialized_copy(iterator(_M_start), __position,
                                        __new_start);
      _Construct(__new_finish);
      ++__new_finish;
      __new_finish = uninitialized_copy(__position, iterator(_M_finish),
                                        __new_finish);
    }
    catch(...)
      {
        _Destroy(__new_start,__new_finish);
        _M_deallocate(__new_start,__len);
        throw;
      }
    _Destroy(begin(), end());
    _M_deallocate(_M_start, _M_end_of_storage - _M_start);
    _M_start = __new_start;
    _M_finish = __new_finish;
    _M_end_of_storage = __new_start + __len;
  }
}

template <class _Tp, class _Alloc>
void vector<_Tp, _Alloc>::_M_fill_insert(iterator __position, size_type __n,
                                         const _Tp& __x)
{
  if (__n != 0) {
    if (size_type(_M_end_of_storage - _M_finish) >= __n) {
      _Tp __x_copy = __x;
      const size_type __elems_after = end() - __position;
      iterator __old_finish(_M_finish);
      if (__elems_after > __n) {
        uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
        _M_finish += __n;
        copy_backward(__position, __old_finish - __n, __old_finish);
        fill(__position, __position + __n, __x_copy);
      }
      else {
        uninitialized_fill_n(_M_finish, __n - __elems_after, __x_copy);
        _M_finish += __n - __elems_after;
        uninitialized_copy(__position, __old_finish, _M_finish);
        _M_finish += __elems_after;
        fill(__position, __old_finish, __x_copy);
      }
    }
    else {
      const size_type __old_size = size();
      const size_type __len = __old_size + max(__old_size, __n);
      iterator __new_start(_M_allocate(__len));
      iterator __new_finish(__new_start);
      try {
        __new_finish = uninitialized_copy(begin(), __position, __new_start);
        __new_finish = uninitialized_fill_n(__new_finish, __n, __x);
        __new_finish
          = uninitialized_copy(__position, end(), __new_finish);
      }
      catch(...)
        {
          _Destroy(__new_start,__new_finish);
          _M_deallocate(__new_start.base(),__len);
          throw;
        }
      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __new_start.base();
      _M_finish = __new_finish.base();
      _M_end_of_storage = __new_start.base() + __len;
    }
  }
}

template <class _Tp, class _Alloc> template <class _InputIterator>
void
vector<_Tp, _Alloc>::_M_range_insert(iterator __pos,
                                     _InputIterator __first,
                                     _InputIterator __last,
                                     input_iterator_tag)
{
  for ( ; __first != __last; ++__first) {
    __pos = insert(__pos, *__first);
    ++__pos;
  }
}

template <class _Tp, class _Alloc> template <class _ForwardIterator>
void
vector<_Tp, _Alloc>::_M_range_insert(iterator __position,
                                     _ForwardIterator __first,
                                     _ForwardIterator __last,
                                     forward_iterator_tag)
{
  if (__first != __last) {
    size_type __n = distance(__first, __last);
    if (size_type(_M_end_of_storage - _M_finish) >= __n) {
      const size_type __elems_after = end() - __position;
      iterator __old_finish(_M_finish);
      if (__elems_after > __n) {
        uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
        _M_finish += __n;
        copy_backward(__position, __old_finish - __n, __old_finish);
        copy(__first, __last, __position);
      }
      else {
        _ForwardIterator __mid = __first;
        advance(__mid, __elems_after);
        uninitialized_copy(__mid, __last, _M_finish);
        _M_finish += __n - __elems_after;
        uninitialized_copy(__position, __old_finish, _M_finish);
        _M_finish += __elems_after;
        copy(__first, __mid, __position);
      }
    }
    else {
      const size_type __old_size = size();
      const size_type __len = __old_size + max(__old_size, __n);
      iterator __new_start(_M_allocate(__len));
      iterator __new_finish(__new_start);
      try {
        __new_finish = uninitialized_copy(iterator(_M_start),
                                          __position, __new_start);
        __new_finish = uninitialized_copy(__first, __last, __new_finish);
        __new_finish
          = uninitialized_copy(__position, iterator(_M_finish), __new_finish);
      }
      catch(...)
        {
          _Destroy(__new_start,__new_finish);
          _M_deallocate(__new_start.base(), __len);
          throw;
        }
      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __new_start.base();
      _M_finish = __new_finish.base();
      _M_end_of_storage = __new_start.base() + __len;
    }
  }
}

}
# 72 "/usr/local/include/g++-v3/vector" 2 3
# 1 "/usr/local/include/g++-v3/bits/stl_bvector.h" 1 3
# 64 "/usr/local/include/g++-v3/bits/stl_bvector.h" 3
namespace std
{
  typedef unsigned long _Bit_type;
  enum { _M_word_bit = int(8 * sizeof(_Bit_type)) };

struct _Bit_reference {

  _Bit_type * _M_p;
  _Bit_type _M_mask;
  _Bit_reference(_Bit_type * __x, _Bit_type __y)
    : _M_p(__x), _M_mask(__y) {}

public:
  _Bit_reference() : _M_p(0), _M_mask(0) {}
  operator bool() const { return !!(*_M_p & _M_mask); }
  _Bit_reference& operator=(bool __x)
  {
    if (__x) *_M_p |= _M_mask;
    else *_M_p &= ~_M_mask;
    return *this;
  }
  _Bit_reference& operator=(const _Bit_reference& __x)
    { return *this = bool(__x); }
  bool operator==(const _Bit_reference& __x) const
    { return bool(*this) == bool(__x); }
  bool operator<(const _Bit_reference& __x) const
    { return !bool(*this) && bool(__x); }
  void flip() { *_M_p ^= _M_mask; }
};

inline void swap(_Bit_reference __x, _Bit_reference __y)
{
  bool __tmp = __x;
  __x = __y;
  __y = __tmp;
}

struct _Bit_iterator_base : public iterator<random_access_iterator_tag, bool>
{
  _Bit_type * _M_p;
  unsigned int _M_offset;

  _Bit_iterator_base(_Bit_type * __x, unsigned int __y)
    : _M_p(__x), _M_offset(__y) {}

  void _M_bump_up() {
    if (_M_offset++ == _M_word_bit - 1) {
      _M_offset = 0;
      ++_M_p;
    }
  }
  void _M_bump_down() {
    if (_M_offset-- == 0) {
      _M_offset = _M_word_bit - 1;
      --_M_p;
    }
  }

  void _M_incr(ptrdiff_t __i) {
    difference_type __n = __i + _M_offset;
    _M_p += __n / _M_word_bit;
    __n = __n % _M_word_bit;
    if (__n < 0) {
      _M_offset = (unsigned int) __n + _M_word_bit;
      --_M_p;
    } else
      _M_offset = (unsigned int) __n;
  }

  bool operator==(const _Bit_iterator_base& __i) const {
    return _M_p == __i._M_p && _M_offset == __i._M_offset;
  }
  bool operator<(const _Bit_iterator_base& __i) const {
    return _M_p < __i._M_p || (_M_p == __i._M_p && _M_offset < __i._M_offset);
  }
  bool operator!=(const _Bit_iterator_base& __i) const {
    return !(*this == __i);
  }
  bool operator>(const _Bit_iterator_base& __i) const {
    return __i < *this;
  }
  bool operator<=(const _Bit_iterator_base& __i) const {
    return !(__i < *this);
  }
  bool operator>=(const _Bit_iterator_base& __i) const {
    return !(*this < __i);
  }
};

inline ptrdiff_t
operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) {
  return _M_word_bit * (__x._M_p - __y._M_p) + __x._M_offset - __y._M_offset;
}


struct _Bit_iterator : public _Bit_iterator_base
{
  typedef _Bit_reference reference;
  typedef _Bit_reference* pointer;
  typedef _Bit_iterator iterator;

  _Bit_iterator() : _Bit_iterator_base(0, 0) {}
  _Bit_iterator(_Bit_type * __x, unsigned int __y)
    : _Bit_iterator_base(__x, __y) {}

  reference operator*() const { return reference(_M_p, 1U << _M_offset); }
  iterator& operator++() {
    _M_bump_up();
    return *this;
  }
  iterator operator++(int) {
    iterator __tmp = *this;
    _M_bump_up();
    return __tmp;
  }
  iterator& operator--() {
    _M_bump_down();
    return *this;
  }
  iterator operator--(int) {
    iterator __tmp = *this;
    _M_bump_down();
    return __tmp;
  }
  iterator& operator+=(difference_type __i) {
    _M_incr(__i);
    return *this;
  }
  iterator& operator-=(difference_type __i) {
    *this += -__i;
    return *this;
  }
  iterator operator+(difference_type __i) const {
    iterator __tmp = *this;
    return __tmp += __i;
  }
  iterator operator-(difference_type __i) const {
    iterator __tmp = *this;
    return __tmp -= __i;
  }

  reference operator[](difference_type __i) { return *(*this + __i); }
};

inline _Bit_iterator
operator+(ptrdiff_t __n, const _Bit_iterator& __x) { return __x + __n; }


struct _Bit_const_iterator : public _Bit_iterator_base
{
  typedef bool reference;
  typedef bool const_reference;
  typedef const bool* pointer;
  typedef _Bit_const_iterator const_iterator;

  _Bit_const_iterator() : _Bit_iterator_base(0, 0) {}
  _Bit_const_iterator(_Bit_type * __x, unsigned int __y)
    : _Bit_iterator_base(__x, __y) {}
  _Bit_const_iterator(const _Bit_iterator& __x)
    : _Bit_iterator_base(__x._M_p, __x._M_offset) {}

  const_reference operator*() const {
    return _Bit_reference(_M_p, 1U << _M_offset);
  }
  const_iterator& operator++() {
    _M_bump_up();
    return *this;
  }
  const_iterator operator++(int) {
    const_iterator __tmp = *this;
    _M_bump_up();
    return __tmp;
  }
  const_iterator& operator--() {
    _M_bump_down();
    return *this;
  }
  const_iterator operator--(int) {
    const_iterator __tmp = *this;
    _M_bump_down();
    return __tmp;
  }
  const_iterator& operator+=(difference_type __i) {
    _M_incr(__i);
    return *this;
  }
  const_iterator& operator-=(difference_type __i) {
    *this += -__i;
    return *this;
  }
  const_iterator operator+(difference_type __i) const {
    const_iterator __tmp = *this;
    return __tmp += __i;
  }
  const_iterator operator-(difference_type __i) const {
    const_iterator __tmp = *this;
    return __tmp -= __i;
  }
  const_reference operator[](difference_type __i) {
    return *(*this + __i);
  }
};

inline _Bit_const_iterator
operator+(ptrdiff_t __n, const _Bit_const_iterator& __x) { return __x + __n; }






template <class _Allocator, bool __is_static>
class _Bvector_alloc_base {
public:
  typedef _Alloc_traits<bool, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return _M_data_allocator; }

  _Bvector_alloc_base(const allocator_type& __a)
    : _M_data_allocator(__a), _M_start(), _M_finish(), _M_end_of_storage(0) {}

protected:
  _Bit_type * _M_bit_alloc(size_t __n)
    { return _M_data_allocator.allocate((__n + _M_word_bit - 1)/_M_word_bit); }
  void _M_deallocate() {
    if (_M_start._M_p)
      _M_data_allocator.deallocate(_M_start._M_p,
                                   _M_end_of_storage - _M_start._M_p);
  }

  _Alloc_traits<_Bit_type, _Allocator>::allocator_type
          _M_data_allocator;
  _Bit_iterator _M_start;
  _Bit_iterator _M_finish;
  _Bit_type * _M_end_of_storage;
};


template <class _Allocator>
class _Bvector_alloc_base<_Allocator, true> {
public:
  typedef _Alloc_traits<bool, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return allocator_type(); }

  _Bvector_alloc_base(const allocator_type&)
    : _M_start(), _M_finish(), _M_end_of_storage(0) {}

protected:
  typedef _Alloc_traits<_Bit_type, _Allocator>::_Alloc_type
          _Alloc_type;

  _Bit_type * _M_bit_alloc(size_t __n)
    { return _Alloc_type::allocate((__n + _M_word_bit - 1)/_M_word_bit); }
  void _M_deallocate() {
    if (_M_start._M_p)
      _Alloc_type::deallocate(_M_start._M_p,
                              _M_end_of_storage - _M_start._M_p);
  }

  _Bit_iterator _M_start;
  _Bit_iterator _M_finish;
  _Bit_type * _M_end_of_storage;
};

template <class _Alloc>
class _Bvector_base
  : public _Bvector_alloc_base<_Alloc,
                               _Alloc_traits<bool, _Alloc>::_S_instanceless>
{
  typedef _Bvector_alloc_base<_Alloc,
                              _Alloc_traits<bool, _Alloc>::_S_instanceless>
          _Base;
public:
  typedef _Base::allocator_type allocator_type;

  _Bvector_base(const allocator_type& __a) : _Base(__a) {}
  ~_Bvector_base() { _Base::_M_deallocate(); }
};

}



namespace std
{

template < _Alloc>
  class vector<bool, _Alloc> : public _Bvector_base<_Alloc>
  {
  public:
    typedef bool value_type;
    typedef size_t size_type;
    typedef ptrdiff_t difference_type;
    typedef _Bit_reference reference;
    typedef bool const_reference;
    typedef _Bit_reference* pointer;
    typedef const bool* const_pointer;

    typedef _Bit_iterator iterator;
    typedef _Bit_const_iterator const_iterator;

    typedef reverse_iterator<const_iterator> const_reverse_iterator;
    typedef reverse_iterator<iterator> reverse_iterator;

    typedef _Bvector_base<_Alloc>::allocator_type allocator_type;
    allocator_type get_allocator() const {
      return _Bvector_base<_Alloc>::get_allocator();
    }

  protected:
    using _Bvector_base<_Alloc>::_M_bit_alloc;
    using _Bvector_base<_Alloc>::_M_deallocate;
    using _Bvector_base<_Alloc>::_M_start;
    using _Bvector_base<_Alloc>::_M_finish;
    using _Bvector_base<_Alloc>::_M_end_of_storage;

  protected:
    void _M_initialize(size_type __n) {
      _Bit_type * __q = _M_bit_alloc(__n);
      _M_end_of_storage = __q + (__n + _M_word_bit - 1)/_M_word_bit;
      _M_start = iterator(__q, 0);
      _M_finish = _M_start + difference_type(__n);
    }
    void _M_insert_aux(iterator __position, bool __x) {
      if (_M_finish._M_p != _M_end_of_storage) {
        copy_backward(__position, _M_finish, _M_finish + 1);
        *__position = __x;
        ++_M_finish;
      }
      else {
        size_type __len = size()
                          ? 2 * size() : static_cast<size_type>(_M_word_bit);
        _Bit_type * __q = _M_bit_alloc(__len);
        iterator __i = copy(begin(), __position, iterator(__q, 0));
        *__i++ = __x;
        _M_finish = copy(__position, end(), __i);
        _M_deallocate();
        _M_end_of_storage = __q + (__len + _M_word_bit - 1)/_M_word_bit;
        _M_start = iterator(__q, 0);
      }
    }

    template <class _InputIterator>
    void _M_initialize_range(_InputIterator __first, _InputIterator __last,
                             input_iterator_tag) {
      _M_start = iterator();
      _M_finish = iterator();
      _M_end_of_storage = 0;
      for ( ; __first != __last; ++__first)
        push_back(*__first);
    }

    template <class _ForwardIterator>
    void _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
                             forward_iterator_tag) {
      size_type __n = distance(__first, __last);
      _M_initialize(__n);
      copy(__first, __last, _M_start);
    }

    template <class _InputIterator>
    void _M_insert_range(iterator __pos,
                         _InputIterator __first, _InputIterator __last,
                         input_iterator_tag) {
      for ( ; __first != __last; ++__first) {
        __pos = insert(__pos, *__first);
        ++__pos;
      }
    }

    template <class _ForwardIterator>
    void _M_insert_range(iterator __position,
                         _ForwardIterator __first, _ForwardIterator __last,
                         forward_iterator_tag) {
      if (__first != __last) {
        size_type __n = distance(__first, __last);
        if (capacity() - size() >= __n) {
          copy_backward(__position, end(), _M_finish + difference_type(__n));
          copy(__first, __last, __position);
          _M_finish += difference_type(__n);
        }
        else {
          size_type __len = size() + max(size(), __n);
          _Bit_type * __q = _M_bit_alloc(__len);
          iterator __i = copy(begin(), __position, iterator(__q, 0));
          __i = copy(__first, __last, __i);
          _M_finish = copy(__position, end(), __i);
          _M_deallocate();
          _M_end_of_storage = __q + (__len + _M_word_bit - 1)/_M_word_bit;
          _M_start = iterator(__q, 0);
        }
      }
    }

  public:
    iterator begin() { return _M_start; }
    const_iterator begin() const { return _M_start; }
    iterator end() { return _M_finish; }
    const_iterator end() const { return _M_finish; }

    reverse_iterator rbegin() { return reverse_iterator(end()); }
    const_reverse_iterator rbegin() const {
      return const_reverse_iterator(end());
    }
    reverse_iterator rend() { return reverse_iterator(begin()); }
    const_reverse_iterator rend() const {
      return const_reverse_iterator(begin());
    }

    size_type size() const { return size_type(end() - begin()); }
    size_type max_size() const { return size_type(-1); }
    size_type capacity() const {
      return size_type(const_iterator(_M_end_of_storage, 0) - begin());
    }
    bool empty() const { return begin() == end(); }

    reference operator[](size_type __n)
      { return *(begin() + difference_type(__n)); }
    const_reference operator[](size_type __n) const
      { return *(begin() + difference_type(__n)); }

    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
        __throw_out_of_range("vector<bool>");
    }

    reference at(size_type __n)
      { _M_range_check(__n); return (*this)[__n]; }
    const_reference at(size_type __n) const
      { _M_range_check(__n); return (*this)[__n]; }

    explicit vector(const allocator_type& __a = allocator_type())
      : _Bvector_base<_Alloc>(__a) {}

    vector(size_type __n, bool __value,
              const allocator_type& __a = allocator_type())
      : _Bvector_base<_Alloc>(__a)
    {
      _M_initialize(__n);
      fill(_M_start._M_p, _M_end_of_storage, __value ? ~0 : 0);
    }

    explicit vector(size_type __n)
      : _Bvector_base<_Alloc>(allocator_type())
    {
      _M_initialize(__n);
      fill(_M_start._M_p, _M_end_of_storage, 0);
    }

    vector(const vector& __x) : _Bvector_base<_Alloc>(__x.get_allocator()) {
      _M_initialize(__x.size());
      copy(__x.begin(), __x.end(), _M_start);
    }



    template <class _Integer>
    void _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) {
      _M_initialize(__n);
      fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
    }

    template <class _InputIterator>
    void _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
                                __false_type) {
      _M_initialize_range(__first, __last, __iterator_category(__first));
    }

    template <class _InputIterator>
    vector(_InputIterator __first, _InputIterator __last,
             const allocator_type& __a = allocator_type())
      : _Bvector_base<_Alloc>(__a)
    {
      typedef _Is_integer<_InputIterator>::_Integral _Integral;
      _M_initialize_dispatch(__first, __last, _Integral());
    }

    ~vector() { }

    vector& operator=(const vector& __x) {
      if (&__x == this) return *this;
      if (__x.size() > capacity()) {
        _M_deallocate();
        _M_initialize(__x.size());
      }
      copy(__x.begin(), __x.end(), begin());
      _M_finish = begin() + difference_type(__x.size());
      return *this;
    }






    void _M_fill_assign(size_t __n, bool __x) {
      if (__n > size()) {
        fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
        insert(end(), __n - size(), __x);
      }
      else {
        erase(begin() + __n, end());
        fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
      }
    }

    void assign(size_t __n, bool __x) { _M_fill_assign(__n, __x); }

    template <class _InputIterator>
    void assign(_InputIterator __first, _InputIterator __last) {
      typedef _Is_integer<_InputIterator>::_Integral _Integral;
      _M_assign_dispatch(__first, __last, _Integral());
    }

    template <class _Integer>
    void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
      { _M_fill_assign((size_t) __n, (bool) __val); }

    template <class _InputIter>
    void _M_assign_dispatch(_InputIter __first, _InputIter __last, __false_type)
      { _M_assign_aux(__first, __last, __iterator_category(__first)); }

    template <class _InputIterator>
    void _M_assign_aux(_InputIterator __first, _InputIterator __last,
                       input_iterator_tag) {
      iterator __cur = begin();
      for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
        *__cur = *__first;
      if (__first == __last)
        erase(__cur, end());
      else
        insert(end(), __first, __last);
    }

    template <class _ForwardIterator>
    void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
                       forward_iterator_tag) {
      size_type __len = distance(__first, __last);
      if (__len < size())
        erase(copy(__first, __last, begin()), end());
      else {
        _ForwardIterator __mid = __first;
        advance(__mid, size());
        copy(__first, __mid, begin());
        insert(end(), __mid, __last);
      }
    }

    void reserve(size_type __n) {
      if (capacity() < __n) {
        _Bit_type * __q = _M_bit_alloc(__n);
        _M_finish = copy(begin(), end(), iterator(__q, 0));
        _M_deallocate();
        _M_start = iterator(__q, 0);
        _M_end_of_storage = __q + (__n + _M_word_bit - 1)/_M_word_bit;
      }
    }

    reference front() { return *begin(); }
    const_reference front() const { return *begin(); }
    reference back() { return *(end() - 1); }
    const_reference back() const { return *(end() - 1); }
    void push_back(bool __x) {
      if (_M_finish._M_p != _M_end_of_storage)
        *_M_finish++ = __x;
      else
        _M_insert_aux(end(), __x);
    }
    void swap(vector<bool, _Alloc>& __x) {
      std::swap(_M_start, __x._M_start);
      std::swap(_M_finish, __x._M_finish);
      std::swap(_M_end_of_storage, __x._M_end_of_storage);
    }
    iterator insert(iterator __position, bool __x = bool()) {
      difference_type __n = __position - begin();
      if (_M_finish._M_p != _M_end_of_storage && __position == end())
        *_M_finish++ = __x;
      else
        _M_insert_aux(__position, __x);
      return begin() + __n;
    }



    template <class _Integer>
    void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
                            __true_type) {
      _M_fill_insert(__pos, __n, __x);
    }

    template <class _InputIterator>
    void _M_insert_dispatch(iterator __pos,
                            _InputIterator __first, _InputIterator __last,
                            __false_type) {
      _M_insert_range(__pos, __first, __last, __iterator_category(__first));
    }

    template <class _InputIterator>
    void insert(iterator __position,
                _InputIterator __first, _InputIterator __last) {
      typedef _Is_integer<_InputIterator>::_Integral _Integral;
      _M_insert_dispatch(__position, __first, __last, _Integral());
    }

    void _M_fill_insert(iterator __position, size_type __n, bool __x) {
      if (__n == 0) return;
      if (capacity() - size() >= __n) {
        copy_backward(__position, end(), _M_finish + difference_type(__n));
        fill(__position, __position + difference_type(__n), __x);
        _M_finish += difference_type(__n);
      }
      else {
        size_type __len = size() + max(size(), __n);
        _Bit_type * __q = _M_bit_alloc(__len);
        iterator __i = copy(begin(), __position, iterator(__q, 0));
        fill_n(__i, __n, __x);
        _M_finish = copy(__position, end(), __i + difference_type(__n));
        _M_deallocate();
        _M_end_of_storage = __q + (__len + _M_word_bit - 1)/_M_word_bit;
        _M_start = iterator(__q, 0);
      }
    }

    void insert(iterator __position, size_type __n, bool __x) {
      _M_fill_insert(__position, __n, __x);
    }

    void pop_back() { --_M_finish; }
    iterator erase(iterator __position) {
      if (__position + 1 != end())
        copy(__position + 1, end(), __position);
        --_M_finish;
      return __position;
    }
    iterator erase(iterator __first, iterator __last) {
      _M_finish = copy(__last, end(), __first);
      return __first;
    }
    void resize(size_type __new_size, bool __x = bool()) {
      if (__new_size < size())
        erase(begin() + difference_type(__new_size), end());
      else
        insert(end(), __new_size - size(), __x);
    }
    void flip() {
      for (_Bit_type * __p = _M_start._M_p; __p != _M_end_of_storage; ++__p)
        *__p = ~*__p;
    }

    void clear() { erase(begin(), end()); }
  };


typedef vector<bool, __alloc> bit_vector;

}
# 73 "/usr/local/include/g++-v3/vector" 2 3
# 46 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/usr/local/include/g++-v3/typeinfo" 1 3
# 40 "/usr/local/include/g++-v3/typeinfo" 3
extern "C++" {

namespace __cxxabiv1
{
  class __class_type_info;
}
# 55 "/usr/local/include/g++-v3/typeinfo" 3
namespace std
{



  class type_info
  {
  public:




    virtual ~type_info();

  private:

    type_info& operator=(const type_info&);
    type_info(const type_info&);

  protected:
    const char *__name;

  protected:
    explicit type_info(const char *__n): __name(__n) { }

  public:



    const char* name() const
    { return __name; }
# 98 "/usr/local/include/g++-v3/typeinfo" 3
    bool before(const type_info& __arg) const
    { return __name < __arg.__name; }
    bool operator==(const type_info& __arg) const
    { return __name == __arg.__name; }

    bool operator!=(const type_info& __arg) const
    { return !operator==(__arg); }


  public:

    virtual bool __is_pointer_p() const;

    virtual bool __is_function_p() const;







    virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
                            unsigned __outer) const;


    virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
                             void **__obj_ptr) const;
  };



  class bad_cast : public exception
  {
  public:
    bad_cast() throw() { }


    virtual ~bad_cast() throw();
  };


  class bad_typeid : public exception
  {
  public:
    bad_typeid () throw() { }


    virtual ~bad_typeid() throw();
  };
}

}
# 47 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 2 3

namespace std
{
  template< _Facet>
    locale
    locale::combine(const locale& __other) const
    {
      _Impl* __tmp = new _Impl(*_M_impl, 1);
      __tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
      return locale(__tmp);
    }

  template< _CharT, _Traits, _Alloc>
    bool
    locale::operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1,
                       const basic_string<_CharT, _Traits, _Alloc>& __s2) const
    {
      typedef std::collate<_CharT> __collate_type;
      const __collate_type& __collate = use_facet<__collate_type>(*this);
      return (__collate.compare(__s1.data(), __s1.data() + __s1.length(),
                                __s2.data(), __s2.data() + __s2.length()) < 0);
    }

  template< _Facet>
    const _Facet&
    use_facet(const locale& __loc)
    {
      size_t __i = _Facet::id._M_index;
      locale::_Impl::__vec_facet* __facet = __loc._M_impl->_M_facets;
      const locale::facet* __fp = (*__facet)[__i];
      if (__fp == 0 || __i >= __facet->size())
        __throw_bad_cast();
      return static_cast<const _Facet&>(*__fp);
    }

  template< _Facet>
    bool
    has_facet(const locale& __loc) throw()
    {
      size_t __i = _Facet::id._M_index;
      locale::_Impl::__vec_facet* __facet = __loc._M_impl->_M_facets;
      return (__i < __facet->size() && (*__facet)[__i] != 0);
    }



  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
                     ios_base::iostate& __err, string& __xtrc) const
    {
      const locale __loc = __io.getloc();
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
      const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);


      const char_type __plus = __ctype.widen('+');
      const char_type __minus = __ctype.widen('-');
      int __pos = 0;
      char_type __c = *__beg;
      if ((__c == __plus || __c == __minus) && __beg != __end)
        {
          __xtrc += __ctype.narrow(__c, char());
          ++__pos;
          __c = *(++__beg);
        }


      const char_type __zero = __ctype.widen(_S_atoms[_M_zero]);
      bool __found_zero = false;
      while (__c == __zero && __beg != __end)
        {
          __c = *(++__beg);
          __found_zero = true;
        }
      if (__found_zero)
        {
          __xtrc += _S_atoms[_M_zero];
          ++__pos;
        }


      const size_t __len = _M_E - _M_zero + 1;
      char_type __watoms[__len];
      __ctype.widen(_S_atoms, _S_atoms + __len, __watoms);
      bool __found_dec = false;
      bool __found_sci = false;
      const char_type __dec = __np.decimal_point();

      string __found_grouping;
      const string __grouping = __np.grouping();
      bool __check_grouping = __grouping.size();
      int __sep_pos = 0;
      const char_type __sep = __np.thousands_sep();

      while (__beg != __end)
        {

          typedef char_traits<_CharT> __traits_type;
          const char_type* __p = __traits_type::find(__watoms, 10, __c);


          if (__p && __c)
            {

              ++__pos;
              __xtrc += _S_atoms[__p - __watoms];
              ++__sep_pos;
              __c = *(++__beg);
            }
          else if (__c == __sep && __check_grouping && !__found_dec)
            {


              if (__sep_pos)
                {
                  __found_grouping += static_cast<char>(__sep_pos);
                  __sep_pos = 0;
                  __c = *(++__beg);
                }
              else
                {
                  __err |= ios_base::failbit;
                  break;
                }
            }
          else if (__c == __dec && !__found_dec)
            {



              if (__found_grouping.size())
                __found_grouping += static_cast<char>(__sep_pos);
              ++__pos;
              __xtrc += '.';
              __c = *(++__beg);
              __found_dec = true;
            }
          else if ((__c == __watoms[_M_e] || __c == __watoms[_M_E])
                   && !__found_sci && __pos)
            {

              ++__pos;
              __xtrc += __ctype.narrow(__c, char());
              __c = *(++__beg);


              if (__c == __plus || __c == __minus)
                {
                  ++__pos;
                  __xtrc += __ctype.narrow(__c, char());
                  __c = *(++__beg);
                }
              __found_sci = true;
            }
          else

            break;
        }



      if (__check_grouping && __found_grouping.size())
        {

          if (!__found_dec)
            __found_grouping += static_cast<char>(__sep_pos);
          if (!__verify_grouping(__grouping, __found_grouping))
            __err |= ios_base::failbit;
        }


      __xtrc += char();
      if (__beg == __end)
        __err |= ios_base::eofbit;
      return __beg;
    }


  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
                   ios_base::iostate& __err, string& __xtrc, int& __base) const
    {
      const locale __loc = __io.getloc();
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
      const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);


      ios_base::fmtflags __basefield = __io.flags() & ios_base::basefield;
      if (__basefield == ios_base::oct)
        __base = 8;
      else if (__basefield == ios_base::hex)
        __base = 16;
      else
        __base = 10;


      int __pos = 0;
      char_type __c = *__beg;
      if ((__c == __ctype.widen('+') || __c == __ctype.widen('-'))
          && __beg != __end)
        {
          __xtrc += __ctype.narrow(__c, char());
          ++__pos;
          __c = *(++__beg);
        }


      const char_type __zero = __ctype.widen(_S_atoms[_M_zero]);
      const char_type __x = __ctype.widen('x');
      const char_type __X = __ctype.widen('X');
      if (__base == 10)
        {
          bool __found_zero = false;
          while (__c == __zero && __beg != __end)
            {
              __c = *(++__beg);
              __found_zero = true;
            }
          if (__found_zero)
            {
              __xtrc += _S_atoms[_M_zero];
              ++__pos;
              if (__basefield == 0)
                {
                  if ((__c == __x || __c == __X) && __beg != __end)
                    {
                      __xtrc += __ctype.narrow(__c, char());
                      ++__pos;
                      __c = *(++__beg);
                      __base = 16;
                    }
                  else
                    __base = 8;
                }
            }
        }
      else if (__base == 16)
        {
          if (__c == __zero && __beg != __end)
            {
              __xtrc += _S_atoms[_M_zero];
              ++__pos;
              __c = *(++__beg);
              if ((__c == __x || __c == __X) && __beg != __end)
                {
                  __xtrc += __ctype.narrow(__c, char());
                  ++__pos;
                  __c = *(++__beg);
                }
            }
        }



      size_t __len;
      if (__base == 16)
        __len = _M_size;
      else
        __len = __base;


      char_type __watoms[_M_size];
      __ctype.widen(_S_atoms, _S_atoms + __len, __watoms);
      string __found_grouping;
      const string __grouping = __np.grouping();
      bool __check_grouping = __grouping.size();
      int __sep_pos = 0;
      const char_type __sep = __np.thousands_sep();
      while (__beg != __end)
        {
          typedef char_traits<_CharT> __traits_type;
          const char_type* __p = __traits_type::find(__watoms, __len, __c);


          if (__p && __c)
            {

              __xtrc += _S_atoms[__p - __watoms];
              ++__pos;
              ++__sep_pos;
              __c = *(++__beg);
            }
          else if (__c == __sep && __check_grouping)
            {


              if (__sep_pos)
                {
                  __found_grouping += static_cast<char>(__sep_pos);
                  __sep_pos = 0;
                  __c = *(++__beg);
                }
              else
                {
                  __err |= ios_base::failbit;
                  break;
                }
            }
          else

            break;
        }



      if (__check_grouping && __found_grouping.size())
        {

          __found_grouping += static_cast<char>(__sep_pos);
          if (!__verify_grouping(__grouping, __found_grouping))
            __err |= ios_base::failbit;
        }


      __xtrc += char();
      if (__beg == __end)
        __err |= ios_base::eofbit;
      return __beg;
    }



  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, bool& __v) const
    {

      if (!(__io.flags() & ios_base::boolalpha))
        {


          string __xtrc;
          int __base;
          __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);

          unsigned long __ul;
          __convert_to_v(__xtrc.c_str(), __ul, __err, _S_c_locale, __base);
          if (!(__err & ios_base::failbit) && __ul <= 1)
            __v = __ul;
          else
            __err |= ios_base::failbit;
        }


      else
        {
          locale __loc = __io.getloc();
          const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
          const char_type* __true = __np.truename().c_str();
          const char_type* __false = __np.falsename().c_str();

          const size_t __truen = __np.truename().size() - 1;
          const size_t __falsen = __np.falsename().size() - 1;

          for (size_t __n = 0; __beg != __end; ++__n)
            {
              char_type __c = *__beg++;
              bool __testf = __n <= __falsen ? __c == __false[__n] : false;
              bool __testt = __n <= __truen ? __c == __true[__n] : false;
              if (!(__testf || __testt))
                {
                  __err |= ios_base::failbit;
                  break;
                }
              else if (__testf && __n == __falsen)
                {
                  __v = 0;
                  break;
                }
              else if (__testt && __n == __truen)
                {
                  __v = 1;
                  break;
                }
            }
          if (__beg == __end)
            __err |= ios_base::eofbit;
        }
      return __beg;
    }


  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, long& __v) const
    {
      string __xtrc;
      int __base;
      __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);
      __convert_to_v(__xtrc.c_str(), __v, __err, _S_c_locale, __base);
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned short& __v) const
    {
      string __xtrc;
      int __base;
      __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);
      unsigned long __ul;
      __convert_to_v(__xtrc.c_str(), __ul, __err, _S_c_locale, __base);
      if (!(__err & ios_base::failbit)
          && __ul <= numeric_limits<unsigned short>::max())
        __v = static_cast<unsigned short>(__ul);
      else
        __err |= ios_base::failbit;
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned int& __v) const
    {
      string __xtrc;
      int __base;
      __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);
      unsigned long __ul;
      __convert_to_v(__xtrc.c_str(), __ul, __err, _S_c_locale, __base);
      if (!(__err & ios_base::failbit)
          && __ul <= numeric_limits<unsigned int>::max())
        __v = static_cast<unsigned int>(__ul);
      else
        __err |= ios_base::failbit;
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned long& __v) const
    {
      string __xtrc;
      int __base;
      __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);
      __convert_to_v(__xtrc.c_str(), __v, __err, _S_c_locale, __base);
      return __beg;
    }


  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, long long& __v) const
    {
      string __xtrc;
      int __base;
      __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);
      __convert_to_v(__xtrc.c_str(), __v, __err, _S_c_locale, __base);
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned long long& __v) const
    {
      string __xtrc;
      int __base;
      __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);
      __convert_to_v(__xtrc.c_str(), __v, __err, _S_c_locale, __base);
      return __beg;
    }


  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, float& __v) const
    {
      string __xtrc;
      __xtrc.reserve(32);
      __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
      __convert_to_v(__xtrc.c_str(), __v, __err, _S_c_locale);
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, double& __v) const
    {
      string __xtrc;
      __xtrc.reserve(32);
      __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
      __convert_to_v(__xtrc.c_str(), __v, __err, _S_c_locale);
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, long double& __v) const
    {
      string __xtrc;
      __xtrc.reserve(32);
      __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
      __convert_to_v(__xtrc.c_str(), __v, __err, _S_c_locale);
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, void*& __v) const
    {

      typedef ios_base::fmtflags fmtflags;
      fmtflags __fmt = __io.flags();
      fmtflags __fmtmask = ~(ios_base::showpos | ios_base::basefield
                             | ios_base::uppercase | ios_base::internal);
      __io.flags(__fmt & __fmtmask | (ios_base::hex | ios_base::showbase));

      string __xtrc;
      int __base;
      __beg = _M_extract_int(__beg, __end, __io, __err, __xtrc, __base);


      __io.flags(__fmt);

      unsigned long __ul;
      __convert_to_v(__xtrc.c_str(), __ul, __err, _S_c_locale, __base);
      if (!(__err & ios_base::failbit))
        __v = reinterpret_cast<void*>(__ul);
      else
        __err |= ios_base::failbit;
      return __beg;
    }
# 604 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3
  template< _CharT, _OutIter>
    template< _ValueT>
      _OutIter
      num_put<_CharT, _OutIter>::
      _M_convert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod,
                       _ValueT __v) const
      {


        const int __max_digits = numeric_limits<_ValueT>::digits10 + 1;
        streamsize __prec = __io.precision();

        if (__prec > static_cast<streamsize>(__max_digits))
          __prec = static_cast<streamsize>(__max_digits);


        char __fbuf[16];


        int __len;
# 648 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3
        const bool __fixed = __io.flags() & ios_base::fixed;
        const int __max_exp = numeric_limits<_ValueT>::max_exponent10;





        const int __cs_size = __fixed ? __max_exp + __max_digits + 4
                                      : __max_digits * 3;
        char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));

        if (_S_format_float(__io, __fbuf, __mod, __prec))
          __len = __convert_from_v(__cs, 0, __fbuf, __v, _S_c_locale, __prec);
        else
          __len = __convert_from_v(__cs, 0, __fbuf, __v, _S_c_locale);

        return _M_widen_float(__s, __io, __fill, __cs, __len);
      }

  template< _CharT, _OutIter>
    template< _ValueT>
      _OutIter
      num_put<_CharT, _OutIter>::
      _M_convert_int(_OutIter __s, ios_base& __io, _CharT __fill, char __mod,
                     char __modl, _ValueT __v) const
      {



        char __fbuf[16];
        _S_format_int(__io, __fbuf, __mod, __modl);
# 694 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3
        char __cs[128];
        int __len = __convert_from_v(__cs, 0, __fbuf, __v, _S_c_locale);

        return _M_widen_int(__s, __io, __fill, __cs, __len);
      }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    _M_widen_float(_OutIter __s, ios_base& __io, _CharT __fill, char* __cs,
                   int __len) const
    {


      const locale __loc = __io.getloc();
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
      _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
                                                           * __len));


      _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
                                                            * __len * 2));
      __ctype.widen(__cs, __cs + __len, __ws);


      const _CharT* __p;
      const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
      if (__p = char_traits<_CharT>::find(__ws, __len, __ctype.widen('.')))
        __ws[__p - __ws] = __np.decimal_point();




      const string __grouping = __np.grouping();
      ios_base::fmtflags __basefield = __io.flags() & ios_base::basefield;
      if (__grouping.size())
        {
          _CharT* __p2;
          int __declen = __p ? __p - __ws : __len;
          __p2 = __add_grouping(__ws2, __np.thousands_sep(),
                                __grouping.c_str(),
                                __grouping.c_str() + __grouping.size(),
                                __ws, __ws + __declen);
          int __newlen = __p2 - __ws2;


          if (__p)
            {
              char_traits<_CharT>::copy(__p2, __p, __len - __declen);
              __newlen += __len - __declen;
            }


          __ws = __ws2;
          __len = __newlen;
        }

      return _M_insert(__s, __io, __fill, __ws, __len);
    }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    _M_widen_int(_OutIter __s, ios_base& __io, _CharT __fill, char* __cs,
                 int __len) const
    {


      const locale __loc = __io.getloc();
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
      _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
                                                           * __len));


      _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
                                                            * __len * 2));
      __ctype.widen(__cs, __cs + __len, __ws);


      const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
      const string __grouping = __np.grouping();
      const ios_base::fmtflags __basefield = __io.flags() & ios_base::basefield;
      if (__grouping.size())
        {



          streamsize __off = 0;
          if (__io.flags() & ios_base::showbase)
            if (__basefield == ios_base::oct)
              {
                __off = 1;
                *__ws2 = *__ws;
              }
            else if (__basefield == ios_base::hex)
              {
                __off = 2;
                *__ws2 = *__ws;
                *(__ws2 + 1) = *(__ws + 1);
              }
          _CharT* __p;
          __p = __add_grouping(__ws2 + __off, __np.thousands_sep(), __grouping.c_str(),
                               __grouping.c_str() + __grouping.size(),
                               __ws + __off, __ws + __len);
          __len = __p - __ws2;

          __ws = __ws2;
        }
      return _M_insert(__s, __io, __fill, __ws, __len);
    }



  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    _M_insert(_OutIter __s, ios_base& __io, _CharT __fill, const _CharT* __ws,
              int __len) const
    {

      streamsize __w = __io.width();
      _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
                                                            * __w));
      if (__w > static_cast<streamsize>(__len))
        {
          __pad(__io, __fill, __ws2, __ws, __w, __len, true);
          __len = static_cast<int>(__w);

          __ws = __ws2;
        }
      __io.width(0);



      for (int __j = 0; __j < __len; ++__j, ++__s)
        *__s = __ws[__j];
      return __s;
    }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
    {
      ios_base::fmtflags __flags = __io.flags();
      if ((__flags & ios_base::boolalpha) == 0)
        {
          unsigned long __uv = __v;
          __s = _M_convert_int(__s, __io, __fill, 'u', char_type(), __uv);
        }
      else
        {
          locale __loc = __io.getloc();
          const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
          const char_type* __ws;
          int __len;
          if (__v)
            {
              __ws = __np.truename().c_str();
              __len = __np.truename().size();
            }
          else
            {
              __ws = __np.falsename().c_str();
              __len = __np.falsename().size();
            }
          __s = _M_insert(__s, __io, __fill, __ws, __len);
        }
      return __s;
    }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
    { return _M_convert_int(__s, __io, __fill, 'd', char_type(), __v); }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           unsigned long __v) const
    { return _M_convert_int(__s, __io, __fill, 'u', char_type(), __v); }


  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __b, char_type __fill, long long __v) const
    { return _M_convert_int(__s, __b, __fill, 'd', 'l', __v); }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           unsigned long long __v) const
    { return _M_convert_int(__s, __io, __fill, 'u', 'l', __v); }


  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
    { return _M_convert_float(__s, __io, __fill, char_type(), __v); }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           long double __v) const
    { return _M_convert_float(__s, __io, __fill, 'L', __v); }

  template< _CharT, _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           const void* __v) const
    {
      ios_base::fmtflags __flags = __io.flags();
      ios_base::fmtflags __fmt = ~(ios_base::showpos | ios_base::basefield
                                   | ios_base::uppercase | ios_base::internal);
      __io.flags(__flags & __fmt | (ios_base::hex | ios_base::showbase));
      try
        {
          __s = _M_convert_int(__s, __io, __fill, 'u', char_type(),
                               reinterpret_cast<unsigned long>(__v));
          __io.flags(__flags);
        }
      catch (...)
        {
          __io.flags(__flags);
          throw;
        }
      return __s;
    }


  template< _CharT, _InIter>
    _InIter
    money_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
           ios_base::iostate& __err, long double& __units) const
    {
      string_type __str;
      __beg = this->do_get(__beg, __end, __intl, __io, __err, __str);

      const int __n = numeric_limits<long double>::digits10;
      char* __cs = static_cast<char*>(__builtin_alloca(sizeof(char) * __n));
      const locale __loc = __io.getloc();
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
      const _CharT* __wcs = __str.c_str();
      __ctype.narrow(__wcs, __wcs + __str.size() + 1, char(), __cs);
      __convert_to_v(__cs, __units, __err, _S_c_locale);
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    money_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
           ios_base::iostate& __err, string_type& __units) const
    {

      typedef moneypunct<_CharT, true> __money_true;
      typedef moneypunct<_CharT, false> __money_false;
      typedef money_base::part part;
      typedef string_type::size_type size_type;

      const locale __loc = __io.getloc();
      const __money_true& __mpt = use_facet<__money_true>(__loc);
      const __money_false& __mpf = use_facet<__money_false>(__loc);
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);

      const money_base::pattern __p = __intl ? __mpt.neg_format()
                                             : __mpf.neg_format();

      const string_type __pos_sign =__intl ? __mpt.positive_sign()
                                           : __mpf.positive_sign();
      const string_type __neg_sign =__intl ? __mpt.negative_sign()
                                           : __mpf.negative_sign();
      const char_type __d = __intl ? __mpt.decimal_point()
                                   : __mpf.decimal_point();
      const char_type __sep = __intl ? __mpt.thousands_sep()
                                     : __mpf.thousands_sep();

      const string __grouping = __intl ? __mpt.grouping() : __mpf.grouping();


      string_type __sign;

      string __grouping_tmp;

      int __sep_pos = 0;

      bool __testvalid = true;

      bool __testdecfound = false;


      string_type __temp_units;

      char_type __c = *__beg;
      char_type __eof = static_cast<char_type>(char_traits<char_type>::eof());
      for (int __i = 0; __beg != __end && __i < 4 && __testvalid; ++__i)
        {
          part __which = static_cast<part>(__p.field[__i]);
          switch (__which)
                {
                case money_base::symbol:
                  if (__io.flags() & ios_base::showbase
                      || __i < 2
                      || (__i == 2 && static_cast<part>(__p.field[3]) != money_base::none)
                      || __sign.size() > 1)
                    {




                      const string_type __symbol = __intl ? __mpt.curr_symbol()
                                                         : __mpf.curr_symbol();
                      size_type __len = __symbol.size();
                      size_type __j = 0;
                      while (__beg != __end
                             && __j < __len && __symbol[__j] == __c)
                        {
                          __c = *(++__beg);
                          ++__j;
                        }

                      if (__j != __len && (__io.flags() & ios_base::showbase))
                        __testvalid = false;
                    }
                  break;
                case money_base::sign:

                  if (__pos_sign.size() && __neg_sign.size())
                  {

                    if (__c == __pos_sign[0])
                      {
                        __sign = __pos_sign;
                        __c = *(++__beg);
                      }
                    else if (__c == __neg_sign[0])
                      {
                        __sign = __neg_sign;
                        __c = *(++__beg);
                      }
                    else
                      __testvalid = false;
                  }
                  else if (__pos_sign.size() && __c == __pos_sign[0])
                    {
                      __sign = __pos_sign;
                      __c = *(++__beg);
                    }
                  else if (__neg_sign.size() && __c == __neg_sign[0])
                    {
                      __sign = __neg_sign;
                      __c = *(++__beg);
                    }
                  break;
                case money_base::value:


                  while (__beg != __end
                         && (__ctype.is(ctype_base::digit, __c)
                             || (__c == __d && !__testdecfound)
                             || __c == __sep))
                    {
                      if (__c == __d)
                        {
                          __grouping_tmp += static_cast<char>(__sep_pos);
                          __sep_pos = 0;
                          __testdecfound = true;
                        }
                      else if (__c == __sep)
                        {
                          if (__grouping.size())
                            {

                              __grouping_tmp += static_cast<char>(__sep_pos);
                              __sep_pos = 0;
                            }
                          else
                            {
                              __testvalid = false;
                              break;
                            }
                        }
                      else
                        {
                          __temp_units += __c;
                          ++__sep_pos;
                        }
                      __c = *(++__beg);
                    }
                  break;
                case money_base::space:
                case money_base::none:

                  if (__i != 3)
                    while (__beg != __end
                           && __ctype.is(ctype_base::space, __c))
                      __c = *(++__beg);
                  break;
                }
        }


      if (__sign.size() > 1)
        {
          size_type __len = __sign.size();
          size_type __i = 1;
          for (; __c != __eof && __i < __len; ++__i)
            while (__beg != __end && __c != __sign[__i])
              __c = *(++__beg);

          if (__i != __len)
            __testvalid = false;
        }


      while (__temp_units[0] == __ctype.widen('0'))
        __temp_units.erase(__temp_units.begin());

      if (__sign.size() && __sign == __neg_sign)
        __temp_units.insert(__temp_units.begin(), __ctype.widen('-'));


      if (__grouping.size() && __grouping_tmp.size())
        {
          if (!__verify_grouping(__grouping, __grouping_tmp))
            __testvalid = false;
        }


      if (__c == __eof)
        __err |= ios_base::eofbit;


      if (!__testvalid || !__temp_units.size())
        __err |= ios_base::failbit;
      else

        __temp_units.swap(__units);

      return __beg;
    }

  template< _CharT, _OutIter>
    _OutIter
    money_put<_CharT, _OutIter>::
    do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
           long double __units) const
    {
      const locale __loc = __io.getloc();
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
# 1167 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3
      const int __cs_size = numeric_limits<long double>::max_exponent10 + 5;
      char* __cs = static_cast<char*>(__builtin_alloca(sizeof(char) * __cs_size));
      int __len = __convert_from_v(__cs, 0, "%.01Lf", __units, _S_c_locale);

      _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __cs_size));
      __ctype.widen(__cs, __cs + __len, __ws);
      string_type __digits(__ws);
      return this->do_put(__s, __intl, __io, __fill, __digits);
    }

  template< _CharT, _OutIter>
    _OutIter
    money_put<_CharT, _OutIter>::
    do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
           const string_type& __digits) const
    {
      typedef string_type::size_type size_type;
      typedef money_base::part part;

      const locale __loc = __io.getloc();
      const size_type __width = static_cast<size_type>(__io.width());


      typedef moneypunct<_CharT, true> __money_true;
      typedef moneypunct<_CharT, false> __money_false;
      const __money_true& __mpt = use_facet<__money_true>(__loc);
      const __money_false& __mpf = use_facet<__money_false>(__loc);
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);



      const char_type* __beg = __digits.data();
      const char_type* __end = __beg + __digits.size();
      money_base::pattern __p;
      string_type __sign;
      if (*__beg != __ctype.widen('-'))
        {
          __p = __intl ? __mpt.pos_format() : __mpf.pos_format();
          __sign =__intl ? __mpt.positive_sign() : __mpf.positive_sign();
        }
      else
        {
          __p = __intl ? __mpt.neg_format() : __mpf.neg_format();
          __sign =__intl ? __mpt.negative_sign() : __mpf.negative_sign();
          ++__beg;
        }


      __end = __ctype.scan_not(ctype_base::digit, __beg, __end);
      if (__beg != __end)
        {



          string_type __res;
          string_type __value;
          const string_type __symbol = __intl ? __mpt.curr_symbol()
                                              : __mpf.curr_symbol();


          const int __frac = __intl ? __mpt.frac_digits()
                                    : __mpf.frac_digits();
          if (__frac > 0)
            {
              const char_type __d = __intl ? __mpt.decimal_point()
                                           : __mpf.decimal_point();
              if (__end - __beg >= __frac)
                {
                  __value = string_type(__end - __frac, __end);
                  __value.insert(__value.begin(), __d);
                  __end -= __frac;
                }
              else
                {

                  __value = string_type(__beg, __end);
                  int __paddec = __frac - (__end - __beg);
                  char_type __zero = __ctype.widen('0');
                  __value.insert(__value.begin(), __paddec, __zero);
                  __value.insert(__value.begin(), __d);
                  __beg = __end;
                }
            }



          if (__beg != __end)
            {
              const string __grouping = __intl ? __mpt.grouping()
                                               : __mpf.grouping();
              if (__grouping.size())
                {
                  const char_type __sep = __intl ? __mpt.thousands_sep()
                                                 : __mpf.thousands_sep();
                  const char* __gbeg = __grouping.c_str();
                  const char* __gend = __gbeg + __grouping.size();
                  const int __n = (__end - __beg) * 2;
                  _CharT* __ws2 =
                    static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __n));
                  _CharT* __ws_end = __add_grouping(__ws2, __sep, __gbeg,
                                                    __gend, __beg, __end);
                  __value.insert(0, __ws2, __ws_end - __ws2);
                }
              else
                __value.insert(0, string_type(__beg, __end));
            }


          ios_base::fmtflags __f = __io.flags() & ios_base::adjustfield;
          size_type __len = __value.size() + __sign.size();
          __len += (__io.flags() & ios_base::showbase) ? __symbol.size() : 0;
          bool __testipad = __f == ios_base::internal && __len < __width;


          for (int __i = 0; __i < 4; ++__i)
            {
              part __which = static_cast<part>(__p.field[__i]);
              switch (__which)
                {
                case money_base::symbol:
                  if (__io.flags() & ios_base::showbase)
                    __res += __symbol;
                  break;
                case money_base::sign:



                  if (__sign.size())
                    __res += __sign[0];
                  break;
                case money_base::value:
                  __res += __value;
                  break;
                case money_base::space:



                  if (__testipad)
                    __res += string_type(__width - __len, __fill);
                  else
                    __res += __ctype.widen(__fill);
                  break;
                case money_base::none:
                  if (__testipad)
                    __res += string_type(__width - __len, __fill);
                  break;
                }
            }


          if (__sign.size() > 1)
            __res += string_type(__sign.begin() + 1, __sign.end());


          __len = __res.size();
          if (__width > __len)
            {
              if (__f == ios_base::left)

                __res.append(__width - __len, __fill);
              else

                __res.insert(0, string_type(__width - __len, __fill));
              __len = __width;
            }


          for (size_type __j = 0; __j < __len; ++__j, ++__s)
            *__s = __res[__j];
        }
      __io.width(0);
      return __s;
    }





  template< _CharT, _InIter>
    time_base::dateorder
    time_get<_CharT, _InIter>::do_date_order() const
    { return time_base::no_order; }

  template< _CharT, _InIter>
    void
    time_get<_CharT, _InIter>::
    _M_extract_via_format(iter_type& __beg, iter_type& __end, ios_base& __io,
                          ios_base::iostate& __err, tm* __tm,
                          const _CharT* __format) const
    {
      locale __loc = __io.getloc();
      __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc);
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
      size_t __len = char_traits<_CharT>::length(__format);

      for (size_t __i = 0; __beg != __end && __i < __len && !__err; ++__i)
        {
          char __c = __format[__i];
          if (__c == '%')
            {

              __c = __format[++__i];
              char __mod = 0;
              int __mem = 0;
              if (__c == 'E' || __c == 'O')
                {
                  __mod = __c;
                  __c = __format[++__i];
                }
              switch (__c)
                {
                  const char* __cs;
                  _CharT __wcs[10];
                case 'a':

                  const char_type* __days1[7];
                  __tp._M_days_abbreviated(__days1);
                  _M_extract_name(__beg, __end, __tm->tm_wday, __days1, 7,
                                  __err);
                  break;
                case 'A':

                  const char_type* __days2[7];
                  __tp._M_days(__days2);
                  _M_extract_name(__beg, __end, __tm->tm_wday, __days2, 7,
                                  __err);
                  break;
                case 'h':
                case 'b':

                  const char_type* __months1[12];
                  __tp._M_months_abbreviated(__months1);
                  _M_extract_name(__beg, __end, __tm->tm_mon, __months1, 12,
                                  __err);
                  break;
                case 'B':

                  const char_type* __months2[12];
                  __tp._M_months(__months2);
                  _M_extract_name(__beg, __end, __tm->tm_mon, __months2, 12,
                                  __err);
                  break;
                case 'c':

                  const char_type* __dt[2];
                  __tp._M_date_time_formats(__dt);
                  _M_extract_via_format(__beg, __end, __io, __err, __tm,
                                        __dt[0]);
                  break;
                case 'd':

                  _M_extract_num(__beg, __end, __tm->tm_mday, 1, 31, 2,
                                 __ctype, __err);
                  break;
                case 'D':

                  __cs = "%m/%d/%y";
                  __ctype.widen(__cs, __cs + 9, __wcs);
                  _M_extract_via_format(__beg, __end, __io, __err, __tm,
                                        __wcs);
                  break;
                case 'H':

                  _M_extract_num(__beg, __end, __tm->tm_hour, 0, 23, 2,
                                 __ctype, __err);
                  break;
                case 'I':

                  _M_extract_num(__beg, __end, __tm->tm_hour, 1, 12, 2,
                                 __ctype, __err);
                  break;
                case 'm':

                  _M_extract_num(__beg, __end, __mem, 1, 12, 2, __ctype,
                                 __err);
                  if (!__err)
                    __tm->tm_mon = __mem - 1;
                  break;
                case 'M':

                  _M_extract_num(__beg, __end, __tm->tm_min, 0, 59, 2,
                                 __ctype, __err);
                  break;
                case 'n':
                  if (__ctype.narrow(*__beg, 0) == '\n')
                    ++__beg;
                  else
                    __err |= ios_base::failbit;
                  break;
                case 'R':

                  __cs = "%H:%M";
                  __ctype.widen(__cs, __cs + 6, __wcs);
                  _M_extract_via_format(__beg, __end, __io, __err, __tm,
                                        __wcs);
                  break;
                case 'S':

                  _M_extract_num(__beg, __end, __tm->tm_sec, 0, 59, 2,
                                 __ctype, __err);
                  break;
                case 't':
                  if (__ctype.narrow(*__beg, 0) == '\t')
                    ++__beg;
                  else
                __err |= ios_base::failbit;
                  break;
                case 'T':

                  __cs = "%H:%M:%S";
                  __ctype.widen(__cs, __cs + 9, __wcs);
                  _M_extract_via_format(__beg, __end, __io, __err, __tm,
                                        __wcs);
                  break;
                case 'x':

                  const char_type* __dates[2];
                  __tp._M_date_formats(__dates);
                  _M_extract_via_format(__beg, __end, __io, __err, __tm,
                                        __dates[0]);
                  break;
                case 'X':

                  const char_type* __times[2];
                  __tp._M_time_formats(__times);
                  _M_extract_via_format(__beg, __end, __io, __err, __tm,
                                        __times[0]);
                  break;
                case 'y':

                  _M_extract_num(__beg, __end, __tm->tm_year, 0, 99, 2,
                                 __ctype, __err);
                  break;
                case 'Y':

                  _M_extract_num(__beg, __end, __mem, 0,
                                 numeric_limits<int>::max(), 4,
                                 __ctype, __err);
                  if (!__err)
                    __tm->tm_year = __mem - 1900;
                  break;
                case 'Z':

                  if (__ctype.is(ctype_base::upper, *__beg))
                    {
                      int __tmp;
                      _M_extract_name(__beg, __end, __tmp,
                                      __timepunct<_CharT>::_S_timezones,
                                      14, __err);


                      char_type __c = *__beg;
                      if (!__err && __tmp == 0
                          && (__c == __ctype.widen('-')
                              || __c == __ctype.widen('+')))
                        {
                          _M_extract_num(__beg, __end, __tmp, 0, 23, 2,
                                          __ctype, __err);
                          _M_extract_num(__beg, __end, __tmp, 0, 59, 2,
                                          __ctype, __err);
                        }
                          }
                      else
                        __err |= ios_base::failbit;
                      break;
                    default:

                      __err |= ios_base::failbit;
                    }
                }
              else
                {

                  if (__c == __ctype.narrow(*__beg, 0))
                    ++__beg;
                  else
                    __err |= ios_base::failbit;
                }
        }
    }

  template< _CharT, _InIter>
    void
    time_get<_CharT, _InIter>::
    _M_extract_num(iter_type& __beg, iter_type& __end, int& __member,
                   int __min, int __max, size_t __len,
                   const ctype<_CharT>& __ctype,
                   ios_base::iostate& __err) const
    {
      size_t __i = 0;
      string __digits;
      bool __testvalid = true;
      char_type __c = *__beg;
      while (__beg != __end && __i < __len
             && __ctype.is(ctype_base::digit, __c))
        {
          __digits += __ctype.narrow(__c, 0);
          __c = *(++__beg);
          ++__i;
        }
      if (__i == __len)
        {
          int __value = atoi(__digits.c_str());
          if (__min <= __value && __value <= __max)
            __member = __value;
          else
            __testvalid = false;
        }
      else
        __testvalid = false;
      if (!__testvalid)
        __err |= ios_base::failbit;
    }



  template< _CharT, _InIter>
    void
    time_get<_CharT, _InIter>::
    _M_extract_name(iter_type& __beg, iter_type& __end, int& __member,
                    const _CharT** __names, size_t __indexlen,
                    ios_base::iostate& __err) const
    {
      typedef char_traits<char_type> __traits_type;
      int* __matches = static_cast<int*>(__builtin_alloca(sizeof(int) * __indexlen));
      size_t __nmatches = 0;
      size_t __pos = 0;
      bool __testvalid = true;
      const char_type* __name;

      char_type __c = *__beg;

      for (size_t __i1 = 0; __i1 < __indexlen; ++__i1)
        if (__c == __names[__i1][0])
          __matches[__nmatches++] = __i1;

      while(__nmatches > 1)
        {

          size_t __minlen = 10;
          for (size_t __i2 = 0; __i2 < __nmatches; ++__i2)
            __minlen = min(__minlen,
                           __traits_type::length(__names[__matches[__i2]]));

          if (__pos < __minlen && __beg != __end)
            {
              ++__pos;
              __c = *(++__beg);
              for (size_t __i3 = 0; __i3 < __nmatches; ++__i3)
                {
                  __name = __names[__matches[__i3]];
                  if (__name[__pos] != __c)
                    __matches[__i3] = __matches[--__nmatches];
                }
            }
          else
            break;
        }

      if (__nmatches == 1)
        {

          __name = __names[__matches[0]];
          const size_t __len = __traits_type::length(__name);
          while (__pos < __len && __beg != __end && __name[__pos] == *__beg)
            ++__beg, ++__pos;

          if (__len == __pos)
            __member = __matches[0];
          else
            __testvalid = false;
        }
      else
        __testvalid = false;
      if (!__testvalid)
        __err |= ios_base::failbit;
    }

  template< _CharT, _InIter>
    _InIter
    time_get<_CharT, _InIter>::
    do_get_time(iter_type __beg, iter_type __end, ios_base& __io,
                ios_base::iostate& __err, tm* __tm) const
    {
      _CharT __wcs[3];
      const char* __cs = "%X";
      locale __loc = __io.getloc();
      ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
      __ctype.widen(__cs, __cs + 3, __wcs);
      _M_extract_via_format(__beg, __end, __io, __err, __tm, __wcs);
      if (__beg == __end)
        __err |= ios_base::eofbit;
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    time_get<_CharT, _InIter>::
    do_get_date(iter_type __beg, iter_type __end, ios_base& __io,
                ios_base::iostate& __err, tm* __tm) const
    {
      _CharT __wcs[3];
      const char* __cs = "%x";
      locale __loc = __io.getloc();
      ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
      __ctype.widen(__cs, __cs + 3, __wcs);
      _M_extract_via_format(__beg, __end, __io, __err, __tm, __wcs);
      if (__beg == __end)
        __err |= ios_base::eofbit;
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    time_get<_CharT, _InIter>::
    do_get_weekday(iter_type __beg, iter_type __end, ios_base& __io,
                   ios_base::iostate& __err, tm* __tm) const
    {
      typedef char_traits<char_type> __traits_type;
      locale __loc = __io.getloc();
      __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc);
      const char_type* __days[7];
      __tp._M_days_abbreviated(__days);
      int __tmpwday;
      _M_extract_name(__beg, __end, __tmpwday, __days, 7, __err);







      if (!__err)
        {
          size_t __pos = __traits_type::length(__days[__tmpwday]);
          __tp._M_days(__days);
          const char_type* __name = __days[__tmpwday];
          if (__name[__pos] == *__beg)
            {

              const size_t __len = __traits_type::length(__name);
              while (__pos < __len && __beg != __end
                     && __name[__pos] == *__beg)
                ++__beg, ++__pos;
              if (__len != __pos)
                __err |= ios_base::failbit;
            }
          if (!__err)
            __tm->tm_wday = __tmpwday;
        }
      if (__beg == __end)
        __err |= ios_base::eofbit;
      return __beg;
     }

  template< _CharT, _InIter>
    _InIter
    time_get<_CharT, _InIter>::
    do_get_monthname(iter_type __beg, iter_type __end,
                     ios_base& __io, ios_base::iostate& __err, tm* __tm) const
    {
      typedef char_traits<char_type> __traits_type;
      locale __loc = __io.getloc();
      __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc);
      const char_type* __months[12];
      __tp._M_months_abbreviated(__months);
      int __tmpmon;
      _M_extract_name(__beg, __end, __tmpmon, __months, 12, __err);







      if (!__err)
        {
          size_t __pos = __traits_type::length(__months[__tmpmon]);
          __tp._M_months(__months);
          const char_type* __name = __months[__tmpmon];
          if (__name[__pos] == *__beg)
            {

              const size_t __len = __traits_type::length(__name);
              while (__pos < __len && __beg != __end
                     && __name[__pos] == *__beg)
                ++__beg, ++__pos;
              if (__len != __pos)
                __err |= ios_base::failbit;
            }
          if (!__err)
            __tm->tm_mon = __tmpmon;
        }

      if (__beg == __end)
        __err |= ios_base::eofbit;
      return __beg;
    }

  template< _CharT, _InIter>
    _InIter
    time_get<_CharT, _InIter>::
    do_get_year(iter_type __beg, iter_type __end, ios_base& __io,
                ios_base::iostate& __err, tm* __tm) const
    {
      locale __loc = __io.getloc();
      const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);

      char_type __c = *__beg;
      size_t __i = 0;
      string __digits;
      while (__i < 4 && __beg != __end && __ctype.is(ctype_base::digit, __c))
        {
          __digits += __ctype.narrow(__c, 0);
          __c = *(++__beg);
          ++__i;
        }
      if (__i == 2 || __i == 4)
        {
          long __l;
          __convert_to_v(__digits.c_str(), __l, __err, _S_c_locale);
          if (!(__err & ios_base::failbit) && __l <= 2147483647)
            {
              __l = __i == 2 ? __l : __l - 1900;
              __tm->tm_year = static_cast<int>(__l);
            }
        }
      else
        __err |= ios_base::failbit;
      if (__beg == __end)
        __err |= ios_base::eofbit;
      return __beg;
    }

  template< _CharT, _OutIter>
    _OutIter
    time_put<_CharT, _OutIter>::
    put(iter_type __s, ios_base& __io, char_type, const tm* __tm,
        const _CharT* __beg, const _CharT* __end) const
    {
      locale __loc = __io.getloc();
      ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
      while (__beg != __end)
        {
          char __c = __ctype.narrow(*__beg, 0);
          ++__beg;
          if (__c == '%')
            {
              char __format;
              char __mod = 0;
              size_t __len = 1;
              __c = __ctype.narrow(*__beg, 0);
              ++__beg;
              if (__c == 'E' || __c == 'O')
                {
                  __mod = __c;
                  __format = __ctype.narrow(*__beg, 0);
                  ++__beg;
                }
              else
                __format = __c;
              __s = this->do_put(__s, __io, char_type(), __tm, __format,
                                 __mod);
            }
          else
            {
              *__s = __c;
              ++__s;
            }
        }
      return __s;
    }

  template< _CharT, _OutIter>
    _OutIter
    time_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type, const tm* __tm,
           char __format, char __mod) const
    {
      locale __loc = __io.getloc();
      ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
      __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc);



      const size_t __maxlen = 64;
      char_type* __res =
        static_cast<char_type*>(__builtin_alloca(sizeof(char_type) * __maxlen));






      char_type __fmt[4];
      __fmt[0] = __ctype.widen('%');
      if (!__mod)
        {
          __fmt[1] = __format;
          __fmt[2] = char_type();
        }
      else
        {
          __fmt[1] = __mod;
          __fmt[2] = __format;
          __fmt[3] = char_type();
        }

      __tp._M_put_helper(__res, __maxlen, __fmt, __tm);


      size_t __len = char_traits<char_type>::length(__res);
      for (size_t __i = 0; __i < __len; ++__i, ++__s)
        *__s = __res[__i];
      return __s;
    }



  template< _CharT>
    int
    collate<_CharT>::_M_compare_helper(const _CharT*, const _CharT*) const
    { return 0; }


  template< _CharT>
    size_t
    collate<_CharT>::_M_transform_helper(_CharT*, const _CharT*, size_t) const
    { return 0; }

  template< _CharT>
    int
    collate<_CharT>::
    do_compare(const _CharT* __lo1, const _CharT* __hi1,
               const _CharT* __lo2, const _CharT* __hi2) const
    {
      const string_type __one(__lo1, __hi1);
      const string_type __two(__lo2, __hi2);
      return _M_compare_helper(__one.c_str(), __two.c_str());
    }

 template< _CharT>
    collate<_CharT>::string_type
    collate<_CharT>::
    do_transform(const _CharT* __lo, const _CharT* __hi) const
    {
      size_t __len = (__hi - __lo) * 2;

      _CharT* __c =
        static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __len));
      size_t __res = _M_transform_helper(__c, __lo, __len);

      if (__res >= __len)
        {
          __c =
            static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__res + 1)));
          _M_transform_helper(__c, __lo, __res + 1);
        }
      return string_type(__c);
    }

 template< _CharT>
    long
    collate<_CharT>::
    do_hash(const _CharT* __lo, const _CharT* __hi) const
    {
      unsigned long __val = 0;
      for (; __lo < __hi; ++__lo)
        __val = *__lo + ((__val << 7) |
                       (__val >> (numeric_limits<unsigned long>::digits - 7)));
      return static_cast<long>(__val);
    }




  template< _Tv>
    void
    __convert_to_v(const char* __in, _Tv& __out, ios_base::iostate& __err,
                   const __c_locale& __cloc, int __base = 10);
# 1967 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3
  template< _Tv>
    int
    __convert_from_v(char* __out, const int, const char* __fmt, _Tv __v,
                     const __c_locale&, int __prec = -1)
    {
      int __ret;
      const char* __old = setlocale(0, "C");
      if (__prec >= 0)
        __ret = sprintf(__out, __fmt, __prec, __v);
      else
        __ret = sprintf(__out, __fmt, __v);
      setlocale(0, __old);
      return __ret;
    }
# 1991 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3
  template< _CharT, _Traits>
    void
    __pad(ios_base& __io, _CharT __fill, _CharT* __news, const _CharT* __olds,
          const streamsize __newlen, const streamsize __oldlen,
          const bool __num)
    {
      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef traits_type::int_type int_type;

      int_type __plen = static_cast<size_t>(__newlen - __oldlen);
      char_type* __pads = static_cast<char_type*>(__builtin_alloca(sizeof(char_type) * __plen));
      traits_type::assign(__pads, __plen, __fill);

      char_type* __beg;
      char_type* __end;
      size_t __mod = 0;
      size_t __beglen;
      ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield;

      if (__adjust == ios_base::left)
        {

          __beg = const_cast<char_type*>(__olds);
          __beglen = __oldlen;
          __end = __pads;
        }
      else if (__adjust == ios_base::internal && __num)
        {



          locale __loc = __io.getloc();
          const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
          const char_type __minus = __ctype.widen('-');
          const char_type __plus = __ctype.widen('+');
          bool __testsign = __olds[0] == __minus || __olds[0] == __plus;
          bool __testhex = __ctype.widen('0') == __olds[0]
                           && (__ctype.widen('x') == __olds[1]
                               || __ctype.widen('X') == __olds[1]);
          if (__testhex)
            {
              __news[0] = __olds[0];
              __news[1] = __olds[1];
              __mod += 2;
              __news += 2;
              __beg = __pads;
              __beglen = __plen;
              __end = const_cast<char_type*>(__olds + __mod);
            }
          else if (__testsign)
            {
              __news[0] = __olds[0] == __plus ? __plus : __minus;
              ++__mod;
              ++__news;
              __beg = __pads;
              __beglen = __plen;
              __end = const_cast<char_type*>(__olds + __mod);
            }
          else
            {

              __beg = __pads;
              __beglen = __plen;
              __end = const_cast<char_type*>(__olds);
            }
        }
      else
        {

          __beg = __pads;
          __beglen = __plen;
          __end = const_cast<char_type*>(__olds);
        }
      traits_type::copy(__news, __beg, __beglen);
      traits_type::copy(__news + __beglen, __end, __newlen - __beglen - __mod);
    }




  template< _CharT>
    void
    __pad(ios_base& __io, _CharT __fill, _CharT* __news, const _CharT* __olds,
          const streamsize __newlen, const streamsize __oldlen,
          const bool __num)
    {
      return __pad<_CharT, char_traits<_CharT> >(__io, __fill, __news, __olds,
                                                 __newlen, __oldlen, __num);
    }
# 2090 "/usr/local/include/g++-v3/bits/locale_facets.tcc" 3
  template< _CharT>
    bool
    __verify_grouping(const basic_string<_CharT>& __grouping,
                      basic_string<_CharT>& __grouping_tmp)
    {
      int __i = 0;
      int __j = 0;
      const int __len = __grouping.size();
      const int __n = __grouping_tmp.size();
      bool __test = true;




      while (__test && __i < __n - 1)
        for (__j = 0; __test && __j < __len && __i < __n - 1; ++__j,++__i)
          __test &= __grouping[__j] == __grouping_tmp[__n - __i - 1];


      __j == __len ? __j = 0 : __j;
      __test &= __grouping[__j] >= __grouping_tmp[__n - __i - 1];
      return __test;
    }






  template< _CharT>
    _CharT*
    __add_grouping(_CharT* __s, _CharT __sep,
                   const char* __gbeg, const char* __gend,
                   const _CharT* __first, const _CharT* __last)
    {
      if (__last - __first > *__gbeg)
        {
          __s = __add_grouping(__s, __sep,
                               (__gbeg + 1 == __gend ? __gbeg : __gbeg + 1),
                               __gend, __first, __last - *__gbeg);
          __first = __last - *__gbeg;
          *__s++ = __sep;
        }
      do
        *__s++ = *__first++;
      while (__first != __last);
      return __s;
    }




  extern template class vector<locale::facet*>;

  extern template class moneypunct<char, false>;
  extern template class moneypunct<char, true>;
  extern template class moneypunct_byname<char, false>;
  extern template class moneypunct_byname<char, true>;
  extern template class money_get<char>;
  extern template class money_put<char>;
  extern template class moneypunct<wchar_t, false>;
  extern template class moneypunct<wchar_t, true>;
  extern template class moneypunct_byname<wchar_t, false>;
  extern template class moneypunct_byname<wchar_t, true>;
  extern template class money_get<wchar_t>;
  extern template class money_put<wchar_t>;
  extern template class numpunct<char>;
  extern template class numpunct_byname<char>;
  extern template class num_get<char>;
  extern template class num_put<char>;
  extern template class numpunct<wchar_t>;
  extern template class numpunct_byname<wchar_t>;
  extern template class num_get<wchar_t>;
  extern template class num_put<wchar_t>;
  extern template class __timepunct<char>;
  extern template class time_put<char>;
  extern template class time_put_byname<char>;
  extern template class time_get<char>;
  extern template class time_get_byname<char>;
  extern template class __timepunct<wchar_t>;
  extern template class time_put<wchar_t>;
  extern template class time_put_byname<wchar_t>;
  extern template class time_get<wchar_t>;
  extern template class time_get_byname<wchar_t>;
  extern template class messages<char>;
  extern template class messages_byname<char>;
  extern template class messages<wchar_t>;
  extern template class messages_byname<wchar_t>;
  extern template class ctype_byname<char>;
  extern template class ctype_byname<wchar_t>;
  extern template class codecvt_byname<char, char, mbstate_t>;
  extern template class codecvt_byname<wchar_t, char, mbstate_t>;
  extern template class collate<char>;
  extern template class collate_byname<char>;
  extern template class collate<wchar_t>;
  extern template class collate_byname<wchar_t>;

  extern template
    const codecvt<char, char, mbstate_t>&
    use_facet<codecvt<char, char, mbstate_t> >(const locale&);

  extern template
    const collate<char>&
    use_facet<collate<char> >(const locale&);

  extern template
    const numpunct<char>&
    use_facet<numpunct<char> >(const locale&);

  extern template
    const num_put<char>&
    use_facet<num_put<char> >(const locale&);

  extern template
    const num_get<char>&
    use_facet<num_get<char> >(const locale&);

  extern template
    const moneypunct<char, true>&
    use_facet<moneypunct<char, true> >(const locale&);

  extern template
    const moneypunct<char, false>&
    use_facet<moneypunct<char, false> >(const locale&);

  extern template
    const money_put<char>&
    use_facet<money_put<char> >(const locale&);

  extern template
    const money_get<char>&
    use_facet<money_get<char> >(const locale&);

  extern template
    const __timepunct<char>&
    use_facet<__timepunct<char> >(const locale&);

  extern template
    const time_put<char>&
    use_facet<time_put<char> >(const locale&);

  extern template
    const time_get<char>&
    use_facet<time_get<char> >(const locale&);

  extern template
    const messages<char>&
    use_facet<messages<char> >(const locale&);

  extern template
    const codecvt<wchar_t, char, mbstate_t>&
    use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);

  extern template
    const collate<wchar_t>&
    use_facet<collate<wchar_t> >(const locale&);

  extern template
    const numpunct<wchar_t>&
    use_facet<numpunct<wchar_t> >(const locale&);

  extern template
    const num_put<wchar_t>&
    use_facet<num_put<wchar_t> >(const locale&);

  extern template
    const num_get<wchar_t>&
    use_facet<num_get<wchar_t> >(const locale&);

  extern template
    const moneypunct<wchar_t, true>&
    use_facet<moneypunct<wchar_t, true> >(const locale&);

  extern template
    const moneypunct<wchar_t, false>&
    use_facet<moneypunct<wchar_t, false> >(const locale&);

  extern template
    const money_put<wchar_t>&
    use_facet<money_put<wchar_t> >(const locale&);

  extern template
    const money_get<wchar_t>&
    use_facet<money_get<wchar_t> >(const locale&);

  extern template
    const __timepunct<wchar_t>&
    use_facet<__timepunct<wchar_t> >(const locale&);

  extern template
    const time_put<wchar_t>&
    use_facet<time_put<wchar_t> >(const locale&);

  extern template
    const time_get<wchar_t>&
    use_facet<time_get<wchar_t> >(const locale&);

  extern template
    const messages<wchar_t>&
    use_facet<messages<wchar_t> >(const locale&);


  extern template
    bool
    has_facet<ctype<char> >(const locale&);

  extern template
    bool
    has_facet<codecvt<char, char, mbstate_t> >(const locale&);

  extern template
    bool
    has_facet<collate<char> >(const locale&);

  extern template
    bool
    has_facet<numpunct<char> >(const locale&);

  extern template
    bool
    has_facet<num_put<char> >(const locale&);

  extern template
    bool
    has_facet<num_get<char> >(const locale&);

  extern template
    bool
    has_facet<moneypunct<char> >(const locale&);

  extern template
    bool
    has_facet<money_put<char> >(const locale&);

  extern template
    bool
    has_facet<money_get<char> >(const locale&);

  extern template
    bool
    has_facet<__timepunct<char> >(const locale&);

  extern template
    bool
    has_facet<time_put<char> >(const locale&);

  extern template
    bool
    has_facet<time_get<char> >(const locale&);

  extern template
    bool
    has_facet<messages<char> >(const locale&);

 extern template
    bool
    has_facet<ctype<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);

  extern template
    bool
    has_facet<collate<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<numpunct<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<num_put<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<num_get<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<moneypunct<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<money_put<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<money_get<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<__timepunct<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<time_put<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<time_get<wchar_t> >(const locale&);

  extern template
    bool
    has_facet<messages<wchar_t> >(const locale&);
}
# 47 "/usr/local/include/g++-v3/locale" 2 3
# 38 "/usr/local/include/g++-v3/bits/istream.tcc" 2 3
# 1 "/usr/local/include/g++-v3/ostream" 1 3
# 44 "/usr/local/include/g++-v3/ostream" 3



namespace std
{

  template< _CharT, _Traits>
    class basic_ostream : virtual public basic_ios<_CharT, _Traits>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits::int_type int_type;
      typedef _Traits::pos_type pos_type;
      typedef _Traits::off_type off_type;
      typedef _Traits traits_type;


      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
      typedef basic_ios<_CharT, _Traits> __ios_type;
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      typedef ostreambuf_iterator<_CharT, _Traits> __ostreambuf_iter;
      typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
      typedef ctype<_CharT> __ctype_type;


      explicit
      basic_ostream(__streambuf_type* __sb)
      { this->init(__sb); }

      virtual
      ~basic_ostream() { }


      class sentry;
      friend class sentry;



      __ostream_type&
      operator<<(__ostream_type& (*__pf)(__ostream_type&));

      __ostream_type&
      operator<<(__ios_type& (*__pf)(__ios_type&));

      __ostream_type&
      operator<<(ios_base& (*__pf) (ios_base&));


      __ostream_type&
      operator<<(long __n);

      __ostream_type&
      operator<<(unsigned long __n);

      __ostream_type&
      operator<<(bool __n);

      __ostream_type&
      operator<<(short __n)
      {
        ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
        if (__fmt & ios_base::oct || __fmt & ios_base::hex)
          return this->operator<<(static_cast<unsigned long>
                                  (static_cast<unsigned short>(__n)));
        else
          return this->operator<<(static_cast<long>(__n));
      }

      __ostream_type&
      operator<<(unsigned short __n)
      { return this->operator<<(static_cast<unsigned long>(__n)); }

      __ostream_type&
      operator<<(int __n)
      {
        ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
        if (__fmt & ios_base::oct || __fmt & ios_base::hex)
          return this->operator<<(static_cast<unsigned long>
                                  (static_cast<unsigned int>(__n)));
        else
          return this->operator<<(static_cast<long>(__n));
      }

      __ostream_type&
      operator<<(unsigned int __n)
      { return this->operator<<(static_cast<unsigned long>(__n)); }


      __ostream_type&
      operator<<(long long __n);

      __ostream_type&
      operator<<(unsigned long long __n);


      __ostream_type&
      operator<<(double __f);

      __ostream_type&
      operator<<(float __f)
      { return this->operator<<(static_cast<double>(__f)); }

      __ostream_type&
      operator<<(long double __f);

      __ostream_type&
      operator<<(const void* __p);

      __ostream_type&
      operator<<(__streambuf_type* __sb);


      __ostream_type&
      put(char_type __c);

      __ostream_type&
      write(const char_type* __s, streamsize __n);

      __ostream_type&
      flush();


      pos_type
      tellp();

      __ostream_type&
      seekp(pos_type);

      __ostream_type&
      seekp(off_type, ios_base::seekdir);
    };


  template < _CharT, _Traits>
    class basic_ostream<_CharT, _Traits>::sentry
    {

      bool _M_ok;
      basic_ostream<_CharT,_Traits>& _M_os;

    public:
      explicit
      sentry(basic_ostream<_CharT,_Traits>& __os);

      ~sentry()
      {

        if (_M_os.flags() & ios_base::unitbuf && !uncaught_exception())
          {

            if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
              _M_os.setstate(ios_base::badbit);
          }
      }

      operator bool()
      { return _M_ok; }
    };

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c);

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
    { return (__out << __out.widen(__c)); }


  template <class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, char __c);


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
    { return (__out << static_cast<char>(__c)); }

  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
    { return (__out << static_cast<char>(__c)); }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s);

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits> &
    operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, const char* __s);


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
    { return (__out << reinterpret_cast<const char*>(__s)); }

  template<class _Traits>
    basic_ostream<char, _Traits> &
    operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
    { return (__out << reinterpret_cast<const char*>(__s)); }


  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    endl(basic_ostream<_CharT, _Traits>& __os)
    { return flush(__os.put(__os.widen('\n'))); }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    ends(basic_ostream<_CharT, _Traits>& __os)
    { return __os.put(_CharT()); }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    flush(basic_ostream<_CharT, _Traits>& __os)
    { return __os.flush(); }

}





# 1 "/usr/local/include/g++-v3/bits/ostream.tcc" 1 3
# 36 "/usr/local/include/g++-v3/bits/ostream.tcc" 3



namespace std
{
  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>::sentry::
    sentry(basic_ostream<_CharT,_Traits>& __os)
    : _M_ok(__os.good()), _M_os(__os)
    {

      if (_M_ok && __os.tie())
        __os.tie()->flush();
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    operator<<(__ostream_type& (*__pf)(__ostream_type&))
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            { __pf(*this); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    operator<<(__ios_type& (*__pf)(__ios_type&))
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            { __pf(*this); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    operator<<(ios_base& (*__pf)(ios_base&))
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            { __pf(*this); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sbin)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              streamsize __xtrct = 0;
              if (__sbin)
                {
                  __streambuf_type* __sbout = this->rdbuf();
                  __xtrct = __copy_streambufs(*this, __sbin, __sbout);
                }
              else
                this->setstate(ios_base::badbit);
              if (!__xtrct)
                this->setstate(ios_base::failbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(bool __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              char_type __c = this->fill();
              ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
              if (_M_check_facet(_M_fnumput))
                {
                  bool __b = false;
                  if (__fmt & ios_base::oct || __fmt & ios_base::hex)
                    {
                      unsigned long __l = static_cast<unsigned long>(__n);
                      __b = _M_fnumput->put(*this, *this, __c, __l).failed();
                    }
                  else
                    __b = _M_fnumput->put(*this, *this, __c, __n).failed();
                  if (__b)
                    this->setstate(ios_base::badbit);
                }
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(unsigned long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(long long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              char_type __c = this->fill();
              ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
              if (_M_check_facet(_M_fnumput))
                {
                  bool __b = false;
                  if (__fmt & ios_base::oct || __fmt & ios_base::hex)
                    {
                      unsigned long long __l;
                      __l = static_cast<unsigned long long>(__n);
                      __b = _M_fnumput->put(*this, *this, __c, __l).failed();
                    }
                  else
                    __b = _M_fnumput->put(*this, *this, __c, __n).failed();
                  if (__b)
                    this->setstate(ios_base::badbit);
                }
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(double __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(long double __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(const void* __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::put(char_type __c)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          int_type __put = rdbuf()->sputc(__c);
          if (traits_type::eq_int_type(__put, traits_type::eof()))
            this->setstate(ios_base::badbit);
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::write(const _CharT* __s, streamsize __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          streamsize __put = this->rdbuf()->sputn(__s, __n);
          if ( __put != __n)
            this->setstate(ios_base::badbit);
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::flush()
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          if (this->rdbuf() && this->rdbuf()->pubsync() == -1)
            this->setstate(ios_base::badbit);
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>::pos_type
    basic_ostream<_CharT, _Traits>::tellp()
    {
      pos_type __ret = pos_type(-1);
      bool __testok = this->fail() != true;

      if (__testok)
        __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
      return __ret;
    }


  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::seekp(pos_type __pos)
    {
      bool __testok = this->fail() != true;

      if (__testok)
        {


          pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::out);


          if (__err == pos_type(off_type(-1)))
            this->setstate(ios_base::failbit);

        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    seekp(off_type __off, ios_base::seekdir __d)
    {
      bool __testok = this->fail() != true;

      if (__testok)
        {


          pos_type __err = this->rdbuf()->pubseekoff(__off, __d,
                                                     ios_base::out);


          if (__err == pos_type(off_type(-1)))
            this->setstate(ios_base::failbit);

        }
      return *this;
    }


  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              _CharT* __pads = static_cast<_CharT*>(__builtin_alloca((sizeof(_CharT) * __w) + 1));
              __pads[0] = __c;
              streamsize __len = 1;
              if (__w > __len)
                {
                  __pad(__out, __out.fill(), __pads, &__c, __w, __len, false);
                  __len = __w;
                }
              __out.write(__pads, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }


  template <class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, char __c)
    {
      typedef basic_ostream<char, _Traits> __ostream_type;
      __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              char* __pads = static_cast<char*>(__builtin_alloca(__w + 1));
              __pads[0] = __c;
              streamsize __len = 1;
              if (__w > __len)
                {
                  __pad(__out, __out.fill(), __pads, &__c, __w, __len, false);
                  __len = __w;
                }
              __out.write(__pads, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
     }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
              streamsize __len = static_cast<streamsize>(_Traits::length(__s));
              if (__w > __len)
                {
                  __pad(__out, __out.fill(), __pads, __s, __w, __len, false);
                  __s = __pads;
                  __len = __w;
                }
              __out.write(__s, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }

  template< _CharT, _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;



      typedef char_traits<char> __ctraits_type;

      __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          size_t __clen = __ctraits_type::length(__s);
          _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__clen + 1)));
          for (size_t __i = 0; __i <= __clen; ++__i)
            __ws[__i] = __out.widen(__s[__i]);
          _CharT* __str = __ws;

          try
            {
              streamsize __len = static_cast<streamsize>(__clen);
              streamsize __w = __out.width();
              _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));

              if (__w > __len)
                {
                  __pad(__out, __out.fill(), __pads, __ws, __w, __len, false);
                  __str = __pads;
                  __len = __w;
                }
              __out.write(__str, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
    {
      typedef basic_ostream<char, _Traits> __ostream_type;
      __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              char* __pads = static_cast<char*>(__builtin_alloca(__w));
              streamsize __len = static_cast<streamsize>(_Traits::length(__s));
              if (__w > __len)
                {
                  __pad(__out, __out.fill(), __pads, __s, __w, __len, false);
                  __s = __pads;
                  __len = __w;
                }
              __out.write(__s, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }


  template< _CharT, _Traits, _Alloc>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out,
               const basic_string<_CharT, _Traits, _Alloc>& __str)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          const _CharT* __s = __str.data();
          streamsize __w = __out.width();
          _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
          streamsize __len = static_cast<streamsize>(__str.size());



          if (__w > __len)
            {
              __pad(__out, __out.fill(), __pads, __s, __w, __len, false);
              __s = __pads;
              __len = __w;
            }
          streamsize __res = __out.rdbuf()->sputn(__s, __len);
          __out.width(0);
          if (__res != __len)
            __out.setstate(ios_base::failbit);
        }
      return __out;
    }




  extern template class basic_ostream<char>;
  extern template ostream& endl(ostream&);
  extern template ostream& ends(ostream&);
  extern template ostream& flush(ostream&);
  extern template ostream& operator<<(ostream&, char);
  extern template ostream& operator<<(ostream&, unsigned char);
  extern template ostream& operator<<(ostream&, signed char);
  extern template ostream& operator<<(ostream&, const char*);
  extern template ostream& operator<<(ostream&, const unsigned char*);
  extern template ostream& operator<<(ostream&, const signed char*);
# 712 "/usr/local/include/g++-v3/bits/ostream.tcc" 3
}
# 276 "/usr/local/include/g++-v3/ostream" 2 3
# 39 "/usr/local/include/g++-v3/bits/istream.tcc" 2 3

namespace std
{
  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>::sentry::
    sentry(basic_istream<_CharT, _Traits>& __in, bool __noskipws)
    {
      if (__in.good())
        {
          if (__in.tie())
            __in.tie()->flush();
          if (!__noskipws && (__in.flags() & ios_base::skipws))
            {
              const __int_type __eof = traits_type::eof();
              const __ctype_type* __ctype = __in._M_get_fctype_ios();
              __streambuf_type* __sb = __in.rdbuf();
              __int_type __c = __sb->sgetc();

              while (__c != __eof && __ctype->is(ctype_base::space, __c))
                __c = __sb->snextc();



              if (__c == __eof)
                __in.setstate(ios_base::eofbit);

            }
        }

      if (__in.good())
        _M_ok = true;
      else
        {
          _M_ok = false;
          __in.setstate(ios_base::failbit);
        }
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(__istream_type& (*__pf)(__istream_type&))
    {
      __pf(*this);
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(__ios_type& (*__pf)(__ios_type&))
    {
      __pf(*this);
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(ios_base& (*__pf)(ios_base&))
    {
      __pf(*this);
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(bool& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(short& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              long __l;
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __l);


              if (!(__err & ios_base::failbit)
                  && (numeric_limits<short>::min() <= __l
                      && __l <= numeric_limits<short>::max()))
                __n = __l;
              else
                __err |= ios_base::failbit;

              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned short& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(int& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              long __l;
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __l);


              if (!(__err & ios_base::failbit)
                  && (numeric_limits<int>::min() <= __l
                      && __l <= numeric_limits<int>::max()))
                __n = __l;
              else
                __err |= ios_base::failbit;

              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned int& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(long long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
              throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned long long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(float& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(double& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(long double& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(void*& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(__streambuf_type* __sbout)
    {
       sentry __cerb(*this, false);
       if (__cerb)
         {
           try
             {
               streamsize __xtrct = 0;
               if (__sbout)
                 {
                   __streambuf_type* __sbin = this->rdbuf();
                   __xtrct = __copy_streambufs(*this, __sbin, __sbout);
                 }
               if (!__sbout || !__xtrct)
                 this->setstate(ios_base::failbit);
             }
           catch(exception& __fail)
             {


               this->setstate(ios_base::badbit);
               if ((this->exceptions() & ios_base::badbit) != 0)
                 throw;
             }
         }
       return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>::int_type
    basic_istream<_CharT, _Traits>::
    get(void)
    {
      const int_type __eof = traits_type::eof();
      int_type __c = __eof;
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              __c = this->rdbuf()->sbumpc();

              if (__c != __eof)
                _M_gcount = 1;
              else
                this->setstate(ios_base::eofbit | ios_base::failbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __c;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    get(char_type& __c)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              const int_type __eof = traits_type::eof();
              int_type __bufval = this->rdbuf()->sbumpc();

              if (__bufval != __eof)
                {
                  _M_gcount = 1;
                  __c = traits_type::to_char_type(__bufval);
                }
              else
                this->setstate(ios_base::eofbit | ios_base::failbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    get(char_type* __s, streamsize __n, char_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb && __n > 1)
        {
          try
            {
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              int_type __c = __sb->sbumpc();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;

              while (_M_gcount < __n - 1 && !__testeof && !__testdelim)
                {
                  *__s++ = traits_type::to_char_type(__c);
                  ++_M_gcount;
                  __c = __sb->sbumpc();
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }
              if (__testdelim || _M_gcount == __n - 1)
                __sb->sputbackc(__c);
              if (__testeof)
                this->setstate(ios_base::eofbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      *__s = char_type();
      if (!_M_gcount)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    get(__streambuf_type& __sb, char_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          int_type __c;
          __streambuf_type* __this_sb = this->rdbuf();
          try
            {
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              __c = __this_sb->sbumpc();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;
              bool __testput = true;

              while (!__testeof && !__testdelim
                    && (__testput = __sb.sputc(traits_type::to_char_type(__c))
                         != __eof))
                {
                  ++_M_gcount;
                  __c = __this_sb->sbumpc();
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }
              if (__testdelim || !__testput)
                __this_sb->sputbackc(traits_type::to_char_type(__c));
              if (__testeof)
                this->setstate(ios_base::eofbit);
            }
          catch(exception& __fail)
            {

              __this_sb->sputbackc(traits_type::to_char_type(__c));
            }
        }
      if (!_M_gcount)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    getline(char_type* __s, streamsize __n, char_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              __streambuf_type* __sb = this->rdbuf();
              int_type __c = __sb->sbumpc();
              ++_M_gcount;
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;

              while (_M_gcount < __n && !__testeof && !__testdelim)
                {
                  *__s++ = traits_type::to_char_type(__c);
                  __c = __sb->sbumpc();
                  ++_M_gcount;
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }

              if (__testeof)
                {
                  --_M_gcount;
                  this->setstate(ios_base::eofbit);
                }
              else if (!__testdelim)
                {
                  --_M_gcount;
                  __sb->sputbackc(traits_type::to_char_type(__c));
                  this->setstate(ios_base::failbit);
                }
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      *__s = char_type();
      if (!_M_gcount)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    ignore(streamsize __n, int_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb && __n > 0)
        {
          try
            {
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              int_type __c = __sb->sbumpc();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;

              __n = min(__n, numeric_limits<streamsize>::max());
              while (_M_gcount < __n - 1 && !__testeof && !__testdelim)
                {
                  ++_M_gcount;
                  __c = __sb->sbumpc();
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }
              if ((_M_gcount == __n - 1 && !__testeof) || __testdelim)
                ++_M_gcount;
              if (__testeof)
                this->setstate(ios_base::eofbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>::int_type
    basic_istream<_CharT, _Traits>::
    peek(void)
    {
      int_type __c = traits_type::eof();
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            { __c = this->rdbuf()->sgetc(); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __c;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    read(char_type* __s, streamsize __n)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          if (__n > 0)
            {
              try
                {
                  const int_type __eof = traits_type::eof();
                  __streambuf_type* __sb = this->rdbuf();
                  int_type __c = __sb->sbumpc();
                  bool __testeof = __c == __eof;

                  while (_M_gcount < __n - 1 && !__testeof)
                    {
                      *__s++ = traits_type::to_char_type(__c);
                      ++_M_gcount;
                      __c = __sb->sbumpc();
                      __testeof = __c == __eof;
                    }
                  if (__testeof)
                    this->setstate(ios_base::eofbit | ios_base::failbit);
                  else
                    {

                      *__s++ = traits_type::to_char_type(__c);
                      ++_M_gcount;
                    }
                }
              catch(exception& __fail)
                {


                  this->setstate(ios_base::badbit);
                  if ((this->exceptions() & ios_base::badbit) != 0)
                    throw;
                }
            }
        }
      else
        this->setstate(ios_base::failbit);
      return *this;
    }

  template< _CharT, _Traits>
    streamsize
    basic_istream<_CharT, _Traits>::
    readsome(char_type* __s, streamsize __n)
    {
      const int_type __eof = traits_type::eof();
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          if (__n > 0)
            {
              try
                {
                  streamsize __num = this->rdbuf()->in_avail();
                  if (__num != static_cast<streamsize>(__eof))
                    {
                      __num = min(__num, __n);
                      _M_gcount = this->rdbuf()->sgetn(__s, __num);
                    }
                  else
                    this->setstate(ios_base::eofbit);
                }
              catch(exception& __fail)
                {


                  this->setstate(ios_base::badbit);
                  if ((this->exceptions() & ios_base::badbit) != 0)
                    throw;
                }
            }
        }
      else
        this->setstate(ios_base::failbit);
      return _M_gcount;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    putback(char_type __c)
    {
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              if (!__sb || __sb->sputbackc(__c) == __eof)
                this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      else
        this->setstate(ios_base::failbit);
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    unget(void)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              if (!__sb || __eof == __sb->sungetc())
                this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      else
        this->setstate(ios_base::failbit);
      return *this;
    }

  template< _CharT, _Traits>
    int
    basic_istream<_CharT, _Traits>::
    sync(void)
    {
      int __ret = traits_type::eof();
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              __streambuf_type* __sb = this->rdbuf();
              if (!__sb || __ret == __sb->pubsync())
                this->setstate(ios_base::badbit);
              else
                __ret = 0;
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __ret;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>::pos_type
    basic_istream<_CharT, _Traits>::
    tellg(void)
    {
      pos_type __ret = pos_type(-1);
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
             __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __ret;
    }


  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    seekg(pos_type __pos)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {


              pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::in);


              if (__err == pos_type(off_type(-1)))
                this->setstate(ios_base::failbit);

            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    seekg(off_type __off, ios_base::seekdir __dir)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {


              pos_type __err = this->rdbuf()->pubseekoff(__off, __dir,
                                                         ios_base::in);


              if (__err == pos_type(off_type(-1)))
                this->setstate(ios_base::failbit);

            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      __istream_type::sentry __cerb(__in, false);
      if (__cerb)
        {
          try
            { __in.get(__c); }
          catch(exception& __fail)
            {


              __in.setstate(ios_base::badbit);
              if ((__in.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      else
        __in.setstate(ios_base::failbit);
      return __in;
    }

  template< _CharT, _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef __istream_type::__streambuf_type __streambuf_type;
      typedef _Traits::int_type int_type;
      typedef _CharT char_type;
      typedef ctype<_CharT> __ctype_type;
      streamsize __extracted = 0;

      __istream_type::sentry __cerb(__in, false);
      if (__cerb)
        {
          try
            {

              streamsize __num = __in.width();
              if (__num == 0)
                __num = numeric_limits<streamsize>::max();

              __streambuf_type* __sb = __in.rdbuf();
              const __ctype_type* __ctype = __in._M_get_fctype_ios();
              int_type __c = __sb->sbumpc();
              const int_type __eof = _Traits::eof();
              bool __testsp = __ctype->is(ctype_base::space, __c);
              bool __testeof = __c == __eof;

              while (__extracted < __num - 1 && !__testeof && !__testsp)
                {
                  *__s++ = __c;
                  ++__extracted;
                  __c = __sb->sbumpc();
                  __testeof = __c == __eof;
                  __testsp = __ctype->is(ctype_base::space, __c);
                }

              if (!__testeof)
                __sb->sputbackc(__c);
              else
                __in.setstate(ios_base::eofbit);



              *__s = char_type();

              __in.width(0);
            }
          catch(exception& __fail)
            {


              __in.setstate(ios_base::badbit);
              if ((__in.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      if (!__extracted)
        __in.setstate(ios_base::failbit);
      return __in;
    }


  template< _CharT, _Traits>
    basic_istream<_CharT,_Traits>&
    ws(basic_istream<_CharT,_Traits>& __in)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef __istream_type::__streambuf_type __streambuf_type;
      typedef __istream_type::__ctype_type __ctype_type;
      typedef __istream_type::int_type __int_type;
      typedef __istream_type::char_type __char_type;

      __streambuf_type* __sb = __in.rdbuf();
      const __ctype_type* __ctype = __in._M_get_fctype_ios();
      const __int_type __eof = _Traits::eof();
      __int_type __c;
      bool __testeof;
      bool __testsp;

      do
        {
          __c = __sb->sbumpc();
          __testeof = __c == __eof;
          __testsp = __ctype->is(ctype_base::space, __c);
        }
      while (!__testeof && __testsp);

      if (!__testeof && !__testsp)
        __sb->sputbackc(__c);
      else
        __in.setstate(ios_base::eofbit);

      return __in;
    }


  template< _CharT, _Traits, _Alloc>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in,
               basic_string<_CharT, _Traits, _Alloc>& __str)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef __istream_type::int_type __int_type;
      typedef __istream_type::__streambuf_type __streambuf_type;
      typedef __istream_type::__ctype_type __ctype_type;
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef __string_type::size_type __size_type;
      __size_type __extracted = 0;

      __istream_type::sentry __cerb(__in, false);
      if (__cerb)
        {
          __str.erase();
          streamsize __w = __in.width();
          __size_type __n;
          __n = __w > 0 ? static_cast<__size_type>(__w) : __str.max_size();

          __streambuf_type* __sb = __in.rdbuf();
          const __ctype_type* __ctype = __in._M_get_fctype_ios();
          __int_type __c = __sb->sbumpc();
          const __int_type __eof = _Traits::eof();
          bool __testsp = __ctype->is(ctype_base::space, __c);
          bool __testeof = __c == __eof;

          while (__extracted < __n && !__testeof && !__testsp)
            {
              __str += _Traits::to_char_type(__c);
              ++__extracted;
              __c = __sb->sbumpc();
              __testeof = __c == __eof;
              __testsp = __ctype->is(ctype_base::space, __c);
            }
          if (!__testeof)
            __sb->sputbackc(__c);
          else
            __in.setstate(ios_base::eofbit);
          __in.width(0);
        }


      if (!__extracted)
        __in.setstate (ios_base::failbit);

      return __in;
    }

  template< _CharT, _Traits, _Alloc>
    basic_istream<_CharT, _Traits>&
    getline(basic_istream<_CharT, _Traits>& __in,
            basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef __istream_type::int_type __int_type;
      typedef __istream_type::__streambuf_type __streambuf_type;
      typedef __istream_type::__ctype_type __ctype_type;
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef __string_type::size_type __size_type;

      __size_type __extracted = 0;
      bool __testdelim = false;
      __istream_type::sentry __cerb(__in, true);
      if (__cerb)
        {
          __str.erase();
          __size_type __n = __str.max_size();

          __int_type __idelim = _Traits::to_int_type(__delim);
          __streambuf_type* __sb = __in.rdbuf();
          __int_type __c = __sb->sbumpc();
          const __int_type __eof = _Traits::eof();
          __testdelim = __c == __idelim;
          bool __testeof = __c == __eof;

          while (__extracted <= __n && !__testeof && !__testdelim)
            {
              __str += _Traits::to_char_type(__c);
              ++__extracted;
              __c = __sb->sbumpc();
              __testeof = __c == __eof;
              __testdelim = __c == __idelim;
            }
          if (__testeof)
            __in.setstate(ios_base::eofbit);
        }
      if (!__extracted && !__testdelim)
        __in.setstate(ios_base::failbit);
      return __in;
    }

  template<class _CharT, class _Traits, class _Alloc>
    inline basic_istream<_CharT,_Traits>&
    getline(basic_istream<_CharT, _Traits>& __in,
            basic_string<_CharT,_Traits,_Alloc>& __str)
    { return getline(__in, __str, __in.widen('\n')); }




  extern template class basic_istream<char>;
  extern template istream& ws(istream&);
  extern template istream& operator>>(istream&, char&);
  extern template istream& operator>>(istream&, char*);
  extern template istream& operator>>(istream&, unsigned char&);
  extern template istream& operator>>(istream&, signed char&);
  extern template istream& operator>>(istream&, unsigned char*);
  extern template istream& operator>>(istream&, signed char*);







}
# 288 "/usr/local/include/g++-v3/istream" 2 3
# 46 "/usr/local/include/g++-v3/fstream" 2 3


# 1 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/basic_file.h" 1 3
# 43 "/usr/local/include/g++-v3/ia64-hp-hpux11.22/bits/basic_file.h" 3




namespace std
{

  template< _CharT>
    class __basic_file;


  template<>
    class __basic_file<char>
    {

      __c_file_type* _M_cfile;

      bool _M_cfile_created;

    public:
      __basic_file(__c_lock* __lock = 0);

      void
      _M_open_mode(ios_base::openmode __mode, int& __p_mode, int& __rw_mode,
                   char* __c_mode);

      __basic_file*
      open(const char* __name, ios_base::openmode __mode, int __prot = 0664);

      __basic_file*
      sys_open(__c_file_type* __file, ios_base::openmode __mode);

      char
      sys_getc();

      char
      sys_ungetc(char);

      __basic_file*
      close();

      bool
      is_open();

      int
      fd();

      ~__basic_file();

      streamsize
      xsputn(const char* __s, streamsize __n);

      streamsize
      xsgetn(char* __s, streamsize __n);

      streamoff
      seekoff(streamoff __off, ios_base::seekdir __way,
              ios_base::openmode __mode = ios_base::in | ios_base::out);

      streamoff
      seekpos(streamoff __pos,
              ios_base::openmode __mode = ios_base::in | ios_base::out);

      int
      sync();
    };
}
# 49 "/usr/local/include/g++-v3/fstream" 2 3


namespace std
{
  template< _CharT, _Traits>
    class basic_filebuf : public basic_streambuf<_CharT, _Traits>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef traits_type::int_type int_type;
      typedef traits_type::pos_type pos_type;
      typedef traits_type::off_type off_type;


      typedef basic_streambuf<char_type, traits_type> __streambuf_type;
      typedef basic_filebuf<char_type, traits_type> __filebuf_type;
      typedef __basic_file<char> __file_type;
      typedef traits_type::state_type __state_type;
      typedef codecvt<char_type, char, __state_type> __codecvt_type;
      typedef __codecvt_type::result __res_type;
      typedef ctype<char_type> __ctype_type;

      friend class ios_base;

    protected:


      __file_type* _M_file;


      __state_type _M_state_cur;
      __state_type _M_state_beg;


      __c_lock _M_lock;


      bool _M_buf_allocated;


      bool _M_last_overflowed;

    public:

      basic_filebuf();


      basic_filebuf(__c_file_type* __f, ios_base::openmode __mode,
                    int_type __s = static_cast<int_type>(1024));


      int
      fd();

      virtual
      ~basic_filebuf()
      {
        this->close();
        _M_last_overflowed = false;
      }


      bool
      is_open() const { return _M_file ? _M_file->is_open() : false; }

      __filebuf_type*
      open(const char* __s, ios_base::openmode __mode);

      __filebuf_type*
      close();

    protected:
      void
      _M_allocate_internal_buffer();

      void
      _M_destroy_internal_buffer();

      void
      _M_allocate_pback_buffer();


      void
      _M_allocate_file();


      virtual streamsize
      showmanyc();





      virtual int_type
      underflow();

      virtual int_type
      pbackfail(int_type __c = _Traits::eof());
# 158 "/usr/local/include/g++-v3/fstream" 3
      virtual int_type
      overflow(int_type __c = _Traits::eof());
# 168 "/usr/local/include/g++-v3/fstream" 3
      int_type
      _M_really_overflow(int_type __c = _Traits::eof());



      void
      _M_convert_to_external(char_type*, streamsize, streamsize&, streamsize&);

      virtual __streambuf_type*
      setbuf(char_type* __s, streamsize __n);

      virtual pos_type
      seekoff(off_type __off, ios_base::seekdir __way,
              ios_base::openmode __mode = ios_base::in | ios_base::out);

      virtual pos_type
      seekpos(pos_type __pos,
              ios_base::openmode __mode = ios_base::in | ios_base::out);

      virtual int
      sync()
      {
        bool __testput = _M_out_cur && _M_out_beg < _M_out_end;



        if (__testput && !_M_file->sync())
          {




            streamoff __cur = _M_file->seekoff(0, ios_base::cur);
            off_type __off = _M_out_cur - _M_out_beg;
            _M_really_overflow();
            _M_file->seekpos(__cur + __off);
          }
        _M_last_overflowed = false;
        return 0;
      }

      virtual void
      imbue(const locale& __loc);

      virtual streamsize
      xsgetn(char_type* __s, streamsize __n)
      {
        streamsize __ret = 0;

        if (_M_pback_init)
          {
            while (__ret < __n && _M_in_cur < _M_in_end)
              {
                *__s = *_M_in_cur;
                ++__ret;
                ++__s;
                ++_M_in_cur;
              }
            _M_pback_destroy();
          }
        if (__ret < __n)
          __ret += __streambuf_type::xsgetn(__s, __n - __ret);
        return __ret;
      }

      virtual streamsize
      xsputn(const char_type* __s, streamsize __n)
      {
        _M_pback_destroy();
        return __streambuf_type::xsputn(__s, __n);
      }

      void
      _M_output_unshift();
    };







  template< _CharT, _Traits>
    class basic_ifstream : public basic_istream<_CharT, _Traits>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef traits_type::int_type int_type;
      typedef traits_type::pos_type pos_type;
      typedef traits_type::off_type off_type;


      typedef basic_filebuf<char_type, traits_type> __filebuf_type;
      typedef basic_istream<char_type, traits_type> __istream_type;

    private:
      __filebuf_type _M_filebuf;

    public:


      basic_ifstream()
      : __istream_type(__null), _M_filebuf()
      { this->init(&_M_filebuf); }
# 283 "/usr/local/include/g++-v3/fstream" 3
      explicit
      basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)
      : __istream_type(__null), _M_filebuf()
      {
        this->init(&_M_filebuf);
        this->open(__s, __mode);
      }

      ~basic_ifstream()
      { }






      __filebuf_type*
      rdbuf() const
      { return const_cast<__filebuf_type*>(&_M_filebuf); }

      bool
      is_open() { return _M_filebuf.is_open(); }

      void
      open(const char* __s, ios_base::openmode __mode = ios_base::in)
      {
        if (_M_filebuf.open(__s, __mode | ios_base::in) == __null)
          this->setstate(ios_base::failbit);
      }


      void
      close()
      {
        if (!_M_filebuf.close())
          this->setstate(ios_base::failbit);
      }
    };






  template< _CharT, _Traits>
    class basic_ofstream : public basic_ostream<_CharT,_Traits>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef traits_type::int_type int_type;
      typedef traits_type::pos_type pos_type;
      typedef traits_type::off_type off_type;


      typedef basic_filebuf<char_type, traits_type> __filebuf_type;
      typedef basic_ostream<char_type, traits_type> __ostream_type;

    private:
      __filebuf_type _M_filebuf;

    public:


      basic_ofstream()
      : __ostream_type(__null), _M_filebuf()
      { this->init(&_M_filebuf); }
# 360 "/usr/local/include/g++-v3/fstream" 3
      explicit
      basic_ofstream(const char* __s,
                     ios_base::openmode __mode = ios_base::out|ios_base::trunc)
      : __ostream_type(__null), _M_filebuf()
      {
        this->init(&_M_filebuf);
        this->open(__s, __mode);
      }

      ~basic_ofstream()
      { }






      __filebuf_type*
      rdbuf() const
      { return const_cast<__filebuf_type*>(&_M_filebuf); }





      bool
      is_open() { return _M_filebuf.is_open(); }
# 396 "/usr/local/include/g++-v3/fstream" 3
      void
      open(const char* __s,
           ios_base::openmode __mode = ios_base::out | ios_base::trunc)
      {
        if (!_M_filebuf.open(__s, __mode | ios_base::out))
          this->setstate(ios_base::failbit);
      }


      void
      close()
      {
        if (!_M_filebuf.close())
          this->setstate(ios_base::failbit);
      }
    };






  template< _CharT, _Traits>
    class basic_fstream : public basic_iostream<_CharT, _Traits>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef traits_type::int_type int_type;
      typedef traits_type::pos_type pos_type;
      typedef traits_type::off_type off_type;


      typedef basic_filebuf<char_type, traits_type> __filebuf_type;
      typedef basic_ios<char_type, traits_type> __ios_type;
      typedef basic_iostream<char_type, traits_type> __iostream_type;

    private:
      __filebuf_type _M_filebuf;

    public:


      basic_fstream()
      : __iostream_type(__null), _M_filebuf()
      { this->init(&_M_filebuf); }
# 452 "/usr/local/include/g++-v3/fstream" 3
      explicit
      basic_fstream(const char* __s,
                    ios_base::openmode __mode = ios_base::in | ios_base::out)
      : __iostream_type(__null), _M_filebuf()
      {
        this->init(&_M_filebuf);
        this->open(__s, __mode);
      }

      ~basic_fstream()
      { }






      __filebuf_type*
      rdbuf() const
      { return const_cast<__filebuf_type*>(&_M_filebuf); }





      bool
      is_open() { return _M_filebuf.is_open(); }
# 488 "/usr/local/include/g++-v3/fstream" 3
      void
      open(const char* __s,
           ios_base::openmode __mode = ios_base::in | ios_base::out)
      {
        if (!_M_filebuf.open(__s, __mode))
          setstate(ios_base::failbit);
      }


      void
      close()
      {
        if (!_M_filebuf.close())
          setstate(ios_base::failbit);
      }
    };
}





# 1 "/usr/local/include/g++-v3/bits/fstream.tcc" 1 3
# 39 "/usr/local/include/g++-v3/bits/fstream.tcc" 3

namespace std
{
  template< _CharT, _Traits>
    void
    basic_filebuf<_CharT, _Traits>::
    _M_allocate_file()
    {
      if (!_M_file)
        {
          _M_buf_unified = true;
          try
            { _M_file = new __file_type(&_M_lock); }
          catch(...)
            {
              delete _M_file;
              throw;
            }
        }
    }

  template< _CharT, _Traits>
    void
    basic_filebuf<_CharT, _Traits>::
    _M_allocate_internal_buffer()
    {
      if (!_M_buf && _M_buf_size_opt)
        {
          _M_buf_size = _M_buf_size_opt;


          try { _M_buf = new char_type[_M_buf_size]; }
          catch(...)
            {
              delete [] _M_buf;
              throw;
            }
          _M_buf_allocated = true;
        }
    }


  template< _CharT, _Traits>
    void
    basic_filebuf<_CharT, _Traits>::
    _M_destroy_internal_buffer()
    {
      if (_M_buf_allocated)
        {
          delete [] _M_buf;
          _M_buf = __null;
          _M_buf_allocated = false;
          this->setg(__null, __null, __null);
          this->setp(__null, __null);
        }
    }

 template< _CharT, _Traits>
    void
    basic_filebuf<_CharT, _Traits>::
    _M_allocate_pback_buffer()
    {
      if (!_M_pback && _M_pback_size)
        {

          try
            { _M_pback = new char_type[_M_pback_size]; }
          catch(...)
            {
              delete [] _M_pback;
              throw;
            }
        }
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::
    basic_filebuf()
    : __streambuf_type(), _M_file(__null), _M_state_cur(__state_type()),
    _M_state_beg(__state_type()), _M_buf_allocated(false),
    _M_last_overflowed(false)
    { }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::
    basic_filebuf(__c_file_type* __f, ios_base::openmode __mode, int_type __s)
    : __streambuf_type(), _M_file(__null), _M_state_cur(__state_type()),
    _M_state_beg(__state_type()), _M_buf_allocated(false),
    _M_last_overflowed(false)
    {
      _M_allocate_file();
      _M_file->sys_open(__f, __mode);
      if (this->is_open())
        {
          _M_mode = __mode;
          if (__s)
            {
              _M_buf_size_opt = __s;
              _M_allocate_internal_buffer();
              _M_set_indeterminate();
            }
          _M_allocate_pback_buffer();
        }
    }

  template< _CharT, _Traits>
    int
    basic_filebuf<_CharT, _Traits>::
    fd()
    { return _M_file->fd(); }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::__filebuf_type*
    basic_filebuf<_CharT, _Traits>::
    open(const char* __s, ios_base::openmode __mode)
    {
      __filebuf_type *__ret = __null;
      if (!this->is_open())
        {
          _M_allocate_file();
          _M_file->open(__s, __mode);
          if (this->is_open())
            {
              _M_allocate_internal_buffer();
              _M_allocate_pback_buffer();
              _M_mode = __mode;


              _M_set_indeterminate();
              if (__mode & ios_base::ate
                  && this->seekoff(0, ios_base::end, __mode) < 0)
                this->close();
              __ret = this;
            }
        }
      return __ret;
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::__filebuf_type*
    basic_filebuf<_CharT, _Traits>::
    close()
    {
      __filebuf_type *__ret = __null;
      if (this->is_open())
        {
          const int_type __eof = traits_type::eof();
          bool __testput = _M_out_cur && _M_out_beg < _M_out_end;
          if (__testput && _M_really_overflow(__eof) == __eof)
            return __ret;


          _M_mode = ios_base::openmode(0);
          _M_destroy_internal_buffer();

          _M_pback_destroy();
          if (_M_pback)
            {
              delete [] _M_pback;
              _M_pback = __null;
            }
# 209 "/usr/local/include/g++-v3/bits/fstream.tcc" 3
          __ret = this;
        }



      if (_M_file)
        {
          delete _M_file;
          _M_file = __null;
        }
      _M_last_overflowed = false;
      return __ret;
    }

  template< _CharT, _Traits>
    streamsize
    basic_filebuf<_CharT, _Traits>::
    showmanyc()
    {
      streamsize __ret = -1;
      bool __testin = _M_mode & ios_base::in;

      if (__testin && this->is_open())
        {
          if (_M_in_cur < _M_in_end)
            __ret = _M_in_end - _M_in_cur;
          else
            __ret = 0;
        }
      _M_last_overflowed = false;
      return __ret;
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::int_type
    basic_filebuf<_CharT, _Traits>::
    underflow()
    {
      int_type __ret = traits_type::eof();
      bool __testin = _M_mode & ios_base::in;
      bool __testout = _M_mode & ios_base::out;

      if (__testin)
        {



          if (_M_pback_init)
            {
              _M_pback_destroy();
              if (_M_in_cur < _M_in_end)
                return traits_type::to_int_type(*_M_in_cur);
            }



          bool __testget = _M_in_cur && _M_in_beg < _M_in_cur;
          bool __testinit = _M_is_indeterminate();
          if (__testget)
            {
              if (__testout)
                _M_really_overflow();




              else
                _M_file->seekoff(_M_in_cur - _M_in_beg,
                                 ios_base::cur, ios_base::in);
            }

          if (__testinit || __testget)
            {
              const locale __loc = this->getloc();
              const __codecvt_type& __cvt = use_facet<__codecvt_type>(__loc);

              streamsize __elen = 0;
              streamsize __ilen = 0;
              if (__cvt.always_noconv())
                {
                  __elen = _M_file->xsgetn(reinterpret_cast<char*>(_M_in_beg),
                                           _M_buf_size);
                  __ilen = __elen;
                }
              else
                {
                  char* __buf = static_cast<char*>(__builtin_alloca(_M_buf_size));
                  __elen = _M_file->xsgetn(__buf, _M_buf_size);

                  const char* __eend;
                  char_type* __iend;
                  __res_type __r = __cvt.in(_M_state_cur, __buf,
                                            __buf + __elen, __eend, _M_in_beg,
                                            _M_in_beg + _M_buf_size, __iend);
                  if (__r == codecvt_base::ok)
                    __ilen = __iend - _M_in_beg;
                  else
                    {

                      __ilen = 0;
                      _M_file->seekoff(-__elen, ios_base::cur, ios_base::in);
                    }
                }

              if (0 < __ilen)
                {
                  _M_set_determinate(__ilen);
                  if (__testout)
                    _M_out_cur = _M_in_cur;
                  __ret = traits_type::to_int_type(*_M_in_cur);






                      _M_file->seekoff(-__elen, ios_base::cur, ios_base::in);



                }
            }
        }
      _M_last_overflowed = false;
      return __ret;
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::int_type
    basic_filebuf<_CharT, _Traits>::
    pbackfail(int_type __i)
    {
      int_type __ret = traits_type::eof();
      bool __testin = _M_mode & ios_base::in;

      if (__testin)
        {
          bool __testpb = _M_in_beg < _M_in_cur;
          char_type __c = traits_type::to_char_type(__i);
          bool __testeof = traits_type::eq_int_type(__i, __ret);

          if (__testpb)
            {
              bool __testout = _M_mode & ios_base::out;
              bool __testeq = traits_type::eq(__c, this->gptr()[-1]);



              if (!__testeof && __testeq)
                {
                  --_M_in_cur;
                  if (__testout)
                    --_M_out_cur;
                  __ret = __i;
                }
              else if (__testeof)
                {
                  --_M_in_cur;
                  if (__testout)
                    --_M_out_cur;
                  __ret = traits_type::not_eof(__i);
                }
              else if (!__testeof)
                {
                  --_M_in_cur;
                  if (__testout)
                    --_M_out_cur;
                  _M_pback_create();
                  *_M_in_cur = __c;
                  __ret = __i;
                }
            }
          else
            {


              this->seekoff(-1, ios_base::cur);
              this->underflow();
              if (!__testeof)
                {
                  if (!traits_type::eq(__c, *_M_in_cur))
                    {
                      _M_pback_create();
                      *_M_in_cur = __c;
                    }
                  __ret = __i;
                }
              else
                __ret = traits_type::not_eof(__i);
            }
        }
      _M_last_overflowed = false;
      return __ret;
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::int_type
    basic_filebuf<_CharT, _Traits>::
    overflow(int_type __c)
    {
      int_type __ret = traits_type::eof();
      bool __testput = _M_out_cur && _M_out_cur < _M_buf + _M_buf_size;
      bool __testout = _M_mode & ios_base::out;

      if (__testout)
        {
          if (__testput)
            {
              *_M_out_cur = traits_type::to_char_type(__c);
              _M_out_cur_move(1);
              __ret = traits_type::not_eof(__c);
            }
          else
            __ret = this->_M_really_overflow(__c);
        }

      _M_last_overflowed = false;
      return __ret;
    }

  template< _CharT, _Traits>
    void
    basic_filebuf<_CharT, _Traits>::
    _M_convert_to_external(_CharT* __ibuf, streamsize __ilen,
                           streamsize& __elen, streamsize& __plen)
    {
      const locale __loc = this->getloc();
      const __codecvt_type& __cvt = use_facet<__codecvt_type>(__loc);

      if (__cvt.always_noconv() && __ilen)
        {
          __elen += _M_file->xsputn(reinterpret_cast<char*>(__ibuf), __ilen);
          __plen += __ilen;
        }
      else
        {

          int __ext_multiplier = __cvt.encoding();
          if (__ext_multiplier == -1 || __ext_multiplier == 0)
            __ext_multiplier = sizeof(char_type);
          streamsize __blen = __ilen * __ext_multiplier;
          char* __buf = static_cast<char*>(__builtin_alloca(__blen));
          char* __bend;
          const char_type* __iend;
          __res_type __r = __cvt.out(_M_state_cur, __ibuf, __ibuf + __ilen,
                                     __iend, __buf, __buf + __blen, __bend);

          if (__r != codecvt_base::error)
            __blen = __bend - __buf;

          else
            __blen = 0;

          if (__blen)
            {
              __elen += _M_file->xsputn(__buf, __blen);
              __plen += __blen;
            }


          if (__r == codecvt_base::partial)
            {
              const char_type* __iresume = __iend;
              streamsize __rlen = _M_out_end - __iend;
              __r = __cvt.out(_M_state_cur, __iresume, __iresume + __rlen,
                              __iend, __buf, __buf + __blen, __bend);
              if (__r != codecvt_base::error)
                __rlen = __bend - __buf;
              else
                __rlen = 0;
              if (__rlen)
                {
                  __elen += _M_file->xsputn(__buf, __rlen);
                  __plen += __rlen;
                }
            }
        }
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::int_type
    basic_filebuf<_CharT, _Traits>::
    _M_really_overflow(int_type __c)
    {
      int_type __ret = traits_type::eof();
      bool __testput = _M_out_cur && _M_out_beg < _M_out_end;
      bool __testunbuffered = _M_file && !_M_buf_size;

      if (__testput || __testunbuffered)
        {

          streamsize __elen = 0;
          streamsize __plen = 0;



          if (!__testunbuffered)
            _M_convert_to_external(_M_out_beg, _M_out_end - _M_out_beg,
                                   __elen, __plen);


          if (!traits_type::eq_int_type(__c, traits_type::eof()))
            {
              char_type __pending = traits_type::to_char_type(__c);
              _M_convert_to_external(&__pending, 1, __elen, __plen);
            }




          if (__elen == __plen && !_M_file->sync())
            {
              _M_set_indeterminate();
              __ret = traits_type::not_eof(__c);
            }
        }
      _M_last_overflowed = true;
      return __ret;
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::__streambuf_type*
    basic_filebuf<_CharT, _Traits>::
    setbuf(char_type* __s, streamsize __n)
    {
      if (!this->is_open() && __s == 0 && __n == 0)
        _M_buf_size_opt = 0;
      else if (__s && __n)
        {





          _M_destroy_internal_buffer();


          _M_buf = __s;
          _M_buf_size_opt = _M_buf_size = __n;
          _M_set_indeterminate();


          _M_allocate_pback_buffer();
        }
      _M_last_overflowed = false;
      return this;
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::pos_type
    basic_filebuf<_CharT, _Traits>::
    seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode)
    {
      pos_type __ret = pos_type(off_type(-1));
      bool __testopen = this->is_open();
      bool __testin = __mode & ios_base::in && _M_mode & ios_base::in;
      bool __testout = __mode & ios_base::out && _M_mode & ios_base::out;


      int __width = use_facet<__codecvt_type>(_M_buf_locale).encoding();
      if (__width < 0)
        __width = 0;
      bool __testfail = __off != 0 && __width <= 0;

      if (__testopen && !__testfail && (__testin || __testout))
        {

          _M_pback_destroy();

          if (__way != ios_base::cur || __off != 0)
            {
              off_type __computed_off = __width * __off;

              bool __testget = _M_in_cur && _M_in_beg < _M_in_end;
              bool __testput = _M_out_cur && _M_out_beg < _M_out_end;


              if (__testput || _M_last_overflowed)
                {

                  this->sync();

                  _M_output_unshift();
                }


              else if (__testget && __way == ios_base::cur)
                __computed_off += _M_in_cur - _M_in_beg;

              __ret = _M_file->seekoff(__computed_off, __way, __mode);
              _M_set_indeterminate();
            }


          else
            {
              __ret = _M_file->seekoff(__off, ios_base::cur, __mode);
              __ret += max(_M_out_cur, _M_in_cur) - _M_buf;
            }
        }
      _M_last_overflowed = false;
      return __ret;
    }

  template< _CharT, _Traits>
    basic_filebuf<_CharT, _Traits>::pos_type
    basic_filebuf<_CharT, _Traits>::
    seekpos(pos_type __pos, ios_base::openmode __mode)
    {
      pos_type __ret;
      off_type __off = __pos;

      __ret = this->seekoff(__off, ios_base::beg, __mode);

      _M_last_overflowed = false;
      return __ret;
    }

  template< _CharT, _Traits>
    void
    basic_filebuf<_CharT, _Traits>::
    _M_output_unshift()
    { }

  template< _CharT, _Traits>
    void
    basic_filebuf<_CharT, _Traits>::
    imbue(const locale& __loc)
    {
      bool __testbeg = gptr() == eback() && pptr() == pbase();

      if (__testbeg && _M_buf_locale != __loc)
        {
          _M_buf_locale = __loc;
          _M_buf_locale_init = true;
        }





      _M_last_overflowed = false;
    }




  extern template class basic_filebuf<char>;
  extern template class basic_filebuf<wchar_t>;
  extern template class basic_ifstream<char>;
  extern template class basic_ifstream<wchar_t>;
  extern template class basic_ofstream<char>;
  extern template class basic_ofstream<wchar_t>;
  extern template class basic_fstream<char>;
  extern template class basic_fstream<wchar_t>;
}
# 511 "/usr/local/include/g++-v3/fstream" 2 3
# 33 "/usr/local/include/g++-v3/backward/fstream.h" 2 3

using std::filebuf;
using std::ifstream;
using std::ofstream;
using std::fstream;
using std::streampos;
# 19 "param.C" 2



# 1 "param.h" 1
# 17 "param.h"
# 1 "/usr/include/aCC/iostream/fstream.h" 1
# 20 "/usr/include/aCC/iostream/fstream.h"
# 1 "/usr/local/include/g++-v3/backward/iostream.h" 1 3
# 32 "/usr/local/include/g++-v3/backward/iostream.h" 3
# 1 "/usr/local/include/g++-v3/iostream" 1 3
# 43 "/usr/local/include/g++-v3/iostream" 3





namespace std
{
  extern istream cin;
  extern ostream cout;
  extern ostream cerr;
  extern ostream clog;
# 62 "/usr/local/include/g++-v3/iostream" 3
  static ios_base::Init __ioinit;
}
# 33 "/usr/local/include/g++-v3/backward/iostream.h" 2 3

using std::iostream;
using std::ostream;
using std::istream;
using std::ios;
using std::streambuf;

using std::cout;
using std::cin;
using std::cerr;
using std::clog;







using std::ws;
using std::endl;
using std::ends;
using std::flush;
# 21 "/usr/include/aCC/iostream/fstream.h" 2

class filebuf : public streambuf {
public:
        static const int openprot ;
public:
                        filebuf() ;
                        filebuf(int fd);
                        filebuf(int fd, char* p, int l) ;

        int is_open() { return opened ; }
        int fd() { return xfd ; }
        filebuf* open(const char *name, int om, int prot=openprot);
        filebuf* attach(int fd) ;
        int detach() ;
        filebuf* close() ;
                        ~filebuf() ;
public:
        virtual int overflow(int=(-1));
        virtual int underflow();
        virtual int sync() ;
        virtual streampos
                        seekoff(streamoff,ios::seek_dir,int) ;
        virtual streambuf*
                        setbuf(char* p, int len) ;
protected:
        int xfd;
        int mode ;
        char opened;
        streampos last_seek ;
        char* in_start;
        int last_op();
        char lahead[2] ;
};

class fstreambase : virtual public ios {
public:
                        fstreambase() ;

                        fstreambase(const char* name,
                                        int mode,
                                        int prot=filebuf::openprot) ;
                        fstreambase(int fd) ;
                        fstreambase(int fd, char* p, int l) ;
                        ~fstreambase() ;
        void open(const char* name, int mode,
                                        int prot=filebuf::openprot) ;
        void attach(int fd);
        int detach();
        void close() ;
        void setbuf(char* p, int l) ;
        filebuf* rdbuf() { return &buf ; }
private:
        filebuf buf ;
protected:
        void verify(int) ;
} ;

class ifstream : public fstreambase, public istream {
public:
                        ifstream() ;
                        ifstream(const char* name,
                                        int mode=ios::in,
                                        int prot=filebuf::openprot) ;
                        ifstream(int fd) ;
                        ifstream(int fd, char* p, int l) ;
                        ~ifstream() ;

        filebuf* rdbuf() { return fstreambase::rdbuf(); }
        void open(const char* name, int mode=ios::in,
                                        int prot=filebuf::openprot) ;
} ;

class ofstream : public fstreambase, public ostream {
public:
                        ofstream() ;
                        ofstream(const char* name,
                                        int mode=ios::out,
                                        int prot=filebuf::openprot) ;
                        ofstream(int fd) ;
                        ofstream(int fd, char* p, int l) ;
                        ~ofstream() ;

        filebuf* rdbuf() { return fstreambase::rdbuf(); }
        void open(const char* name, int mode=ios::out,
                                        int prot=filebuf::openprot) ;
} ;

class fstream : public fstreambase, public iostream {
public:
                        fstream() ;

                        fstream(const char* name,
                                        int mode,
                                        int prot=filebuf::openprot) ;
                        fstream(int fd) ;
                        fstream(int fd, char* p, int l) ;
                        ~fstream() ;
        filebuf* rdbuf() { return fstreambase::rdbuf(); }
        void open(const char* name, int mode,
                                int prot=filebuf::openprot) ;
} ;
# 18 "param.h" 2


# 1 "common.h" 1



enum bool { false, true };
# 21 "param.h" 2




class Parameter {
public:

        enum paramtype { USER, PROGRAMMATIC, DERIVED };
        enum requirement { REQUIRED , OPTIONAL };
        enum securetype { UNSECURE=0x01, SECURE1=0x02, SECURE2=0x04, SECURE3=0x08, SECURE4=(UNSECURE|SECURE1), ALL=0x10 };


        Parameter ( const char* Name,
                        const char* Tag,
                        paramtype Type,
                        requirement IsRequired,
                        securetype Security,
                        int MinLength,
                        int MaxLength);

        Parameter ( const char* Name,
                        const char* Tag,
                        paramtype Type,
                        requirement IsRequired,
                        securetype Security,
                        int MinLength,
                        int MaxLength,
                        const char* DefaultValue);

        ~Parameter ();

        int operator == (const Parameter& p);

        RWCString Name (void) const;
        RWCString Tag (void) const;
        paramtype Type (void) const;
        RWCString Value (void) const;
        void Value (const RWCString& value);
        void Value (const char* pvalue);
        RWCString Errors (void) const;
        requirement IsRequired (void) const;
        int MinLength (void) const;
        int MaxLength (void) const;
        virtual RWCString TagValue (securetype securemode) const;
        securetype Security (void) const;
        bool AddAlternateTag (const char* AltTag);
        bool TagMatches (const RWCString& Tag);
        bool TagMatches (const char* Tag);


        virtual bool IsComplete (bool dir_flag=false);
        virtual bool Update (const RWCString& value, bool ForceUpdate=false);
        bool Update (const char* pvalue, bool ForceUpdate=false);

        friend ostream& operator << (ostream& out, Parameter& p);

        bool IsValid (const RWCString& Value);
        bool IsValid (const char* pValue);

        virtual ostream& Choices (ostream& out);
protected:
        virtual RWCString ValidLength (void);
        virtual RWCString ValidChars (void);

        virtual bool ValidLength (const RWCString& Value);
        virtual bool ValidChars (const RWCString& Value);

        RWCString BadCharError (char BadChar, int CharPosition);

        void Errors (const RWCString& errortext);

        virtual RWCString PostProcess (const RWCString& value);
        virtual bool IsEnabled (void) const;
private:

        RWCString Name_;
        RWCString Tag_;
        paramtype Type_;
        requirement IsRequired_;
        securetype Security_;
        RWCString Value_;
        int MinLength_;
        int MaxLength_;
        RWCString ErrorText;
        RWCString* MyAltTags[5];
        int NumAltTags_;

        void ClearErrors (void);
};
# 23 "param.C" 2


Parameter::Parameter ( const char* Name,
                        const char* Tag,
                        paramtype Type,
                        requirement IsRequired,
                        securetype Security,
                        int MinLength,
                        int MaxLength) :

                Name_(Name),
                Tag_(Tag),
                Type_(Type),
                Value_(""),
                IsRequired_ (IsRequired),
                Security_ (Security),
                MinLength_ (MinLength),
                MaxLength_ (MaxLength),
                ErrorText (""),
                NumAltTags_ (0)
{

}


Parameter::Parameter ( const char* Name,
                        const char* Tag,
                        paramtype Type,
                        requirement IsRequired,
                        securetype Security,
                        int MinLength,
                        int MaxLength,
                        const char* DefaultValue) :

                Name_(Name),
                Tag_(Tag),
                Type_(Type),
                IsRequired_ (IsRequired),
                Security_ (Security),
                MinLength_ (MinLength),
                MaxLength_ (MaxLength),
                Value_ (DefaultValue),
                ErrorText (""),
                NumAltTags_ (0)
{

}


Parameter::~Parameter ()
{
        int i;

        for (i = 0; i < NumAltTags_; i++) {

                delete MyAltTags[i];
        }
}



bool Parameter::IsComplete (bool dir_flag)
{
        ClearErrors ();

        if (IsRequired_ == Parameter::OPTIONAL)
                return (true);

        if ((IsRequired_ == Parameter::REQUIRED) &&
            (!Value_.isNull())) {
                return (true);
        }

        Errors (Errors() + "Error:\nParameter \"");
        Errors (Errors() + Name());
        Errors (Errors() + "\" <tag=");
        Errors (Errors() + Tag());
        Errors (Errors() + ">\nrequires a value.\n");

        return (false);
}


RWCString Parameter::Name (void) const {
        return Name_;
}


RWCString Parameter::Tag (void) const {
        return Tag_;
}


RWCString Parameter::Value (void) const {
        return Value_;
}


void Parameter::Value (const RWCString& value) {
        Value_ = value;
}


void Parameter::Value (const char* pvalue) {
        Value_ = pvalue;
}


Parameter::paramtype Parameter::Type (void) const {
        return Type_;
}


Parameter::requirement Parameter::IsRequired (void) const {
        return IsRequired_;
}


Parameter::securetype Parameter::Security (void) const {
        return Security_;
}


int Parameter::MinLength (void) const {
        return MinLength_;
}


int Parameter::MaxLength (void) const {
        return MaxLength_;
}


int Parameter::operator == (const Parameter& p)
{
        return ((p.Name() == this->Name()) &&
                (p.Tag() == this->Tag()));
}


RWCString Parameter::TagValue (securetype securemode) const {

        RWCString Pair;

        Pair = "";

        if (IsEnabled() &&
           ((securemode == ALL) || (Security_ & securemode))) {
                Pair = Tag();
                Pair += "=";
                Pair += Value();
                Pair += "\n";
        }
        return Pair;
}


void Parameter::ClearErrors(void)
{
        ErrorText = "";
}


RWCString Parameter::Errors(void) const
{
        return ErrorText;
}


void Parameter::Errors(const RWCString& errortext)
{
        ErrorText = errortext;
}


ostream& operator << (ostream& out, Parameter& p) {

        return out
        << "	name = "<< p.Name_ << endl
        << "	tag = "<< p.Tag_ << endl
        << "	parameter type = "<< p.Type_ << endl
        << "	requirement = "<< p.IsRequired_ << endl
        << "	min length = "<< p.MinLength_ << endl
        << "	max length = "<< p.MaxLength_ << endl
        << "	current value = "<< p.Value_ << endl;
}


bool Parameter::Update (const RWCString& value, bool ForceUpdate) {

        RWCString FinalValue;




        if (IsValid (value)) {


                if (ForceUpdate == true) {
                        FinalValue = PostProcess (value);
                        Value (FinalValue);
                }
                return true;
        }
        return false;
}


bool Parameter::Update (const char* pvalue, bool ForceUpdate) {

        RWCString value;

        value = pvalue;

        return (Update(value,ForceUpdate));
}


bool Parameter::IsValid (const RWCString& Value) {

        ClearErrors ();

        if (!ValidLength(Value) || !ValidChars(Value)) {

                return false;
        }
        return true;
}


bool Parameter::IsValid (const char* pValue) {

        RWCString Value;

        Value = pValue;

        return (IsValid(Value));
}


bool Parameter::ValidLength (const RWCString& Value) {

        size_t len;
        char errorstring [64];



        len = Value.length();




        if ((len == 0) &&
            ((IsRequired() == Parameter::OPTIONAL) ||
             (Type() == Parameter::PROGRAMMATIC) ||
             (Type() == Parameter::DERIVED))){
                return true;
        }





        if ((len < MinLength()) || (len > MaxLength())) {




                ErrorText += "Error: Value:\n\"";
                ErrorText += Value;
                ErrorText += "\" for\n";
                ErrorText += "\"";
                ErrorText += Name();
                ErrorText += "\"";
                ErrorText += " <tag=";
                ErrorText += Tag();
                ErrorText += ">\nhas ";
                sprintf (errorstring,"%d characters.\n",len);
                ErrorText += errorstring;


                ErrorText += ValidLength();

                return false;
        }

        return true;
}


RWCString Parameter::ValidLength (void) {




        int Minimum;
        int Maximum;
        RWCString ValidString;
        char LengthString [256];

        Minimum = MinLength ();
        Maximum = MaxLength ();

        ValidString = "Valid values for\n";
        ValidString += "\"";
        ValidString += Name();
        ValidString += "\"";
        ValidString += " <tag=";
        ValidString += Tag();
        ValidString += ">\nmust have ";

        if (Minimum == Maximum) {
                sprintf (LengthString,"%d character",Minimum);
                if (Minimum > 1) {
                        strcat (LengthString,"s");
                }
                strcat (LengthString,".\n");
        }
        else {
                sprintf (LengthString,"between %d and %d characters.\n",
                Minimum,Maximum);
        }

        ValidString += LengthString;

        return ValidString;
}


bool Parameter::ValidChars (const RWCString& Value)
{
        int i;
        int CharErrors;
        RWCString EText;


        for (i = 0, CharErrors = 0; i < Value.length(); i++) {

                if (iscntrl(Value[i])) {

                        EText += BadCharError (Value[i],i+1);
                        CharErrors++;
                }
        }

        if (CharErrors) {

                ErrorText += "Error: Syntax errors in:\n\"";
                ErrorText += Name();
                ErrorText += "\" <tag=";
                ErrorText += Tag();
                ErrorText += ">\n";
                ErrorText += " value: \n";
                ErrorText += "\"";
                ErrorText += Value;
                ErrorText += "\"\n";
                ErrorText += EText;
                ErrorText += ValidChars();

                return false;
        }

        return true;
}


RWCString Parameter::ValidChars () {




        RWCString ValidString;

        ValidString = "Characters accepted for:\n\"";
        ValidString += Name();
        ValidString += "\" <tag=";
        ValidString += Tag();
        ValidString += "> are:\n";
        ValidString += "alphanumeric, space, and punctuation\n";
        ValidString += "chars.  No CTRL characters are accepted.\n";

        return ValidString;
}


RWCString Parameter::BadCharError (char BadChar, int CharPosition) {





        RWCString BadCharString;
        char position [32];
        char CharText [32];

        BadChar &= 255;
        if (BadChar == 0) {
        }
        else if (BadChar < 040) {
                sprintf (CharText,"^%c",BadChar + 'A' - 1);
        }
        else if (BadChar == 0177) {
                sprintf (CharText,"DEL");
        }
        else if (BadChar > 0177) {
                sprintf (CharText,"\\%03o",BadChar);
        }
        else {

                if(BadChar== 0134)
                   sprintf(CharText,"%s","\\\\");
                else
                sprintf (CharText,"%c",BadChar);
        }

        sprintf (position,"%d",CharPosition);
        BadCharString = "Bad character (";
        BadCharString += CharText;
        BadCharString += ") at character position ";
        BadCharString += position;
        BadCharString += ".\n";

        return BadCharString;
}




RWCString Parameter::PostProcess (const RWCString& value) {

        return value;
}





ostream& Parameter::Choices (ostream& out)
{
        return out;
}




bool Parameter::IsEnabled (void) const
{
        return true;
}


bool Parameter::TagMatches (const RWCString& Tag)
{
        int i;

        if (Tag_ == Tag) return true;

        for (i = 0; i < NumAltTags_; i++) {

                if (*(MyAltTags[i]) == Tag) return true;
        }

        return false;
}


bool Parameter::TagMatches (const char* Tag)
{
        RWCString RTag;

        RTag = Tag;

        return (TagMatches(RTag));
}


bool Parameter::AddAlternateTag (const char* Tag)
{
        if (NumAltTags_ < 5) {
                MyAltTags [NumAltTags_] = new RWCString (Tag);
                NumAltTags_++;
                return true;
        }
        return false;
}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-05-21  7:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-21  7:26 c++/10898: Unable to compile c++ program containing Rogue Wave usage using gcc 3.2 hajira_a1

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).