///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright Test Competence Center (TCC) ETH 2016                           //
//                                                                           //
// The copyright to the computer  program(s) herein  is the property of TCC. //
// The program(s) may be used and/or copied only with the written permission //
// of TCC or in accordance with  the terms and conditions  stipulated in the //
// agreement/contract under which the program(s) has been supplied.          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
//
//  File:               BSSGP_Types.ttcn
//  Rev:                R1A
//  Prodnr:             CNL 113 833
//  Contact:            http://ttcn.ericsson.se
//  Reference:          3GPP TS 48.018 13.0.0


module BSSGP_Types
{    

import from General_Types all;

external function enc_PDU_BSSGP(in PDU_BSSGP pdu) return octetstring;

external function dec_PDU_BSSGP(in octetstring stream) return PDU_BSSGP;

external function enc_PDU_BSSGP_fast(in PDU_BSSGP pdu, out octetstring stream)
with { extension "prototype(fast) encode(RAW)" }

external function dec_PDU_BSSGP_backtrack(in octetstring stream, out PDU_BSSGP pdu) return integer
with { extension "prototype(backtrack) decode(RAW)" }


//-----------------------------------------------------------------------------
// INFORMATION ELEMENTS
//-----------------------------------------------------------------------------
type union LIN2_2a
{
  integer length1,
  integer length2
} with {
  variant (length1) "FIELDLENGTH(7)";
  variant (length2) "FIELDLENGTH(15)";
  variant (length2) "BYTEORDER(last)";
  variant (length1,length2) "FIELDORDER(msb)";
}   
      
// 11.3.1           
type record Alignment_octets
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            spare_octet  length(0..3)
} with {
  variant "PRESENCE(iEI = '00'O)";
  variant (lengthIndicator) "LENGTHTO (spare_octet)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.2
type record Bmax_default_MS
{
  OCT1                    iEI,
  BIT1                    ext,
  LIN2_2a                 lengthIndicator, 
  OCT2                    bmax  // could be changed to integer input if simpler
} with { 
  variant "PRESENCE(iEI = '01'O)";
  variant (lengthIndicator) "LENGTHTO (bmax)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

// 11.3.3
type record BSS_Area_Indication
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   bSS_indicator
} with { 
  variant "PRESENCE(iEI = '02'O)";
  variant (lengthIndicator) "LENGTHTO (bSS_indicator)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.4
type record Bucket_Leak_Rate
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT2                   r_Value // could be changed to integer input if simpler
} with {
  variant "PRESENCE(iEI = '03'O)";
  variant (lengthIndicator) "LENGTHTO (r_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,   ext = '1'B;
                                       length2,   ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.5
type record BVC_Bucket_Size
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT2                   bmax  
} with { 
  variant "PRESENCE(iEI = '05'O)";
  variant (lengthIndicator) "LENGTHTO (bmax)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.6
type record BVCI
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT2                   unstructured_value
} with { 
  variant "PRESENCE(iEI = '04'O)";
  variant (lengthIndicator) "LENGTHTO (unstructured_value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.7
type record BVC_Measurement
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT2                   delay_Value  
                                   
} with { 
  variant "PRESENCE(iEI = '06'O)";
  variant (lengthIndicator) "LENGTHTO (delay_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};
 
// 11.3.8
type record Cause_BSSGP 
 {
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   cause_Value
 } with { 
  variant "PRESENCE(iEI = '07'O)";
  variant (lengthIndicator) "LENGTHTO (cause_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};
 
// 11.3.9
type record Cell_Identifier
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 HEX1                   mccDigit1 ,
 HEX1                   mccDigit2 ,
 HEX1                   mccDigit3 ,
 HEX1                   mncDigit3 ,
 HEX1                   mncDigit1 ,
 HEX1                   mncDigit2 ,
 OCT2                   lac,
 OCT1                   rac,    
 OCT2                   cI_value
} with { 
  variant "PRESENCE(iEI = '08'O)";
      variant (lengthIndicator) 
     "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,
               mncDigit2,lac,rac,cI_value)";
      variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                           length2,         ext = '0'B;)";
      variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


type record Cell_Identifier_V
{ 
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2,
 OCT2                   lac,
 OCT1                   rac,    
 OCT2                   cI_value
};

// 11.3.10
// 29.018, 44.018
type record Channel_needed
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 Channel_Needed_Value    channel_Needed_Value
} with { 
  variant "PRESENCE(iEI = '09'O)";
  variant (lengthIndicator) "LENGTHTO (channel_Needed_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

type record Channel_Needed_Value
{
  BIT2   channel_1,
  BIT2   channel_2,
  BIT4   channelNeededIEI     //44.018
}

// 11.3.11
type record DRX_Parameters
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 OCT1                    splitPG_CycleCode,
 BIT3                    nonDRXTimer,
 BIT1                    splitOnCCCH,
 BIT4                    cnSpecificDRXCycleLength
} with { 
  variant "PRESENCE(iEI = '0A'O)";
  variant (lengthIndicator) 
                "LENGTHTO (splitPG_CycleCode,nonDRXTimer,splitOnCCCH,
                   cnSpecificDRXCycleLength)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
        };        

// 11.3.12
type record EMLPP_Priority_BSSGP
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 BIT3                    callPriority,
 BIT5                    spare
} with { 
  variant "PRESENCE(iEI = '0B'O)";
  variant (lengthIndicator) "LENGTHTO (callPriority,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
        };
        
// 11.3.13
type record Flush_Action
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 OCT1                    actionValue
} with { 
  variant "PRESENCE(iEI = '0C'O)";
  variant (lengthIndicator) "LENGTHTO (actionValue)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
        };


// 11.3.14
type record IMSI_BSSGP
{         
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 BIT3                    type_of_Identity,
 BIT1                    oddevenIndicator,      // '1'B or '0'B
 hexstring               digits     length(5..15)                                                                       
} with { 
  variant "PRESENCE(iEI = '0D'O)";
  variant (lengthIndicator) "LENGTHTO (type_of_Identity,
                                             oddevenIndicator,digits)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,   ext = '0'B;)"; 
              //variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) ";
  variant (digits) "HEXORDER(low)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
  variant "PADDING(yes)";
  variant "PADDING_PATTERN('1'B)"
                
        };
                
// 11.3.15
//NOTE: lengthIndicator-short form will be converted to long form 
// if needed during encoding
type record LLC_PDU
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 octetstring            lLC_PDU  // Note: this is divided into 2 parts in spec!
} with { 
  variant "PRESENCE(iEI = '0E'O)";
  variant (lengthIndicator) "LENGTHTO (lLC_PDU)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.16
type record LLC_Frames_Discarded
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 hexstring               number_of_frames_discarded length (2)
 } with { 
  variant "PRESENCE(iEI = '0F'O)";
  variant (lengthIndicator) "LENGTHTO (number_of_frames_discarded)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};
    
// 11.3.17
type record Location_Area
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2,
 OCT2                   lac
} with { 
  variant "PRESENCE(iEI = '10'O)";
  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,
                                 mncDigit3,mncDigit1,mncDigit2,lac)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.18
type record LSA_Identifier_List_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            lSA_Identifier_List   //  encoded LSA Identifier List
} with { 
  variant "PRESENCE(iEI = '26'O)";
  variant (lengthIndicator) "LENGTHTO (lSA_Identifier_List)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.19
type record LSA_Information_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  LSA_Information        lSA_Information   //  encoded LSA Information 48.008
} with { 
  variant "PRESENCE(iEI = '27'O)";
  variant (lengthIndicator) "LENGTHTO (lSA_Information)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record LSA_Information     //  encoded LSA Information 48.008
{
  BIT1                                      lSA_Only,
  BIT7                                      spare,
  LSA_Identification_and_Attributes_List    lSA_Identification_and_Attributes_List
}

type record of LSA_Identification_and_Attributes LSA_Identification_and_Attributes_List; 

type record LSA_Identification_and_Attributes
{
   BIT4                 priority,
   BIT1                 pref,
   BIT1                 act,
   BIT2                 spare, 
   OCT3                 lSA_ID
}


// 11.3.20
type record Mobile_Id_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  MobileIdentityV_BSSGP  mobile_Identity
} with { 
  variant "PRESENCE(iEI = '11'O)";
  variant (lengthIndicator) "LENGTHTO (mobile_Identity)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// MobileIdentityV structure copied from 24.008 MobileL3
type record MobileIdentityV_BSSGP
{
  BIT3                               typeOfIdentity,
  OddEvenInd_Identity_BSSGP          oddEvenInd_identity
} with {
  variant (oddEvenInd_identity) "CROSSTAG
  (
    imei,                     typeOfIdentity ='010'B;
    imsi,                     typeOfIdentity ='001'B;
    imei_sv,                  typeOfIdentity ='011'B;  
  )"
};

type union OddEvenInd_Identity_BSSGP
{
  IMSI_MobileIdentityV                     imsi,  
  IMEI_MobileIdentityV                     imei,     
  IMEI_SV_MobileIdentityV                  imei_sv
};

type record IMSI_MobileIdentityV
{
  BIT1               oddevenIndicator,       // '1'B or '0'B
  hexstring          digits  length(5..15),
  BIT4               fillerDigit  optional   // B'1111, fillerDigit is present
  // if oddevenIndicator=0
}
with
{
  variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) ";
};

type record IMEI_MobileIdentityV
{
  BIT1               oddevenIndicator,   // '1'B
  hexstring          digits  length(15)
};

type record IMEI_SV_MobileIdentityV
{
  BIT1               oddevenIndicator,  // '0'B
  hexstring          digits length(16),
  BIT4               fillerDigit    // filler '1111'B
};

// 11.3.21
type record MS_Bucket_Size
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 OCT2                    bmax
} with { 
  variant "PRESENCE(iEI = '12'O)";
  variant (lengthIndicator) "LENGTHTO (bmax)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


// 11.3.22
// Note : structure from 24.008 Mobile L3
type record MS_Radio_Access_Capability
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 MSRadioAccessCapabilityV_BSSGP  mSRadioAccessCapabilityV_BSSGP
} with { 
  variant "PRESENCE(iEI = '13'O)";
  variant (lengthIndicator) "LENGTHTO (mSRadioAccessCapabilityV_BSSGP)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant /*(ext,lengthIndicator)*/ "FIELDORDER(msb)";
  variant "PADDING(yes)"
};
             
type record of MSRACapabilityValuesRecord_BSSGP MSRadioAccessCapabilityV_BSSGP
with { variant "EXTENSION_BIT(reverse)";variant "FIELDORDER(msb)" };


type record MSRACapabilityValuesRecord_BSSGP
{
  MSRACapabilityValues_BSSGP   mSRACapabilityValues,
  BIT1                         presenceBitMSRACap
} with { variant "FIELDORDER(msb)" };


type union MSRACapabilityValues_BSSGP
{
  MSRACapabilityValuesExclude1111_BSSGP        mSRACapabilityValuesExclude1111,
  MSRACapabilityValues1111_BSSGP               mSRACapabilityValues1111
} with { variant "FIELDORDER(msb)" };


type record MSRACapabilityValuesExclude1111_BSSGP
{
  BIT4                               accessTechnType,
  AccessCapabilitiesStruct_BSSGP     accessCapabilities
} with {
  variant "PRESENCE (
      accessTechnType = '0000'B,     // GSM P
      accessTechnType = '0001'B,     // GSM E
      accessTechnType = '0010'B,     // GSM R
      accessTechnType = '0011'B,     // GSM 1800
      accessTechnType = '0100'B,     // GSM190
      accessTechnType = '0101'B,     // GSM 450
      accessTechnType = '0110'B,     // GSM480
      accessTechnType = '0111'B,     // GSM 480
      accessTechnType = '1000'B,     // GSM 700
      accessTechnType = '1001'B,     // GSM T 310
      accessTechnType = '1010'B,     // GSM T 410
      accessTechnType = '1011'B      // GSM T 900
  )"
  variant "FIELDORDER(msb)"
};


// Access Capabilities Struct
type record AccessCapabilitiesStruct_BSSGP
{
  integer                            lengthIndicator,
  AccessCapabilities_BSSGP           accessCapabilities,
  // spare_bits "expands to the indicated length",
  // i.e. 24.008 spec puts no restriction on number
  // of spare_bits.  The only restriction is that the whole
  // MS Radio Access Capability  IE is less than 52 octets
  bitstring                    spare_bits              optional
} with {
  variant (lengthIndicator) "FIELDLENGTH(7)";
  variant (lengthIndicator) "LENGTHTO(accessCapabilities,spare_bits)";
  variant (lengthIndicator) "UNIT(bits)";
  variant "FIELDORDER(msb)";
  variant (lengthIndicator) "BYTEORDER(last)";
}


//Access Capabilities
type record AccessCapabilities_BSSGP
{
  BIT3                         rfPowerCapability,
  BIT1                         presenceBitA5,
  A5BITS_BSSGP                 a5bits               optional,
  BIT1                         esind,
  BIT1                         psbit,
  BIT1                         vgcs,
  BIT1                         vbs,
  BIT1                         presenceBitMultislot,
  MultislotCap_BSSGP           multislotcap         optional,
  AccessCapAdditionsAfterRel97_BSSGP accessCapAdditionsAfterRel97 optional //opt because of V97
  //Note: AccessCapAdditionsAfterRel97 can include:
  // Rel99 or
  // Rel99 + Rel4 or
  // Rel99 + Rel4 + Rel5 or
  // Rel99 + Rel4 + Rel5  + Rel6
} with {
  variant "FIELDORDER(msb)";
  variant (a5bits)               "PRESENCE(presenceBitA5 = '1'B)";
  variant (multislotcap)         "PRESENCE(presenceBitMultislot = '1'B)";
}


type record AccessCapAdditionsAfterRel97_BSSGP
{
  AccessCapAdditionsRel99_BSSGP                accessCapAdditionsRel99,
  AccessCapAdditionsAfterRel99_BSSGP           accessCapAdditionsAfterRel99 optional
} with {
  variant "FIELDORDER(msb)";
}


type record AccessCapAdditionsRel99_BSSGP
{
  BIT1               presenceBitPskpow,
  BIT2               pskpowercap                     optional,
  BIT1               compactIntMeasurCap,
  BIT1               revisionLevelInd,
  BIT1               umtsfddRadAccTechCap,
  BIT1               umtstddRadAccTechCap,
  BIT1               cdma2kRadAccTechCap
} with {
  variant "FIELDORDER(msb)";
  variant (pskpowercap) "PRESENCE(presenceBitPskpow = '1'B)";
}


type record AccessCapAdditionsAfterRel99_BSSGP
{
  AccessCapAdditionsRel4_BSSGP       accessCapAdditionsRel4,
  AccessCapAdditionsAfterRel4_BSSGP  accessCapAdditionsAfterRel4 optional
} with {
  variant "FIELDORDER(msb)";
}


type record AccessCapAdditionsRel4_BSSGP
{
  BIT1                    umts128RadAccTechCap,
  BIT1                    geranFeaturePackage,
  BIT1                    presenceBitExtendedDTM,
  ExtendedDTM_BSSGP       extendedDTM                       optional,
  BIT1                    modulationBasedMultislotClass
} with {
  variant "FIELDORDER(msb)";
  variant (extendedDTM)          "PRESENCE(presenceBitExtendedDTM = '1'B)";
}


type record AccessCapAdditionsAfterRel4_BSSGP
{
  AccessCapAdditionsRel5_BSSGP       accessCapAdditionsRel5, 
  AccessCapAdditionsAfterRel5_BSSGP  accessCapAdditionsAfterRel5 optional
} with {
  variant "FIELDORDER(msb)";
}


