]> git.saurik.com Git - apple/security.git/blobdiff - SecurityASN1/c++/sm_x501if.cpp
Security-163.tar.gz
[apple/security.git] / SecurityASN1 / c++ / sm_x501if.cpp
diff --git a/SecurityASN1/c++/sm_x501if.cpp b/SecurityASN1/c++/sm_x501if.cpp
deleted file mode 100644 (file)
index f02e84e..0000000
+++ /dev/null
@@ -1,3470 +0,0 @@
-//   NOTE: this is a machine generated file--editing not recommended
-//
-// sm_x501if.cpp - class member functions for ASN.1 module InformationFramework
-//
-//   This file was generated by snacc on Mon Apr 22 22:34:19 2002
-//   UBC snacc written by Mike Sample
-//   A couple of enhancements made by IBM European Networking Center
-
-
-#include "asn-incl.h"
-#include "sm_vdatypes.h"
-#include "sm_x501ud.h"
-#include "sm_x411ub.h"
-#include "sm_x411mtsas.h"
-#include "sm_x501if.h"
-#include "sm_x520sa.h"
-#include "sm_x509cmn.h"
-#include "sm_x509af.h"
-#include "sm_x509ce.h"
-#include "pkcs1oids.h"
-#include "pkcs9oids.h"
-#include "sm_cms.h"
-#include "sm_ess.h"
-#include "pkcs7.h"
-#include "pkcs8.h"
-#include "appleoids.h"
-#include "pkcs10.h"
-
-//------------------------------------------------------------------------------
-// value defs
-
-
-//------------------------------------------------------------------------------
-// class member definitions:
-
-AsnType *AttributeTypeAndDistinguishedValueSetOfSeqSetOf::Clone() const
-{
-  return new AttributeTypeAndDistinguishedValueSetOfSeqSetOf;
-}
-
-AsnType *AttributeTypeAndDistinguishedValueSetOfSeqSetOf::Copy() const
-{
-  return new AttributeTypeAndDistinguishedValueSetOfSeqSetOf (*this);
-}
-
-AsnLen AttributeTypeAndDistinguishedValueSetOfSeqSetOf::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-  return l;
-}
-
-void AttributeTypeAndDistinguishedValueSetOfSeqSetOf::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE))
-  {
-    Asn1Error << "AttributeTypeAndDistinguishedValueSetOfSeqSetOf::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-100);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf::AttributeTypeAndDistinguishedValueSetOfSeqSetOf (const AttributeTypeAndDistinguishedValueSetOfSeqSetOf &)
-{
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValueSetOfSeqSetOf::AttributeTypeAndDistinguishedValueSetOfSeqSetOf (const AttributeTypeAndDistinguishedValueSetOfSeqSetOf &)" << endl;
-  abort();
-}
-
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf::~AttributeTypeAndDistinguishedValueSetOfSeqSetOf()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf &AttributeTypeAndDistinguishedValueSetOfSeqSetOf::operator = (const AttributeTypeAndDistinguishedValueSetOfSeqSetOf &that)
-#else // SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf &AttributeTypeAndDistinguishedValueSetOfSeqSetOf::operator = (const AttributeTypeAndDistinguishedValueSetOfSeqSetOf &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValueSetOfSeqSetOf &AttributeTypeAndDistinguishedValueSetOfSeqSetOf::operator = (const AttributeTypeAndDistinguishedValueSetOfSeqSetOf &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void AttributeTypeAndDistinguishedValueSetOfSeqSetOf::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  AttributeTypeAndDistinguishedValueSetOfSeqSetOf::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::SetCurrElmt
-
-
-unsigned long int  AttributeTypeAndDistinguishedValueSetOfSeqSetOf::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-AsnAny *AttributeTypeAndDistinguishedValueSetOfSeqSetOf::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new AsnAny;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-AsnAny  *AttributeTypeAndDistinguishedValueSetOfSeqSetOf::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AsnAny;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AsnAny  *AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AsnAny;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AsnAny *AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AsnAny;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertAfter
-
-
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf  &AttributeTypeAndDistinguishedValueSetOfSeqSetOf::AppendCopy (AsnAny &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AsnAny;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf  &AttributeTypeAndDistinguishedValueSetOfSeqSetOf::PrependCopy (AsnAny &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AsnAny;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf &AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertBeforeAndCopy (AsnAny &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AsnAny;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AttributeTypeAndDistinguishedValueSetOfSeqSetOf  &AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertAfterAndCopy (AsnAny &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AsnAny;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void AttributeTypeAndDistinguishedValueSetOfSeqSetOf::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen AttributeTypeAndDistinguishedValueSetOfSeqSetOf::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    {
-      int iii,icount;
-      CSM_Buffer **tmpEnc=NULL;
-      for (currElmt = last,icount=0; currElmt != NULL; currElmt = currElmt->prev, icount++);
-      tmpEnc = (CSM_Buffer **) calloc(sizeof(CSM_Buffer *), icount);
-      for (currElmt = last, iii=0; currElmt != NULL; currElmt = currElmt->prev,iii++,elmtLen=0)
-      {
-        tmpEnc[iii] = (CSM_Buffer *)currElmt->elmt->value;
-      }
-      vdasnacc_sortSetOf(tmpEnc, icount);
-      for (iii=0,elmtLen=0; iii < icount; elmtLen+=tmpEnc[iii++]->Length())
-            SM_WriteToAsnBuf(tmpEnc[iii], b);
-       free(tmpEnc);
-    }
-        totalLen += elmtLen;
-    return totalLen;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::BEncContent
-
-
-void  AttributeTypeAndDistinguishedValueSetOfSeqSetOf::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    AsnAny *listElmt;
-    AsnLen listBytesDecoded = 0;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        listElmt = Append();
-        DEC_LOAD_ANYBUF(listElmt, b, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // AttributeTypeAndDistinguishedValueSetOfSeqSetOf::BDecContent
-
-
-AttributeTypeAndDistinguishedValueSetOfSeq::AttributeTypeAndDistinguishedValueSetOfSeq()
-{
-  distingAttrValue = NULL;
-}
-
-AttributeTypeAndDistinguishedValueSetOfSeq::AttributeTypeAndDistinguishedValueSetOfSeq (const AttributeTypeAndDistinguishedValueSetOfSeq &)
-{
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValueSetOfSeq::AttributeTypeAndDistinguishedValueSetOfSeq (const AttributeTypeAndDistinguishedValueSetOfSeq &)" << endl;
-  abort();
-}
-
-AttributeTypeAndDistinguishedValueSetOfSeq::~AttributeTypeAndDistinguishedValueSetOfSeq()
-{
-  delete distingAttrValue;
-}
-
-AsnType *AttributeTypeAndDistinguishedValueSetOfSeq::Clone() const
-{
-  return new AttributeTypeAndDistinguishedValueSetOfSeq;
-}
-
-AsnType *AttributeTypeAndDistinguishedValueSetOfSeq::Copy() const
-{
-  return new AttributeTypeAndDistinguishedValueSetOfSeq (*this);
-}
-
-#if SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValueSetOfSeq &AttributeTypeAndDistinguishedValueSetOfSeq::operator = (const AttributeTypeAndDistinguishedValueSetOfSeq &that)
-#else // SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValueSetOfSeq &AttributeTypeAndDistinguishedValueSetOfSeq::operator = (const AttributeTypeAndDistinguishedValueSetOfSeq &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.distingAttrValue)
-    {
-      if (!distingAttrValue)
-        distingAttrValue = new AsnOid;
-      *distingAttrValue = *that.distingAttrValue;
-    }
-    else
-    {
-      delete distingAttrValue;
-      distingAttrValue = NULL;
-    }
-    contextList = that.contextList;
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValueSetOfSeq &AttributeTypeAndDistinguishedValueSetOfSeq::operator = (const AttributeTypeAndDistinguishedValueSetOfSeq &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-AttributeTypeAndDistinguishedValueSetOfSeq::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-      BEncEocIfNec (b);
-    l = contextList.BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-    totalLen += l;
-
-  if (NOT_NULL (distingAttrValue))
-  {
-    l = distingAttrValue->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // AttributeTypeAndDistinguishedValueSetOfSeq::BEncContent
-
-
-void AttributeTypeAndDistinguishedValueSetOfSeq::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    distingAttrValue = new AsnOid;
-    distingAttrValue->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-  }
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    contextList.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-101);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-102);
-  }
-  else
-    return;
-} // AttributeTypeAndDistinguishedValueSetOfSeq::BDecContent
-
-AsnLen AttributeTypeAndDistinguishedValueSetOfSeq::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void AttributeTypeAndDistinguishedValueSetOfSeq::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "AttributeTypeAndDistinguishedValueSetOfSeq::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-103);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void AttributeTypeAndDistinguishedValueSetOfSeq::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (distingAttrValue))
-  {
-    Indent (os, indentG);
-    os << "distingAttrValue ";
-    os << *distingAttrValue;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "distingAttrValue ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  {
-    Indent (os, indentG);
-    os << "contextList ";
-    os << contextList;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // AttributeTypeAndDistinguishedValueSetOfSeq::Print
-
-
-AsnType *AttributeTypeAndDistinguishedValueSetOf::Clone() const
-{
-  return new AttributeTypeAndDistinguishedValueSetOf;
-}
-
-AsnType *AttributeTypeAndDistinguishedValueSetOf::Copy() const
-{
-  return new AttributeTypeAndDistinguishedValueSetOf (*this);
-}
-
-AsnLen AttributeTypeAndDistinguishedValueSetOf::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-  return l;
-}
-
-void AttributeTypeAndDistinguishedValueSetOf::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE))
-  {
-    Asn1Error << "AttributeTypeAndDistinguishedValueSetOf::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-104);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-AttributeTypeAndDistinguishedValueSetOf::AttributeTypeAndDistinguishedValueSetOf (const AttributeTypeAndDistinguishedValueSetOf &)
-{
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValueSetOf::AttributeTypeAndDistinguishedValueSetOf (const AttributeTypeAndDistinguishedValueSetOf &)" << endl;
-  abort();
-}
-
-AttributeTypeAndDistinguishedValueSetOf::~AttributeTypeAndDistinguishedValueSetOf()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValueSetOf &AttributeTypeAndDistinguishedValueSetOf::operator = (const AttributeTypeAndDistinguishedValueSetOf &that)
-#else // SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValueSetOf &AttributeTypeAndDistinguishedValueSetOf::operator = (const AttributeTypeAndDistinguishedValueSetOf &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValueSetOf &AttributeTypeAndDistinguishedValueSetOf::operator = (const AttributeTypeAndDistinguishedValueSetOf &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void AttributeTypeAndDistinguishedValueSetOf::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  AttributeTypeAndDistinguishedValueSetOf::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // AttributeTypeAndDistinguishedValueSetOf::SetCurrElmt
-
-
-unsigned long int  AttributeTypeAndDistinguishedValueSetOf::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // AttributeTypeAndDistinguishedValueSetOf::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-AttributeTypeAndDistinguishedValueSetOfSeq *AttributeTypeAndDistinguishedValueSetOf::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOf::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-AttributeTypeAndDistinguishedValueSetOfSeq  *AttributeTypeAndDistinguishedValueSetOf::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOf::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AttributeTypeAndDistinguishedValueSetOfSeq  *AttributeTypeAndDistinguishedValueSetOf::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOf::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AttributeTypeAndDistinguishedValueSetOfSeq *AttributeTypeAndDistinguishedValueSetOf::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeTypeAndDistinguishedValueSetOf::InsertAfter
-
-
-AttributeTypeAndDistinguishedValueSetOf  &AttributeTypeAndDistinguishedValueSetOf::AppendCopy (AttributeTypeAndDistinguishedValueSetOfSeq &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-AttributeTypeAndDistinguishedValueSetOf  &AttributeTypeAndDistinguishedValueSetOf::PrependCopy (AttributeTypeAndDistinguishedValueSetOfSeq &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeTypeAndDistinguishedValueSetOf::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AttributeTypeAndDistinguishedValueSetOf &AttributeTypeAndDistinguishedValueSetOf::InsertBeforeAndCopy (AttributeTypeAndDistinguishedValueSetOfSeq &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeTypeAndDistinguishedValueSetOf::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AttributeTypeAndDistinguishedValueSetOf  &AttributeTypeAndDistinguishedValueSetOf::InsertAfterAndCopy (AttributeTypeAndDistinguishedValueSetOfSeq &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValueSetOfSeq;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeTypeAndDistinguishedValueSetOf::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void AttributeTypeAndDistinguishedValueSetOf::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen AttributeTypeAndDistinguishedValueSetOf::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    {
-      int iii,icount;
-      CSM_Buffer **tmpEnc=NULL;
-      for (currElmt = last,icount=0; currElmt != NULL; currElmt = currElmt->prev, icount++);
-      tmpEnc = (CSM_Buffer **) calloc(sizeof(CSM_Buffer *), icount);
-      for (currElmt = last, iii=0; currElmt != NULL; currElmt = currElmt->prev,iii++,elmtLen=0)
-      {
-      BEncEocIfNec (b);
-        ENCODE_BUF1(currElmt->elmt->BEncContent, elmtLen);
-    elmtLen += BEncConsLen (outputBuf, elmtLen);
-
-    elmtLen += BEncTag1 (outputBuf, UNIV, CONS, SEQ_TAG_CODE);
-        ENCODE_BUF2(tmpEnc[iii]);
-      }
-      vdasnacc_sortSetOf(tmpEnc, icount);
-      for (iii=0,elmtLen=0; iii < icount; elmtLen+=tmpEnc[iii++]->Length())
-            SM_WriteToAsnBuf(tmpEnc[iii], b);
-      for (iii=0; iii < icount; iii++) delete tmpEnc[iii];
-       free(tmpEnc);
-    }
-        totalLen += elmtLen;
-    return totalLen;
-} // AttributeTypeAndDistinguishedValueSetOf::BEncContent
-
-
-void  AttributeTypeAndDistinguishedValueSetOf::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    AttributeTypeAndDistinguishedValueSetOfSeq *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-105);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // AttributeTypeAndDistinguishedValueSetOf::BDecContent
-
-
-AsnType *AttributeSetOf::Clone() const
-{
-  return new AttributeSetOf;
-}
-
-AsnType *AttributeSetOf::Copy() const
-{
-  return new AttributeSetOf (*this);
-}
-
-AsnLen AttributeSetOf::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-  return l;
-}
-
-void AttributeSetOf::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE))
-  {
-    Asn1Error << "AttributeSetOf::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-106);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-AttributeSetOf::AttributeSetOf (const AttributeSetOf &)
-{
-  Asn1Error << "use of incompletely defined AttributeSetOf::AttributeSetOf (const AttributeSetOf &)" << endl;
-  abort();
-}
-
-AttributeSetOf::~AttributeSetOf()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-AttributeSetOf &AttributeSetOf::operator = (const AttributeSetOf &that)
-#else // SNACC_DEEP_COPY
-AttributeSetOf &AttributeSetOf::operator = (const AttributeSetOf &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined AttributeSetOf &AttributeSetOf::operator = (const AttributeSetOf &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void AttributeSetOf::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  AttributeSetOf::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // AttributeSetOf::SetCurrElmt
-
-
-unsigned long int  AttributeSetOf::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // AttributeSetOf::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-AttributeValue *AttributeSetOf::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new AttributeValue;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeSetOf::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-AttributeValue  *AttributeSetOf::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeValue;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeSetOf::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AttributeValue  *AttributeSetOf::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeValue;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeSetOf::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AttributeValue *AttributeSetOf::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeValue;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributeSetOf::InsertAfter
-
-
-AttributeSetOf  &AttributeSetOf::AppendCopy (AttributeValue &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeValue;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-AttributeSetOf  &AttributeSetOf::PrependCopy (AttributeValue &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeValue;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeSetOf::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AttributeSetOf &AttributeSetOf::InsertBeforeAndCopy (AttributeValue &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeValue;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeSetOf::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AttributeSetOf  &AttributeSetOf::InsertAfterAndCopy (AttributeValue &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeValue;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributeSetOf::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void AttributeSetOf::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen AttributeSetOf::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    {
-      int iii,icount;
-      CSM_Buffer **tmpEnc=NULL;
-      for (currElmt = last,icount=0; currElmt != NULL; currElmt = currElmt->prev, icount++);
-      tmpEnc = (CSM_Buffer **) calloc(sizeof(CSM_Buffer *), icount);
-      for (currElmt = last, iii=0; currElmt != NULL; currElmt = currElmt->prev,iii++,elmtLen=0)
-      {
-        tmpEnc[iii] = (CSM_Buffer *)currElmt->elmt->value;
-      }
-      vdasnacc_sortSetOf(tmpEnc, icount);
-      for (iii=0,elmtLen=0; iii < icount; elmtLen+=tmpEnc[iii++]->Length())
-            SM_WriteToAsnBuf(tmpEnc[iii], b);
-       free(tmpEnc);
-    }
-        totalLen += elmtLen;
-    return totalLen;
-} // AttributeSetOf::BEncContent
-
-
-void  AttributeSetOf::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    AttributeValue *listElmt;
-    AsnLen listBytesDecoded = 0;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        listElmt = Append();
-        DEC_LOAD_ANYBUF(listElmt, b, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // AttributeSetOf::BDecContent
-
-
-Attribute::Attribute()
-{
-}
-
-Attribute::Attribute (const Attribute &)
-{
-  Asn1Error << "use of incompletely defined Attribute::Attribute (const Attribute &)" << endl;
-  abort();
-}
-
-Attribute::~Attribute()
-{
-}
-
-AsnType *Attribute::Clone() const
-{
-  return new Attribute;
-}
-
-AsnType *Attribute::Copy() const
-{
-  return new Attribute (*this);
-}
-
-#if SNACC_DEEP_COPY
-Attribute &Attribute::operator = (const Attribute &that)
-#else // SNACC_DEEP_COPY
-Attribute &Attribute::operator = (const Attribute &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    type = that.type;
-    values = that.values;
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined Attribute &Attribute::operator = (const Attribute &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-Attribute::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-      BEncEocIfNec (b);
-    l = values.BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-    totalLen += l;
-
-    l = type.BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-    totalLen += l;
-
-  return totalLen;
-} // Attribute::BEncContent
-
-
-void Attribute::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    type.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-107);
-  }
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    values.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-108);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-109);
-  }
-  else
-    return;
-} // Attribute::BDecContent
-
-AsnLen Attribute::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void Attribute::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "Attribute::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-110);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void Attribute::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  {
-    Indent (os, indentG);
-    os << "type ";
-    os << type;
-    os << "," << endl;
-  }
-
-  {
-    Indent (os, indentG);
-    os << "values ";
-    os << values;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // Attribute::Print
-
-
-AttributeTypeAndDistinguishedValue::AttributeTypeAndDistinguishedValue()
-{
-  primaryDistinguished = NULL;
-  valuesWithContext = NULL;
-}
-
-AttributeTypeAndDistinguishedValue::AttributeTypeAndDistinguishedValue (const AttributeTypeAndDistinguishedValue &)
-{
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValue::AttributeTypeAndDistinguishedValue (const AttributeTypeAndDistinguishedValue &)" << endl;
-  abort();
-}
-
-AttributeTypeAndDistinguishedValue::~AttributeTypeAndDistinguishedValue()
-{
-  delete primaryDistinguished;
-  delete valuesWithContext;
-}
-
-AsnType *AttributeTypeAndDistinguishedValue::Clone() const
-{
-  return new AttributeTypeAndDistinguishedValue;
-}
-
-AsnType *AttributeTypeAndDistinguishedValue::Copy() const
-{
-  return new AttributeTypeAndDistinguishedValue (*this);
-}
-
-#if SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValue &AttributeTypeAndDistinguishedValue::operator = (const AttributeTypeAndDistinguishedValue &that)
-#else // SNACC_DEEP_COPY
-AttributeTypeAndDistinguishedValue &AttributeTypeAndDistinguishedValue::operator = (const AttributeTypeAndDistinguishedValue &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    type = that.type;
-    value = that.value;
-    if (that.primaryDistinguished)
-    {
-      if (!primaryDistinguished)
-        primaryDistinguished = new AsnBool;
-      *primaryDistinguished = *that.primaryDistinguished;
-    }
-    else
-    {
-      delete primaryDistinguished;
-      primaryDistinguished = NULL;
-    }
-    if (that.valuesWithContext)
-    {
-      if (!valuesWithContext)
-        valuesWithContext = new AttributeTypeAndDistinguishedValueSetOf;
-      *valuesWithContext = *that.valuesWithContext;
-    }
-    else
-    {
-      delete valuesWithContext;
-      valuesWithContext = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined AttributeTypeAndDistinguishedValue &AttributeTypeAndDistinguishedValue::operator = (const AttributeTypeAndDistinguishedValue &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-AttributeTypeAndDistinguishedValue::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (valuesWithContext))
-  {
-      BEncEocIfNec (b);
-    l = valuesWithContext->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (primaryDistinguished))
-  {
-    l = primaryDistinguished->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, UNIV, PRIM, BOOLEAN_TAG_CODE);
-    totalLen += l;
-  }
-
-        ENC_LOAD_ANYBUF(&value, b, l);
-    totalLen += l;
-
-    l = type.BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-    totalLen += l;
-
-  return totalLen;
-} // AttributeTypeAndDistinguishedValue::BEncContent
-
-
-void AttributeTypeAndDistinguishedValue::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    type.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-111);
-  }
-
-  // ANY type
-        DEC_LOAD_ANYBUF(&value, b, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, BOOLEAN_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    primaryDistinguished = new AsnBool;
-    primaryDistinguished->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    valuesWithContext = new AttributeTypeAndDistinguishedValueSetOf;
-    valuesWithContext->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-112);
-  }
-  else
-    return;
-} // AttributeTypeAndDistinguishedValue::BDecContent
-
-AsnLen AttributeTypeAndDistinguishedValue::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void AttributeTypeAndDistinguishedValue::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "AttributeTypeAndDistinguishedValue::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-113);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void AttributeTypeAndDistinguishedValue::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  {
-    Indent (os, indentG);
-    os << "type ";
-    os << type;
-    os << "," << endl;
-  }
-
-  {
-    Indent (os, indentG);
-    os << "value ";
-    os << value;
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (primaryDistinguished))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "primaryDistinguished ";
-    os << *primaryDistinguished;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "primaryDistinguished ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (valuesWithContext))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "valuesWithContext ";
-    os << *valuesWithContext;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "valuesWithContext ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // AttributeTypeAndDistinguishedValue::Print
-
-
-AsnType *RelativeDistinguishedName::Clone() const
-{
-  return new RelativeDistinguishedName;
-}
-
-AsnType *RelativeDistinguishedName::Copy() const
-{
-  return new RelativeDistinguishedName (*this);
-}
-
-AsnLen RelativeDistinguishedName::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-  return l;
-}
-
-void RelativeDistinguishedName::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE))
-  {
-    Asn1Error << "RelativeDistinguishedName::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-114);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-RelativeDistinguishedName::RelativeDistinguishedName (const RelativeDistinguishedName &)
-{
-  Asn1Error << "use of incompletely defined RelativeDistinguishedName::RelativeDistinguishedName (const RelativeDistinguishedName &)" << endl;
-  abort();
-}
-
-RelativeDistinguishedName::~RelativeDistinguishedName()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-RelativeDistinguishedName &RelativeDistinguishedName::operator = (const RelativeDistinguishedName &that)
-#else // SNACC_DEEP_COPY
-RelativeDistinguishedName &RelativeDistinguishedName::operator = (const RelativeDistinguishedName &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined RelativeDistinguishedName &RelativeDistinguishedName::operator = (const RelativeDistinguishedName &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void RelativeDistinguishedName::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  RelativeDistinguishedName::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // RelativeDistinguishedName::SetCurrElmt
-
-
-unsigned long int  RelativeDistinguishedName::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // RelativeDistinguishedName::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-AttributeTypeAndDistinguishedValue *RelativeDistinguishedName::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new AttributeTypeAndDistinguishedValue;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RelativeDistinguishedName::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-AttributeTypeAndDistinguishedValue  *RelativeDistinguishedName::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValue;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RelativeDistinguishedName::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AttributeTypeAndDistinguishedValue  *RelativeDistinguishedName::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValue;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RelativeDistinguishedName::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AttributeTypeAndDistinguishedValue *RelativeDistinguishedName::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValue;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RelativeDistinguishedName::InsertAfter
-
-
-RelativeDistinguishedName  &RelativeDistinguishedName::AppendCopy (AttributeTypeAndDistinguishedValue &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValue;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-RelativeDistinguishedName  &RelativeDistinguishedName::PrependCopy (AttributeTypeAndDistinguishedValue &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValue;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // RelativeDistinguishedName::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-RelativeDistinguishedName &RelativeDistinguishedName::InsertBeforeAndCopy (AttributeTypeAndDistinguishedValue &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValue;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // RelativeDistinguishedName::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-RelativeDistinguishedName  &RelativeDistinguishedName::InsertAfterAndCopy (AttributeTypeAndDistinguishedValue &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new AttributeTypeAndDistinguishedValue;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // RelativeDistinguishedName::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void RelativeDistinguishedName::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen RelativeDistinguishedName::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    {
-      int iii,icount;
-      CSM_Buffer **tmpEnc=NULL;
-      for (currElmt = last,icount=0; currElmt != NULL; currElmt = currElmt->prev, icount++);
-      tmpEnc = (CSM_Buffer **) calloc(sizeof(CSM_Buffer *), icount);
-      for (currElmt = last, iii=0; currElmt != NULL; currElmt = currElmt->prev,iii++,elmtLen=0)
-      {
-      BEncEocIfNec (b);
-        ENCODE_BUF1(currElmt->elmt->BEncContent, elmtLen);
-    elmtLen += BEncConsLen (outputBuf, elmtLen);
-
-    elmtLen += BEncTag1 (outputBuf, UNIV, CONS, SEQ_TAG_CODE);
-        ENCODE_BUF2(tmpEnc[iii]);
-      }
-      vdasnacc_sortSetOf(tmpEnc, icount);
-      for (iii=0,elmtLen=0; iii < icount; elmtLen+=tmpEnc[iii++]->Length())
-            SM_WriteToAsnBuf(tmpEnc[iii], b);
-      for (iii=0; iii < icount; iii++) delete tmpEnc[iii];
-       free(tmpEnc);
-    }
-        totalLen += elmtLen;
-    return totalLen;
-} // RelativeDistinguishedName::BEncContent
-
-
-void  RelativeDistinguishedName::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    AttributeTypeAndDistinguishedValue *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-115);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // RelativeDistinguishedName::BDecContent
-
-
-AsnType *RDNSequence::Clone() const
-{
-  return new RDNSequence;
-}
-
-AsnType *RDNSequence::Copy() const
-{
-  return new RDNSequence (*this);
-}
-
-AsnLen RDNSequence::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void RDNSequence::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "RDNSequence::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-116);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-RDNSequence::RDNSequence (const RDNSequence &)
-{
-  Asn1Error << "use of incompletely defined RDNSequence::RDNSequence (const RDNSequence &)" << endl;
-  abort();
-}
-
-RDNSequence::~RDNSequence()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-RDNSequence &RDNSequence::operator = (const RDNSequence &that)
-#else // SNACC_DEEP_COPY
-RDNSequence &RDNSequence::operator = (const RDNSequence &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined RDNSequence &RDNSequence::operator = (const RDNSequence &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void RDNSequence::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  RDNSequence::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // RDNSequence::SetCurrElmt
-
-
-unsigned long int  RDNSequence::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // RDNSequence::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-RelativeDistinguishedName *RDNSequence::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new RelativeDistinguishedName;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RDNSequence::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-RelativeDistinguishedName  *RDNSequence::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new RelativeDistinguishedName;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RDNSequence::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-RelativeDistinguishedName  *RDNSequence::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new RelativeDistinguishedName;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RDNSequence::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-RelativeDistinguishedName *RDNSequence::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new RelativeDistinguishedName;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // RDNSequence::InsertAfter
-
-
-RDNSequence  &RDNSequence::AppendCopy (RelativeDistinguishedName &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new RelativeDistinguishedName;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-RDNSequence  &RDNSequence::PrependCopy (RelativeDistinguishedName &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new RelativeDistinguishedName;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // RDNSequence::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-RDNSequence &RDNSequence::InsertBeforeAndCopy (RelativeDistinguishedName &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new RelativeDistinguishedName;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // RDNSequence::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-RDNSequence  &RDNSequence::InsertAfterAndCopy (RelativeDistinguishedName &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new RelativeDistinguishedName;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // RDNSequence::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void RDNSequence::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen RDNSequence::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-      BEncEocIfNec (b);
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncConsLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // RDNSequence::BEncContent
-
-
-void  RDNSequence::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    RelativeDistinguishedName *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-117);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // RDNSequence::BDecContent
-
-
-AsnType *Attributes::Clone() const
-{
-  return new Attributes;
-}
-
-AsnType *Attributes::Copy() const
-{
-  return new Attributes (*this);
-}
-
-AsnLen Attributes::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SET_TAG_CODE);
-  return l;
-}
-
-void Attributes::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SET_TAG_CODE))
-  {
-    Asn1Error << "Attributes::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-118);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-Attributes::Attributes (const Attributes &)
-{
-  Asn1Error << "use of incompletely defined Attributes::Attributes (const Attributes &)" << endl;
-  abort();
-}
-
-Attributes::~Attributes()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-Attributes &Attributes::operator = (const Attributes &that)
-#else // SNACC_DEEP_COPY
-Attributes &Attributes::operator = (const Attributes &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined Attributes &Attributes::operator = (const Attributes &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void Attributes::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  Attributes::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // Attributes::SetCurrElmt
-
-
-unsigned long int  Attributes::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // Attributes::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-Attribute *Attributes::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new Attribute;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // Attributes::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-Attribute  *Attributes::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // Attributes::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-Attribute  *Attributes::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // Attributes::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-Attribute *Attributes::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // Attributes::InsertAfter
-
-
-Attributes  &Attributes::AppendCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-Attributes  &Attributes::PrependCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // Attributes::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-Attributes &Attributes::InsertBeforeAndCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // Attributes::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-Attributes  &Attributes::InsertAfterAndCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // Attributes::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void Attributes::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen Attributes::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    {
-      int iii,icount;
-      CSM_Buffer **tmpEnc=NULL;
-      for (currElmt = last,icount=0; currElmt != NULL; currElmt = currElmt->prev, icount++);
-      tmpEnc = (CSM_Buffer **) calloc(sizeof(CSM_Buffer *), icount);
-      for (currElmt = last, iii=0; currElmt != NULL; currElmt = currElmt->prev,iii++,elmtLen=0)
-      {
-      BEncEocIfNec (b);
-        ENCODE_BUF1(currElmt->elmt->BEncContent, elmtLen);
-    elmtLen += BEncConsLen (outputBuf, elmtLen);
-
-    elmtLen += BEncTag1 (outputBuf, UNIV, CONS, SEQ_TAG_CODE);
-        ENCODE_BUF2(tmpEnc[iii]);
-      }
-      vdasnacc_sortSetOf(tmpEnc, icount);
-      for (iii=0,elmtLen=0; iii < icount; elmtLen+=tmpEnc[iii++]->Length())
-            SM_WriteToAsnBuf(tmpEnc[iii], b);
-      for (iii=0; iii < icount; iii++) delete tmpEnc[iii];
-       free(tmpEnc);
-    }
-        totalLen += elmtLen;
-    return totalLen;
-} // Attributes::BEncContent
-
-
-void  Attributes::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    Attribute *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-119);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // Attributes::BDecContent
-
-
-Name::Name()
-{
-  choiceId = rDNSequenceCid;
-#if TCL
-  rDNSequence = new RDNSequence;
-#else
-  rDNSequence = NULL; // incomplete initialization of mandatory element!
-#endif // TCL
-}
-
-Name::Name (const Name &)
-{
-  Asn1Error << "use of incompletely defined Name::Name (const Name &)" << endl;
-  abort();
-}
-
-Name::~Name()
-{
-  switch (choiceId)
-  {
-    case rDNSequenceCid:
-      delete rDNSequence;
-      break;
-  } // end of switch
-} // end of destructor
-
-AsnType *Name::Clone() const
-{
-  return new Name;
-}
-
-AsnType *Name::Copy() const
-{
-  return new Name (*this);
-}
-
-#if SNACC_DEEP_COPY
-Name &Name::operator = (const Name &that)
-#else // SNACC_DEEP_COPY
-Name &Name::operator = (const Name &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    switch (choiceId)
-    {
-      case rDNSequenceCid:
-        delete rDNSequence;
-        break;
-    }
-    switch (choiceId = that.choiceId)
-    {
-      case rDNSequenceCid:
-        rDNSequence = new RDNSequence;
-        *rDNSequence = *that.rDNSequence;
-        break;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined Name &Name::operator = (const Name &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-Name::BEncContent (BUF_TYPE b)
-{
-  AsnLen l;
-  switch (choiceId)
-  {
-    case rDNSequenceCid:
-      BEncEocIfNec (b);
-      l = rDNSequence->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-      break;
-
-  } // end switch
-  return l;
-} // Name::BEncContent
-
-
-void Name::BDecContent (BUF_TYPE b, AsnTag tag, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  switch (tag)
-  {
-    case MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE):
-      choiceId = rDNSequenceCid;
-      rDNSequence = new RDNSequence;
-        rDNSequence->BDecContent (b, tag, elmtLen0, bytesDecoded, env);
-      break;
-
-    default:
-      Asn1Error << "ERROR - unexpected tag in CHOICE" << endl;
-      SnaccExcep::throwMe(-120);
-      break;
-  } // end switch
-} // Name::BDecContent
-
-
-AsnLen Name::BEnc (BUF_TYPE b)
-{
-    AsnLen l;
-    l = BEncContent (b);
-    return l;
-}
-
-void Name::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    AsnLen elmtLen;
-    AsnTag tag;
-
-    /*  CHOICEs are a special case - grab identifying tag */
-    /*  this allows easier handling of nested CHOICEs */
-    tag = BDecTag (b, bytesDecoded, env);
-    elmtLen = BDecLen (b, bytesDecoded, env);
-    BDecContent (b, tag, elmtLen, bytesDecoded, env);
-}
-
-void Name::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  switch (choiceId)
-  {
-    case rDNSequenceCid:
-      os << "rDNSequence ";
-      if (rDNSequence)
-        os << *rDNSequence;
-      else
-        os << "-- void3 --\n";
-      break;
-
-  } // end of switch
-#endif /* NDEBUG */
-} // Name::Print
-