type record AccessCapAdditionsRel5_BSSGP
{
  BIT1                     presenceBitHighMultislotCapability,
  BIT2                     highMultislotCapability            optional,
  BIT1                     presenceBitGeranIuModeCapability,
  GeranIuModeCap_BSSGP     geranIuModeCap                     optional,
  BIT2                     gMSKMultislotPowerProfile,
  BIT2                     eightPSKMultislotPowerProfile
} with {
  variant "FIELDORDER(msb)";
  variant (highMultislotCapability)
  "PRESENCE(presenceBitHighMultislotCapability = '1'B)"
  variant (geranIuModeCap)"PRESENCE(presenceBitGeranIuModeCapability = '1'B)"
}


type record GeranIuModeCap_BSSGP
{
  integer                      lengthIndicator,
  BIT1                         fLOIuCapability,
  bitstring                    spare_bits
  // spare_bits "expands to the indicated length",
  // i.e. 24.008 spec puts no restriction on number
  // of spare_bits.  The only restriction is that the whole
  // MS Radio Access Capability  IE is less than 52 octets
} with {
  variant "FIELDORDER(msb)";
  variant (lengthIndicator) "FIELDLENGTH(4)";
  variant (lengthIndicator) "LENGTHTO(fLOIuCapability,spare_bits)";
  variant (lengthIndicator) "UNIT(bits)";
}

type record AccessCapAdditionsAfterRel5_BSSGP
{
  AccessCapAdditionsRel6_BSSGP     accessCapAdditionsRel6,
  AccessCapAdditionsRel7_BSSGP     accessCapAdditionsAfterRel6 optional  
} with {
  variant "FIELDORDER(msb)";
}

type record AccessCapAdditionsRel6_BSSGP
{
  BIT1                              multipleTBFCapability,
  BIT2                              downlinkAdvancedReceiverPerformance,
  BIT1                              extendedRLCMACCtrlMsgSegmentationCap,
  BIT1                              dTMEnhancementsCapability,
  BIT1                              presenceBitDTMGPRSHighMultiSlotClass,
  DTMGPRSHighMultiSlotClass_BSSGP   dTMGPRSHighMultiSlotClass optional,
  BIT1                              pSHandoverCapability
} with {
  variant "FIELDORDER(msb)";
  variant (dTMGPRSHighMultiSlotClass)
  "PRESENCE(presenceBitDTMGPRSHighMultiSlotClass = '1'B)"
}


type record DTMGPRSHighMultiSlotClass_BSSGP
{
  BIT3               dTMGPRSHighMultiSlotClassValue,
  BIT1               presenceBitDTMEGPRSHighMultiSlotClass,
  BIT3               dTMEGPRSHighMultiSlotClassValue optional
} with {
  variant "FIELDORDER(msb)";
  variant (dTMEGPRSHighMultiSlotClassValue)
  "PRESENCE(presenceBitDTMEGPRSHighMultiSlotClass = '1'B)"

}


type record AccessCapAdditionsRel7_BSSGP
{
  BIT1                         dTMHandoverCapability,
  BIT1                         presenceBitDownlinkDualCarrier, 
  DownlinkDualCarrier_BSSGP    downlinkDualCarrier,
  BIT1                         flexibleTimeslotAssignment,
  BIT1                         gANPSHandoverCapability,
  BIT1                         rLCNonPersistentMode,
  BIT1                         reducedLatencyEGPRSCapability 
} with {
  variant "FIELDORDER(msb)";
  variant (downlinkDualCarrier)
  "PRESENCE(presenceBitDownlinkDualCarrier = '1'B)"
}
  

type record DownlinkDualCarrier_BSSGP
{
  BIT3  multislotCapReductionforDownLinkDualCarrier,
  BIT1  downlinkDualCarrierforDTMCapability
} with { variant "FIELDORDER(msb)" };


type record  ExtendedDTM_BSSGP
{
  BIT2               ExtendedDTM_GPRSMultislot,
  BIT2               ExtendedDTM_EGPRSMultislot
} with { variant "FIELDORDER(msb)" };


//MultislotCap
type record  MultislotCap_BSSGP
{
  BIT1                                   presenceBitHscsd,
  BIT5                                   hscsdmultislotclass      optional,
  BIT1                                   presenceBitGprs,
  MultislotCap_GPRS_BSSGP                gprsmultislot           optional,
  BIT1                                   presenceBitSms,
  MultislotCap_SMS_BSSGP                 multislotCap_SMS        optional,
  MultislotCapAdditionsAfterRel97_BSSGP  multislotCapAdditionsAfterRel97 optional
} with {
  variant "FIELDORDER(msb)";
  variant (hscsdmultislotclass)     "PRESENCE(presenceBitHscsd = '1'B)";
  variant (gprsmultislot)          "PRESENCE(presenceBitGprs = '1'B)";
  variant (multislotCap_SMS)       "PRESENCE(presenceBitSms = '1'B)";

}


type record MultislotCapAdditionsAfterRel97_BSSGP
{
  BIT1                                   presenceBitEcsdmulti,
  BIT5                                   ecsdmultislotclass      optional,
  BIT1                                   presenceBitEgprsmulti,
  MultislotCap_EGPRS_BSSGP               multislotCap_EGPRS      optional,
  BIT1                                   presenceBitDtmGprsmulti,
  MultislotCap_dtmgprsmultislotsubclass_BSSGP  
                            multislotCapdtmgprsmultislotsubclass optional
} with {
  variant "FIELDORDER(msb)";
  variant (ecsdmultislotclass)     "PRESENCE(presenceBitEcsdmulti = '1'B)";
  variant (multislotCap_EGPRS)     "PRESENCE(presenceBitEgprsmulti = '1'B)" ;
  variant (multislotCapdtmgprsmultislotsubclass)
  "PRESENCE(presenceBitDtmGprsmulti = '1'B)"
}


type record MultislotCap_GPRS_BSSGP
{
  BIT5               gprsmultislotclass,
  BIT1               gprsextendeddynalloccap
} with { variant "FIELDORDER(msb)" };


type record MultislotCap_SMS_BSSGP
{
  BIT4               smsValue,
  BIT4               smValue
} with { variant "FIELDORDER(msb)" };


type record  MultislotCap_EGPRS_BSSGP
{
  BIT5               egprsmultislotclass,
  BIT1               egprsextendeddynalloccap
}  with { variant "FIELDORDER(msb)" };

type record MultislotCap_dtmgprsmultislotsubclass_BSSGP
{
  BIT2               dtmgprsmultislotsubclass,
  BIT1               singleSlotDTM,
  BIT1               presenceBitDTM_EGPRSMultiSlot,
  BIT2               dTM_EGPRSMultiSlot       optional
} with {
  variant "FIELDORDER(msb)";
  variant (dTM_EGPRSMultiSlot) "PRESENCE(presenceBitDTM_EGPRSMultiSlot = '1'B)"
};


//A5BITS

type record  A5BITS_BSSGP
{
  BIT1       a51 ,
  BIT1       a52 ,
  BIT1       a53 ,
  BIT1       a54 ,
  BIT1       a55 ,
  BIT1       a56 ,
  BIT1       a57
} with { variant "FIELDORDER(msb)" };


type record MSRACapabilityValues1111_BSSGP
{
  BIT4               accessTechnType,    //1111
  integer            lengthIndicator,
  BIT1               presenceIndicator_AdditionalAccessTechnologiesRepetition,
  AdditionalAccessTechnologiesRepetition_BSSGP // coded '1'B if list is not empty
                  additionalAccessTechnologiesRepetition           optional,
  bitstring          spare_bits
} with {
  variant "PRESENCE (accessTechnType = '1111'B)";
  variant "FIELDORDER(msb)";
  variant (lengthIndicator) "FIELDLENGTH(7)";
  variant (lengthIndicator) "UNIT(bits)";
  variant (lengthIndicator) "BYTEORDER(last)";
  variant (additionalAccessTechnologiesRepetition)
  "PRESENCE(presenceIndicator_AdditionalAccessTechnologiesRepetition = '1'B)";
  variant (lengthIndicator)
  "LENGTHTO(presenceIndicator_AdditionalAccessTechnologiesRepetition,
             additionalAccessTechnologiesRepetition,spare_bits)";

};

type record of AdditionalAccessTechnologiesRecord_BSSGP
                               AdditionalAccessTechnologiesRepetition_BSSGP
with { variant "EXTENSION_BIT(reverse)" };


type record AdditionalAccessTechnologiesRecord_BSSGP
{
  AdditionalAccessTechnologies_BSSGP additionalAccessTechnologies,
  BIT1                               extensionBit
} with { variant "FIELDORDER(msb)" };


type record  AdditionalAccessTechnologies_BSSGP
{
  BIT4               accessTechnType,
  BIT3               gMSKPowerClass,
  BIT2               psk8PowerClass
} with { variant "FIELDORDER(msb)" };



// 11.3.23
type record OMC_Id_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT20                  oMC_Identity
} with { 
  variant "PRESENCE(iEI = '14'O)";
  variant (lengthIndicator) "LENGTHTO (oMC_Identity)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

 
// 11.3.24 
//NOTE: lengthIndicator-short form will be converted to 
// long form if needed during encoding
type record PDU_in_Error
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 octetstring            erroneous_BSSGP_PDU
} with { 
  variant "PRESENCE(iEI = '15'O)";
  variant (lengthIndicator) "LENGTHTO (erroneous_BSSGP_PDU)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.25
type record  PDU_Lifetime
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT2                   delay_Value
} with { 
  variant "PRESENCE(iEI = '16'O)";
  variant (lengthIndicator) "LENGTHTO (delay_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.27
type record Priority_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   pvi,  
  BIT1                   qa, 
  BIT4                   priority_Level, //(1..14) 0: spare, 15: not used  
  BIT1                   pci, 
  BIT1                   spare        
} with { 
  variant "PRESENCE(iEI = '17'O)";
  variant (lengthIndicator) "LENGTHTO (pvi,qa,priority_Level,pci,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.28
type record QoS_Profile
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT2                   peak_Bit_Rate,
 BIT3                   precedence,
 BIT1                   a_bit,
 BIT1                   t_bit,
 BIT1                   c_r_bit,
 BIT2                   peakBitRateGranularity
} with {  
  variant "PRESENCE(iEI = '18'O)";
  variant (lengthIndicator) "LENGTHTO (peak_Bit_Rate,precedence,
                                       a_bit,t_bit,c_r_bit,peakBitRateGranularity)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
};
       
       
type record QoS_Profile_V
{ 
 OCT2                   peak_Bit_Rate,
 BIT3                   precedence,
 BIT1                   a_bit,
 BIT1                   t_bit,
 BIT1                   c_r_bit,
 BIT2                   peakBitRateGranularity
}
                       
// 11.3.29
type record Radio_Cause
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   radio_Cause_Value
} with { 
  variant "PRESENCE(iEI = '19'O)";
  variant (lengthIndicator) "LENGTHTO (radio_Cause_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.30
type record  RA_Cap_UPD_CAUSE
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   rA_CAP_UPD_Cause_value
} with { 
  variant "PRESENCE(iEI = '1A'O)";
  variant (lengthIndicator) "LENGTHTO (rA_CAP_UPD_Cause_value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.31
type record  Routeing_Area
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2,
 OCT2                   lac,    
 OCT1                   rac    
} with {
  variant "PRESENCE(iEI = '1B'O)";
  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,
         mncDigit1,mncDigit2,lac,rac)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.32
type record R_default_MS
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT2                   r_default_MS_value
} with { 
  variant "PRESENCE(iEI = '1C'O)";
  variant (lengthIndicator) "LENGTHTO (r_default_MS_value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.33
type record Suspend_Reference_Number
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 OCT1                    suspend_Reference_Number_value
} with { 
  variant "PRESENCE(iEI = '1D'O)";
  variant (lengthIndicator) "LENGTHTO (suspend_Reference_Number_value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

// 11.3.34
type record Tag
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   unstructured_Value
} with { 
  variant "PRESENCE(iEI = '1E'O)";
  variant (lengthIndicator) "LENGTHTO (unstructured_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.35        
type record TLLI_BSSGP
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT4                   tLLI_Value
} with { 
  variant "PRESENCE(iEI = '1F'O)";
  variant (lengthIndicator) "LENGTHTO (tLLI_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";        
};

// 11.3.36
// Note : reference in spec is to "TMSI/P-TMSI information element in 
// 3GPP TS 24.008", however this specification has Mobile Identity 
// IE which includes TMSI/P-TMSI
type record TMSI_BSSGP
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT4                   tMSI_Value
} with { 
  variant "PRESENCE(iEI = '20'O)";
  variant (lengthIndicator) "LENGTHTO (tMSI_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


// 11.3.37
type record Trace_Reference_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT2                   trace_Reference
} with { 
  variant "PRESENCE(iEI = '21'O)";
  variant (lengthIndicator) "LENGTHTO (trace_Reference)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.38
type record Trace_Type_BSSGP
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   equipment_Trace
} with { 
  variant "PRESENCE(iEI = '22'O)";
  variant (lengthIndicator) "LENGTHTO (equipment_Trace)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";

};


// 11.3.39
type record TransactionId_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT2                   transaction_Id
} with { 
  variant "PRESENCE(iEI = '23'O)";
  variant (lengthIndicator) "LENGTHTO (transaction_Id)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.40
type record Trigger_Id_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT20                  entity_Identity
} with { 
  variant "PRESENCE(iEI = '24'O)";
  variant (lengthIndicator) "LENGTHTO (entity_Identity)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.41
type record Number_of_octets_affected
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT3                   number_of_octets_transfered_or_deleted 
                              // could be changed to integer input if simpler
} with { 
  variant "PRESENCE(iEI = '25'O)";
   variant (lengthIndicator) 
        "LENGTHTO (number_of_octets_transfered_or_deleted)";        
   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                        length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";                
};


// 11.3.42
type record PFI
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 BIT7                   pFI_Value,
 BIT1                   spare  //  '0'B according to 10.5.6.11 of 24.008

} with { 
  variant "PRESENCE(iEI = '28'O)";
   variant (lengthIndicator) 
        "LENGTHTO (pFI_Value,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";        
};


// 11.3.43
// Note : structure from 24.008
type record ABQP
{
 OCT1                iEI,
 BIT1                ext,
 LIN2_2a             lengthIndicator,
 BIT3                reliabilityClass,
 BIT3                delayClass,
 BIT2                spare1,  // '00'B
 BIT3                precedenceClass,
 BIT1                spare2,
 BIT4                peakThroughput,
 BIT5                meanThroughput,
 BIT3                spare3,
 BIT3                deliverErroneusSDU optional, //opt because of V97
 BIT2                deliveryOrder optional, //opt because of V97
 BIT3                trafficClass optional, //opt because of V97
 OCT1                maxSDUSize optional, //opt because of V97
 OCT1                maxBitrateUplink optional, //opt because of V97
 OCT1                maxBitrateDownlink optional, //opt because of V97
 BIT4                sduErrorRatio optional, //opt because of V97
 BIT4                residualBER optional, //opt because of V97
 BIT2                trafficHandlingPriority optional, //opt because of V97
 BIT6                transferDelay optional, //opt because of V97
 OCT1                guaranteedBitRateUplink optional, //opt because of V97
 OCT1                guaranteedBitRateDownlink optional, //opt because of V97
 BIT4                sourceStatisticsDescriptor optional, //opt because of V97
 BIT1                signallingIndication optional, //opt because of V97
 BIT3                spare4 optional, //opt because of V97
 OCT1                maxBitRateDownlinkExtended optional,
 OCT1                guaranteedBitRateDownlinkExtended optional,
 OCT1                maxBitrateUplinkExtended           optional, //opt because of V97
 OCT1                guaranteedBitRateUplinkExtended    optional  //opt because of V97
} with { 
  variant "PRESENCE(iEI = '3A'O)";
   variant (lengthIndicator) 
        "LENGTHTO (reliabilityClass,delayClass,spare1,precedenceClass,
               spare2,peakThroughput,
         meanThroughput,spare3
         ,deliverErroneusSDU,deliveryOrder,trafficClass,maxSDUSize,
         maxBitrateUplink,maxBitrateDownlink,sduErrorRatio,residualBER,
     trafficHandlingPriority,transferDelay,guaranteedBitRateUplink,
     guaranteedBitRateDownlink,sourceStatisticsDescriptor,
     signallingIndication,spare4,maxBitRateDownlinkExtended,
     guaranteedBitRateDownlinkExtended,maxBitrateUplinkExtended,
     guaranteedBitRateUplinkExtended)";        

   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,         ext = '0'B;)";  
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
 };


// 11.3.44
type record GPRS_Timer
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 BIT5                   timer_Value,
 BIT3                   unit_Value
} with { 
  variant "PRESENCE(iEI = '29'O)";
   variant (lengthIndicator) 
        "LENGTHTO (timer_Value,unit_Value)";
   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,         ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

// 11.3.45
type record Feature_bitmap
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 BIT1                   pFC,
 BIT1                   cBL,
 BIT1                   iNR,
 BIT1                   lCS,
 BIT1                   rIM,
 BIT1                   pFC_FC,
 BIT1                   enhancedRadioStatus,
 BIT1                   mBMS
} with { 
  variant "PRESENCE(iEI = '3B'O)";
  variant (lengthIndicator) "LENGTHTO (pFC,cBL,iNR,lCS,rIM,pFC_FC,
                                             enhancedRadioStatus,mBMS)";
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                             length2,        ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.46
type record Bucket_Full_Ratio
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   rate_of_the_Bucket 
                        // could be changed to integer input if simpler
} with { 
  variant "PRESENCE(iEI = '3C'O)";
   variant (lengthIndicator) "LENGTHTO (rate_of_the_Bucket)";
   variant (lengthIndicator) "CROSSTAG( length1,       ext = '1'B;
                                              length2,       ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
        }


// 11.3.47
type record Service_UTRAN_CCO
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 BIT3                   service_UTRAN_CCO_Value,
 BIT2					service_E_UTRAN_CCO_Value,
 BIT3                   spare
} with { 
  variant "PRESENCE(iEI = '3D'O)";
  variant (lengthIndicator) "LENGTHTO (service_UTRAN_CCO_Value,service_E_UTRAN_CCO_Value,spare)";  
   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// new IE for Wendy Xiang and Freeman Feng
type record Service_Class_Indicator {
  OCT1                    iEI,
  BIT1                    ext,
  LIN2_2a                 lengthIndicator,
  OCT1                    serviceClassIndicator
} with { 
  variant "PRESENCE(iEI = '99'O)";
  variant (lengthIndicator) "LENGTHTO (serviceClassIndicator)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
  length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.48
type record NSEI_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT2                   nSEI 
} with { 
  variant "PRESENCE(iEI = '3E'O)";
  variant (lengthIndicator) "LENGTHTO (nSEI)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.49
type record RRLP_APDU_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            rRLP_Message
} with { 
  variant "PRESENCE(iEI = '3F'O)";
  variant (lengthIndicator) "LENGTHTO (rRLP_Message)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
  //variant "PADDING(yes)";
}


// 11.3.50   
// 24.008 -> 49.031
type record LCS_QoS_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,  
  BIT1                   vert,
  BIT1                   vel,
  BIT6                   spare1,  
  BIT7                   horizontal_Accuracy,
  BIT1                   hA_Indicator,         // 1: is specified  
  BIT7                   vertical_Accuracy,
  BIT1                   vA_Indicator,         // 1: is specified  
  BIT6                   spare2,
  BIT2                   response_Time_Category
} with { 
  variant "PRESENCE(iEI = '40'O)";
  variant (lengthIndicator) "LENGTHTO (vert,vel,spare1,horizontal_Accuracy,hA_Indicator,vertical_Accuracy,vA_Indicator,spare2,response_Time_Category)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                         length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.51
// 49.031
type record LCS_Client_Type_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT4                   client_Subtype,
  BIT4                   client_Category
} with { 
  variant "PRESENCE(iEI = '41'O)";
  variant (lengthIndicator) "LENGTHTO (client_Subtype,client_Category)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.52
// 49.031
type record Requested_GPS_Assistance_Data_BSSGP
{
  OCT1                                  iEI,
  BIT1                                  ext,
  LIN2_2a                               lengthIndicator,
  Requested_GPS_Assistance_Data_Value   requested_GPS_Assistance_Data   
} with { 
  variant "PRESENCE(iEI = '42'O)";
  variant (lengthIndicator) "LENGTHTO (requested_GPS_Assistance_Data)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record Requested_GPS_Assistance_Data_Value
{
 OCT1                    bits_H_to_A,
 OCT1                    bits_P_to_I,
 SatelliteRelatedData    satelliteRelatedData
}

type record SatelliteRelatedData
{
  BIT6                       spare,
  BIT10                      gPS_Week,    
  OCT1                       gPS_Toe,
  BIT4                       t_Toe_Limit,
  integer                    nSAT,
  SatID_and_IODE_List        satID_and_IODE_List              
} with { variant(nSAT) "FIELDLENGTH(4)";
  variant(nSAT) "LENGTHTO(satID_and_IODE_List)";
  variant(nSAT) "UNIT(elements)";
}

type record of SatID_and_IODE SatID_and_IODE_List;

type record SatID_and_IODE
{
  BIT6      satID,
  BIT2      spare,
  OCT1      iODE
}

// 11.3.53
// 49.031
type record Location_Type_BSSGP
{
  OCT1                   iEI,                 
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   location_Information,
  OCT1                   positioning_Method optional
} with { 
  variant "PRESENCE(iEI = '43'O)";
  variant (lengthIndicator) "LENGTHTO (location_Information,positioning_Method)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.54
// 48.008 -> 23.03
type record Location_Estimate_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            location   //  encoded location information
} with { 
  variant "PRESENCE(iEI = '44'O)";
  variant (lengthIndicator) "LENGTHTO (location)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.55
// 49.031
type record Positioning_Data_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  PositioningDataValue   positioningDataValue  //  encoded location data
} with { 
  variant "PRESENCE(iEI = '45'O)";
  variant (lengthIndicator) "LENGTHTO (positioningDataValue)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record PositioningDataValue
{
 BIT4                     positioningDataDiscriminator,
 BIT4                     spare,
 PositioningMethod_List   positioningMethod_List 
}

type record of PositioningMethodValue PositioningMethod_List;

type record PositioningMethodValue
{
  BIT3     usage,
  BIT5     positioningMethod
}

// 11.3.56
type record Deciphering_Keys_BSSGP
{
  OCT1                            iEI,
  BIT1                            ext,
  LIN2_2a                         lengthIndicator,
  DecipheringKeysValue            decipheringKeysValue   //  encoded deciphering keys data
} with { 
  variant "PRESENCE(iEI = '46'O)";
  variant (lengthIndicator) "LENGTHTO (decipheringKeysValue)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record DecipheringKeysValue
{
 BIT1                     cipheringkeyFlag,
 BIT7                     spare,
 OCT7                     currentDecipheringKeyValue,
 OCT7                     nextDecipheringKeyValue
}
 
// 11.3.57
// 49.031
type record LCS_Priority_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   priority_Value   // 0: highest, other: normal
} with { 
  variant "PRESENCE(iEI = '47'O)";
  variant (lengthIndicator) "LENGTHTO (priority_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.58
// 49.031
type record LCS_Cause_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   cause_Value,
  OCT1                   diagnostic_Value optional
} with { 
  variant "PRESENCE(iEI = '48'O)";
  variant (lengthIndicator) "LENGTHTO (cause_Value,diagnostic_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.59
// 24.008
type record LCS_Capability_BSSGP
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   gPS_C,
  BIT1                   gPS_B,
  BIT1                   gPS_A,
  BIT1                   oTD_B,
  BIT1                   oTD_A,
  BIT3                   spare
} with { 
  variant "PRESENCE(iEI = '49'O)";
  variant (lengthIndicator) "LENGTHTO (gPS_C,gPS_B,gPS_A,oTD_B,oTD_A,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.60
type record RRLP_Flags_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   flag1,
  BIT7                   spare
} with { 
  variant "PRESENCE(iEI = '4A'O)";
  variant (lengthIndicator) "LENGTHTO (flag1,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


//11.3.61
type record RIM_Application_Identity
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   rIMApplicationIdentity
} with { 
  variant "PRESENCE(iEI = '4B'O)";
   variant (lengthIndicator) "LENGTHTO (rIMApplicationIdentity)";        
   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


//11.3.62
type record RIM_Sequence_Number
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT4                   rIMSequenceNumber
} with { 
  variant "PRESENCE(iEI = '4C'O)";
   variant (lengthIndicator) "LENGTHTO (rIMSequenceNumber)";        
   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,         ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


// Table 11.3.62a.1
type record RAN_Information_Request_RIM_Container
{
OCT1                         iEI,
BIT1                         ext,
LIN2_2a                      lengthIndicator,
RIM_Application_Identity     rIM_Application_Identity,
RIM_Sequence_Number          rIM_Sequence_Number,
RIM_PDU_Indications          rIM_PDU_Indications,
RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
RAN_Information_Request_Application_Container  application_Container optional,
SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity_TLV optional
} with { 
  variant "PRESENCE(iEI = '57'O)";
  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
           rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,
           application_Container,sON_Transfer_Application_Identity_TLV)";        
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,        ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)"; 
  variant (application_Container) 
     "PRESENCE
        (rIM_Application_Identity.rIMApplicationIdentity = '01'O,
         rIM_Application_Identity.rIMApplicationIdentity = '02'O,
         rIM_Application_Identity.rIMApplicationIdentity = '03'O)";                           
   variant (application_Container) 
     "CROSSTAG 
         (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
          si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
          mBMS_data_channel,rIM_Application_Identity.rIMApplicationIdentity = '03'O;)"       
};


// Table 11.3.62a.2
type record RAN_Information_RIM_Container
{
OCT1                         iEI,
BIT1                         ext,
LIN2_2a                      lengthIndicator,  
RIM_Application_Identity     rIM_Application_Identity,
RIM_Sequence_Number          rIM_Sequence_Number,
RIM_PDU_Indications          rIM_PDU_Indications,
RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
ApplContainer_or_ApplErrContainer  applContainer_or_ApplErrContainer optional,
SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
}  with { 
  variant "PRESENCE(iEI = '58'O)";
      variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
           rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,
           applContainer_or_ApplErrContainer,sON_Transfer_Application_Identity)";        
      variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                           length2,        ext = '0'B;)";
      variant (ext,lengthIndicator) "FIELDORDER(msb)";
      variant (applContainer_or_ApplErrContainer)
       "PRESENCE
           (rIM_Application_Identity.rIMApplicationIdentity = '01'O,
            rIM_Application_Identity.rIMApplicationIdentity = '02'O,
            rIM_Application_Identity.rIMApplicationIdentity = '03'O)";                
      variant (applContainer_or_ApplErrContainer) 
       "CROSSTAG
            (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
             si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
             mBMS_data_channel,rIM_Application_Identity.rIMApplicationIdentity = '03'O;)" 
};         


type union ApplContainer_or_ApplErrContainer
{
  ApplContainer_or_ApplErrContainer_NACC nacc,
  ApplContainer_or_ApplErrContainer_SI3 si3,
  ApplContainer_or_ApplErrContainer_MBMS_data_channel mBMS_data_channel 
}

type union ApplContainer_or_ApplErrContainer_NACC
{
 RAN_Information_Application_Container_NACC   application_Container,
 Application_Error_Container_NACC             application_Error_Container
};

type union ApplContainer_or_ApplErrContainer_SI3
{
 RAN_Information_Application_Container_SI3   application_Container,
 Application_Error_Container_SI3             application_Error_Container
};

type union ApplContainer_or_ApplErrContainer_MBMS_data_channel
{
 RAN_Information_Application_Container_MBMS_data_channel   application_Container,
 Application_Error_Container_MBMS_data_channel             application_Error_Container
};

// Table 11.3.62a.3
type record RAN_Information_Ack_RIM_Container
{
OCT1                         iEI,
BIT1                         ext,
LIN2_2a                      lengthIndicator,  
RIM_Application_Identity     rIM_Application_Identity,
RIM_Sequence_Number          rIM_Sequence_Number,
RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
} with { 
  variant "PRESENCE(iEI = '5A'O)";
  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
          rIM_Sequence_Number,rIM_Protocol_Version_Number,sON_Transfer_Application_Identity)";        
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,        ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


// Table 11.3.62a.4
type record RAN_Information_Error_RIM_Container
{
OCT1                         iEI,
BIT1                         ext,
LIN2_2a                      lengthIndicator,  
RIM_Application_Identity     rIM_Application_Identity,
Cause_BSSGP                  rIM_cause,
RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
PDU_in_Error                 pDU_in_Error,
SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
} with { 
  variant "PRESENCE(iEI = '5B'O)";
  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
         rIM_cause,rIM_Protocol_Version_Number,pDU_in_Error,sON_Transfer_Application_Identity)";        
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,        ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


// Table 11.3.62a.5
type record RAN_Information_Application_Error_RIM_Container
{
OCT1                         iEI,
BIT1                         ext,
LIN2_2a                      lengthIndicator,    
RIM_Application_Identity     rIM_Application_Identity,
RIM_Sequence_Number          rIM_Sequence_Number,
RIM_PDU_Indications          rIM_PDU_Indications,
RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
Application_Error_Container  application_Error_Container,
SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
} with { 
  variant "PRESENCE(iEI = '59'O)";
  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
    rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,  
    application_Error_Container,sON_Transfer_Application_Identity)";        
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,        ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
  variant (application_Error_Container)
   "CROSSTAG 
      (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
       si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
       mBMS_data_channel,rIM_Application_Identity.rIMApplicationIdentity = '03'O;)" 
};


// 11.3.63.1
type union RAN_Information_Request_Application_Container
{
RAN_Information_Request_Application_Container_NACC nacc,
RAN_Information_Request_Application_Container_SI3 si3,  
RAN_Information_Request_Application_Container_MBMS_data_channel mBMS_data_channel
}


//Table 11.3.63.1.1
type record RAN_Information_Request_Application_Container_NACC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 Cell_Identifier        reporting_Cell_Identifier
} with { 
  variant "PRESENCE(iEI = '4D'O)";
  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                      length2,          ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

//Table 11.3.63.1.2
type record RAN_Information_Request_Application_Container_SI3
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 Cell_Identifier        reporting_Cell_Identifier
} with { 
  variant "PRESENCE(iEI = '4D'O)";
   variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,          ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

//Table 11.3.63.1.3
type record RAN_Information_Request_Application_Container_MBMS_data_channel
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 Cell_Identifier        reporting_Cell_Identifier
} with { 
  variant "PRESENCE(iEI = '4D'O)";
  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//11.3.63.1.4
type record RAN_Information_Request_Application_Container_SON_transfer
{
  OCT1                  iEI,
  BIT1                  ext,
  LIN2_2a               lengthIndicator,
  Cell_Identifier       reporting_Cell_Identifier,
  OCTN                  sON_Transfer_Request_Container
} with { 
  variant "PRESENCE(iEI = '4D'O)";
  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier,sON_Transfer_Request_Container)";     
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//11.3.63.1.5
type record RAN_Information_Request_Application_Container_UTRA_SI
{
  OCT1                  iEI,
  BIT1                  ext,
  LIN2_2a               lengthIndicator,
  Cell_Identifier       reporting_Cell_Identifier
} with { 
  variant "PRESENCE(iEI = '4D'O)";
  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//Table 11.3.63.2.1
type record RAN_Information_Application_Container_NACC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 Cell_Identifier        reporting_Cell_Identifier,
 BIT1                   typeBit,
 BIT7                   number_of_SI_PSI,
 octetstring            sI_PSI
} with { 
  variant "PRESENCE(iEI = '4E'O)";
  variant (lengthIndicator) 
    "LENGTHTO (reporting_Cell_Identifier,typeBit,number_of_SI_PSI,sI_PSI)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};  

//Table 11.3.63.2.2
type record RAN_Information_Application_Container_SI3
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 Cell_Identifier        reporting_Cell_Identifier,
 SI3                    sI3
} with { 
  variant "PRESENCE(iEI = '4E'O)";
  variant (lengthIndicator) 
    "LENGTHTO (reporting_Cell_Identifier,sI3)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}; 

//44.018 9.1.35
type record SI3
{
 OCT1                              sI3MessageType,    //'1B'O
 OCT2                              cellIdentity,               //10.5.1.1 -> 24.008 
 LocationAreaIdentification        locationAreaIdentification, //10.5.1.3 -> 24.008
 ControlChannelDescription         controlChannelDescription,  //10.5.2.11
 CellOptions                       cellOptions,                //10.5.2.3
 CellSelectionParameters           cellSelectionParameters,    //10.5.2.4
 RACHControlParameters             rACHControlParameters,      //10.5.2.29
 OCT4                              sI3RestOctets               //10.5.2.34, bit encoded
}

type record LocationAreaIdentification
{
  HEX1               mccDigit1,
  HEX1               mccDigit2,
  HEX1               mccDigit3,
  HEX1               mncDigit3,
  HEX1               mncDigit1,
  HEX1               mncDigit2,
  OCT2               lac
}

type record ControlChannelDescription
{
 BIT3          cCCH_Conf,
 BIT3          bS_AG_BLKS_RES,
 BIT1          aTT,
 BIT1          mSCR,
 BIT3          bS_PA_MFRMS,
 BIT2          spare1,   //'00'B
 BIT2          cBQ3,
 BIT1          spare2,  //'0'B
 OCT1          t3212
}

type record CellOptions
{
 BIT4          radioLinkTimeout,
 BIT2          dTX1,
 BIT1          pWRC,
 BIT1          dtx2
}

type record CellSelectionParameters
{
 BIT5          mS_TXPWR_MAX_CCH,
 BIT3          cellReselectHysterisis,
 BIT6          rXLEV_Access_Min,
 BIT1          nECI,
 BIT1          aCS
}

type record RACHControlParameters 
{
 BIT1          rE,
 BIT1          cellBarrAccess,
 BIT4          tX_Integer,
 BIT2          maxRetrans,
 OCT1          aC_15_to_8,
 OCT1          aC_7_to_0    
}

//Table 11.3.63.2.3
type record RAN_Information_Application_Container_MBMS_data_channel
{
 OCT1                      iEI,
 BIT1                      ext,
 LIN2_2a                   lengthIndicator,
 Cell_Identifier           reporting_Cell_Identifier,
 octetstring               mBMS_data_channel_report  //bit encoded
} with { 
  variant "PRESENCE(iEI = '4E'O)";
  variant (lengthIndicator) 
    "LENGTHTO (reporting_Cell_Identifier,mBMS_data_channel_report)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//11.3.63.2.4
type record RAN_Information_Application_Container_SON_transfer
{
  OCT1                     iEI,
  BIT1                     ext,
  LIN2_2a                  lengthIndicator,
  BIT4                     rAT_Discriminator,
  BIT4                     spare,
  Cell_Identifier          reporting_Cell_Identifier,
  OCTN                     sON_Transfer_Response_Container
} with { 
  variant "PRESENCE(iEI = '4E'O)";
  variant (lengthIndicator) 
    "LENGTHTO (rAT_Discriminator,spare,reporting_Cell_Identifier,sON_Transfer_Response_Container)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//11.3.63.2.5
type record RAN_Information_Application_Container_UTRA_SI
{
  OCT1                     iEI,
  BIT1                     ext,
  LIN2_2a                  lengthIndicator,
  Cell_Identifier          reporting_Cell_Identifier,
  OCTN                     uTRA_SI_Container
} with { 
  variant "PRESENCE(iEI = '4E'O)";
  variant (lengthIndicator) 
    "LENGTHTO (reporting_Cell_Identifier,uTRA_SI_Container)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

// 11.3.64
type union Application_Error_Container
{
 Application_Error_Container_NACC               nacc,
 Application_Error_Container_SI3                si3,
 Application_Error_Container_MBMS_data_channel  mBMS_data_channel 
} 
      
//11.3.64.1 
type record Application_Error_Container_NACC
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   nACC_cause,
 Application_Container_IE_NACC  erroneousApplicationContainer
} with { 
  variant "PRESENCE(iEI = '56'O)";
  variant (lengthIndicator)
    "LENGTHTO (nACC_cause,erroneousApplicationContainer)"; 
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
 variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

       
type union Application_Container_IE_NACC
{
  RAN_Information_Request_Application_Container_NACC 
                        rAN_Information_Request_Application_Container,
            
  RAN_Information_Application_Container_NACC    
                        rAN_Information_Application_Container
};
     
//11.3.64.2 
type record Application_Error_Container_SI3
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   sI3_cause,
 Application_Container_IE_SI3  erroneousApplicationContainer
} with { 
  variant "PRESENCE(iEI = '56'O)";
  variant (lengthIndicator)
    "LENGTHTO (sI3_cause,erroneousApplicationContainer)"; 
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
 variant (ext,lengthIndicator) "FIELDORDER(msb)";
};     

type union Application_Container_IE_SI3
{
  RAN_Information_Request_Application_Container_SI3 
                        rAN_Information_Request_Application_Container,
            
  RAN_Information_Application_Container_SI3    
                        rAN_Information_Application_Container
};


//11.3.64.3 
type record Application_Error_Container_MBMS_data_channel
{
 OCT1                                        iEI,
 BIT1                                        ext,
 LIN2_2a                                     lengthIndicator,
 OCT1                                        mBMS_data_channel_cause,
 Application_Container_IE_MBMS_data_channel  erroneousApplicationContainer
} with { 
  variant "PRESENCE(iEI = '56'O)";
  variant (lengthIndicator)
    "LENGTHTO (mBMS_data_channel_cause,erroneousApplicationContainer)"; 
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
 variant (ext,lengthIndicator) "FIELDORDER(msb)";
};     

type union Application_Container_IE_MBMS_data_channel
{
  RAN_Information_Request_Application_Container_MBMS_data_channel 
                        rAN_Information_Request_Application_Container,
            
  RAN_Information_Application_Container_MBMS_data_channel    
                        rAN_Information_Application_Container
};

//11.3.64.4
type record Application_Error_Container_SON_transfer
{
 OCT1                                        iEI,
 BIT1                                        ext,
 LIN2_2a                                     lengthIndicator,
 OCT1                                        sON_transfer_cause,
 Application_Container_IE_SON_transfer       erroneousApplicationContainer
};

type union Application_Container_IE_SON_transfer
{
  RAN_Information_Request_Application_Container_SON_transfer
                        rAN_Information_Request_Application_Container,
  RAN_Information_Application_Container_SON_transfer
                        rAN_Information_Application_Container
};

//11.3.64.5
type record Application_Error_Container_UTRA_SI
{
 OCT1                                        iEI,
 BIT1                                        ext,
 LIN2_2a                                     lengthIndicator,
 OCT1                                        uTRA_SI_cause,
 Application_Container_IE_UTRA_SI            erroneousApplicationContainer
};

type union Application_Container_IE_UTRA_SI
{
  RAN_Information_Request_Application_Container_UTRA_SI
                        rAN_Information_Request_Application_Container,
  RAN_Information_Application_Container_UTRA_SI
                        rAN_Information_Application_Container
};

//11.3.65
type record RIM_PDU_Indications
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 BIT1                   ack,
 BIT3                   pDU_Type_Extension,
 BIT4                   reserved
} with { 
  variant "PRESENCE(iEI = '4F'O)";
  variant (lengthIndicator) "LENGTHTO (ack,pDU_Type_Extension,reserved)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};


//11.3.67
type record RIM_Protocol_Version_Number
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 OCT1                   rIMProtocolVersionNumber
} with {
   variant "PRESENCE(iEI = '55'O)";
   variant (lengthIndicator) "LENGTHTO (rIMProtocolVersionNumber)";   
   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                              length2,        ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

// 11.3.68
type record PFC_flow_control_parameters
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 integer                number_of_PFC (0..11),
 PFCs                   pFCs
} with {
  variant "PRESENCE(iEI = '52'O)";
  variant (lengthIndicator) "LENGTHTO (number_of_PFC,pFCs)"; 
  variant (number_of_PFC) "LENGTHTO (pFCs)";
  variant (number_of_PFC) "UNIT(elements)"
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        

type record length(0..11) of  PFC PFCs;

type record PFC
{
BIT7                    pFI_Value,
BIT1                    spare,  //  '0'B according to 10.5.6.11 of 24.008
OCT2                    bmax_PFC,
OCT2                    r_PFC,
OCT1                    b_PFC
};

// 11.3.69
type record Global_CN_Id_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  Global_CN_Id_Value     global_CN_Id   //  encoded Global CN-Id
} with { 
  variant "PRESENCE(iEI = '53'O)";
  variant (lengthIndicator) "LENGTHTO (global_CN_Id)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record Global_CN_Id_Value
{
 HEX1                    mccDigit1,
 HEX1                    mccDigit2,
 HEX1                    mccDigit3,
 HEX1                    mncDigit3,
 HEX1                    mncDigit1,
 HEX1                    mncDigit2, 
 OCT2                    cN_Id
}


// 11.3.70
type record RIM_Routing_Information
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 HEX1                   rIMRoutingAddressDiscriminator,
 HEX1                   spare,
 RIM_Routing_Address    rIM_Routing_Address 
}  with { 
  variant "PRESENCE(iEI = '54'O)";
  variant (lengthIndicator) 
    "LENGTHTO (rIMRoutingAddressDiscriminator,spare,rIM_Routing_Address)"; 
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
  variant (rIM_Routing_Address) 
    "CROSSTAG (cell_Identifier, rIMRoutingAddressDiscriminator = '0'H;
               globalRNCID,     rIMRoutingAddressDiscriminator = '1'H;
               eNB_Identifier,  rIMRoutingAddressDiscriminator = '2'H;
               eHRPD_SectorID,  rIMRoutingAddressDiscriminator = '3'H
               )" 
};

type union RIM_Routing_Address
{
  Cell_Identifier_V   cell_Identifier, 
  GlobalRNC_ID_BSSGP  globalRNCID,
  ENB_Identifier_V    eNB_Identifier,
  octetstring         eHRPD_SectorID
}

type record GlobalRNC_ID_BSSGP
{
 HEX1                   mccDigit1,
 HEX1                   mccDigit2,
 HEX1                   mccDigit3,
 HEX1                   mncDigit3,
 HEX1                   mncDigit1,
 HEX1                   mncDigit2,
 OCT2                   lac,
 OCT1                   rac, 
 HEX1                   spare,
 integer                rNC_ID
}  with { 
    variant (spare,rNC_ID) "FIELDORDER(msb)";
    variant (rNC_ID) "BYTEORDER(last)";  
    variant (rNC_ID) "FIELDLENGTH(12)";
}

type record  ENB_Identifier_V {
  HEX1               mccDigit1,
  HEX1               mccDigit2,
  HEX1               mccDigit3,
  HEX1               mncDigit3,
  HEX1               mncDigit1,
  HEX1               mncDigit2,
  OCT2               tac,  
  octetstring       globaleNBID
}


// 11.3.71 
type record MBMS_Session_Identity
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 OCT1                    mBMS_Session_Identifier_Value
} with { 
  variant "PRESENCE(iEI = '5D'O)";
  variant (lengthIndicator) "LENGTHTO (mBMS_Session_Identifier_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        


// 11.3.72 
// 29.061 

type record MBMS_Session_Duration
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 octetstring            mBMS_Session_Duration_Value
} with { 
  variant "PRESENCE(iEI = '5E'O)";
  variant (lengthIndicator) "LENGTHTO (mBMS_Session_Duration_Value)";  
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,         ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        


// 11.3.73 
type record MBMS_Service_Area_Identity_List
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 octetstring            mBMS_Service_Area_Identity_List_Value       
} with { 
  variant "PRESENCE(iEI = '5F'O)";
  variant (lengthIndicator) 
             "LENGTHTO (mBMS_Service_Area_Identity_List_Value)";        
  variant (lengthIndicator) "CROSSTAG( length1,       ext = '1'B;
                                       length2,       ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        


// 11.3.74
type record MBMS_Response
{
 OCT1                   iEI,
 BIT1                   ext,
 LIN2_2a                lengthIndicator,
 HEX1                   causeValue,
 HEX1                   spare
} with { 
  variant "PRESENCE(iEI = '60'O)";
  variant (lengthIndicator) "LENGTHTO (causeValue,spare)";        
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,        ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        


// 11.3.75
type record MBMS_Routing_Area_List
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 HEX1                    spare,
 HEX1                    number_of_Routing_Area_Identifications, 
 octetstring             routing_Area_Identifications optional 

} with { 
  variant "PRESENCE(iEI = '61'O)";
   variant (lengthIndicator) 
     "LENGTHTO (spare,number_of_Routing_Area_Identifications,
      routing_Area_Identifications)";     
   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                        length2,         ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";        
};


// 11.3.76
type record MBMS_Session_Information
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 BIT1                    bCMC,
 BIT7                    spare
} with { 
  variant "PRESENCE(iEI = '62'O)";
  variant (lengthIndicator) "LENGTHTO (bCMC, spare)";        
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,        ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};

//11.3.77 
// 24.008 10.5.6.13
type record TMGI_BSSGP
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 OCT3                    mBMS_Service_ID,
 HEX1                    mccDigit1,
 HEX1                    mccDigit2,
 HEX1                    mccDigit3,
 HEX1                    mncDigit3,
 HEX1                    mncDigit1,
 HEX1                    mncDigit2 
} with { 
  variant "PRESENCE(iEI = '5C'O)";
   variant (lengthIndicator) "LENGTHTO
         (mBMS_Service_ID,mccDigit1,mccDigit2,mccDigit3,mncDigit3,
      mncDigit1,mncDigit2)";        
   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
                                        length2,         ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
};        
       
// 11.3.78 MBMS Stop Cause
type record MBMS_Stop_Cause
{
 OCT1                    iEI,
 BIT1                    ext,
 LIN2_2a                 lengthIndicator,
 HEX1                    causeValue,
 HEX1                    spare
} with { 
  variant "PRESENCE(iEI = '63'O)";
  variant (lengthIndicator) "LENGTHTO (causeValue, spare)";        
  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
                                       length2,        ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
};
 
// 11.3.79
type record Source_BSS_to_Target_BSS_Transparent_Container_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  Source_BSS_to_Target_BSS_Transparent_Container_Contents
      source_BSS_to_Target_BSS_Transparent_Container_Contents
} with { 
  variant "PRESENCE(iEI = '64'O)";
  variant (lengthIndicator) "LENGTHTO (source_BSS_to_Target_BSS_Transparent_Container_Contents)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record Source_BSS_to_Target_BSS_Transparent_Container_Contents
{
  MS_Radio_Access_Capability        mS_Radio_Access_Capability,
  Inter_RAT_Handover_Info_BSSGP     inter_RAT_Handover_Info optional,
  Page_Mode_BSSGP                   page_Mode_BSSGP optional,
  Container_ID_BSSGP                container_ID optional,
  Global_TFI_BSSGP                  global_TFI optional,
  PS_HandoverIndications            pS_HandoverIndications optional,
  CS_Indication                     cS_Indication optional,
  E_UTRAN_Inter_RAT_Handover_Info	e_UTRAN_Inter_RAT_Handover_Info optional,
  IRAT_Measurement_Configuration    iRAT_Measurement_Configuration optional,
  Source_Cell_ID                    source_Cell_ID optional,
  IRAT_Measurement_Configuration_Extended_eARFCNs iRAT_Measurement_Configuration_Extended_eARFCNs optional
};

// 11.3.80
type record Target_BSS_to_Source_BSS_Transparent_Container
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  Target_BSS_to_Source_BSS_Transparent_Container_Contents
                         target_BSS_to_Source_BSS_Transparent_Container_Contents
} with { 
  variant "PRESENCE(iEI = '65'O)";
  variant (lengthIndicator) "LENGTHTO (target_BSS_to_Source_BSS_Transparent_Container_Contents)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}
//Note: Only  PS_Handover_Command_BSSGP or DTM_Handover_Command is present
type record Target_BSS_to_Source_BSS_Transparent_Container_Contents
{
  PS_Handover_Command_BSSGP  pS_Handover_Command optional,
  SI_PSI_Container           sI_PSI_Container optional,    //NEW  
  DTM_Handover_Command       dTM_Handover_Command optional    //NEW  
}

// 11.3.81
type record NAS_container_for_PS_Handover
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  NAS_Container_for_PS_HO            nAS_Container_for_PS_HO
} with { 
  variant "PRESENCE(iEI = '66'O)";
  variant (lengthIndicator) "LENGTHTO (nAS_Container_for_PS_HO)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//24.008 10.5.1.14
type record NAS_Container_for_PS_HO
{
  BIT3          typeOfCipheringAlgorithm,
  BIT1          spare1,
  BIT1          oldXID,
  BIT3          spare2,
  OCT4          iOV_UI
}

// 11.3.82
type record PFCs_to_be_set_up_list
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  integer                number_of_PFCs (1..11),   // note: 0 and 12 .. 255 are reserved!!!
  Multiple_PFCs_BSSGP    pFCs
} with { 
  variant "PRESENCE(iEI = '67'O)";
  variant (lengthIndicator) "LENGTHTO (number_of_PFCs,pFCs)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
  variant (number_of_PFCs) "UNIT(elements),LENGTHTO(pFCs),FIELDORDER(msb),FIELDLENGTH(8)";
}

type record Single_PFC_BSSGP
{
  PFI                               pFI,
  GPRS_Timer                        pFT,
  ABQP                              aBQP,
  Priority_BSSGP                    allocation_Retention_Priority optional,
  GPRS_Timer                        t10 optional
}

type record length (1..11) of Single_PFC_BSSGP Multiple_PFCs_BSSGP;


// 11.3.83
type record List_of_set_up_PFCs_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  integer                number_of_PFCs (0..11),   // note: 12 .. 255 are reserved!!!
  Multiple_PFIs_BSSGP    pFIs
} with { 
  variant "PRESENCE(iEI = '68'O)";
  variant (lengthIndicator) "LENGTHTO (number_of_PFCs,pFIs)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
  variant (number_of_PFCs) "UNIT(elements),LENGTHTO(pFIs),FIELDORDER(msb),FIELDLENGTH(8)";
}

type record Single_PFI_BSSGP
{
  BIT7  pFI_Value,
  BIT1  spare
}

type record length (0..11) of Single_PFI_BSSGP Multiple_PFIs_BSSGP;


// 11.3.84 Extended Feature Bitmap
type record Extended_Feature_Bitmap
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   pS_Handover,
  BIT1                   gigabitInterface,
  BIT1                   mOCN,
  BIT1                   cS_PS_Coordination_Enhancements,
  BIT4                   spare
} with { 
  variant "PRESENCE(iEI = '69'O)";
  variant (lengthIndicator) "LENGTHTO (pS_Handover,gigabitInterface,mOCN,cS_PS_Coordination_Enhancements,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.85
type record Source_to_Target_Transparent_Container
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring          source_to_Target_Transparent_Container_Contents //RANAP ASN.1 PER
} with { 
  variant "PRESENCE(iEI = '6A'O)";
  variant (lengthIndicator) "LENGTHTO (source_to_Target_Transparent_Container_Contents)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.86
type record Target_to_Source_Transparent_Container
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring          handover_to_UTRAN_or_Radio_Bearer_Reconfiguration_radio_interface_message //ASN.1
} with { 
  variant "PRESENCE(iEI = '6B'O)";
  variant (lengthIndicator) "LENGTHTO (handover_to_UTRAN_or_Radio_Bearer_Reconfiguration_radio_interface_message)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}



// 11.3.87
type record RNC_Identifier_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  HEX1                   mccDigit1,
  HEX1                   mccDigit2,
  HEX1                   mccDigit3,
  HEX1                   mncDigit3,
  HEX1                   mncDigit1,
  HEX1                   mncDigit2,
  OCT2                   lac,
  OCT1                   rac,    
  OCT2               	 rNC_ID
} with { 
  variant "PRESENCE(iEI = '6C'O)";
  variant (lengthIndicator) "LENGTHTO (mccDigit1, mccDigit2, mccDigit3, mncDigit3, mncDigit1, mncDigit2,
                                        lac, rac, rNC_ID)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

 
// 11.3.88
type record Page_Mode_BSSGP
{
  OCT1                            iEI,
  BIT1                            ext,
  LIN2_2a                         lengthIndicator,
  BIT2                            page_mode,  // specified in 3GPP TS 44.060
  BIT6                            reserved
} with { 
  variant "PRESENCE(iEI = '6D'O)";
  variant (lengthIndicator) "LENGTHTO (page_mode,reserved)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

  
// 11.3.89
type record Container_ID_BSSGP
{
  OCT1                            iEI,
  BIT1                            ext,
  LIN2_2a                         lengthIndicator,
  BIT2                            container_ID,   // specified in 3GPP TS 44.060
  BIT6                            reserved
} with { 
  variant "PRESENCE(iEI = '6E'O)";
  variant (lengthIndicator) "LENGTHTO (container_ID,reserved)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.90
type record Global_TFI_BSSGP
{
  OCT1                            iEI,
  BIT1                            ext,
  LIN2_2a                         lengthIndicator,
  BIT6                            global_TFI,   // specified in 3GPP TS 44.060
  BIT2                            reserved  
} with {
  variant "PRESENCE(iEI = '6F'O)";
  variant (lengthIndicator) "LENGTHTO (global_TFI,reserved)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.91
type record IMEI_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  IMEI_Value             iMEI 
} with { 
  variant "PRESENCE(iEI = '70'O)";
  variant (lengthIndicator) "LENGTHTO (iMEI)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record IMEI_Value
{
 BIT3               typeOfIdentity,
 BIT1               oddevenIndicator,
 hexstring          digits  length(15)
}


// 11.3.92 Time to MBMS Data Transfer
type record Time_To_MBMS_Data_Transfer
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   valuePart
} with { 
  variant "PRESENCE(iEI = '71'O)";
  variant (lengthIndicator) "LENGTHTO (valuePart)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.93 MBMS Session Repetition Number
type record MBMS_Session_Repetition_Number
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            repetitionNumber
} with { 
  variant "PRESENCE(iEI = '72'O)";
  variant (lengthIndicator) "LENGTHTO (repetitionNumber)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.94
type record Inter_RAT_Handover_Info_BSSGP
{
  OCT1                            iEI,
  BIT1                            ext,
  LIN2_2a                         lengthIndicator,
  octetstring                     inter_RAT_Handover_Information //as specified in 3GPP TS 25.331
} with { 
  variant "PRESENCE(iEI = '73'O)";
  variant (lengthIndicator) "LENGTHTO (inter_RAT_Handover_Information)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.95
type record PS_Handover_Command_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            pS_Handover_Command_radio_interface_message
} with { 
  variant "PRESENCE(iEI = '74'O)";
  variant (lengthIndicator) "LENGTHTO (pS_Handover_Command_radio_interface_message)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.95a
type record PS_HandoverIndications
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   sI_PSI,
  BIT2                   dMLC_Carriers,
  BIT5                   spare
} with { 
  variant "PRESENCE(iEI = '75'O)";
  variant (lengthIndicator) "LENGTHTO (sI_PSI,dMLC_Carriers,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


// 11.3.95b
type record  SI_PSI_Container
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   typeField, 
  SI_PSI_ContainerValue  sI_PSI_ContainerValue
} with { 
   variant "PRESENCE(iEI = '76'O)";  
   variant (lengthIndicator) "LENGTHTO (typeField,sI_PSI_ContainerValue)";
   variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                        length2,    ext = '0'B;)";
   variant (ext,lengthIndicator) "FIELDORDER(msb)";
   variant (sI_PSI_ContainerValue) "CROSSTAG 
      (
       sI_message_Container,          typeField ='0'B;
       pSI_message_Container,         typeField ='1'B;
      )"; 
 };   

type union SI_PSI_ContainerValue
{
  SI_message_Container   sI_message_Container,
  PSI_message_Container  pSI_message_Container
}

type record SI_message_Container 
{
  integer           number_of_SI,
  SI_message_List   sI_message_List
} with { 
  variant (number_of_SI) "UNIT(elements),LENGTHTO(sI_message_List),FIELDORDER(msb),FIELDLENGTH(7)";
}

type record PSI_message_Container
{
  integer            number_of_PSI,
  PSI_message_List   pSI_message_List
} with { 
   variant (number_of_PSI) "UNIT(elements),LENGTHTO(pSI_message_List),FIELDORDER(msb),FIELDLENGTH(7)";
}

type record of SI_message  SI_message_List;

type record of PSI_message  PSI_message_List;

type octetstring SI_message length (21);

type octetstring PSI_message length (22);


// 11.3.95c  48.008 CR 240
type record Active_PFCs_List_BSSGP
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  integer                number_of_PFCs (0..11),   // note: 12 .. 255 are reserved!!!
  Multiple_PFIs_BSSGP    pFIs
} with {
  variant "PRESENCE(iEI = '77'O)";
  variant (lengthIndicator) "LENGTHTO (number_of_PFCs,pFIs)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
  variant (number_of_PFCs) "UNIT(elements),LENGTHTO(pFIs),FIELDORDER(msb),FIELDLENGTH(8)";
}

//11.3.96
type record VelocityData
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            velocityDataValue // 23.032
}with { 
  variant "PRESENCE(iEI = '78'O)";
  variant (lengthIndicator) "LENGTHTO (velocityDataValue)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//11.3.97
type record DTM_Handover_Command
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  octetstring            dTM_HandoverCommandValue // 44.060
} with { 
  variant "PRESENCE(iEI = '79'O)";
  variant (lengthIndicator) "LENGTHTO (dTM_HandoverCommandValue)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}
  
//11.3.98
type record CS_Indication 
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   cS_IndicationContents  //48.008
}  with { 
  variant "PRESENCE(iEI = '7A'O)";
  variant (lengthIndicator) "LENGTHTO (cS_IndicationContents)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.99
type record Requested_GANSS_Assistance_Data
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,  
  octetstring            requested_GANSS_Assistance_Data_Value   //49.031
} with { 
  variant "PRESENCE(iEI = '7B'O)";
  variant (lengthIndicator) "LENGTHTO (requested_GANSS_Assistance_Data_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.100
type record GANSS_Location_Type
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,  
  BIT1                   galileo, 
  BIT7                   spare                                        
} with { 
  variant "PRESENCE(iEI = '7C'O)";
  variant (lengthIndicator) "LENGTHTO (galileo,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

// 11.3.101
//49.031
type record GANSS_Positioning_Data
{  
  OCT1                         iEI,
  BIT1                         ext,
  LIN2_2a                      lengthIndicator,
  GANSS_Positioning_DataList   gANSS_Positioning_DataList                                        
} with { 
  variant "PRESENCE(iEI = '7D'O)";
  variant (lengthIndicator) "LENGTHTO (gANSS_Positioning_DataList)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record of GANSS_Positioning_DataValue GANSS_Positioning_DataList

type record GANSS_Positioning_DataValue
{
  BIT3                   usage,
  BIT3                   gANSS_ID,
  BIT2                   method    
}

//11.3.102
type record Flow_Control_Granularity
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT2                   granularity,
  BIT6                   reserved                                           
} with { 
  variant "PRESENCE(iEI = '7E'O)";
  variant (lengthIndicator) "LENGTHTO (granularity,reserved)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


//11.3.103
type record ENB_Identifier
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  HEX1					 mccDigit1,
  HEX1					 mccDigit2,
  HEX1					 mccDigit3,
  HEX1					 mncDigit3,
  HEX1					 mncDigit1,
  HEX1					 mncDigit2,
  OCT2					 tac,
  OCTN					 globalEnbID  
                                      
} with { 
  variant "PRESENCE(iEI = '7F'O)";
  variant (lengthIndicator) "LENGTHTO (mccDigit1, mccDigit2, mccDigit3, mncDigit3, mncDigit1,
   										mncDigit2, tac, globalEnbID)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


//11.3.104
type record E_UTRAN_Inter_RAT_Handover_Info
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCTN					 ue_EUTRA_Capability
                                      
} with { 
  variant "PRESENCE(iEI = '80'O)";		
  variant (lengthIndicator) "LENGTHTO (ue_EUTRA_Capability)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}


//11.3.105
type record Subscriber_Profile_ID_For_RAT_Priority
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT8					 profile_ID                                                    
} with { 
  variant "PRESENCE(iEI = '81'O)";
  variant (lengthIndicator) "LENGTHTO (profile_ID)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//11.3.106
type record Request_For_Inter_RAT_Handover_Info
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   interRATHandoverInfoRequest,
  BIT1					 eUTRANinterRATHandoverInfoRequest,
  BIT6                   spare                                           
} with { 
  variant "PRESENCE(iEI = '82'O)"; 
  variant (lengthIndicator) "LENGTHTO (interRATHandoverInfoRequest,eUTRANinterRATHandoverInfoRequest,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//11.3.107
type record Reliable_Inter_RAT_Handover_Info
{  
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   reliableInterRATHandoverInfoIndicator,
  BIT7                   spare                                           
} with { 
  variant "PRESENCE(iEI = '83'O)";	
  variant (lengthIndicator) "LENGTHTO (reliableInterRATHandoverInfoIndicator,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//11.3.108
type record SON_Transfer_Application_Identity_TLV
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCTN                   sON_Transfer_Application_Identity  //3GPP TS 36.413 [36]
} with {
  variant "PRESENCE(iEI = '84'O)";
  variant (lengthIndicator) "LENGTHTO (sON_Transfer_Application_Identity)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//11.3.109
type record CSG_Identifier_TLV
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  CSG_Identity           cSG_Identity,  //3GPP TS 23.003, bits 4 to 8 of octet 6 are spare
  BIT1                   cell_Acces_Mode,
  BIT7                   spare
} with {
  variant "PRESENCE(iEI = '85'O)";
  variant (lengthIndicator) "LENGTHTO (cSG_Identity,cell_Acces_Mode,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

type record CSG_Identity
{
  OCT3					cSG_Id24, 
  BIT3					cSG_Id3,
  BIT5					spare // '0'B
};

//11.3.110
type record Tracking_Area_Code_TLV
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT3                   valueField  //3GPP TS 24.301
} with {
  variant "PRESENCE(iEI = '86'O)";
  variant (lengthIndicator) "LENGTHTO (valueField)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";
}

//11.3.111
type record Redirect_Attempt_Flag
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   spare  
} with {
  variant "PRESENCE(iEI = '87'O)";
  variant (lengthIndicator) "LENGTHTO (spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.112
type record Redirection_Indication
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator, 
  BIT8                   reroute_Reject_Cause_value
} with {
  variant "PRESENCE(iEI = '88'O)";
  variant (lengthIndicator) "LENGTHTO (reroute_Reject_Cause_value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				       				       
}

//11.3.113
type record Redirection_Completed
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,   
  BIT8                   outcome_value
} with {
  variant "PRESENCE(iEI = '89'O)";
  variant (lengthIndicator) "LENGTHTO (outcome_value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)";
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				                
}
 
//11.3.114
type record Unconfirmed_Send_State_Variable
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator, 
  BIT7                   spare,           
  integer                vU  
} with {
  variant "PRESENCE(iEI = '8A'O)";
  variant (lengthIndicator) "LENGTHTO (spare,vU)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				       
  variant (vU) "FIELDLENGTH(9)";
  variant (vU) "BYTEORDER(last)";				       
  variant (spare,vU) "FIELDORDER(msb)";				       				       
}

//11.3.115
type record IRAT_Measurement_Configuration
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator, 
  INT6b                  reportingThreshold,
  BIT1                   repQuant,
  BIT1                   spare,
  INT1                   measurementDuration,   
  Measurement_List       measurement_List
} with {
  variant "PRESENCE(iEI = '8B'O)";
  variant (lengthIndicator) "LENGTHTO (reportingThreshold,repQuant,spare,measurementDuration,measurement_List)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				       
}				      
				      				      
type record Measurement
{
  LIN2_BO_LAST           e_ARFCN,
  BIT3                   measurementBandwidth,
  BIT5                   spare
}

type record of Measurement Measurement_List;
				       
type record RNC_Id_with_Transparent_Container_BSSGP 
{
  RNC_Identifier_BSSGP  target_RNC_Identifier,
  Source_to_Target_Transparent_Container
                               source_to_Target_Transparent_Container
}

type union Cell_or_RNC_Id_with_Transparent_Container_BSSGP
{
  Cell_Id_with_Transparent_Container_BSSGP  cell_Id_with_Transparent_Container,
  RNC_Id_with_Transparent_Container_BSSGP   rnc_Id_with_Transparent_Container
}

type record Cell_Id_with_Transparent_Container_BSSGP
{
  Cell_Identifier                target_Cell_Identifier,
  Source_BSS_to_Target_BSS_Transparent_Container_BSSGP
      source_BSS_to_Target_BSS_Transparent_Container
}

//11.3.116
type record SCI
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   service_Class_Value
} with {
  variant "PRESENCE(iEI = '8c'O)";
  variant (lengthIndicator) "LENGTHTO (service_Class_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.117
type record GGSN_PGW_Location
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT3                   gGSN_PGW_Location_Value,
  BIT5                   spare
} with {
  variant "PRESENCE(iEI = '8d'O)";
  variant (lengthIndicator) "LENGTHTO (gGSN_PGW_Location_Value)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.118
type record Selected_PLMN_ID
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  HEX1                   mccDigit1,
  HEX1                   mccDigit2,
  HEX1                   mccDigit3,
  HEX1                   mncDigit3,
  HEX1                   mncDigit1,
  HEX1                   mncDigit2 
} with {
  variant "PRESENCE(iEI = '8e'O)";
  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.119
type record Priority_Class_Indicator
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT1                   priority_Class_Indicator_Value,
  BIT7                   spare
} with {
  variant "PRESENCE(iEI = '8f'O)";
  variant (lengthIndicator) "LENGTHTO (priority_Class_Indicator_Value,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.120
type record Source_Cell_ID
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  TrackingAreaIdentity_BSSGP tracking_Area_Identity,
  ECGI_BSSGP             eUTRAN_CGI,
  octetstring            globaleNBID
} with {
  variant "PRESENCE(iEI = '90'O)";
  variant (lengthIndicator) "LENGTHTO (tracking_Area_Identity,eUTRAN_CGI,globaleNBID)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}
type record TrackingAreaIdentity_BSSGP
{
  HEX1               mccDigit1,
  HEX1               mccDigit2,
  HEX1               mccDigit3,
  HEX1               mncDigit3,
  HEX1               mncDigit1,
  HEX1               mncDigit2,
  OCT2               tAC
} 

type record ECGI_BSSGP
{
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  HEX1                         spare,     
  integer                      eCI
} with {
  variant (spare,eCI) "FIELDORDER(msb)";     
  variant(eCI) "FIELDLENGTH(28)";
  variant (eCI) "BYTEORDER(last)";
};


//11.3.121
type record IRAT_Measurement_Configuration_Extended_eARFCNs
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  INT6b                  reportingThreshold,
  BIT1                   repQuant,
  BIT1                   spare,
  INT1                   measurementDuration,   
  Measurement_List_Extended measurement_List
} with {
  variant "PRESENCE(iEI = '91'O)";
  variant (lengthIndicator) "LENGTHTO (reportingThreshold,repQuant,spare,measurementDuration,measurement_List)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

type record Measurement_Extended
{
  INT18b_BO_LAST         e_ARFCN,
  BIT3                   spare,
  BIT3                   measurementBandwidth
} with {
  variant (e_ARFCN,spare,measurementBandwidth) "FIELDORDER(msb)";				          
}
type record of Measurement_Extended Measurement_List_Extended;

//11.3.122
type record EDRX_Parameters
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  BIT4                   eDRX_Cycle_Value,
  BIT4                   spare
} with {
  variant "PRESENCE(iEI = '92'O)";
  variant (lengthIndicator) "LENGTHTO (eDRX_Cycle_Value,spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.123
type record Time_Until_Next_Paging_Occasion
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  INT6b                  minutes,
  BIT2                   spare,
  INT6b                  seconds,
  BIT2                   spare2
} with {
  variant "PRESENCE(iEI = '93'O)";
  variant (lengthIndicator) "LENGTHTO (minutes,spare,seconds,spare2)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.124
type record Old_Routing_Area_Identification
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  HEX1                   mccDigit1,
  HEX1                   mccDigit2,
  HEX1                   mccDigit3,
  HEX1                   mncDigit3,
  HEX1                   mncDigit1,
  HEX1                   mncDigit2,
  OCT2                   lac,
  OCT1                   rac
} with {
  variant "PRESENCE(iEI = '94'O)";
  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2,lac,rac)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.125
type record Attach_Indicator
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   spare
} with {
  variant "PRESENCE(iEI = '95'O)";
  variant (lengthIndicator) "LENGTHTO (spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.126
type record PLMN_Identity
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  HEX1                   mccDigit1,
  HEX1                   mccDigit2,
  HEX1                   mccDigit3,
  HEX1                   mncDigit3,
  HEX1                   mncDigit1,
  HEX1                   mncDigit2 
} with {
  variant "PRESENCE(iEI = '96'O)";
  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}

//11.3.127
type record MME_Query
{
  OCT1                   iEI,
  BIT1                   ext,
  LIN2_2a                lengthIndicator,
  OCT1                   spare
} with {
  variant "PRESENCE(iEI = '97'O)";
  variant (lengthIndicator) "LENGTHTO (spare)";
  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
                                       length2,    ext = '0'B;)"; 
  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
}


//-----------------------------------------------------------------------------
// PDUs
//-----------------------------------------------------------------------------

//10.2.1
type record PDU_BSSGP_DL_UNITDATA 
{
 OCT1                              bssgpPduType,
 OCT4                              tLLI_current,
 QoS_Profile_V                     qoS_Profile,
 PDU_Lifetime                      pDU_Lifetime,
 MS_Radio_Access_Capability        mS_Radio_Access_Capability optional,
 Priority_BSSGP                    priority optional,
 DRX_Parameters                    dRX_Parameters optional,
 IMSI_BSSGP                        iMSI optional,
 TLLI_BSSGP                        tLLI_old optional,
 PFI                               pFI optional,
 LSA_Information_BSSGP             lSA_Information optional,
 Service_UTRAN_CCO                 service_UTRAN_CCO optional,
 Service_Class_Indicator           service_Class_Indicator optional,
 Subscriber_Profile_ID_For_RAT_Priority  subscriber_Profile_ID_For_RAT_Priority optional,
 Redirection_Indication            redirection_Indication optional,
 Redirection_Completed             redirection_Completed optional, 
 Unconfirmed_Send_State_Variable   unconfirmed_Send_State_Variable optional,
 SCI                               sCI optional,
 GGSN_PGW_Location                 gGSN_PGW_Location optional,
 EDRX_Parameters                   eDRX_Paremeters optional,
 Old_Routing_Area_Identification   old_Routing_Area_Identification optional,
 Attach_Indicator                  attach_Indicator optional,
 Alignment_octets                  alignment_octets optional,
 LLC_PDU                           lLC_PDU,
 LLC_PDU                           initialLLC_PDU optional
} with { variant "PRESENCE(bssgpPduType = '00'O)"; };

//10.2.2
type record PDU_BSSGP_UL_UNITDATA
{
 OCT1                              bssgpPduType,
 OCT4                              tLLI,
 QoS_Profile_V                     qoS_Profile,
 Cell_Identifier                   cell_Identifier,
 PFI                               pFI optional,
 LSA_Identifier_List_BSSGP         lSA_Identifier_List optional,
 Redirect_Attempt_Flag             redirect_Attempt_Flag optional,
 IMSI_BSSGP                        iMSI_BSSGP optional,
 Unconfirmed_Send_State_Variable   unconfirmed_Send_State_Variable optional,
 Selected_PLMN_ID                  selected_PLMN_ID optional,
 PLMN_Identity                     selected_Operator optional,
 PLMN_Identity                     cS_Registered_Operator optional, 
 Alignment_octets                  alignment_octets optional,
 LLC_PDU                           lLC_PDU
} with { variant "PRESENCE(bssgpPduType = '01'O)"; };

//10.2.3
type record PDU_BSSGP_RA_CAPABILITY
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,
 MS_Radio_Access_Capability        mS_Radio_Access_Capability
} with { variant "PRESENCE(bssgpPduType = '02'O)"; };

//10.2.5
type record PDU_BSSGP_DL_MBMS_UNITDATA
{
 OCT1                              bssgpPduType,
 PDU_Lifetime                      pDU_Lifetime,
 TMGI_BSSGP                        tMGI,
 MBMS_Session_Identity             mBMS_Session_Identity optional,
 Alignment_octets                  alignment_octets optional,
 LLC_PDU                           lLC_PDU
} with { variant "PRESENCE(bssgpPduType = '04'O)"; };


// 10.2.6; Deleted from spec 7.10.0,kept in prot module for backward compatibility
type record PDU_BSSGP_UL_MBMS_UNITDATA
{
 OCT1                              bssgpPduType,
 TMGI_BSSGP                        tMGI,
 MBMS_Session_Identity             mBMS_Session_Identity optional,
 Alignment_octets                  alignment_octets optional,
 LLC_PDU                           lLC_PDU
} with { variant "PRESENCE(bssgpPduType = '05'O)"; };

// 10.3.1
type record PDU_BSSGP_PAGING_PS 
{
 OCT1                              bssgpPduType,
 IMSI_BSSGP                        iMSI,
 DRX_Parameters                    dRX_Parameters optional,  
 Paging_Field4                     paging_Field4,
 PFI                               pFI optional,
 ABQP                              aBQP optional,
 QoS_Profile                       qoS_Profile,
 TMSI_BSSGP                        pTMSI optional,
 EDRX_Parameters                   eDRX_Paremeters optional
} with { variant "PRESENCE(bssgpPduType = '06'O)"; };

//10.3.2
type record PDU_BSSGP_PAGING_CS
{
 OCT1                              bssgpPduType,
 IMSI_BSSGP                        iMSI,
 DRX_Parameters                    dRX_Parameters,
 Paging_Field4                     paging_Field4,
 TLLI_BSSGP                        tLLI optional,
 Channel_needed                    channel_needed optional,
 EMLPP_Priority_BSSGP              eMLPP_Priority optional,
 TMSI_BSSGP                        tMSI optional,
 Global_CN_Id_BSSGP                global_CN_Id optional
} with { variant "PRESENCE(bssgpPduType = '07'O)"; };


type union Paging_Field4
{
 BVCI                              bVCI,                                      
 Location_Area                     location_Area,                   
 Routeing_Area                     routeing_Area,                   
 BSS_Area_Indication               bSS_Area_Indication                 
};

//10.3.3
type record PDU_BSSGP_RA_CAPABILITY_UPDATE
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,
 Tag                               tag
} with { variant "PRESENCE(bssgpPduType = '08'O)"; };


//10.3.4
type record PDU_BSSGP_RA_CAPABILITY_UPDATE_ACK
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,
 Tag                               tag,
 IMSI_BSSGP                        iMSI optional,
 RA_Cap_UPD_CAUSE                  rA_Cap_UPDATE_CAUSE,
 MS_Radio_Access_Capability        mS_Radio_Access_Capability optional     
} with { variant "PRESENCE(bssgpPduType = '09'O)"; };

//10.3.5
type record PDU_BSSGP_RADIO_STATUS
{
  OCT1                              bssgpPduType,
  TLLI_BSSGP                        tLLI optional,
  TMSI_BSSGP                        tMSI optional,
  IMSI_BSSGP                        iMSI optional,
  Radio_Cause                       radio_Cause
} with { variant "PRESENCE(bssgpPduType = '0A'O)"; };

//10.3.6
type record PDU_BSSGP_SUSPEND
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,        
 Routeing_Area                     routeing_Area  
} with { variant "PRESENCE(bssgpPduType = '0B'O)"; };

// 10.3.7
type record PDU_BSSGP_SUSPEND_ACK
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,        
 Routeing_Area                     routeing_Area ,
 Suspend_Reference_Number          suspend_Reference_Number
} with { variant "PRESENCE(bssgpPduType = '0C'O)"; };

// 10.3.8
type record PDU_BSSGP_SUSPEND_NACK
{
 OCT1                          bssgpPduType,
 TLLI_BSSGP                    tLLI,    
 Routeing_Area                 routeing_Area,
 Cause_BSSGP                   cause optional
} with { variant "PRESENCE(bssgpPduType = '0D'O)"; };

// 10.3.9
type record PDU_BSSGP_RESUME
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,        
 Routeing_Area                     routeing_Area,
 Suspend_Reference_Number          suspend_Reference_Number
} with { variant "PRESENCE(bssgpPduType = '0E'O)"; };

//10.3.10
type record PDU_BSSGP_RESUME_ACK
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,        
 Routeing_Area                     routeing_Area
} with { variant "PRESENCE(bssgpPduType = '0F'O)"; };

// 10.3.11
type record PDU_BSSGP_RESUME_NACK
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,        
 Routeing_Area                     routeing_Area,
 Cause_BSSGP                       cause optional
} with { variant "PRESENCE(bssgpPduType = '10'O)"; };

// 10.3.12
type record PDU_BSSGP_PAGING_PS_REJECT
{
 OCT1                              bssgpPduType,
 IMSI_BSSGP                        iMSI,
 TMSI_BSSGP                        pTMSI optional,
 Time_Until_Next_Paging_Occasion   time_Until_Next_Paging_Occasion
} with { variant "PRESENCE(bssgpPduType = '11'O)"; };

// 10.3.13
type record PDU_BSSGP_DUMMY_PAGING_PS
{
 OCT1                              bssgpPduType,
 IMSI_BSSGP                        iMSI,
 Routeing_Area                     routeing_Area  optional,
 EDRX_Parameters                   eDRX_Paremeters optional
} with { variant "PRESENCE(bssgpPduType = '12'O)"; };

// 10.3.14
type record PDU_BSSGP_DUMMY_PAGING_PS_RESPONSE
{
 OCT1                              bssgpPduType,
 IMSI_BSSGP                        iMSI,
 Time_Until_Next_Paging_Occasion   time_Until_Next_Paging_Occasion
} with { variant "PRESENCE(bssgpPduType = '13'O)"; };

// 10.3.15
type record PDU_BSSGP_MS_REGISTRATION_ENQUIRY_RESPONSE
{
 OCT1                              bssgpPduType,
 IMSI_BSSGP                        iMSI,
 PLMN_Identity                     pS_Registered_Operator optional
} with { variant "PRESENCE(bssgpPduType = '15'O)"; };

// 10.3.15
type record PDU_BSSGP_MS_REGISTRATION_ENQUIRY
{
 OCT1                              bssgpPduType,
 IMSI_BSSGP                        iMSI,
 MME_Query                         mME_Query optional
} with { variant "PRESENCE(bssgpPduType = '14'O)"; };

// 10.4.1
type record PDU_BSSGP_FLUSH_LL
{
  OCT1                              bssgpPduType,
  TLLI_BSSGP                        tLLI,        
  BVCI                              bVCI_old,
  BVCI                              bVCI_new optional,
  NSEI_BSSGP                        nSEI optional
} with { variant "PRESENCE(bssgpPduType = '2A'O)"; };

// 10.4.2 
type record PDU_BSSGP_FLUSH_LL_ACK
{
  OCT1                              bssgpPduType,
  TLLI_BSSGP                        tLLI,        
  Flush_Action                      flush_Action,
  BVCI                              bVCI_new optional,
  Number_of_octets_affected         number_of_octets_affected,
  NSEI_BSSGP                        nSEI optional
} with { variant "PRESENCE(bssgpPduType = '2B'O)"; };

// 10.4.3
type record PDU_BSSGP_LLC_DISCARDED
{
 OCT1                        bssgpPduType,
 TLLI_BSSGP                  tLLI,    
 LLC_Frames_Discarded        lLC_Frames_Discarded,
 BVCI                        bVCI,
 Number_of_octets_affected   number_of_octets_deleted,
 PFI                         pFI optional
} with { variant "PRESENCE(bssgpPduType = '2C'O)"; };

// 10.4.4
type record PDU_BSSGP_FLOW_CONTROL_BVC
{
 OCT1                       bssgpPduType,
 Tag                        tag,
 BVC_Bucket_Size            bVC_Bucket_Size,
 Bucket_Leak_Rate           bucket_Leak_Rate,
 Bmax_default_MS            bmax_default_MS,
 R_default_MS               r_default_MS,
 Bucket_Full_Ratio          bucket_Full_Ratio optional,  
 BVC_Measurement            bVC_Measurement optional,
 Flow_Control_Granularity   flow_Control_Granularity optional 
} with { variant "PRESENCE(bssgpPduType = '26'O)"; };

// 10.4.5
type record PDU_BSSGP_FLOW_CONTROL_BVC_ACK
{
 OCT1                        bssgpPduType,
 Tag                         tag
} with { variant "PRESENCE(bssgpPduType = '27'O)"; };

// 10.4.6
type record PDU_BSSGP_FLOW_CONTROL_MS
{
 OCT1                        bssgpPduType,
 TLLI_BSSGP                  tLLI,    
 Tag                         tag,
 MS_Bucket_Size              mS_Bucket_Size,
 Bucket_Leak_Rate            bucket_Leak_Rate,
 Bucket_Full_Ratio           bucket_Full_Ratio optional,
 Flow_Control_Granularity   flow_Control_Granularity optional 
} with { variant "PRESENCE(bssgpPduType = '28'O)"; };        

// 10.4.7
type record PDU_BSSGP_FLOW_CONTROL_MS_ACK
{
 OCT1                         bssgpPduType,
 TLLI_BSSGP                   tLLI,    
 Tag                          tag
} with { variant "PRESENCE(bssgpPduType = '29'O)"; };


// 10.4.8
type record PDU_BSSGP_BVC_BLOCK        
{
 OCT1                          bssgpPduType,
 BVCI                          bVCI,
 Cause_BSSGP                   cause 
} with { variant "PRESENCE(bssgpPduType = '20'O)"; };

// 10.4.9
type record PDU_BSSGP_BVC_BLOCK_ACK
{
 OCT1                         bssgpPduType,
 BVCI                         bVCI
} with { variant "PRESENCE(bssgpPduType = '21'O)"; };

// 10.4.10
type record PDU_BSSGP_BVC_UNBLOCK
{
 OCT1                         bssgpPduType,
 BVCI                         bVCI
} with { variant "PRESENCE(bssgpPduType = '24'O)"; };

// 10.4.11
type record PDU_BSSGP_BVC_UNBLOCK_ACK
{
 OCT1                         bssgpPduType,
 BVCI                         bVCI
} with { variant "PRESENCE(bssgpPduType = '25'O)"; };

// 10.4.12
type record PDU_BSSGP_BVC_RESET
{
 OCT1                              bssgpPduType,
 BVCI                              bVCI,
 Cause_BSSGP                       cause,
 Cell_Identifier                   cell_Identifier optional, 
 Feature_bitmap                    feature_bitmap optional,
 Extended_Feature_Bitmap           extended_Feature_Bitmap optional
} with { variant "PRESENCE(bssgpPduType = '22'O)"; };

// 10.4.13 
type record PDU_BSSGP_BVC_RESET_ACK
{
 OCT1                              bssgpPduType,
 BVCI                              bVCI,
 Cell_Identifier                   cell_Identifier optional,
 Feature_bitmap                    feature_bitmap optional,
 Extended_Feature_Bitmap           extended_Feature_Bitmap optional
} with { variant "PRESENCE(bssgpPduType = '23'O)"; };

// 10.4.14
type record PDU_BSSGP_STATUS
{
 OCT1                              bssgpPduType,
 Cause_BSSGP                       cause,
 BVCI                              bVCI optional,   
 PDU_in_Error                      pDU_in_Error optional 
} with { variant "PRESENCE(bssgpPduType = '41'O)"; };

// 10.4.15
type record PDU_BSSGP_SGSN_INVOKE_TRACE
{
  OCT1                              bssgpPduType,
  Trace_Type_BSSGP                  traceType,
  Trace_Reference_BSSGP             traceReference,
  Trigger_Id_BSSGP                  triggerId optional,
  Mobile_Id_BSSGP                   mobileId optional,
  OMC_Id_BSSGP                      omcId optional,
  TransactionId_BSSGP               transactionId optional
} with { variant "PRESENCE(bssgpPduType = '40'O)"; };

// 10.4.16
type record PDU_BSSGP_DOWNLOAD_BSS_PFC
{
 OCT1                              bssgpPduType,
 TLLI_BSSGP                        tLLI,
 PFI                               pFI         
} with { variant "PRESENCE(bssgpPduType = '50'O)"; };

// 10.4.17
type record PDU_BSSGP_CREATE_BSS_PFC
{
  OCT1                              		bssgpPduType,
  TLLI_BSSGP                       		 	tLLI,
  IMSI_BSSGP                        		iMSI optional,
  PFI                               		pFI,         
  GPRS_Timer                        		pFT,
  ABQP                              		aBQP,
  Service_UTRAN_CCO                 		service_UTRAN_CCO optional,
  MS_Radio_Access_Capability        		mS_Radio_Access_Capability optional,
  Priority_BSSGP                  	  		allocation_Retention_Priority optional, 
  GPRS_Timer                        		t10 optional,
  Inter_RAT_Handover_Info_BSSGP     		inter_RAT_Handover_Info optional,
  E_UTRAN_Inter_RAT_Handover_Info		  	e_UTRAN_Inter_RAT_Handover_Info optional,
  Subscriber_Profile_ID_For_RAT_Priority	subscriber_Profile_ID_For_RAT optional
  
  
} with { variant "PRESENCE(bssgpPduType = '51'O)"; };

// 10.4.18
type record PDU_BSSGP_CREATE_BSS_PFC_ACK
{
 OCT1                             bssgpPduType,
 TLLI_BSSGP                       tLLI,
 PFI                              pFI, 
 ABQP                             aBQP,
 Cause_BSSGP                      cause optional
} with { variant "PRESENCE(bssgpPduType = '52'O)"; };

// 10.4.19
type record PDU_BSSGP_CREATE_BSS_PFC_NACK
{
 OCT1                             bssgpPduType,
 TLLI_BSSGP                       tLLI,
 PFI                              pFI, 
 Cause_BSSGP                      cause
} with { variant "PRESENCE(bssgpPduType = '53'O)"; };

// 10.4.20        
type record PDU_BSSGP_MODIFY_BSS_PFC
{
 OCT1                         bssgpPduType,
 TLLI_BSSGP                   tLLI,
 PFI                          pFI, 
 ABQP                         aBQP
} with { variant "PRESENCE(bssgpPduType = '54'O)"; };
                
// 10.4.21
type record PDU_BSSGP_MODIFY_BSS_PFC_ACK
{
 OCT1                           bssgpPduType,
 TLLI_BSSGP                     tLLI,
 PFI                            pFI, 
 GPRS_Timer                     pFT,
 ABQP                           aBQP
} with { variant "PRESENCE(bssgpPduType = '55'O)"; };

// 10.4.22
type record PDU_BSSGP_DELETE_BSS_PFC
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  PFI                            pFI
} with { variant "PRESENCE(bssgpPduType = '56'O)"; };

// 10.4.23
type record PDU_BSSGP_DELETE_BSS_PFC_ACK
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  PFI                            pFI
} with { variant "PRESENCE(bssgpPduType = '57'O)"; };

// 10.4.24
type record PDU_BSSGP_FLOW_CONTROL_PFC        
{
 OCT1                         bssgpPduType,
 TLLI_BSSGP                   tLLI,
 Tag                          tag,
 MS_Bucket_Size               mS_Bucket_Size optional,
 Bucket_Leak_Rate             bucket_Leak_Rate optional,
 Bucket_Full_Ratio            bucket_Full_Ratio optional,
 PFC_flow_control_parameters  pFC_flow_control_parameters,
 Flow_Control_Granularity     flow_Control_Granularity optional

} with { variant "PRESENCE(bssgpPduType = '2D'O)"; };

// 10.4.25        
type record PDU_BSSGP_FLOW_CONTROL_PFC_ACK
{
 OCT1                           bssgpPduType,
 TLLI_BSSGP                     tLLI,
 Tag                            tag
} with { variant "PRESENCE(bssgpPduType = '2E'O)"; };

// 10.4.26        
type record PDU_BSSGP_DELETE_BSS_PFC_REQ
{
  OCT1                             bssgpPduType,
  TLLI_BSSGP                       tLLI,
  PFI                              pFI,
  Cause_BSSGP                      cause
} with { variant "PRESENCE(bssgpPduType = '58'O)"; };

// 10.4.27
type record PDU_BSSGP_PS_HANDOVER_REQUIRED
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  Cause_BSSGP                    cause,
  Cell_Identifier                source_Cell_Identifier,
  Cell_or_RNC_Id_with_Transparent_Container_BSSGP
                                 cell_or_RNC_Id_with_Transparent_Container,
  Active_PFCs_List_BSSGP         active_PFCs_List,
  ENB_Identifier				 target_ENB_Identifier optional,
  Reliable_Inter_RAT_Handover_Info
  								 reliable_Inter_RAT_Handover_Info optional,
  CSG_Identifier_TLV             cSG_Identifier optional,
  Tracking_Area_Code_TLV         tracking_Area_Code optional
  } with { variant "PRESENCE(bssgpPduType = '59'O)"; };


// 10.4.28
type record PDU_BSSGP_PS_HANDOVER_REQUIRED_ACK
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  List_of_set_up_PFCs_BSSGP      list_of_set_up_PFCs,
  Target_BSS_to_Source_BSS_Transparent_Container
                                 target_BSS_to_Source_BSS_Transparent_Container optional,
  Target_to_Source_Transparent_Container
                                 target_to_Source_Transparent_Container optional
} with { variant "PRESENCE(bssgpPduType = '5A'O)"; };


// 10.4.29
type record PDU_BSSGP_PS_HANDOVER_REQUIRED_NACK
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  Cause_BSSGP                    cause
} with { variant "PRESENCE(bssgpPduType = '5B'O)"; }; 


// 10.4.30
type record PDU_BSSGP_PS_HANDOVER_REQUEST
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  IMSI_BSSGP                     iMSI,
  Cause_BSSGP                    cause,
  Cell_Identifier                source_Cell_Identifier optional,
  RNC_Identifier_BSSGP           source_RNC_Identifier optional,
  Cell_Identifier                target_Cell_Identifier optional, // it is mandatory
  Source_BSS_to_Target_BSS_Transparent_Container_BSSGP
                                 source_BSS_to_Target_BSS_Transparent_Container_BSSGP,
  PFCs_to_be_set_up_list         pFCs_to_be_set_up_list,
  NAS_container_for_PS_Handover  nAS_container_for_PS_Handover optional,
  Service_UTRAN_CCO              service_UTRAN_CCO optional,
  Subscriber_Profile_ID_For_RAT_Priority
  								 subscriber_Profile_ID_For_RAT_Priority optional,
  Reliable_Inter_RAT_Handover_Info
  								 reliable_Inter_RAT_Handover_Info optional
}  with { variant "PRESENCE(bssgpPduType = '5C'O)"; };


// 10.4.31
type record PDU_BSSGP_PS_HANDOVER_REQUEST_ACK
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  List_of_set_up_PFCs_BSSGP      list_of_set_up_PFCs,
  Target_BSS_to_Source_BSS_Transparent_Container
                                 target_BSS_to_Source_BSS_Transparent_Container
} with { variant "PRESENCE(bssgpPduType = '5D'O)"; };


// 10.4.32
type record PDU_BSSGP_PS_HANDOVER_REQUEST_NACK
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  Cause_BSSGP                    cause
} with { variant "PRESENCE(bssgpPduType = '5E'O)"; };


// 10.4.33
type record PDU_BSSGP_PS_HANDOVER_COMPLETE
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  IMSI_BSSGP                     iMSI,
  Cell_Identifier                target_Cell_Identifier optional,
  Request_For_Inter_RAT_Handover_Info
  								 request_For_Inter_RAT_Handover_Info optional
} with { variant "PRESENCE(bssgpPduType = '91'O)"; };


// 10.4.34
type record PDU_BSSGP_PS_HANDOVER_CANCEL
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  Cause_BSSGP                    cause,
  Cell_Identifier                source_Cell_Identifier,
  Cell_Identifier                target_Cell_Identifier optional,
  RNC_Identifier_BSSGP           target_RNC_Identifier optional,
  ENB_Identifier				 target_Enb_Identifier optional
} with { variant "PRESENCE(bssgpPduType = '92'O)"; };

// 10.4.35
type record PDU_BSSGP_PS_HANDOVER_COMPLETE_ACK
{
  OCT1                            bssgpPduType,
  TLLI_BSSGP                      tLLI,
  Inter_RAT_Handover_Info_BSSGP   inter_RAT_Handover_Info_BSSGP,
  E_UTRAN_Inter_RAT_Handover_Info e_UTRAN_Inter_RAT_Handover_Info optional
} with { variant "PRESENCE(bssgpPduType = '93'O)";};

// 10.4.36
type record PDU_BSSGP_OVERLOAD
{
  OCT1                            bssgpPduType,
  Priority_Class_Indicator        priority_Class_Indicator
} with { variant "PRESENCE(bssgpPduType = '42'O)";};

// 10.5.1
type record PDU_BSSGP_PERFORM_LOCATION_REQUEST
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  IMSI_BSSGP                     iMSI,
  DRX_Parameters                 dRX_Parameters optional,
  BVCI                           bVCI,
  NSEI_BSSGP                     nSEI,
  Location_Type_BSSGP            location_Type,
  Cell_Identifier                cell_Identifier,
  LCS_Capability_BSSGP           lCS_Capability optional,
  LCS_Priority_BSSGP             lCS_Priority optional,
  LCS_QoS_BSSGP                  lCS_QoS optional,
  LCS_Client_Type_BSSGP          lCS_Client_Type optional,
  Requested_GPS_Assistance_Data_BSSGP  requested_GPS_Assistance_Data optional,
  IMEI_BSSGP                     iMEI optional,
  GANSS_Location_Type            gANSS_Location_Type optional,
  Requested_GANSS_Assistance_Data requested_GANSS_Assistance_Data optional,
  EDRX_Parameters                eDRX_Parameters optional
} with { variant "PRESENCE(bssgpPduType = '60'O)"; };


// 10.5.2
type record PDU_BSSGP_PERFORM_LOCATION_RESPONSE
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  BVCI                           bVCI,
  Location_Estimate_BSSGP        location_Estimate optional,
  Positioning_Data_BSSGP         positioning_Data optional,
  Deciphering_Keys_BSSGP         deciphering_Keys optional,
  LCS_Cause_BSSGP                lCS_Cause optional,
  VelocityData                  velocityData optional,
  GANSS_Positioning_Data         gANSS_Positioning_Data optional  
} with { variant "PRESENCE(bssgpPduType = '61'O)"; };


// 10.5.3
type record PDU_BSSGP_PERFORM_LOCATION_ABORT
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  BVCI                           bVCI,
  LCS_Cause_BSSGP                lCS_Cause
} with { variant "PRESENCE(bssgpPduType = '62'O)"; };


// 10.5.4
type record PDU_BSSGP_POSITION_COMMAND
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  BVCI                           bVCI,
  RRLP_Flags_BSSGP               rRLP_Flags,
  RRLP_APDU_BSSGP                rRLP_APDU
} with { variant "PRESENCE(bssgpPduType = '63'O)"; };


// 10.5.5
type record PDU_BSSGP_POSITION_RESPONSE
{
  OCT1                           bssgpPduType,
  TLLI_BSSGP                     tLLI,
  BVCI                           bVCI,
  RRLP_Flags_BSSGP               rRLP_Flags optional,
  RRLP_APDU_BSSGP                rRLP_APDU optional,
  LCS_Cause_BSSGP                lCS_Cause optional  
} with { variant "PRESENCE(bssgpPduType = '64'O)"; };

// 10.6.1  
type record PDU_BSSGP_RAN_INFORMATION_REQUEST
{
 OCT1                            bssgpPduType,
 RIM_Routing_Information         destination_Cell_Identifier,
 RIM_Routing_Information         source_Cell_Identifier,
 RAN_Information_Request_RIM_Container  rIM_Container
} with { variant "PRESENCE(bssgpPduType = '71'O)"; };
      
// 10.6.2
type record PDU_BSSGP_RAN_INFORMATION
{
 OCT1                              bssgpPduType,
 RIM_Routing_Information           destination_Cell_Identifier,
 RIM_Routing_Information           source_Cell_Identifier,
 RAN_Information_RIM_Container     rIM_Container
} with { variant "PRESENCE(bssgpPduType = '70'O)"; };

// 10.6.3
type record PDU_BSSGP_RAN_INFORMATION_ACK
{
 OCT1                              bssgpPduType,
 RIM_Routing_Information           destination_Cell_Identifier,
 RIM_Routing_Information           source_Cell_Identifier,
 RAN_Information_Ack_RIM_Container rIM_Container
} with { variant "PRESENCE(bssgpPduType = '72'O)"; };

// 10.6.4
type record PDU_BSSGP_RAN_INFORMATION_ERROR
{
 OCT1                              bssgpPduType,
 RIM_Routing_Information           destination_Cell_Identifier,
 RIM_Routing_Information           source_Cell_Identifier,
 RAN_Information_Error_RIM_Container  rIM_Container
} with { variant "PRESENCE(bssgpPduType = '73'O)"; };

// 10.6.5
type record PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR
{
 OCT1                              bssgpPduType,
 RIM_Routing_Information           destination_Cell_Identifier,
 RIM_Routing_Information           source_Cell_Identifier,
 RAN_Information_Application_Error_RIM_Container  rIM_Container
} with { variant "PRESENCE(bssgpPduType = '74'O)"; };

// 10.7.1
type record PDU_BSSGP_MBMS_SESSION_START_REQUEST
{
 OCT1                        bssgpPduType,
 TMGI_BSSGP                  tMGI,
 MBMS_Session_Identity       mBMS_Session_Identity optional,
 ABQP                        aBQP,
 MBMS_Service_Area_Identity_List   mBMS_Service_Area_Identity_List,
 MBMS_Routing_Area_List      mBMS_Routing_Area_List,
 MBMS_Session_Duration       mBMS_Session_Duration,
 MBMS_Session_Information    mBMS_Session_Information,
 Time_To_MBMS_Data_Transfer  time_To_MBMS_Data_Transfer,
 Priority_BSSGP              allocation_Retention_Priority optional,
 MBMS_Session_Repetition_Number  mBMS_Session_Repetition_Number optional
} with { variant "PRESENCE(bssgpPduType = '80'O)"; };

// 10.7.2
type record PDU_BSSGP_MBMS_SESSION_START_RESPONSE
{
 OCT1                        bssgpPduType,
 TMGI_BSSGP                  tMGI,
 MBMS_Session_Identity       mBMS_Session_Identity optional,
 MBMS_Response               mBMS_Response
} with { variant "PRESENCE(bssgpPduType = '81'O)"; };

// 10.7.3
type record PDU_BSSGP_MBMS_SESSION_STOP_REQUEST
{
 OCT1                       bssgpPduType,
 TMGI_BSSGP                 tMGI,
 MBMS_Session_Identity      mBMS_Session_Identity optional,
 MBMS_Stop_Cause            mBMS_Stop_Cause
} with { variant "PRESENCE(bssgpPduType = '82'O)"; };

// 10.7.4
type record PDU_BSSGP_MBMS_STOP_RESPONSE
{
 OCT1                              bssgpPduType,
 TMGI_BSSGP                        tMGI,
 MBMS_Session_Identity             mBMS_Session_Identity optional,
 MBMS_Response                     mBMS_Response
} with { variant "PRESENCE(bssgpPduType = '83'O)"; };


// 10.7.5
type record PDU_BSSGP_SESSION_UPDATE_REQUEST
{
 OCT1                            bssgpPduType,
 TMGI_BSSGP                      tMGI,
 MBMS_Session_Identity           mBMS_Session_Identity optional,
 ABQP                            aBQP,
 MBMS_Service_Area_Identity_List mBMS_Service_Area_Identity_List,
 MBMS_Routing_Area_List          mBMS_Routing_Area_List,
 MBMS_Session_Duration           mBMS_Session_Duration,
 MBMS_Session_Information        mBMS_Session_Information,
 Time_To_MBMS_Data_Transfer      time_To_MBMS_Data_Transfer, 
 Priority_BSSGP                  allocation_Retention_Priority optional,
 MBMS_Session_Repetition_Number  mBMS_Session_Repetition_Number optional  
} with { variant "PRESENCE(bssgpPduType = '84'O)"; };


// 10.7.6
type record PDU_BSSGP_SESSION_UPDATE_RESPONSE
{
 OCT1                            bssgpPduType,
 TMGI_BSSGP                      tMGI,
 MBMS_Session_Identity           mBMS_Session_Identity optional, 
 MBMS_Response                   mBMS_Response 
} with { variant "PRESENCE(bssgpPduType = '85'O)"; };



type union PDU_BSSGP
{

  PDU_BSSGP_DL_UNITDATA                   pDU_BSSGP_DL_UNITDATA,
  PDU_BSSGP_UL_UNITDATA                   pDU_BSSGP_UL_UNITDATA,
  PDU_BSSGP_RA_CAPABILITY                 pDU_BSSGP_RA_CAPABILITY,
  PDU_BSSGP_DL_MBMS_UNITDATA              pDU_BSSGP_DL_MBMS_UNITDATA,
  PDU_BSSGP_UL_MBMS_UNITDATA              pDU_BSSGP_UL_MBMS_UNITDATA,
  PDU_BSSGP_PAGING_PS                     pDU_BSSGP_PAGING_PS,
  PDU_BSSGP_PAGING_CS                     pDU_BSSGP_PAGING_CS,
  PDU_BSSGP_RA_CAPABILITY_UPDATE          pDU_BSSGP_RA_CAPABILITY_UPDATE,
  PDU_BSSGP_RA_CAPABILITY_UPDATE_ACK      pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK,
  PDU_BSSGP_RADIO_STATUS                  pDU_BSSGP_RADIO_STATUS,
  PDU_BSSGP_SUSPEND                       pDU_BSSGP_SUSPEND,
  PDU_BSSGP_SUSPEND_ACK                   pDU_BSSGP_SUSPEND_ACK,
  PDU_BSSGP_SUSPEND_NACK                  pDU_BSSGP_SUSPEND_NACK,
  PDU_BSSGP_RESUME                        pDU_BSSGP_RESUME,
  PDU_BSSGP_RESUME_ACK                    pDU_BSSGP_RESUME_ACK,
  PDU_BSSGP_RESUME_NACK                   pDU_BSSGP_RESUME_NACK,
  PDU_BSSGP_PAGING_PS_REJECT              pDU_BSSGP_PAGING_PS_REJECT,
  PDU_BSSGP_DUMMY_PAGING_PS               pDU_BSSGP_DUMMY_PAGING_PS,
  PDU_BSSGP_DUMMY_PAGING_PS_RESPONSE      pDU_BSSGP_DUMMY_PAGING_PS_RESPONSE,
  PDU_BSSGP_MS_REGISTRATION_ENQUIRY_RESPONSE pDU_BSSGP_MS_REGISTRATION_ENQUIRY_RESPONSE,
  PDU_BSSGP_MS_REGISTRATION_ENQUIRY       pDU_BSSGP_MS_REGISTRATION_ENQUIRY,
  PDU_BSSGP_FLUSH_LL                      pDU_BSSGP_FLUSH_LL,
  PDU_BSSGP_FLUSH_LL_ACK                  pDU_BSSGP_FLUSH_LL_ACK,
  PDU_BSSGP_LLC_DISCARDED                 pDU_BSSGP_LLC_DISCARDED,
  PDU_BSSGP_FLOW_CONTROL_BVC              pDU_BSSGP_FLOW_CONTROL_BVC,
  PDU_BSSGP_FLOW_CONTROL_BVC_ACK          pDU_BSSGP_FLOW_CONTROL_BVC_ACK,
  PDU_BSSGP_FLOW_CONTROL_MS               pDU_BSSGP_FLOW_CONTROL_MS,
  PDU_BSSGP_FLOW_CONTROL_MS_ACK           pDU_BSSGP_FLOW_CONTROL_MS_ACK,
  PDU_BSSGP_FLOW_CONTROL_PFC              pDU_BSSGP_FLOW_CONTROL_PFC,
  PDU_BSSGP_FLOW_CONTROL_PFC_ACK          pDU_BSSGP_FLOW_CONTROL_PFC_ACK,
  PDU_BSSGP_STATUS                        pDU_BSSGP_STATUS,
  PDU_BSSGP_BVC_BLOCK                     pDU_BSSGP_BVC_BLOCK,
  PDU_BSSGP_BVC_BLOCK_ACK                 pDU_BSSGP_BVC_BLOCK_ACK,
  PDU_BSSGP_BVC_UNBLOCK                   pDU_BSSGP_BVC_UNBLOCK,
  PDU_BSSGP_BVC_UNBLOCK_ACK               pDU_BSSGP_BVC_UNBLOCK_ACK,
  PDU_BSSGP_BVC_RESET                     pDU_BSSGP_BVC_RESET,
  PDU_BSSGP_BVC_RESET_ACK                 pDU_BSSGP_BVC_RESET_ACK,
  PDU_BSSGP_SGSN_INVOKE_TRACE             pDU_BSSGP_SGSN_INVOKE_TRACE,
  PDU_BSSGP_DOWNLOAD_BSS_PFC              pDU_BSSGP_DOWNLOAD_BSS_PFC,
  PDU_BSSGP_CREATE_BSS_PFC                pDU_BSSGP_CREATE_BSS_PFC,
  PDU_BSSGP_CREATE_BSS_PFC_ACK            pDU_BSSGP_CREATE_BSS_PFC_ACK,
  PDU_BSSGP_CREATE_BSS_PFC_NACK           pDU_BSSGP_CREATE_BSS_PFC_NACK,
  PDU_BSSGP_MODIFY_BSS_PFC                pDU_BSSGP_MODIFY_BSS_PFC,
  PDU_BSSGP_MODIFY_BSS_PFC_ACK            pDU_BSSGP_MODIFY_BSS_PFC_ACK,
  PDU_BSSGP_DELETE_BSS_PFC                pDU_BSSGP_DELETE_BSS_PFC,
  PDU_BSSGP_DELETE_BSS_PFC_ACK            pDU_BSSGP_DELETE_BSS_PFC_ACK,
  PDU_BSSGP_DELETE_BSS_PFC_REQ            pDU_BSSGP_DELETE_BSS_PFC_REQ,
  PDU_BSSGP_PS_HANDOVER_REQUIRED          pDU_BSSGP_PS_HANDOVER_REQUIRED,
  PDU_BSSGP_PS_HANDOVER_REQUIRED_ACK      pDU_BSSGP_PS_HANDOVER_REQUIRED_ACK,
  PDU_BSSGP_PS_HANDOVER_REQUIRED_NACK     pDU_BSSGP_PS_HANDOVER_REQUIRED_NACK,
  PDU_BSSGP_PS_HANDOVER_REQUEST           pDU_BSSGP_PS_HANDOVER_REQUEST,
  PDU_BSSGP_PS_HANDOVER_REQUEST_ACK       pDU_BSSGP_PS_HANDOVER_REQUEST_ACK, 
  PDU_BSSGP_PS_HANDOVER_REQUEST_NACK      pDU_BSSGP_PS_HANDOVER_REQUEST_NACK,
  PDU_BSSGP_PS_HANDOVER_COMPLETE          pDU_BSSGP_PS_HANDOVER_COMPLETE,
  PDU_BSSGP_PS_HANDOVER_COMPLETE_ACK      pDU_BSSGP_PS_HANDOVER_COMPLETE_ACK,
  PDU_BSSGP_PS_HANDOVER_CANCEL            pDU_BSSGP_PS_HANDOVER_CANCEL,
  PDU_BSSGP_OVERLOAD                      pDU_BSSGP_OVERLOAD,
  PDU_BSSGP_PERFORM_LOCATION_REQUEST      pDU_BSSGP_PERFORM_LOCATION_REQUEST,
  PDU_BSSGP_PERFORM_LOCATION_RESPONSE     pDU_BSSGP_PERFORM_LOCATION_RESPONSE,
  PDU_BSSGP_PERFORM_LOCATION_ABORT        pDU_BSSGP_PERFORM_LOCATION_ABORT,
  PDU_BSSGP_POSITION_COMMAND              pDU_BSSGP_POSITION_COMMAND,
  PDU_BSSGP_POSITION_RESPONSE             pDU_BSSGP_POSITION_RESPONSE,
  PDU_BSSGP_RAN_INFORMATION               pDU_BSSGP_RAN_INFORMATION,
  PDU_BSSGP_RAN_INFORMATION_REQUEST       pDU_BSSGP_RAN_INFORMATION_REQUEST,
  PDU_BSSGP_RAN_INFORMATION_ACK           pDU_BSSGP_RAN_INFORMATION_ACK,
  PDU_BSSGP_RAN_INFORMATION_ERROR         pDU_BSSGP_RAN_INFORMATION_ERROR,
  PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR  
                                    pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR,
  PDU_BSSGP_MBMS_SESSION_START_REQUEST    pDU_BSSGP_MBMS_SESSION_START_REQUEST,
  PDU_BSSGP_MBMS_SESSION_START_RESPONSE   pDU_BSSGP_MBMS_SESSION_START_RESPONSE,
  PDU_BSSGP_MBMS_SESSION_STOP_REQUEST     pDU_BSSGP_MBMS_SESSION_STOP_REQUEST,
  PDU_BSSGP_MBMS_STOP_RESPONSE            pDU_BSSGP_MBMS_STOP_RESPONSE,
  PDU_BSSGP_SESSION_UPDATE_REQUEST        pDU_BSSGP_SESSION_UPDATE_REQUEST,
  PDU_BSSGP_SESSION_UPDATE_RESPONSE       pDU_BSSGP_SESSION_UPDATE_RESPONSE,
  octetstring                             pDU_BSSGP_unknown
} with { variant "" };

}  with {encode "RAW"} // end of module
