///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000-2019 Ericsson Telecom AB
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:               GTPv2_Types.ttcn
//  Description:        GTPv2 protocol module
//  Rev:                <RnXnn>
//  Prodnr:             CNL 113 870 
//  Contact:            http://ttcn.ericsson.se
//  Reference:          3GPP TS 29.274 v15.2.0
//                      


module GTPv2_Types
{
import from General_Types all;
import from GTPv2_PrivateExtensions all;

external function enc_PDU_GTPCv2(in PDU_GTPCv2 pdu) return octetstring
with { extension "prototype(convert)" extension "encode(RAW)" }

external function dec_PDU_GTPCv2(in octetstring stream) return PDU_GTPCv2
with { extension "prototype(convert)" extension "decode(RAW)" }

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

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


// Information Elements

//8.2.1A For future use
type record Special_IE_Type_Extension
{
  OCT1                         elementIdentifier,  // dec 254, 'FE'O;  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  IE_Extension_UnionType       iE_Type_Extension
} with { 
  variant (lengthIndicator) "LENGTHTO(iE_Type_Extension)"; 
  variant "PRESENCE (elementIdentifier = 'FE'O; )";
};

type union IE_Extension_UnionType
{
  IE_Type_Extension  iE_Type_Extension
}

type record IE_Type_Extension
{
  OCT2                         elementIdentifier,
  octetstring                  valueField
}

// 8.3
type record IMSI
{
  OCT1              elementIdentifier,  //dec 1, '01'O  
  LIN2_BO_LAST      lengthIndicator,
  BIT4              instance,
  BIT4              spare,
  hexstring         iMSI_Value 
} with { 
  variant "PRESENCE (elementIdentifier = '01'O;)"   
  variant (lengthIndicator) "LENGTHTO(iMSI_Value)" 
  variant (iMSI_Value) "PADDING(yes)";
  variant (iMSI_Value) "PADDING_PATTERN('1'B)"
};

// 8.4
type record Cause
{
  OCT1              elementIdentifier, //dec 2, '02'O  
  LIN2_BO_LAST      lengthIndicator,
  BIT4              instance,
  BIT4              spare,
  OCT1              causeValue,
  BIT1              cS,
  BIT1              bCE,
  BIT1              pCE,
  BIT5              spare2,
  OCT1              typeOfOffendingIE optional,
  LIN2_BO_LAST      lengthIndicator2 optional,
  BIT4              instanceOfOffendingIE optional,
  BIT4              spare3 optional
} with { 
  variant "PRESENCE (elementIdentifier = '02'O; )" 
  variant (lengthIndicator) "LENGTHTO(causeValue,cS,bCE,pCE,spare2,typeOfOffendingIE,
  lengthIndicator2,instanceOfOffendingIE,spare3 )" 
};

// 8.5
type record Recovery
{
  OCT1              elementIdentifier,  // dec 3, '03'O 
  LIN2_BO_LAST      lengthIndicator,
  BIT4              instance,
  BIT4              spare,
  integer           recoveryValue
} with { 
  variant (lengthIndicator) "LENGTHTO(recoveryValue)"
  variant "PRESENCE (elementIdentifier = '03'O; )" 
}; 

// 8.6 
type record AccessPointName
{
  OCT1              elementIdentifier, // dec 71, '47'O
  LIN2_BO_LAST      lengthIndicator,
  BIT4              instance,
  BIT4              spare,
  octetstring       aPN_Value 
} with { 
  variant (lengthIndicator) "LENGTHTO(aPN_Value)"
  variant "PRESENCE (elementIdentifier = '47'O; )"   
}; 

// 8.7 
type record AggregateMaximumBitRate
{
  OCT1              elementIdentifier, // dec 72, '48'O  
  LIN2_BO_LAST      lengthIndicator,
  BIT4              instance,
  BIT4              spare,
  OCT4              aPN_AMBR_for_uplink, 
  OCT4              aPN_AMBR_for_downlink
} with { 
  variant (lengthIndicator) "LENGTHTO(aPN_AMBR_for_uplink,aPN_AMBR_for_downlink)"
  variant "PRESENCE (elementIdentifier = '48'O; )" 
}; 

//8.8
type record EPS_BearerID
{
  OCT1              elementIdentifier, // dec 73, '49'O  
  LIN2_BO_LAST      lengthIndicator,
  BIT4              instance,
  BIT4              spare,
  integer           ePS_Bearer_ID_Value,
  BIT4              spare2,   //'0000'B
  octetstring       additionalOctets  optional 
}with { 
  variant (lengthIndicator) "LENGTHTO(ePS_Bearer_ID_Value,spare2,additionalOctets)"
  variant "PRESENCE (elementIdentifier = '49'O; )"
  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)"; 
};

type set of EPS_BearerID EPS_BearerID_List;

//8.9
type union IPv4_IPv6_Address{
  OCT4                       iPv4_Address,
  OCT16                      iPv6_Address
};

type record IP_Address
{
  OCT1                elementIdentifier,  // dec 74, '4A'O   
  LIN2_BO_LAST        lengthIndicator,
  BIT4                instance,
  BIT4                spare,
  IPv4_IPv6_Address   iPv4_IPv6_Address
} with { 
  variant (lengthIndicator) "LENGTHTO(iPv4_IPv6_Address)"
  variant "PRESENCE (elementIdentifier = '4A'O; )" 
  variant (iPv4_IPv6_Address) "CROSSTAG( iPv4_Address, lengthIndicator = 4;
  iPv6_Address, lengthIndicator = 16)"
};

type set of IP_Address IP_Address_List;

//8.10
type record MEI
{
  OCT1                elementIdentifier, // dec 75, '4B'O;
  LIN2_BO_LAST        lengthIndicator,
  BIT4                instance,
  BIT4                spare,
  octetstring         mEI_Value
} with { 
  variant (lengthIndicator) "LENGTHTO(mEI_Value)"
  variant "PRESENCE (elementIdentifier = '4B'O; )" 
};

//8.11
type record MSISDN
{
  OCT1                elementIdentifier,  // dec 76, '4C'O; 
  LIN2_BO_LAST        lengthIndicator,
  BIT4                instance,
  BIT4                spare,
  hexstring           mSISDN_Value 
}  with { 
  variant (lengthIndicator) "LENGTHTO(mSISDN_Value)"
  variant "PRESENCE (elementIdentifier = '4C'O; )" 
  variant (mSISDN_Value) "PADDING(yes)";
  variant (mSISDN_Value) "PADDING_PATTERN('1'B)"  

};

type set of MSISDN MSISDN_List;

//8.12
type record Indication
{
  OCT1                elementIdentifier,   // dec 77, '4D'O; 
  LIN2_BO_LAST        lengthIndicator,
  BIT4                instance,
  BIT4                spare,
  BIT1                sGWCI,
  BIT1                iSRAI,
  BIT1                iSRSI,
  BIT1                oI,           
  BIT1                dFI,
  BIT1                hI,
  BIT1                dTF,
  BIT1                dAF,
  BIT1                mSV,
  BIT1                sI,
  BIT1                pT,
  BIT1                pBit,
  BIT1                cRSI,
  BIT1                cFSI,
  BIT1                uIMSI,
  BIT1                sQCI,
  BIT1                cCRSI optional,
  BIT1                iSRAU optional, 
  BIT1                mBMDT optional,
  BIT1                s4AF optional,
  BIT1                s6AF optional,
  BIT1                sRNI optional,
  BIT1                pBIC optional,
  BIT1                retLoc optional, 
  BIT1                cPSR optional,
  BIT1                cLII optional,
  BIT1                cSFBI optional, 
  BIT1                pPSI optional, 
  BIT1                pPON_PPEI optional, 
  BIT1                pPOF optional, 
  BIT1                aRRL optional, 
  BIT1                cPRAI optional, 
  BIT1                aOPI optional, 
  BIT1                aOSI optional, 
  BIT1                pCRI optional,
  BIT1                pSCI optional,
  BIT1                bDWI optional,
  BIT1                dTCI optional,
  BIT1                uASI optional,
  BIT1                nSI optional,
  BIT1                wPMSI optional,
  BIT1                uNACCSI optional,
  BIT1                pNSI optional,
  BIT1                s11TF optional,
  BIT1                pMTSMI optional,
  BIT1                cPOPCI optional,
  BIT1                ePCOSI optional,
  BIT1                rOAAI optional,
  BIT1                tSPCMI optional,
  BIT1                eNBCRSI optional,
  BIT1                spare_1 optional,
  BIT1                spare_2 optional,
  BIT1                spare_3 optional,
  BIT1                spare_4 optional,
  BIT1                spare_5 optional,
  BIT1                spare_6 optional,
  octetstring         additionalOctets  optional   
} with { 
  variant (lengthIndicator) "LENGTHTO(sGWCI,iSRAI,iSRSI,oI,dFI,hI,dTF,dAF,
  mSV,sI,pT,pBit,cRSI,cFSI,uIMSI,sQCI, 
  cCRSI, iSRAU,mBMDT,s4AF,s6AF,sRNI,pBIC,retLoc,
  cPSR,cLII,cSFBI,pPSI,pPON_PPEI,pPOF,aRRL,cPRAI,aOPI,aOSI,pCRI,pSCI,bDWI,dTCI,uASI,nSI,
  wPMSI,uNACCSI,pNSI,s11TF,pMTSMI,cPOPCI,ePCOSI,rOAAI, tSPCMI, eNBCRSI, spare_1, spare_2, spare_3, spare_4, spare_5, spare_6, additionalOctets)"
  variant "PRESENCE (elementIdentifier = '4D'O; )"
};

type set of Indication Indication_List;

//8.13
// 24.301 (9.9.4.8) -> 24.008 (10.5.6.3)
type set of  ProtocolID_or_ContainerID   ProtocolIDs_and_ContainerIDs;

type record ProtocolID_or_ContainerID
{
  OCT2               protocolID_or_ContainerID,
  LIN1               lengthIndicator,
  octetstring        protID_orContID_Contents
} with { variant (lengthIndicator) "LENGTHTO (protID_orContID_Contents)"};

type record ProtocolConfigOptions
{
  OCT1                         elementIdentifier, // dec 78 '4E'O;
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT3                         configProtocol,
  BIT4                         spare2,  //'0000'B
  BIT1                         extensionField,   //'1'B
  ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs optional
} with { 
  variant (lengthIndicator) "LENGTHTO(configProtocol,spare2,extensionField,protocolIDs_and_ContainerIDs)"
  variant "PRESENCE (elementIdentifier = '4E'O; )" 
};

//8.14 
type union PDN_Address_and_Prefix{
  OCT4                       iPv4_Address,
  IPv6                       iPv6_Address,
  IPv4_IPv6                  iPv4_IPv6 
};

type record IPv6
{
  integer   prefixLength, 
  OCT16     iPv6_Address 
};

type record IPv4_IPv6
{
  integer          prefixLength, 
  OCT16            iPv6_Address, 
  OCT4             iPv4_Address
};

type record PDN_AddressAllocation
{
  OCT1                         elementIdentifier,  // dec 79 '4F'O;
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT3                         pDN_Type,
  BIT5                         spare2,  //'00000'B
  PDN_Address_and_Prefix       pDN_Address_and_Prefix optional
} with { 
  variant (lengthIndicator) "LENGTHTO(pDN_Type,spare2,pDN_Address_and_Prefix)"
  variant "PRESENCE (elementIdentifier = '4F'O; )"
  variant (pDN_Address_and_Prefix) "CROSSTAG
  (
  iPv4_Address,             pDN_Type ='001'B;
  iPv6_Address,             pDN_Type ='010'B;
  iPv4_IPv6,                pDN_Type ='011'B;  
  )"
};

//8.15
type record Bearer_QoS
{
  OCT1                         elementIdentifier,  // dec 80 '50'O; 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT1                         pVI,
  BIT1                         spare2,
  BIT4                         pL,
  BIT1                         pCI,
  BIT1                         spare3,  
  OCT1                         labelQCI,
  OCT5                         maxBitrateUplink,
  OCT5                         maxBitrateDownLink,
  OCT5                         guaranteedBitrateUplink,
  OCT5                         guaranteedBitrateDownLink,
  octetstring                  additionalOctets optional  
} with { 
  variant (lengthIndicator) "LENGTHTO(pVI,spare2,pL,pCI,spare3,
  labelQCI,maxBitrateUplink,maxBitrateDownLink,
  guaranteedBitrateUplink,guaranteedBitrateDownLink,additionalOctets)"
  variant "PRESENCE (elementIdentifier = '50'O; )" 
};

//8.16
type record FlowQoS
{
  OCT1                         elementIdentifier,  // dec 81 '51'O;  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT1                         labelQCI,
  OCT5                         maxBitrateUplink,
  OCT5                         maxBitrateDownLink,
  OCT5                         guaranteedBitrateUplink,
  OCT5                         guaranteedBitrateDownLink,
  octetstring                  additionalOctets  optional  
}with { 
  variant (lengthIndicator) "LENGTHTO(labelQCI,maxBitrateUplink,maxBitrateDownLink,guaranteedBitrateUplink,guaranteedBitrateDownLink,additionalOctets)"
  variant "PRESENCE (elementIdentifier = '51'O; )" 
};

//8.17
type record RAT_Type
{
  OCT1                         elementIdentifier,  // dec 82, '52'O;   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      rAT_TypeValue,
  octetstring                  additionalOctets  optional 
} with { 
  variant (lengthIndicator) "LENGTHTO(rAT_TypeValue,additionalOctets)"
  variant "PRESENCE (elementIdentifier = '52'O; )" 
};

//8.18
type record ServingNetwork
{
  OCT1                         elementIdentifier,   // dec 83, '53'O;   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  HEX1                         mccDigit1,  
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  octetstring                  additionalOctets  optional 
}with { 
  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2,additionalOctets)"
  variant "PRESENCE (elementIdentifier = '53'O; )" 
};

//8.19 24.008 10.5.6.12
type union TrafficFlowTemplateV
{
  TrafficFlowTemplateV_CreateAddReplaceTFT
  trafficFlowTemplateV_CreateAddReplaceTFT,
  TrafficFlowTemplateV_DeletePacketFilter
  trafficFlowTemplateV_DeletePacketFilter,
  TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
  trafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
};


type record TrafficFlowTemplateV_CreateAddReplaceTFT
{
  integer                                numberOfPacketFilters,
  BIT1                                   eBIT,
  BIT3                                   operationCodeTFT, 
  PacketFilterList_CreateAddReplaceTFT   packetFilterList_CreateAddReplaceTFT,
  ParametersList                         parametersList            optional
} with {
  variant "PRESENCE (operationCodeTFT  = '001'B, //  Create New TFT
  operationCodeTFT  = '011'B, //  Add packet filters to existing TFT
  operationCodeTFT  = '100'B  //  Replace packet filters in existing TFT
  )";
  variant(parametersList)       "PRESENCE(eBIT = '1'B)";
  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_CreateAddReplaceTFT)";
  variant(numberOfPacketFilters)"UNIT(elements)";
};


type record TrafficFlowTemplateV_DeletePacketFilter
{
  integer                                numberOfPacketFilters,
  BIT1                                   eBIT,
  BIT3                                   operationCodeTFT,
  //'101'B or '011'B or '100'B
  PacketFilterList_DeletePacketFilter    packetFilterList_DeletePacketFilter,
  ParametersList                         parametersList         optional
} with {
  variant "PRESENCE (operationCodeTFT = '101'B)"  // Delete packet filters from existing TFT
  variant(parametersList) "PRESENCE(eBIT = '1'B)";
  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_DeletePacketFilter)";
  variant  (numberOfPacketFilters)"UNIT(elements)";
};


type record TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
{
  BIT4                         numberOfPacketFilters, //'0000'B
  // numberOfPacketFilters is meaningless here since there is no PacketFilterList
  BIT1                         eBIT,
  BIT3                         operationCodeTFT,      // '010'B  or '110'B
  ParametersList               parametersList   optional
} with {
  variant "PRESENCE (operationCodeTFT = '010'B,  // delete existing TFT
  operationCodeTFT = '110'B   // No TFT Operation
  )";
  variant (parametersList) "PRESENCE(eBIT = '1'B)"
};


type record of PacketFilter PacketFilterList_CreateAddReplaceTFT;


type record PacketFilter
{
  PacketFilterIdentifier       identifier,
  OCT1                         evaluationPrecedence,
  LIN1                         lengthIndicator,
  octetstring                  contents
} with { variant (lengthIndicator) "LENGTHTO (contents)"};


type record of PacketFilterIdentifier  PacketFilterList_DeletePacketFilter;

type record  PacketFilterIdentifier
{
  BIT4     identifier,
  BIT2     direction,
  BIT2     spare
};


type record of Parameter ParametersList;


type record Parameter
{
  OCT1               parameterIdentifier,
  LIN1               lengthIndicator,
  octetstring        contents
} with { variant (lengthIndicator) "LENGTHTO (contents)"};


type record EPS_BearerLevel_TFT
{
  OCT1                         elementIdentifier,   // dec 84, '54'O;   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  TrafficFlowTemplateV         trafficFlowTemplateValue
} with { 
  variant (lengthIndicator) "LENGTHTO(trafficFlowTemplateValue)"
  variant "PRESENCE (elementIdentifier = '54'O; )";  
};

type set of EPS_BearerLevel_TFT EPS_BearerLevel_TFT_List;

//8.20
type record TrafficAggregateDescription
{
  OCT1                         elementIdentifier,     // dec 85, '55'O; 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  octetstring                  trafficAggregateDescriptionValue          
} with { 
  variant (lengthIndicator) "LENGTHTO(trafficAggregateDescriptionValue)"
  variant "PRESENCE (elementIdentifier = '55'O; )";  
};

//8.21
type set of UserLocationInfo UserLocationInfo_List;
  
type record UserLocationInfo
{
  OCT1                         elementIdentifier,   // dec 86, '56'O; 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT1                         cGI_Flag,
  BIT1                         sAI_Flag,
  BIT1                         rAI_Flag,
  BIT1                         tAI_Flag,
  BIT1                         eCGI_Flag, 
  BIT1                         lAI_Flag, 
  BIT1                         macro_eNodeB_ID_Flag,
  BIT1                         extendedMacro_eNodeB_ID_Flag,
  CGI                          cGI optional,
  SAI                          sAI optional,
  RAI                          rAI optional,
  TAI                          tAI optional,
  ECGI                         eCGI optional,
  LAI                          lAI optional,
  Macro_eNodeB_ID              macro_eNodeB_ID optional,
  ExtendedMacro_eNodeB_ID      extendedMacro_eNodeB_ID optional,
  octetstring                  additionalOctets  optional 
} with { 
  variant (lengthIndicator) "LENGTHTO(cGI_Flag,sAI_Flag,rAI_Flag,tAI_Flag,eCGI_Flag,
  lAI_Flag,macro_eNodeB_ID_Flag, extendedMacro_eNodeB_ID_Flag,cGI,sAI,rAI,tAI,eCGI,lAI, macro_eNodeB_ID, extendedMacro_eNodeB_ID, additionalOctets)"
  variant(cGI)       "PRESENCE(cGI_Flag = '1'B)";
  variant(sAI)       "PRESENCE(sAI_Flag = '1'B)";
  variant(rAI)       "PRESENCE(rAI_Flag = '1'B)";
  variant(tAI)       "PRESENCE(tAI_Flag = '1'B)";
  variant(eCGI)      "PRESENCE(eCGI_Flag = '1'B)";
  variant(lAI)       "PRESENCE(lAI_Flag = '1'B)";  
  variant(macro_eNodeB_ID) "PRESENCE(macro_eNodeB_ID_Flag = '1'B)";  
  variant(extendedMacro_eNodeB_ID) "PRESENCE(extendedMacro_eNodeB_ID_Flag = '1'B)";  
  variant "PRESENCE (elementIdentifier = '56'O; )"   
};

//8.21.1
type record CGI
{  
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3, 
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  OCT2                         lAC,
  OCT2                         cI
};

//8.21.2
type record SAI
{
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1, 
  HEX1                         mncDigit2, 
  OCT2                         lAC,
  OCT2                         sAC  
};

//8.21.3
type record RAI 
{
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  OCT2                         lAC,
  OCT2                         rAC  
};  

//8.21.4
type record TAI
{
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1, 
  HEX1                         mncDigit2, 
  OCT2                         tAC 
};  

//8.21.5
type record ECGI
{
  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)";
};  

//8.21.6
type record LAI
{
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1, 
  HEX1                         mncDigit2,
  OCT2                         lAC
}

//8.21.7
// Macro_eNodeB_ID

//8.21.8
type record ExtendedMacro_eNodeB_ID
{
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1, 
  HEX1                         mncDigit2,
  BIT2                         spare,
  BIT1                         sMeNB,
  bitstring                    targetID length(21)
} with { 
  variant (spare,sMeNB,targetID) "FIELDORDER(msb)";
  variant (targetID) "BYTEORDER(last)";
}

//8.22
type record FullyQualifiedTEID
{
  OCT1                         elementIdentifier,   // dec 87, '57'O; 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      interfaceType, 
  BIT1                         v6_Flag,
  BIT1                         v4_Flag,
  OCT4                         tEID_GRE_Key,
  OCT4                         iPv4_Address optional,
  OCT16                        iPv6_Address optional,
  octetstring                  additionalOctets  optional    
} with {   
  variant "PRESENCE (elementIdentifier = '57'O; )" 
  variant (lengthIndicator) "LENGTHTO(interfaceType,v6_Flag,v4_Flag,tEID_GRE_Key,
  iPv4_Address,iPv6_Address,additionalOctets)" 
  variant(interfaceType) "FIELDLENGTH(6)";
  variant(iPv4_Address)  "PRESENCE(v4_Flag = '1'B)";
  variant(iPv6_Address)  "PRESENCE(v6_Flag = '1'B)";
}; 

type set of FullyQualifiedTEID FullyQualifiedTEID_List;

//8.23
type record TMSI
{
  OCT1                         elementIdentifier,  // dec 88, '58'O;  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT4                         tMSI_Value 
} with { 
  variant (lengthIndicator) "LENGTHTO(tMSI_Value)"; 
  variant "PRESENCE (elementIdentifier = '58'O; )";
};

//8.24
type record GlobalCN_ID
{
  OCT1                         elementIdentifier,  // dec 89, '59'O;  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3, 
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  octetstring                  cN_ID  
} with { 
  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2,cN_ID)"
  variant "PRESENCE (elementIdentifier = '59'O; )";  
};

//8.25
type record EPS_Bearer_ID
{
  integer   ePS_Bearer_ID_Value,
  BIT4      spare    // '0000'B
} with {
  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)";}

type set of EPS_Bearer_ID EPS_Bearer_IDs;

type record S103_PDF
{
  OCT1                         elementIdentifier,// dec 90, '5A'O; 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      hSGW_AddrForForwardingLength (4,16),
  octetstring                  hSGW_AddrForForwarding length (4..16),
  OCT4                         gRE_Key,
  integer                      ePSBearerID_Number,
  EPS_Bearer_IDs               ePS_Bearer_IDs  
} with { 
  variant (lengthIndicator) "LENGTHTO(hSGW_AddrForForwardingLength,hSGW_AddrForForwarding,gRE_Key,ePSBearerID_Number,ePS_Bearer_IDs)"; 
  variant "PRESENCE (elementIdentifier = '5A'O; )";  
  variant (hSGW_AddrForForwardingLength) "LENGTHTO(hSGW_AddrForForwarding)"; 
  variant (ePSBearerID_Number) "LENGTHTO(ePS_Bearer_IDs)";
  variant (ePSBearerID_Number) "UNIT (elements)";   
};

type set of S103_PDF S103_PDF_List

//8.26
type record S1_UDF
{
  OCT1                         elementIdentifier,  // dec 91, '5B'O; 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      ePS_Bearer_ID_Value,
  BIT4                         spare2,    // '0000'B 
  integer                      servingGWAddrLength (0,4,16),
  octetstring                  servingGWAddr length (4..16) optional,    
  OCT4                         servingGW_S1U_TEID    
} with { 
  variant (lengthIndicator) "LENGTHTO(ePS_Bearer_ID_Value,spare2,servingGWAddrLength,servingGWAddr,servingGW_S1U_TEID)";
  variant "PRESENCE (elementIdentifier = '5B'O; )"; 
  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)";
  variant (servingGWAddrLength) "LENGTHTO(servingGWAddr)";
};

type set of S1_UDF S1_UDF_List

//8.27
type record DelayValue
{
  OCT1                         elementIdentifier,   // dec 92 , '5C'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      delayValue, //(integer multiples of 50 millisec)
  octetstring                  additionalOctets  optional 
} 
with { 
  variant (lengthIndicator) "LENGTHTO(delayValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '5C'O; )";  
};

//8.28 - Grouped
type set BearerContextIEs
{
  EPS_BearerID                     ePS_Bearer_ID optional,
  Cause                            cause optional,
  EPS_BearerLevel_TFT              ePS_Bearer_TFT optional,  
  FullyQualifiedTEID_List          fullyQualifiedTEID optional, 
  Bearer_QoS                       bearerLevel_QoS optional,
  ChargingID                       chargingID optional,
  BearerFlags                      bearerFlags optional,
  TransactionIdentifier            transactionIdentifier optional,
  ProtocolConfigOptions            protocolConfigOptions optional,
  RAN_NASCause_List                rAN_NASCause optional,
  APCO                             additionalProtocolConfigOptions optional,
  ExtendedProtocolConfigOptions    extendedProtocolConfigOptions optional
}
with { 
  variant(fullyQualifiedTEID) "REPEATABLE(yes)"; 
  variant(rAN_NASCause) "REPEATABLE(yes)"; 
};

type record BearerContextGrouped
{
  OCT1                         elementIdentifier, // dec 93 , '5D'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,  
  BIT4                         spare,
  BearerContextIEs             bearerContextIEs
} with { 
  variant (lengthIndicator) "LENGTHTO(bearerContextIEs)"; 
  variant "PRESENCE (elementIdentifier = '5D'O; )"; 
};

type set of BearerContextGrouped BearerContextGrouped_List;

//8.29
type record ChargingID
{
  OCT1                         elementIdentifier, // dec 94, '5E'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT4                         chargingID_Value,
  octetstring                  additionalOctets  optional    
} with { 
  variant (lengthIndicator) "LENGTHTO(chargingID_Value,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '5E'O; )"; 
};

//8.30
type record ChargingCharacteristics
{
  OCT1                         elementIdentifier, // dec 95, '5F'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT2                         chargingCharacteristicsValue,
  octetstring                  additionalOctets  optional
} with { 
  variant (lengthIndicator) "LENGTHTO(chargingCharacteristicsValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '5F'O; )"; 
};

//8.31
type record TraceInformation
{
  OCT1                         elementIdentifier, // dec 96, '60'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3, 
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  OCT3                         traceIDValue,
  OCT9                         triggeringEvents,
  OCT2                         listOfNE_Types,  
  OCT1                         sessionTraceDepth, 
  OCT12                        listOfInterfaces,
  octetstring                  iPAddressOfTraceCollectionEntity 
} with { 
  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3, mncDigit1,mncDigit2,
  traceIDValue,triggeringEvents,listOfNE_Types,sessionTraceDepth,
  listOfInterfaces,iPAddressOfTraceCollectionEntity)"; 
  variant "PRESENCE (elementIdentifier = '60'O; )";        
};

//8.32
type record BearerFlags
{
  OCT1                         elementIdentifier, // dec 97, '61'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT1                         pPC,
  BIT1                         vB,
  BIT1                          vind,
  BIT1                          aSI,
  BIT4                         spare2,
  octetstring                  additionalOctets  optional
} with { 
  variant (lengthIndicator) "LENGTHTO(pPC,vB,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '61'O; )"; 
};

//8.33
//VOID

//8.34
type record PDN_Type
{
  OCT1                         elementIdentifier,   // dec 99, '63'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT3                         pDN_TypeValue,
  BIT5                         spare2,
  octetstring                  additionalOctets  optional
} with { 
  variant (lengthIndicator) "LENGTHTO(pDN_TypeValue,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '63'O; )";  
};

//8.35
type record ProcedureTransactionID
{
  OCT1                         elementIdentifier,  // dec 100, '64'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      pTI_Value,
  octetstring                  additionalOctets  optional
} with { 
  variant (lengthIndicator) "LENGTHTO(pTI_Value,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '64'O; )";      
};

//8.36 Void

//8.37 Void

//8.38
type union MM_Context
{
  GSM_Key_and_Triplets                         gSM_Key_and_Triplets,
  UMTS_Key_UsedCipher_and_Quintuplets          uMTS_Key_UsedCipher_and_Quintuplets,
  GSM_Key_UsedCipher_and_Quintuplets           gSM_Key_UsedCipher_and_Quintuplets,
  UMTS_key_and_Quintuplets                     uMTS_key_and_Quintuplets,
  EPS_SecurityContext_and_Quadruplets          ePS_SecurityContext_and_Quadruplets,
  UMTS_Key_Quadruplets_and_Quintuplets         uMTS_Key_Quadruplets_and_Quintuplets
}

type set of AuthTriplet AuthTriplets;

type record AuthTriplet
{
  OCT16     rAND,
  OCT4      sRES,
  OCT8      kc
};

type set of AuthQuintuplet AuthQuintuplets;

type record AuthQuintuplet { 
  OCT16                     rand,
  integer                   xresLength,
  octetstring               xres,
  OCT16                     ck,
  OCT16                     ik,
  integer                   autnLength,
  octetstring               autn 
} with {
  variant (xresLength) "LENGTHTO(xres)";
  variant (autnLength) "LENGTHTO(autn)"; 
};

type set of AuthQuadruplet AuthQuadruplets;

type record AuthQuadruplet
{
  OCT16                     rand,
  integer                   xresLength,
  octetstring               xres,
  integer                   autnLength,
  octetstring               autn,
  octetstring               k_asme length (32) 
} with {
  variant (xresLength) "LENGTHTO(xres)";
  variant (autnLength) "LENGTHTO(autn)"; 
};

type record GSM_Key_and_Triplets
{
  OCT1                         elementIdentifier,  // dec 103, '67'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT3                         cksn,
  BIT1                         dRXI,
  BIT1                         spare2,
  integer                      securityMode, 
  BIT1                         sAMBRI,  
  BIT1                         uAMBRI,
  BIT3                         spare3,
  integer                      noofTriplets, 
  BIT3                         usedCipher,
  BIT5                         spare4, 
  OCT8                         kc, 
  AuthTriplets                 triplets, 
  OCT2                         drx_par optional,  
  OCT4                         uplinkSubscribedUE_AMBR optional,
  OCT4                         downlinkSubscribedUE_AMBR optional,
  OCT4                         uplinkUsedUE_AMBR optional,
  OCT4                         downlinkUsedUE_AMBR optional, 
  integer                      lengthOfUE_NEtworkCapability,
  octetstring                  uE_NEtworkCapability, 
  integer                      lengthOfMS_NetworkCapability,
  octetstring                  mS_NetworkCapability, 
  integer                      lengthOfMobileEquipmentIdentity,
  octetstring                  mobileEquipmentIdentity,
  BIT1                         uNA,
  BIT1                         gENA,
  BIT1                         gANA,
  BIT1                         iNA,
  BIT1                         eNA,
  BIT1                         hNNA,
  BIT1                         nBNA,
  BIT1                         eCNA,  
  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
} with { 
  variant (lengthIndicator) "LENGTHTO(cksn,dRXI,spare2,securityMode,sAMBRI,uAMBRI,spare3,noofTriplets,usedCipher,spare4, 
  kc,triplets,drx_par,uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability,
  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
  voiceDomainPreferenceAndUEsUsageSetting,
  additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '67'O; )";   
  variant (securityMode) "FIELDLENGTH(3)";  
  variant (noofTriplets) "FIELDLENGTH(3)"; 
  variant (noofTriplets) "LENGTHTO(triplets)";
  variant (noofTriplets) "UNIT(elements)";  
  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)"; 
  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";           
};

type record UMTS_Key_UsedCipher_and_Quintuplets
{
  OCT1                         elementIdentifier,  // dec 104, '68'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT3                         cksn_ksi,
  BIT1                         dRXI,
  BIT1                         spare2,
  integer                      securityMode, 
  BIT1                         sAMBRI,
  BIT1                         uAMBRI,
  BIT1                         uGIPAI,
  BIT1                         gUPII,
  BIT1                         iOVI,  
  integer                      noofQuintuplets, 
  BIT3                         usedCipher,
  BIT3                         usedGPRSIntegrityProtectionAlgorithm,
  BIT2                         spare3,  
  OCT16                        ck,
  OCT16                        ik, 
  AuthQuintuplets              quintuplets, 
  OCT2                         drx_par optional,    
  OCT4                         uplinkSubscribedUE_AMBR optional,
  OCT4                         downlinkSubscribedUE_AMBR optional,
  OCT4                         uplinkUsedUE_AMBR optional,
  OCT4                         downlinkUsedUE_AMBR optional, 
  integer                      lengthOfUE_NEtworkCapability,
  octetstring                  uE_NEtworkCapability, 
  integer                      lengthOfMS_NetworkCapability,
  octetstring                  mS_NetworkCapability, 
  integer                      lengthOfMobileEquipmentIdentity,
  octetstring                  mobileEquipmentIdentity,
  BIT1                         uNA,
  BIT1                         gENA,
  BIT1                         gANA,
  BIT1                         iNA,
  BIT1                         eNA,
  BIT1                         hNNA,
  BIT1                         nBNA,
  BIT1                         eCNA,  
  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
  integer                      lengthOfHigherBitratesThan16Mbpsflags optional,           //"extendable" optional for backward compatibility
  octetstring                  higherBitratesThan16Mbpsflags optional,                   //"extendable" optional for backward compatibility
  LIN1                         iOV_UpdatesCounter optional,                   //"extendable" optional for backward compatibility
  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
} with { 
  variant (lengthIndicator) "LENGTHTO(cksn_ksi,dRXI,spare2,securityMode,sAMBRI,uAMBRI,uGIPAI,gUPII,iOVI,noofQuintuplets, 
  usedCipher,usedGPRSIntegrityProtectionAlgorithm,spare3,ck,ik,quintuplets,drx_par,uplinkSubscribedUE_AMBR,
  downlinkSubscribedUE_AMBR,uplinkUsedUE_AMBR,downlinkUsedUE_AMBR, 
  lengthOfUE_NEtworkCapability,uE_NEtworkCapability,lengthOfMS_NetworkCapability,
  mS_NetworkCapability,lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
  voiceDomainPreferenceAndUEsUsageSetting,
  lengthOfHigherBitratesThan16Mbpsflags,
  higherBitratesThan16Mbpsflags,iOV_UpdatesCounter,
  additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '68'O; )";   
  variant (securityMode) "FIELDLENGTH(3)";  
  variant (noofQuintuplets) "FIELDLENGTH(3)";
  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
  variant (noofQuintuplets) "UNIT(elements)"; 
  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)"; 
  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
  variant (lengthOfHigherBitratesThan16Mbpsflags) "LENGTHTO(higherBitratesThan16Mbpsflags)";  
  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";       
  variant (iOV_UpdatesCounter) "PRESENCE (iOVI = '1'B; )";       
};

type record GSM_Key_UsedCipher_and_Quintuplets
{
  OCT1                         elementIdentifier,  // dec 105, '69'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT3                         cksn_ksi,
  BIT1                         dRXI,
  BIT1                         spare2,
  integer                      securityMode, 
  BIT1                         sAMBRI,
  BIT1                         uAMBRI,
  BIT3                         spare3,  
  integer                      noofQuintuplets,  
  BIT3                         usedCipher,
  BIT5                         spare4,  
  OCT8                         kc, 
  AuthQuintuplets              quintuplets, 
  OCT2                         drx_par optional,     
  OCT4                         uplinkSubscribedUE_AMBR optional,
  OCT4                         downlinkSubscribedUE_AMBR optional,
  OCT4                         uplinkUsedUE_AMBR optional,
  OCT4                         downlinkUsedUE_AMBR optional, 
  integer                      lengthOfUE_NEtworkCapability,
  octetstring                  uE_NEtworkCapability, 
  integer                      lengthOfMS_NetworkCapability,
  octetstring                  mS_NetworkCapability, 
  integer                      lengthOfMobileEquipmentIdentity,
  octetstring                  mobileEquipmentIdentity,
  BIT1                         uNA,
  BIT1                         gENA,
  BIT1                         gANA,
  BIT1                         iNA,
  BIT1                         eNA,
  BIT1                         hNNA,
  BIT1                         nBNA,
  BIT1                         eCNA,  
  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
  integer                      lengthOfHigherBitratesThan16Mbpsflags optional,           //"extendable" optional for backward compatibility
  octetstring                  higherBitratesThan16Mbpsflags optional,                   //"extendable" optional for backward compatibility
  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
} with { 
  variant (lengthIndicator) "LENGTHTO(cksn_ksi,dRXI,spare2,securityMode,sAMBRI,uAMBRI,spare3,  
  noofQuintuplets,usedCipher,spare4,kc,quintuplets, 
  drx_par,uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability, 
  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity, 
  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
  voiceDomainPreferenceAndUEsUsageSetting,
  lengthOfHigherBitratesThan16Mbpsflags,
  higherBitratesThan16Mbpsflags,
  additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '69'O; )";   
  variant (securityMode) "FIELDLENGTH(3)";  
  variant (noofQuintuplets) "FIELDLENGTH(3)";
  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
  variant (noofQuintuplets) "UNIT(elements)";
  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)"; 
  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
  variant (lengthOfHigherBitratesThan16Mbpsflags) "LENGTHTO(higherBitratesThan16Mbpsflags)";  
  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";         
};

type record UMTS_key_and_Quintuplets
{
  OCT1                         elementIdentifier,  // dec 106, '6A'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT3                         ksi,
  BIT1                         dRXI,
  BIT1                         spare2,
  integer                      securityMode, 
  BIT1                         sAMBRI,
  BIT1                         uAMBRI,   
  BIT1                         uGIPAI,   
  BIT1                         gUPII,   
  BIT1                         iOVI,  
  integer                      noofQuintuplets, 
  BIT3                         usedGPRSIntegrityProtectionAlgorithm, 
  BIT5                         spare4, 
  OCT16                        ck,
  OCT16                        ik,
  AuthQuintuplets              quintuplets,     
  OCT2                         drx_par optional,     
  OCT4                         uplinkSubscribedUE_AMBR optional,
  OCT4                         downlinkSubscribedUE_AMBR optional,
  OCT4                         uplinkUsedUE_AMBR optional,
  OCT4                         downlinkUsedUE_AMBR optional, 
  integer                      lengthOfUE_NEtworkCapability,
  octetstring                  uE_NEtworkCapability, 
  integer                      lengthOfMS_NetworkCapability,
  octetstring                  mS_NetworkCapability, 
  integer                      lengthOfMobileEquipmentIdentity,
  octetstring                  mobileEquipmentIdentity,
  BIT1                         uNA,
  BIT1                         gENA,
  BIT1                         gANA,
  BIT1                         iNA,
  BIT1                         eNA,
  BIT1                         hNNA,
  BIT1                         nBNA,
  BIT1                         eCNA,  
  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
  integer                      lengthOfHigherBitratesThan16Mbpsflags optional,           //"extendable" optional for backward compatibility
  octetstring                  higherBitratesThan16Mbpsflags optional,                   //"extendable" optional for backward compatibility
  LIN1                         iOV_UpdatesCounter optional,
  integer                      lengthOfExtendedAccessRestrictionData optional,
  BIT1                         nRSRNA  optional,
  BIT7                         spare5 optional,
  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
}  with { 
  variant (lengthIndicator) "LENGTHTO(ksi,dRXI,spare2,securityMode,sAMBRI,uAMBRI,uGIPAI,gUPII,iOVI,  
  noofQuintuplets,usedGPRSIntegrityProtectionAlgorithm,spare4,ck,ik,quintuplets,     
  drx_par,uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability, 
  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
  voiceDomainPreferenceAndUEsUsageSetting,
  lengthOfHigherBitratesThan16Mbpsflags,
  higherBitratesThan16Mbpsflags,iOV_UpdatesCounter,
  lengthOfExtendedAccessRestrictionData,nRSRNA,spare5,
  additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '6A'O; )";   
  variant (securityMode) "FIELDLENGTH(3)";  
  variant (noofQuintuplets) "FIELDLENGTH(3)";
  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
  variant (noofQuintuplets) "UNIT(elements)"; 
  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)";
  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
  variant (lengthOfHigherBitratesThan16Mbpsflags) "LENGTHTO(higherBitratesThan16Mbpsflags)";  
  variant (lengthOfExtendedAccessRestrictionData) "LENGTHTO(nRSRNA,spare5)";  
  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";             
  variant (iOV_UpdatesCounter) "PRESENCE (iOVI = '1'B; )";  
};


type record OldEPS_SecurityContext
{
  BIT3                         oldNCC,
  BIT3                         oldKSI,
  BIT1                         spare,
  BIT1                         nHI_old,
  octetstring                  old_K_asme length (32), 
  octetstring                  old_NH length (32) optional 
} with { 
  variant (old_NH)  "PRESENCE(nHI_old = '1'B )"; 
};

type record EPS_SecurityContext_and_Quadruplets
{
  OCT1                         elementIdentifier,  // dec 107, '6B'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT3                         ksi_asme,
  BIT1                         dRXI,
  BIT1                         nHI,
  integer                      securityMode,  
  BIT1                         osci,
  BIT1                         uAMBRI,      
  integer                      noofQuadruplets, 
  integer                      noofQuintuplets, 
  BIT4                         usedNAS_Cipher,
  BIT3                         usedNAS_IntegrityAlgorithm,
  BIT1                         sAMBRI,
  integer                      nAS_DownlinkCount,
  integer                      nAS_UplinkCount,
  octetstring                  k_asme length (32), 
  AuthQuadruplets              quadruplets,   
  AuthQuintuplets              quintuplets,
  OCT2                         drx_par optional, 
  octetstring                  nH length (32) optional, 
  BIT3                         nCC optional, 
  BIT5                         spare4 optional,   
  OCT4                         uplinkSubscribedUE_AMBR optional,
  OCT4                         downlinkSubscribedUE_AMBR optional,
  OCT4                         uplinkUsedUE_AMBR optional,
  OCT4                         downlinkUsedUE_AMBR optional, 
  integer                      lengthOfUE_NEtworkCapability,
  octetstring                  uE_NEtworkCapability, 
  integer                      lengthOfMS_NetworkCapability,
  octetstring                  mS_NetworkCapability, 
  integer                      lengthOfMobileEquipmentIdentity,
  octetstring                  mobileEquipmentIdentity, 
  BIT1                         uNA,
  BIT1                         gENA,
  BIT1                         gANA,
  BIT1                         iNA,
  BIT1                         eNA,
  BIT1                         hNNA,
  BIT1                         nBNA,
  BIT1                         eCNA, 
  OldEPS_SecurityContext       oldEPS_SecurityContext optional,               
  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
  LIN2_BO_LAST                 lengthOfUERadioCapabilityforPagingInformation optional,   //"extendable" optional for backward compatibility
  octetstring                  uERadioCapabilityforPagingInformation optional,           //"extendable" optional for backward compatibility
  integer                      lengthOfExtendedAccessRestrictionData optional, //"extendable" optional for backward compatibility
  BIT1                         nRSRNA optional,
  BIT1                         uSSRNA optional,
  BIT6                         spare5 optional,
  integer                      lengthOfUEAdditionalSecurityCapability optional, //"extendable" optional for backward compatibility
  octetstring                  uEAdditionalSecurityCapability optional,         //"extendable" optional for backward compatibility
  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility   
}  with { 
  variant (lengthIndicator) "LENGTHTO(ksi_asme,dRXI,nHI,securityMode,osci,uAMBRI,noofQuadruplets, 
  noofQuintuplets,usedNAS_Cipher,usedNAS_IntegrityAlgorithm,sAMBRI,
  nAS_DownlinkCount,nAS_UplinkCount,k_asme, 
  quadruplets,quintuplets,drx_par,nH,nCC,spare4, 
  uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability, 
  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
  oldEPS_SecurityContext, 
  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
  voiceDomainPreferenceAndUEsUsageSetting,
  lengthOfUERadioCapabilityforPagingInformation,
  uERadioCapabilityforPagingInformation,
  lengthOfExtendedAccessRestrictionData,nRSRNA, uSSRNA,spare5,
  lengthOfUEAdditionalSecurityCapability,uEAdditionalSecurityCapability,
  additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '6B'O; )";   
  variant (securityMode) "FIELDLENGTH(3)";  
  variant (noofQuadruplets) "FIELDLENGTH(3)";
  variant (noofQuadruplets) "LENGTHTO(quadruplets)";
  variant (noofQuadruplets) "UNIT(elements)";      
  variant (noofQuintuplets) "FIELDLENGTH(3)";
  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
  variant (noofQuintuplets) "UNIT(elements)";      
  variant (nAS_DownlinkCount)  "FIELDLENGTH(24)";
  variant (nAS_DownlinkCount) "BYTEORDER(last)";     
  variant (nAS_UplinkCount) "FIELDLENGTH(24)"; 
  variant (nAS_UplinkCount) "BYTEORDER(last)";       
  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)";
  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
  variant (lengthOfUERadioCapabilityforPagingInformation) "LENGTHTO(uERadioCapabilityforPagingInformation)";  
  variant (lengthOfExtendedAccessRestrictionData) "LENGTHTO(nRSRNA,uSSRNA,spare5)";  
  variant (lengthOfUEAdditionalSecurityCapability) "LENGTHTO(uEAdditionalSecurityCapability)";  
  variant (drx_par) "PRESENCE(dRXI = '1'B)";
  variant (nH)      "PRESENCE(nHI = '1'B)";
  variant (nCC)     "PRESENCE(nHI = '1'B)";
  variant (spare4)  "PRESENCE(nHI = '1'B)";   
  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";      
  variant (oldEPS_SecurityContext)  "PRESENCE(osci = '1'B )";                   
}; 

type record UMTS_Key_Quadruplets_and_Quintuplets
{
  OCT1                         elementIdentifier,   // dec 108, '6C'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT3                         ksi_asme,
  BIT1                         dRXI,
  BIT1                         spare2,
  integer                      securityMode, 
  BIT1                         sAMBRI,
  BIT1                         uAMBRI,
  integer                      noofQuadruplets, 
  integer                      noofQuintuplets,
  OCT1                         spare4, 
  OCT16                        ck,
  OCT16                        ik,
  AuthQuadruplets              quadruplets,   
  AuthQuintuplets              quintuplets,  
  OCT2                         drx_par optional,  
  OCT4                         uplinkSubscribedUE_AMBR optional,
  OCT4                         downlinkSubscribedUE_AMBR optional,
  OCT4                         uplinkUsedUE_AMBR optional,
  OCT4                         downlinkUsedUE_AMBR optional, 
  integer                      lengthOfUE_NEtworkCapability,
  octetstring                  uE_NEtworkCapability, 
  integer                      lengthOfMS_NetworkCapability,
  octetstring                  mS_NetworkCapability, 
  integer                      lengthOfMobileEquipmentIdentity,
  octetstring                  mobileEquipmentIdentity, 
  BIT1                         uNA,
  BIT1                         gENA,
  BIT1                         gANA,
  BIT1                         iNA,
  BIT1                         eNA,
  BIT1                         hNNA,
  BIT1                         nBNA,
  BIT1                         eCNA,  
  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional,  //"extendable" optional for backward compatibility
  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,          //"extendable" optional for backward compatibility
  octetstring                  additionalOctets  optional                                 //"extendable" optional for backward compatibility 
}  with { 
  variant (lengthIndicator) "LENGTHTO(ksi_asme,dRXI,spare2,securityMode,sAMBRI,uAMBRI, 
  noofQuadruplets,noofQuintuplets,spare4,ck,
  ik,quadruplets,quintuplets,drx_par,uplinkSubscribedUE_AMBR,
  downlinkSubscribedUE_AMBR,uplinkUsedUE_AMBR,downlinkUsedUE_AMBR, 
  lengthOfUE_NEtworkCapability,uE_NEtworkCapability, 
  lengthOfMS_NetworkCapability,mS_NetworkCapability, 
  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
  voiceDomainPreferenceAndUEsUsageSetting,
  additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '6C'O; )";   
  variant (securityMode) "FIELDLENGTH(3)";  
  variant (noofQuadruplets) "FIELDLENGTH(3)";
  variant (noofQuadruplets) "LENGTHTO(quadruplets)";
  variant (noofQuadruplets) "UNIT(elements)";      
  variant (noofQuintuplets) "FIELDLENGTH(3)";
  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
  variant (noofQuintuplets) "UNIT(elements)";
  variant (drx_par) "PRESENCE (dRXI = '1'B; )";
  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)";
  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )"; 
};   

//8.39
type set PDN_Conn_BearerContext_IEs
{
  EPS_BearerID                ePS_BearerID optional,
  EPS_BearerLevel_TFT         ePS_Bearer_TFT optional, 
  FullyQualifiedTEID_List     fullyQualifiedTEID optional, 
  Bearer_QoS                  bearerLevel_QoS optional,
  FullyQualifiedContainer     container optional, 
  TransactionIdentifier       transactionIdentifier optional,
  BearerFlags                 bearerFlags optional 
}with {         
  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
};         

type record PDN_Conn_BearerContext
{
  OCT1                         elementIdentifier,// dec 93, '5D'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,  
  PDN_Conn_BearerContext_IEs   bearerContext_IEs
} with { 
  variant (lengthIndicator) "LENGTHTO(bearerContext_IEs)"; 
  variant "PRESENCE (elementIdentifier = '5D'O; )";      
};

type set of PDN_Conn_BearerContext PDN_Conn_BearerContext_List

type set PDN_Connection_IEs
{
  AccessPointName             accessPointName optional,
  IP_Address_List             iP_Address optional,
  EPS_BearerID                linkedEPS_Bearer_ID optional,
  FullyQualifiedTEID          fullyQualifiedTEID optional,  
  FullyQualifiedDomainName_List fullyQualifiedDomainName optional,
  PDN_Conn_BearerContext_List bearerContexts optional, 
  AggregateMaximumBitRate     apn_ambr optional,
  ChargingCharacteristics     chargingCharacteristics optional,
  APN_Restriction             aPN_Restriction optional,
  SelectionMode               selectionMode optional,
  ChangeReportingAction       changeReportingAction optional,
  CSG_InformationReportingAction cSG_InformationReportingAction optional,
  HeNBInformationReporting    heNBInformationReporting optional,
  Indication                  indicationFlags optional,
  SignallingPriorityIndication signallingPriorityIndication optional,
  ChangeToReportFlags	        changeToReportFlags optional,
  PresenceReportingAreaAction_List presenceReportingAreaAction optional,
  WLANOffloadabilityIndication wLANOffloadabilityIndication optional,
  RemoteUEContextGrouped_List  remoteUEContext optional,
  PDN_Type                     pDN_Type optional,
  HeaderCompressionConfiguration headerCompressionConfiguration optional
} with { 
  variant(iP_Address) "REPEATABLE(yes)";
  variant(fullyQualifiedDomainName) "REPEATABLE(yes)";
  variant(bearerContexts) "REPEATABLE(yes)";  
  variant(presenceReportingAreaAction) "REPEATABLE(yes)";
  variant(remoteUEContext) "REPEATABLE(yes)";
};    

type record PDN_ConnectionGrouped
{
  OCT1                         elementIdentifier,  // dec 109, '6D'O   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,  
  PDN_Connection_IEs           pDN_Connection_IEs
} with { 
  variant (lengthIndicator) "LENGTHTO(pDN_Connection_IEs)";
  variant "PRESENCE (elementIdentifier = '6D'O; )";      
};         

type set of PDN_ConnectionGrouped PDN_ConnectionGrouped_List    

//8.40
type record PDU_Numbers
{
  OCT1                         elementIdentifier,  // dec 110, '6E'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,  
  BIT4                         nSAPI,
  BIT4                         spare2,
  integer                      dL_GTPU_SeqNumber, 
  integer                      uL_GTPU_SeqNumber,
  integer                      send_NPDU_Number,
  integer                      receive_NPDU_Number, 
  octetstring                  additionalOctets  optional
} with { 
  variant (lengthIndicator) "LENGTHTO(nSAPI,spare2,dL_GTPU_SeqNumber, 
  uL_GTPU_SeqNumber,send_NPDU_Number,
  receive_NPDU_Number,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '6E'O;)"; 
  variant (dL_GTPU_SeqNumber) "FIELDLENGTH(16)";
  variant (dL_GTPU_SeqNumber) "BYTEORDER(last)";  
  variant (uL_GTPU_SeqNumber) "FIELDLENGTH(16)"; 
  variant (uL_GTPU_SeqNumber) "BYTEORDER(last)";
  variant (send_NPDU_Number) "FIELDLENGTH(16)";
  variant (send_NPDU_Number) "BYTEORDER(last)";   
  variant (receive_NPDU_Number) "FIELDLENGTH(16)"; 
  variant (receive_NPDU_Number) "BYTEORDER(last)";         
};

//8.41
type record Packet_TMSI
{
  OCT1                         elementIdentifier, // dec 111, '6F'O   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,  
  OCT4                         pTMSI_Value
} with { 
  variant (lengthIndicator) "LENGTHTO(pTMSI_Value)"; 
  variant "PRESENCE (elementIdentifier = '6F'O; )";      
};


//8.42
type record P_TMSI_Signature
{
  OCT1                         elementIdentifier, // dec 112, '70'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,  
  OCT3                         p_TMSI_SignatureValue     
} with { 
  variant (lengthIndicator) "LENGTHTO(p_TMSI_SignatureValue)"; 
  variant "PRESENCE (elementIdentifier = '70'O; )";      
};

//8.43
type record Hop_Counter
{
  OCT1                         elementIdentifier,  //dec 113, '71'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,   
  integer                      hopCounterValue,
  octetstring                  additionalOctets  optional
} with { 
  variant (lengthIndicator) "LENGTHTO(hopCounterValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '71'O; )";      
}; 

//8.44
type record UE_TimeZone
{
  OCT1                         elementIdentifier,  //dec 114, '72'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,   
  OCT1                         timeZone,
  BIT2                         daylightSavingTime,
  BIT6                         spare2,
  octetstring                  additionalOctets  optional 
} with { 
  variant (lengthIndicator) "LENGTHTO(timeZone,daylightSavingTime,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '72'O; )";      
}; 

//8.45
type record TraceReference
{
  OCT1                         elementIdentifier,  //dec 115, '73'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,   
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3, 
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  OCT3                         traceID_Value
} with { 
  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,
  mncDigit1,mncDigit2,traceID_Value)"; 
  variant "PRESENCE (elementIdentifier = '73'O; )";      
};

//8.46
type record CompleteRequestMessage 
{ 
  OCT1                         elementIdentifier,   //dec 116, '74'O   
  LIN2_BO_LAST                 lengthIndicator, 
  BIT4                         instance,
  BIT4                         spare,    
  integer                      completeRequestMessageType, 
  octetstring                  completeRequestMessageValue 
} with { 
  variant (lengthIndicator) "LENGTHTO(completeRequestMessageType,completeRequestMessageValue)"; 
  variant "PRESENCE (elementIdentifier = '74'O; )";      
}; 

//8.47
type record GUTI
{
  OCT1                         elementIdentifier,   //dec 117, '75'O    
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,    
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3, 
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  OCT2                         mME_GroupID,
  OCT1                         mME_Code,
  octetstring                  m_TMSI
} with { 
  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3, 
  mncDigit1,mncDigit2,mME_GroupID,mME_Code,m_TMSI
  )"; 
  variant "PRESENCE (elementIdentifier = '75'O; )";        
};

//8.48
type record FullyQualifiedContainer
{
  OCT1                         elementIdentifier,   //dec 118, '76'O     
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      containerType,
  BIT4                         spare2,
  F_ContainerField             f_ContainerField
} with { 
  variant (lengthIndicator) "LENGTHTO(containerType,spare2,f_ContainerField)"; 
  variant "PRESENCE (elementIdentifier = '76'O; )"; 
  variant (containerType) "FIELDLENGTH(4)";            
  variant (f_ContainerField) "CROSSTAG(
  uTRAN_TransparentContainer,    containerType = 1;
  bSS_Container,                 containerType = 2; 
  eUTRAN_TransparentContainer,   containerType = 3; 
  nBIFOM_Container,              containerType = 4;
  )";  
};

type union F_ContainerField
{
  BSS_Container_union bSS_Container,
  octetstring uTRAN_TransparentContainer,
  octetstring eUTRAN_TransparentContainer,
  octetstring nBIFOM_Container
}

type set of FullyQualifiedContainer FullyQualifiedContainer_List;

type union BSS_Container_union {
  BSS_Container bSS_Container_structured,
  octetstring bSS_Container_octet
}

//8.48-2
type record BSS_Container
{
  BIT1    pFI,
  BIT1    rP,
  BIT1    sAPIflag,
  BIT1    pHX,
  BIT4    spare,
  OCT1    packetFlowID optional,
  BIT3    radioPriority optional,
  BIT1    spare2 optional,
  BIT4    sAPI optional,
  integer xiDparametersLength optional,
  octetstring xiDparameters optional
} with {
  variant "PRESENCE (spare = '0000'B; )";
  variant (xiDparametersLength) "LENGTHTO(xiDparameters)"; 
  variant (packetFlowID) "PRESENCE (pFI = '1'B; )";  
  variant (radioPriority) "PRESENCE (rP = '1'B; )";  
  variant (sAPI) "PRESENCE (sAPIflag = '1'B; )";  
  variant (xiDparametersLength) "PRESENCE (pHX = '1'B; )";  
  variant (xiDparameters) "PRESENCE (pHX = '1'B; )";  
};

//8.49
type record FullyQualifiedCause
{
  OCT1                         elementIdentifier,   //dec 119, '77'O      
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT4                         causeType,
  BIT4                         spare2,   
  octetstring                  f_CauseFieldValue
} with { 
  variant (lengthIndicator) "LENGTHTO(causeType,spare2,f_CauseFieldValue)"; 
  variant "PRESENCE (elementIdentifier = '77'O; )";            
};

type set of FullyQualifiedCause FullyQualifiedCause_List;

//8.50
type record PLMN_ID
{
  OCT1                         elementIdentifier,  //dec 120, '78'O    
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  OCT3                         pLMN_IdentityValue   
}with { 
  variant (lengthIndicator) "LENGTHTO(pLMN_IdentityValue)"; 
  variant "PRESENCE (elementIdentifier = '78'O; )";            
};

//8.51
type record TargetIdentification
{
  OCT1                         elementIdentifier,  //dec 121, '79'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  integer                      targetType,
  TargetId                     targetID
} with { 
  variant (lengthIndicator) "LENGTHTO(targetType,targetID)";
  variant "PRESENCE (elementIdentifier = '79'O; )";
  variant (targetID) "CROSSTAG( rnc_ID, targetType = 0;
  macro_eNodeB_ID, targetType = 1;
  cell_ID, targetType = 2;
  home_eNodeB_ID, targetType = 3;
  unknown, OTHERWISE)"
};

type union TargetId {
  RNC_ID rnc_ID,
  Macro_eNodeB_ID_TAC macro_eNodeB_ID,
  Cell_ID cell_ID,
  Home_eNodeB_ID_TAC home_eNodeB_ID, 
  octetstring unknown
}

type octetstring RNC_ID;
type octetstring Cell_ID;

type record Macro_eNodeB_ID_TAC {
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  BIT4                         spare2,
  bitstring                    targetID length(20),
  OCT2                         tac
} with { 
  variant (spare2,targetID) "FIELDORDER(msb)";
  variant (targetID) "BYTEORDER(last)";
}

type record Home_eNodeB_ID_TAC {
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  BIT4                         spare2,
  bitstring                    targetID length(28),
  OCT2                         tac
} with { 
  variant (spare2,targetID) "FIELDORDER(msb)";
  variant (targetID) "BYTEORDER(last)";
}

// In Presence Reporting Area Action it shall be encoded as per octets 6 to 11 of the Target ID 
type record Macro_eNodeB_ID {
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  BIT4                         spare2,
  bitstring                    targetID length(20)
} with { 
  variant (spare2,targetID) "FIELDORDER(msb)";
  variant (targetID) "BYTEORDER(last)";
}

// In Presence Reporting Area Action it shall be encoded as per octets 6 to 11 of the Target ID 
type record Home_eNodeB_ID {
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  BIT4                         spare2,
  bitstring                    targetID length(28)
} with { 
  variant (spare2,targetID) "FIELDORDER(msb)";
  variant (targetID) "BYTEORDER(last)";
}

//8.52
//VOID

//8.53
type record PacketFlowID
{
  OCT1                         elementIdentifier,  // dec 123, '7B'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT4                         eBI,
  BIT4                         spare2,
  octetstring                  packetFlowIDValue
} with { 
  variant (lengthIndicator) "LENGTHTO(eBI,spare2,packetFlowIDValue)"; 
  variant "PRESENCE (elementIdentifier = '7B'O;)";            
};

//8.54
type record RAB_Context
{
  OCT1                         elementIdentifier,  // dec 124, '7C'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,   
  BIT4                         nSAPI,
  BIT4                         spare2,
  integer                      dL_GTPU_SeqNumber,
  integer                      uL_GTPU_SeqNumber,
  integer                      dL_PDCP_SeqNumber,
  integer                      uL_PDCP_SeqNumber
}with { 
  variant (lengthIndicator) "LENGTHTO(nSAPI,spare2,dL_GTPU_SeqNumber,uL_GTPU_SeqNumber,dL_PDCP_SeqNumber,uL_PDCP_SeqNumber)"; 
  variant "PRESENCE (elementIdentifier = '7C'O;)"; 
  variant (dL_GTPU_SeqNumber) "FIELDLENGTH(16)"; 
  variant (dL_GTPU_SeqNumber) "BYTEORDER(last)";   
  variant (uL_GTPU_SeqNumber) "FIELDLENGTH(16)";
  variant (uL_GTPU_SeqNumber) "BYTEORDER(last)";    
  variant (dL_PDCP_SeqNumber) "FIELDLENGTH(16)";  
  variant (dL_PDCP_SeqNumber) "BYTEORDER(last)";   
  variant (uL_PDCP_SeqNumber) "FIELDLENGTH(16)"; 
  variant (uL_PDCP_SeqNumber) "BYTEORDER(last)";                 
};

type set of RAB_Context RAB_Context_List

//8.55
type record Source_RNC_PDCP_Context_Info
{
  OCT1                         elementIdentifier,  // dec 125, '7D'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  octetstring                  rRC_ContainerValue
} with { 
  variant (lengthIndicator) "LENGTHTO(rRC_ContainerValue)"; 
  variant "PRESENCE (elementIdentifier = '7D'O;)";            
};

//8.56
type record PortNumber
{
  OCT1                         elementIdentifier, // dec 126, '7E'O   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  integer                      PortNumberValue,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO(PortNumberValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '7E'O;)";
  variant (PortNumberValue) "FIELDLENGTH(16)"; 
  variant (PortNumberValue) "BYTEORDER(last)";              
};

type set of PortNumber PortNumber_List

//8.57
type record APN_Restriction
{
  OCT1                         elementIdentifier,  // dec 127, '7F'O   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  integer                      restrictionTypeValue,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO(restrictionTypeValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '7F'O;)";            
};

//8.58
type record SelectionMode
{
  OCT1                         elementIdentifier,   // dec 128, '80'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  integer                      selectionModeValue,
  BIT6                         spare2,
  octetstring                  additionalOctets optional 
} with { 
  variant (lengthIndicator) "LENGTHTO(selectionModeValue,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '80'O;)"; 
  variant (selectionModeValue) "FIELDLENGTH(2)";              
};

//8.59
type record SourceIdentification
{
  OCT1                         elementIdentifier,   // dec 129, '81'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  OCT8                         targetCellID,
  OCT1                         sourceType,
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  BIT4                         spare2,
  bitstring                    sourceID length(20),
  OCT2                         tac
} with { 
  variant (lengthIndicator) "LENGTHTO(targetCellID,sourceType,mccDigit1,mccDigit2,mccDigit3,
  mncDigit3,mncDigit1,mncDigit2,spare2,
  sourceID,tac)"; 
  variant "PRESENCE (elementIdentifier = '81'O;)";
  variant (spare2,sourceID) "FIELDORDER(msb)";
  variant (sourceID) "BYTEORDER(last)";
};   

//8.60
//VOID

//8.61
type record ChangeReportingAction
{
  OCT1                         elementIdentifier, // dec 131, '83'O   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  octetstring                  actionValue
} with { 
  variant (lengthIndicator) "LENGTHTO(actionValue)"; 
  variant "PRESENCE (elementIdentifier = '83'O;)";            
};

//8.62
type set of OCT2 PDN_CSID_List;

type union NodeID
{
  OCT4       globalUnicastIPv4,
  OCT16      globalUnicastIPv6,
  OCT4       fourOctets
};

type record FullyQualifiedPDN_ConnectionSetID   //FQ CSID
{
  OCT1                         elementIdentifier, // dec 132, '84'O 
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  integer                      nRofCSIDs,
  integer                      nodeIDType,
  NodeID                       nodeID,
  PDN_CSID_List                pDN_CSID_List,
  octetstring                  additionalOctets optional 
} with { 
  variant (lengthIndicator) "LENGTHTO(nRofCSIDs,nodeIDType,nodeID,pDN_CSID_List,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '84'O;)";    
  variant (nRofCSIDs) "FIELDLENGTH(4)"; 
  variant (nRofCSIDs) "LENGTHTO(pDN_CSID_List)"; 
  variant (nRofCSIDs) "UNIT(elements)";    
  variant (nodeIDType) "FIELDLENGTH(4)";
  variant (nodeID) "CROSSTAG(
  globalUnicastIPv4,     nodeIDType = 0;
  globalUnicastIPv6,     nodeIDType = 1; 
  fourOctets,            nodeIDType = 2; 
  )";  
};

type set of FullyQualifiedPDN_ConnectionSetID FullyQualifiedPDN_ConnectionSetID_List;

//8.63
type record ChannelNeeded
{
  OCT1                         elementIdentifier, // dec 133, '85'O  
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  octetstring                  channelNeededValue
} with { 
  variant (lengthIndicator) "LENGTHTO(channelNeededValue)"; 
  variant "PRESENCE (elementIdentifier = '85'O;)";            
};

//8.64
type record EMLPP_Priority
{
  OCT1                         elementIdentifier, // dec 134, '86'O   
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  octetstring                  eMLPP_PriorityValue               
}with { 
  variant (lengthIndicator) "LENGTHTO(eMLPP_PriorityValue)"; 
  variant "PRESENCE (elementIdentifier = '86'O;)";            
};

//8.65
type record NodeType
{
  OCT1                         elementIdentifier,// dec 135, '87'O    
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT1                         nodeTypeValue, 
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(nodeTypeValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '87'O;)";            
};

//8.66
type record FullyQualifiedDomainName
{
  OCT1                         elementIdentifier,  // dec 136, '88'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,  
  octetstring                  fQDN_Value
} with { 
  variant (lengthIndicator) "LENGTHTO(fQDN_Value)"; 
  variant "PRESENCE (elementIdentifier = '88'O;)";
};

type set of FullyQualifiedDomainName FullyQualifiedDomainName_List;

//8.67
// Moved to GTPv2_PrivateExtensions.ttcn


//8.68
type record TransactionIdentifier
{
  OCT1                         elementIdentifier, // dec 137, '89'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT4                         spare2,                  
  L3_TransactionId             transactionIdentifierValue  
} with { 
  variant (lengthIndicator) "LENGTHTO(spare2,transactionIdentifierValue)"; 
  variant "PRESENCE (elementIdentifier = '89'O;)";
};

type record L3_TransactionId
{
  BIT3               tio,
  BIT1               tiFlag ,
  TI_Extension       tIExtension  optional     
  // an extension octet (TI) can be used for session management messages
  // not yet implemented (see 24.008 clause 10.3.2 for more detail
} with { variant (tIExtension) "PRESENCE(tio = '111'B)"
};  

type record TI_Extension
{
  BIT7               tI_Value,
  BIT1               tI_ExtBit         //'1'B
};

//8.69
type record MBMS_SessionDuration
{
  OCT1                         elementIdentifier, // dec 138, '8A'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT3                         mBMS_SessionDurationValue,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(mBMS_SessionDurationValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '8A'O;)";            
};

//8.70
type record MBMS_ServiceArea
{
  OCT1                         elementIdentifier, // dec 139, '8B'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  octetstring                  mBMS_ServiceAreaValue
}with { 
  variant (lengthIndicator) "LENGTHTO(mBMS_ServiceAreaValue)"; 
  variant "PRESENCE (elementIdentifier = '8B'O;)";            
};

//8.71
type record MBMS_SessionIdentifier
{
  OCT1                         elementIdentifier, // dec 140, '8C'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT1                         mBMS_SessionIdentifierValue,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(mBMS_SessionIdentifierValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '8C'O;)";            
};

//8.72
type record MBMS_FlowIdentifier
{
  OCT1                         elementIdentifier, // dec 141, '8D'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT2                         mBMS_FlowIdentifierValue,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(mBMS_FlowIdentifierValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '8D'O;)";            
};

//8.73
type record MBMS_IPMulticastDistribution
{
  OCT1                         elementIdentifier, // dec 142, '8E'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT4                         commonTunnelEndpointIdentifierData,
  GSN_Address                  iP_MulticastDistributionAddress,
  GSN_Address                  iP_MulticastSourceAddress,
  OCT1                         mBMS_HCIndicator,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(commonTunnelEndpointIdentifierData,iP_MulticastDistributionAddress,
  iP_MulticastSourceAddress,mBMS_HCIndicator,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '8E'O;)";            
};

type set of MBMS_IPMulticastDistribution MBMS_IPMulticastDistribution_List;

type record GSN_Address
{ 
  INT6b        lengthIndicator,
  BIT2         addressType,
  octetstring  addressValue 
}with { 
  variant (lengthIndicator) "LENGTHTO(addressValue)"; 
};

//8.74
type record MBMS_DistributionAcknowledge
{
  OCT1                         elementIdentifier, // dec 143, '8F'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT2                         distributionIndicationValue,
  BIT6                         spare2,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(distributionIndicationValue,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '8F'O;)";            
};

//8.75
type record User_CSG_Information
{
  OCT1                         elementIdentifier, // dec 145, '91'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  BIT5                         spare2,
  bitstring                    cSG_ID length(27),
  BIT1                         cMI,
  BIT1                         lCSG,
  BIT4                         spare3,
  BIT2                         accessMode, 
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,
  mncDigit3,mncDigit1,mncDigit2,
  spare2,cSG_ID,cMI,lCSG,spare3,
  accessMode,additionalOctets)"; 
  variant (spare2,cSG_ID) "FIELDORDER(msb)";
  variant (cSG_ID) "BYTEORDER(last)";
  variant "PRESENCE (elementIdentifier = '91'O;)";            
};

//8.76
type record CSG_InformationReportingAction
{
  OCT1                         elementIdentifier, // dec 146, '92'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT1                         uCIC_SG,
  BIT1                         uCIS_HC,
  BIT1                         uCIU_HC,
  BIT5                         spare2,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(uCIC_SG,uCIS_HC,uCIU_HC,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '92'O;)";            
};

//8.77
type record of RFSP_Index RFSP_Index_List;

type record RFSP_Index
{
  OCT1                         elementIdentifier, // dec 144, '90'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  integer                      rFSP_IndexValue 
}  with { 
  variant (lengthIndicator) "LENGTHTO(rFSP_IndexValue)"; 
  variant "PRESENCE (elementIdentifier = '90'O;)"; 
  variant (rFSP_IndexValue) "FIELDLENGTH(16)"; 
  variant (rFSP_IndexValue) "BYTEORDER(last)";    
};

//8.78
type record CSG_ID
{
  OCT1                         elementIdentifier, // dec 147, '93'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT5                         spare2,
  bitstring                    cSG_ID length(27),
  octetstring                  additionalOctets optional
}  with { 
  variant (lengthIndicator) "LENGTHTO(spare2,cSG_ID,additionalOctets)"; 
  variant (spare2,cSG_ID) "FIELDORDER(msb)";
  variant (cSG_ID) "BYTEORDER(last)";
  variant "PRESENCE (elementIdentifier = '93'O;)"; 
};

//8.79
type record CSG_MembershipIndication
{
  OCT1                         elementIdentifier, // dec 148, '94'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT1                         cMI,
  BIT7                         spare2,
  octetstring                  additionalOctets optional
}  with { 
  variant (lengthIndicator) "LENGTHTO(cMI,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '94'O;)"; 
};

//8.80
type record ServiceIndicator
{
  OCT1                         elementIdentifier, // dec 149, '95'O
  LIN2_BO_LAST                 lengthIndicator,  //=1
  BIT4                         instance,
  BIT4                         spare, 
  INT1                         serviceIndicator
}  with { 
  variant (lengthIndicator) "LENGTHTO(serviceIndicator)"; 
  variant "PRESENCE (elementIdentifier = '95'O;)"; 
};

//8.81
type record DetachType
{
  OCT1                         elementIdentifier, // dec 150, '96'O
  LIN2_BO_LAST                 lengthIndicator,  //=1
  BIT4                         instance,
  BIT4                         spare, 
  INT1                         detachType
} with { 
  variant (lengthIndicator) "LENGTHTO(detachType)"; 
  variant "PRESENCE (elementIdentifier = '96'O;)"; 
};

//8.82
type record LocalDistinguishedName
{
  OCT1                         elementIdentifier, // dec 151 '97'O
  LIN2_BO_LAST                 lengthIndicator, 
  BIT4                         instance,
  BIT4                         spare,
  charstring                   lDN length (1..400) 
} with { 
  variant (lengthIndicator) "LENGTHTO(lDN)"; 
  variant "PRESENCE (elementIdentifier = '97'O;)"; 
};

type set of LocalDistinguishedName LocalDistinguishedName_List

//8.83
type record NodeFeatures
{
  OCT1                         elementIdentifier, // dec 152, '98'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT1                         pRN,
  BIT1                         mABR,
  BIT1                         nTSR,
  BIT1                         cIOT,
  BIT4                         spare2,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(pRN,mABR,nTSR,cIOT,spare2,additionalOctets)";
  variant "PRESENCE (elementIdentifier = '98'O;)"; 
};

//8.84
type record MBMSTimetoDataTransfer
{
  OCT1                         elementIdentifier, // dec 153, '99'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  OCT1                         mBMSTimetoDataTransfervalue,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO(mBMSTimetoDataTransfervalue, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '99'O;)"; 
};

//8.85
type record Throttling
{
  OCT1                         elementIdentifier, // dec 154, '9A'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  INT5b                        throttlingDelayValue,
  BIT3                         throttlingDelayUnit,
  INT1                         throttlingfactor,
  octetstring                  additionalOctets optional 
}with { 
  variant (lengthIndicator) "LENGTHTO(throttlingDelayValue,throttlingDelayUnit,throttlingfactor,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '9A'O;)";  
};


//8.86
type record AllocationRetentionPriority
{
  OCT1                         elementIdentifier, // dec 155, '9B'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT1                         pVI,
  BIT1                         spare2,
  BIT4                         pL,
  BIT1                         pCI,
  BIT1                         spare3,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO(pVI,spare2,pL,pCI,spare3,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '9B'O;)"; 
};

//8.87
type record EPC_Timer
{
  OCT1                         elementIdentifier, // dec 156, '9C'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  INT5b                        timerValue,  
  BIT3                         timerUnit,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO(timerValue,timerUnit,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '9C'O;)"; 
};

//8.88
type record SignallingPriorityIndication
{
  OCT1                         elementIdentifier, // dec 157, '9D'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT1                         lAPI,
  BIT7                         spare2,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(lAPI,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '9D'O;)"; 
};

//8.89
type record TMGI
{
  OCT1                         elementIdentifier, // dec 158, '9E'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  OCT3                         mBMSServiceID,
  HEX1                         mccDigit1,
  HEX1                         mccDigit2,
  HEX1                         mccDigit3,
  HEX1                         mncDigit3,
  HEX1                         mncDigit1,
  HEX1                         mncDigit2,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO(mBMSServiceID, mccDigit1,
  mccDigit2, mccDigit3, mncDigit1,
  mncDigit2, mncDigit3,
  additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = '9E'O;)"; 
};

//8.90
type record AdditionalMMContextForSRVCC
{
  OCT1                         elementIdentifier, // dec 159, '9F'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  integer                      mobileStationClassmark2Length,
  MobileStationClassmark2      mobileStationClassmark2,
  integer                      mobileStationClassmark3Length,
  octetstring                  mobileStationClassmark3,
  integer                      supportedCodecListLength,
  SupportedCodecList           supportedCodecList,
  octetstring                  additionalOctets optional 
}with { 
  variant (lengthIndicator) "LENGTHTO(mobileStationClassmark2Length,mobileStationClassmark2, 
  mobileStationClassmark3Length,mobileStationClassmark3,
  supportedCodecListLength,supportedCodecList,
  additionalOctets)"; 
  variant (mobileStationClassmark2Length) "LENGTHTO(mobileStationClassmark2)"; 
  variant (mobileStationClassmark3Length) "LENGTHTO(mobileStationClassmark3)"; 
  variant (supportedCodecListLength) "LENGTHTO(supportedCodecList)"; 
  variant "PRESENCE (elementIdentifier = '9F'O;)";            
};

// 24.008/ 10.5.1.6 MobileStationClassmark2
//4th octet:
type record MobileStationClassmark2_oct4
{
  BIT1  fc,
  BIT1  vgcs,
  BIT1  vbs,
  BIT1  sm_Capability,
  BIT2  ss_ScreenIndicator,
  BIT1  ps_Capability, 
  BIT1  spare2_1 
};


//5th octet ( Table 10.5.6a ):
type record MobileStationClassmark2_oct5
{
  BIT1  a5_2, 
  BIT1  a5_3,
  BIT1  cmsp,
  BIT1  solsa,
  BIT1  ucs2,
  BIT1  lcsva_cap,
  BIT1  spare5_7,
  BIT1  cm3
};

type record MobileStationClassmark2
{
  BIT3  rf_PowerCapability,
  BIT1  a5_1,
  BIT1  esind,
  BIT2  revisionLevel, 
  BIT1  spare1_1, 
  MobileStationClassmark2_oct4  mobileStationClassmark2_oct4    optional,
  MobileStationClassmark2_oct5  mobileStationClassmark2_oct5    optional
};


// TS 24008/10.5.4.32 Supported Codec List
type record Codec
{
  OCT1  systemIdentification,
  integer  lengthOfBitmap,
  OCT1  codecBitmap_bits1to8,
  OCT1  codecBitmap_bits9to16 optional,
  octetstring additional_codecs optional
} with {
  variant (lengthOfBitmap) "LENGTHTO(codecBitmap_bits1to8,codecBitmap_bits9to16,additional_codecs)"; 
}; 

type record of Codec SupportedCodecList; 

//8.91
type record AdditionalFlagsForSRVCC
{
  OCT1                         elementIdentifier, // dec 160, 'A0'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  BIT1                         iCS,
  BIT7                         spare2,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO(iCS, spare2, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A0'O;)"; 
};

// Sv Information Elements
// 3GPP TS 29.280 6.2
type record STN_SR
{
  OCT1                         elementIdentifier, // dec 51, '33'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT1                         nanpi,
  hexstring                    sTN_SR_Value
}with { 
  variant (lengthIndicator) "LENGTHTO(nanpi,sTN_SR_Value)";
  variant "PRESENCE (elementIdentifier = '33'O;)";  
  variant (sTN_SR_Value) "PADDING(yes)";
  variant (sTN_SR_Value) "PADDING_PATTERN('1'B)";          
};

//8.92 Void
/*type record MMBR
{
  OCT1                         elementIdentifier, // dec 161, 'A1'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT4                         maxMMBR_for_uplink, 
  OCT4                         maxMMBR_for_downlink,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(maxMMBR_for_uplink,maxMMBR_for_downlink,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A1'O;)"; 
};*/


//8.93
type record MDT_Configuration
{
  OCT1                         elementIdentifier, // dec 162, 'A2'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  OCT1                         jobType,
  OCT4                         listOfmeasurements,
  OCT1                         reportingTrigger,
  OCT1                         reportInterval,
  OCT1                         reportAmount,
  OCT1                         eventThresholdforRSRP,  
  OCT1                         eventThresholdforRSRQ,
  INT1                         lengthOfAreaScope,
  octetstring                  areaScope optional,
  BIT1                         cRRMI,
  BIT1                         mPI,
  BIT1                         pMI,
  BIT1                         pLI,
  BIT4                         spare2,
  CollectionPeriodforRRMmeasurementsLTE collectionPeriodforRRMmeasurementsLTE optional,
  MeasurementPeriodLTE         measurementPeriodLTE optional,
  PositioningMethod            positioningMethod optional,
  INT1                         numberOfMDT_PLMNs optional,
  MDT_PLMN_List                mDT_PLMN_List length(0..16) optional,
  octetstring                  additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(jobType,listOfmeasurements,reportingTrigger,
  reportInterval,reportAmount,eventThresholdforRSRP,
  eventThresholdforRSRQ,lengthOfAreaScope,areaScope,
  cRRMI,mPI,pMI,pLI,spare2,
  collectionPeriodforRRMmeasurementsLTE,measurementPeriodLTE,positioningMethod,
  numberOfMDT_PLMNs,mDT_PLMN_List,additionalOctets )"; 
  variant "PRESENCE (elementIdentifier = 'A2'O;)"; 
  variant (lengthOfAreaScope) "LENGTHTO(areaScope)";  
  variant (collectionPeriodforRRMmeasurementsLTE) "PRESENCE(cRRMI = '1'B)";   
  variant (measurementPeriodLTE) "PRESENCE(mPI = '1'B)";   
  variant (positioningMethod) "PRESENCE(pMI = '1'B)";   
  variant (mDT_PLMN_List) "PRESENCE(pLI = '1'B)";   
  variant (numberOfMDT_PLMNs) "PRESENCE(pLI = '1'B)";   
  variant (numberOfMDT_PLMNs) "LENGTHTO(mDT_PLMN_List)";  
  variant (numberOfMDT_PLMNs) "UNIT(elements)"; 
};

//5.10.19 3GPP TS 32.422
type record PositioningMethod
{
  BIT1 gNSS,
  BIT1  eCellID,
  BIT6  spare
}
//5.10.20 3GPP TS 32.422
type enumerated CollectionPeriodforRRMmeasurementsLTE
{
  ms1024 (0),
  ms1280 (1),
  ms2048 (2),
  ms2560 (3),
  ms5120 (4),
  ms10240 (5),
  min1 (6)
} with { variant "FIELDLENGTH(8)"; }

//5.10.23 3GPP TS 32.422
type enumerated MeasurementPeriodLTE
{
  ms1024 (0),
  ms1280 (1),
  ms2048 (2),
  ms2560 (3),
  ms5120 (4),
  ms10240 (5),
  min1 (6)
} with { variant "FIELDLENGTH(8)"; }

//9.2.1.89, 9.2.3.8 TS 32.422
type record of OCT3 MDT_PLMN_List;

//8.94
type record APCO
{
  OCT1                         elementIdentifier, // dec 163, 'A3'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare,
  BIT3                         configProtocol,
  BIT4                         spare2,  //'0000'B
  BIT1                         extensionField,   //'1'B
  ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs optional,
  octetstring                  additionalOctets optional    
}with { 
  variant (lengthIndicator) "LENGTHTO(configProtocol,spare2,extensionField,protocolIDs_and_ContainerIDs,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A3'O;)";  
};

//8.95
type record AbsoluteTimeofMBMSDataTransfer
{
  OCT1                         elementIdentifier, // dec 164, 'A4'O
  LIN2_BO_LAST                 lengthIndicator,
  BIT4                         instance,
  BIT4                         spare, 
  OCT8                         value_part,
  octetstring                  additionalOctets optional
} with { 
  variant (lengthIndicator) "LENGTHTO( value_part, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A4'O;)"; 
};

//8.96
type record HeNBInformationReporting
{
  OCT1            elementIdentifier, // dec 165, 'A5'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            FTI,
  BIT7            spare2,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(FTI,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A5'O;)"; 
};

//8.97
type record IPv4ConfigurationPrameters
{
  OCT1            elementIdentifier, // dec 166, 'A6'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  INT1            subnetPrefixLength,
  OCT4            iPv4DefaultRouterAddress,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(subnetPrefixLength,iPv4DefaultRouterAddress,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A6'O;)"; 
}

//8.98
type record ChangeToReportFlags
{
  OCT1            elementIdentifier, // dec 167, 'A7'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            servingNetworkChangeToReport,
  BIT1            timeZoneChangeToReport,
  BIT6            spare2, //'000000'B
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(servingNetworkChangeToReport,timeZoneChangeToReport,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A7'O;)"; 
}


//8.99
type record ActionIndication
{
  OCT1            elementIdentifier, // dec 168, 'A8'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT3            indication,
  BIT5            spare2,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(indication,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A8'O;)"; 
}

//8.100
type record TrustedWLANAccessNetworkIdentifier
{
  OCT1            elementIdentifier,	//dec 169, 'A9'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            bssIdIndicator,
  BIT1            cIVAI,
  BIT1            pLMNI,
  BIT1            oPNAI,
  BIT1            lAAI,
  BIT3            spare2,
  INT1            lengthOfSSID,
  octetstring     SSID,
  OCT6            BSSID optional,
  INT1            lengthOfCivicAddress optional,
  octetstring     civicAddressInformation optional,
  OCT4            tWAN_PLMNID optional,
  INT1            lengthOfTWANOperatorName optional,
  octetstring     tWANOperatorName optional,
  INT1            relayIdentityType optional,
  INT1            lengthOfRelayIdentity optional,
  octetstring     relayIdentity optional,
  INT1            lengthOfcircuitID optional,
  octetstring     circuitID optional,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(bssIdIndicator,cIVAI,pLMNI,oPNAI,lAAI,spare2,
  lengthOfSSID,SSID,BSSID,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'A9'O;)";
  variant (lengthOfSSID) "LENGTHTO(SSID)"; 
  variant (civicAddressInformation) "PRESENCE(cIVAI = '1'B)";   
  variant (lengthOfCivicAddress) "PRESENCE(cIVAI = '1'B)";   
  variant (lengthOfCivicAddress) "LENGTHTO(civicAddressInformation)"; 
  variant (tWAN_PLMNID) "PRESENCE(pLMNI = '1'B)";   
  variant (tWANOperatorName) "PRESENCE(oPNAI = '1'B)";   
  variant (lengthOfTWANOperatorName) "PRESENCE(oPNAI = '1'B)";   
  variant (lengthOfTWANOperatorName) "LENGTHTO(tWANOperatorName)"; 
  variant (relayIdentityType) "PRESENCE(lAAI = '1'B)";   
  variant (lengthOfRelayIdentity) "PRESENCE(lAAI = '1'B)";   
  variant (relayIdentity) "PRESENCE(lAAI = '1'B)";   
  variant (lengthOfcircuitID) "PRESENCE(lAAI = '1'B)";   
  variant (circuitID) "PRESENCE(lAAI = '1'B)";   
  variant (lengthOfRelayIdentity) "LENGTHTO(relayIdentity)"; 
  variant (lengthOfcircuitID) "LENGTHTO(circuitID)";
};

type set of TrustedWLANAccessNetworkIdentifier TrustedWLANAccessNetworkIdentifier_List;

//8.101
type record UserLocationInformationTimestamp
{
  OCT1          elementIdentifier,	//dec 170, 'AA'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  OCT4          timestampValue,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(timestampValue, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'AA'O;)";
}

//8.102
type record MBMSFlags
{
  OCT1          elementIdentifier,	//dec 171, 'AB'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  BIT1          mSRI,
  BIT1          lMR,
  BIT6          spare2,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(mSRI,lMR,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'AB'O;)";
}

//8.103
type record RAN_NASCause
{
  OCT1          elementIdentifier,	//dec 172, 'AC'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  BIT4          causeType,
  BIT4          protocolType,
  OCT1          causeValue,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(causeType, protocolType, causeValue, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'AC'O;)";
}

type set of RAN_NASCause RAN_NASCause_List;

//8.104
type record CNOperatorSelectionEntity
{
  OCT1          elementIdentifier,	//dec 173, 'AD'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  BIT2          selectionEntity,
  BIT6          spare2,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(selectionEntity, spare2, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'AD'O;)";
}

//8.105
type record TrustedWLANModeIndication
{
  OCT1          elementIdentifier,	//dec 174, 'AE'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  BIT1          sCM,
  BIT1          mCM,
  BIT6          spare2,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(sCM, mCM, spare2, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'AE'O;)";
}

//8.106
type record NodeNumber
{
  OCT1          elementIdentifier,	//dec 175, 'AF'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  LIN1          lenghOfNodeNumber,
  octetstring   nodeNumber,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(lenghOfNodeNumber, nodeNumber, additionalOctets)"; 
  variant (lenghOfNodeNumber) "LENGTHTO(nodeNumber)"; 
  variant "PRESENCE (elementIdentifier = 'AF'O;)";
}

type set of NodeNumber NodeNumber_List;

//8.107
type record NodeIdentifier
{
  OCT1          elementIdentifier,	//dec 176, 'B0'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  LIN1          lenghOfNodeName,
  octetstring   nodeName,
  LIN1          lenghOfNodeRealm,
  octetstring   nodeRealm,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(lenghOfNodeName,nodeName,lenghOfNodeRealm,nodeRealm, additionalOctets)"; 
  variant (lenghOfNodeName) "LENGTHTO(nodeName)"; 
  variant (lenghOfNodeRealm) "LENGTHTO(nodeRealm)"; 
  variant "PRESENCE (elementIdentifier = 'B0'O;)";
}

type set of NodeIdentifier NodeIdentifier_List;
  
//8.108
type record PresenceReportingAreaAction
{
  OCT1            elementIdentifier,	//dec 177, 'B1'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT3            actionField,
  BIT1            iNAPRA,
  BIT4            spare2,
  OCT3            presenceReportingAreaIdentifier optional,
  INT4b           numberOfRAI (0..15) optional,
  INT4b           numberOfTAI (0..15) optional,
  INT6b           numberOfMacroENodeB (0..63) optional,
  BIT2            spare3 optional,
  INT6b           numberOfHomeENodeB (0..63) optional,
  BIT2            spare4 optional,
  INT6b           numberOfECGI (0..63) optional,
  BIT2            spare5 optional,
  INT6b           numberOfSAI (0..63) optional,
  BIT2            spare6 optional,
  INT6b           numberOfCGI (0..63) optional,
  BIT2            spare7 optional,
  TAIList         tAIs optional,
  Macro_eNB_ID_List  macroENBIDs optional,
  Home_eNB_ID_List  homeENBIDs optional,
  ECGIList        eCGIs optional,
  RAIList         rAIs optional,
  SAIList         sAIs optional,
  CGIList         cGIs optional,
  INT6b           numberOfExtendedMacroENODEB (0..63) optional,
  BIT2            spare8 optional,
  ExtendedMacro_eNB_ID_List  extendedMacroENBIDs optional,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(actionField,iNAPRA,spare2,presenceReportingAreaIdentifier,numberOfRAI,numberOfTAI,numberOfMacroENodeB,
  spare3,numberOfHomeENodeB,spare4,numberOfECGI,spare5,numberOfSAI,spare6,numberOfCGI,spare7,tAIs,macroENBIDs,homeENBIDs,
  eCGIs,rAIs,sAIs,cGIs,numberOfExtendedMacroENODEB,spare8,extendedMacroENBIDs,additionalOctets)"; 
  variant (numberOfRAI) "LENGTHTO(rAIs)";
  variant (numberOfRAI) "UNIT(elements)"; 
  variant (numberOfTAI) "LENGTHTO(tAIs)";
  variant (numberOfTAI) "UNIT(elements)"; 
  variant (numberOfMacroENodeB) "LENGTHTO(macroENBIDs)";
  variant (numberOfMacroENodeB) "UNIT(elements)"; 
  variant (numberOfHomeENodeB) "LENGTHTO(homeENBIDs)";
  variant (numberOfHomeENodeB) "UNIT(elements)"; 
  variant (numberOfECGI) "LENGTHTO(eCGIs)";
  variant (numberOfECGI) "UNIT(elements)"; 
  variant (numberOfSAI) "LENGTHTO(sAIs)";
  variant (numberOfSAI) "UNIT(elements)"; 
  variant (numberOfCGI) "LENGTHTO(cGIs)";
  variant (numberOfCGI) "UNIT(elements)"; 
  variant (numberOfExtendedMacroENODEB) "LENGTHTO(extendedMacroENBIDs)";
  variant (numberOfExtendedMacroENODEB) "UNIT(elements)"; 
  variant "PRESENCE (elementIdentifier = 'B1'O;)";
}

type set of PresenceReportingAreaAction PresenceReportingAreaAction_List;

type set of TAI TAIList;
type set of ECGI ECGIList;
type set of RAI RAIList;
type set of SAI SAIList;
type set of CGI CGIList;
type set of Macro_eNodeB_ID Macro_eNB_ID_List;
type set of Home_eNodeB_ID Home_eNB_ID_List;
type set of ExtendedMacro_eNodeB_ID ExtendedMacro_eNB_ID_List;

//8.109
type record PresenceReportingAreaInformation
{
  OCT1          elementIdentifier,	//dec 178, 'B2'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  OCT3          presenceReportingAreaIdentifier,
  BIT1          iPRA,
  BIT1          oPRA,
  BIT1          aPRA,
  BIT1          iNAPRA,
  BIT4          spare2,
  AdditionalPRA additionalPRA optional,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(presenceReportingAreaIdentifier,iPRA,oPRA,aPRA,iNAPRA, spare2,additionalPRA, additionalOctets)"; 
  variant (additionalPRA) "PRESENCE(iNAPRA = '0'B)";   
  variant (additionalPRA) "PRESENCE(aPRA = '1'B)";   
  variant "PRESENCE (elementIdentifier = 'B2'O;)";
}

type set of PresenceReportingAreaInformation PresenceReportingAreaInformation_List;


type record AdditionalPRA
{
  OCT3 additionalPRA_Identifier,
  BIT1 iPRA,
  BIT1 oPRA,
  BIT1 aPRA,
  BIT5 spare,
  AdditionalPRA additionalPRA optional
}with { 
  variant (additionalPRA) "PRESENCE(aPRA = '1'B)";   
}

//8.110
type record TWANIdentifierTimestamp
{
  OCT1          elementIdentifier,	//dec 179, 'B3'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  OCT4          tWANIdentifierTimestampValue,
  octetstring   additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(tWANIdentifierTimestampValue, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'B3'O;)";
}

type set of TWANIdentifierTimestamp TWANIdentifierTimestamp_List
  
//8.111
type record OverloadControlInformationGrouped
{
  OCT1          elementIdentifier,	//dec 180, 'B4'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  OverloadControlInformationIEs overloadControlInformationIEs
}with { 
  variant (lengthIndicator) "LENGTHTO(overloadControlInformationIEs)"; 
  variant "PRESENCE (elementIdentifier = 'B4'O;)";
}

type set OverloadControlInformationIEs
{
  SequenceNumber  overloadControlSequenceNumber optional,
  Metric          overloadReductionMetric optional,
  EPC_Timer       periodOfValidity optional,
  AccessPointName listOfAccessPointName optional
} 

type set of OverloadControlInformationGrouped OverloadControlInformationGrouped_List;

//8.112
type record LoadControlInformationGrouped
{
  OCT1          elementIdentifier,	//dec 181, 'B5'O
  LIN2_BO_LAST  lengthIndicator,
  BIT4          instance,
  BIT4          spare,
  LoadControlInformationIEs loadControlInformationIEs
}with { 
  variant (lengthIndicator) "LENGTHTO(loadControlInformationIEs)"; 
  variant "PRESENCE (elementIdentifier = 'B5'O;)";
}

type set LoadControlInformationIEs
{
  SequenceNumber  loadControlSequenceNumber optional,
  Metric          loadMetric optional,
  APNandRelativeCapacity  listOfAPNandRelativeCapacity optional
}

type set of LoadControlInformationGrouped LoadControlInformationGrouped_List;

//8.113
type record Metric
{
  OCT1          elementIdentifier,	//dec 182, 'B6'O
  LIN2_BO_LAST  lengthIndicator (1),
  BIT4          instance,
  BIT4          spare,
  LIN1          metric (0..100)
}with { 
  variant (lengthIndicator) "LENGTHTO(metric)"; 
  variant "PRESENCE (elementIdentifier = 'B6'O;)";
}

//8.114
type record SequenceNumber
{
  OCT1          elementIdentifier,	//dec 183, 'B7'O
  LIN2_BO_LAST  lengthIndicator (4),
  BIT4          instance,
  BIT4          spare,
  LIN4_BO_LAST  sequenceNumber
}with { 
  variant (lengthIndicator) "LENGTHTO(sequenceNumber)"; 
  variant "PRESENCE (elementIdentifier = 'B7'O;)";
}

//8.115
type record APNandRelativeCapacity
{
  OCT1            elementIdentifier,	//dec 184, 'B8'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  LIN1            relativeCapacity (0..100),
  LIN1            aPNLength,
  AccessPointName accessPointName,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(relativeCapacity,aPNLength,accessPointName, additionalOctets)"; 
  variant (aPNLength) "LENGTHTO(accessPointName)"; 
  variant "PRESENCE (elementIdentifier = 'B8'O;)";
}

//8.116
type record WLANOffloadabilityIndication
{
  OCT1            elementIdentifier,	//dec 185, 'B9'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            uTRANIndication,
  BIT1            eUTRANIndication,
  BIT6            spare2,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(uTRANIndication, eUTRANIndication, spare2, additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'B9'O;)";
}

//8.117
type record PagingAndServiceInformation
{
  OCT1            elementIdentifier,	//dec 186, 'BA'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  integer         ePS_Bearer_ID_Value,
  BIT4            spare2,
  BIT1            pPI,
  BIT7            spare3,
  BIT6            pagingPolicyIndicationValue optional,
  BIT2            spare4 optional,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(ePS_Bearer_ID_Value,spare2,pPI,spare3,pagingPolicyIndicationValue,spare4,additionalOctets)"; 
  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)"; 
  variant "PRESENCE (elementIdentifier = 'BA'O;)";
  variant (pagingPolicyIndicationValue) "PRESENCE(pPI = '1'B)";   
  variant (spare4) "PRESENCE(pPI = '1'B)";   
}

//8.118
type record IntegerNumber
{
  OCT1            elementIdentifier,	//dec 187, 'BB'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  IntegerNumberValue integerNumberValue optional
}with { 
  variant (lengthIndicator) "LENGTHTO(integerNumberValue)"; 
  variant "PRESENCE (elementIdentifier = 'BB'O;)";
  variant (integerNumberValue)"CROSSTAG(int1,lengthIndicator=1;
  int2,lengthIndicator=2)"
}

type union IntegerNumberValue
{
  LIN1 int1,
  LIN2_BO_LAST int2
}

//8.119
type record MillisecondTimeStamp
{
  OCT1            elementIdentifier,	//dec 188, 'BC'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  OCT6            millisecondTimeStampValue,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(millisecondTimeStampValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'BC'O;)";
}

//8.120
type record MonitoringEventInformation
{
  OCT1            elementIdentifier,	//dec 189, 'BD'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  OCT4            sCEFReferenceID,  //Unsigned32 ?
  LIN1            sCEF_ID_length,
  octetstring     sCEF_ID,
  OCT2            remainingNumberOfReports, //Unsigned32 ?
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(sCEFReferenceID,sCEF_ID_length,sCEF_ID,remainingNumberOfReports,additionalOctets)"; 
  variant (sCEF_ID_length) "LENGTHTO(sCEF_ID)"; 
  variant "PRESENCE (elementIdentifier = 'BD'O;)";
}

//8.121
type record ECGI_List
{
  OCT1            elementIdentifier,	//dec 190, 'BE'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  LIN2_BO_LAST    numberOfECGI,
  ECGIs           eCGIs,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(numberOfECGI,eCGIs,additionalOctets)"; 
  variant (numberOfECGI) "LENGTHTO(eCGIs)";
  variant (numberOfECGI) "UNIT(elements)"; 
  variant "PRESENCE (elementIdentifier = 'BE'O;)";
}

type set of ECGI ECGIs;

//8.122
type record RemoteUEContextGrouped
{
  OCT1            elementIdentifier,	//dec 191, 'BF'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  RemoteUEContextIEs remoteUEContextIEs
}with { 
  variant (lengthIndicator) "LENGTHTO(remoteUEContextIEs)"; 
  variant "PRESENCE (elementIdentifier = 'BF'O;)";
}

type set RemoteUEContextIEs
{
  RemoteUserID          remoteUserID optional,
  RemoteUEIPInformation remoteUEIPInformation optional
}

type set of RemoteUEContextGrouped RemoteUEContextGrouped_List;

//8.123
type record RemoteUserID
{
  OCT1            elementIdentifier,	//dec 192, 'C0'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            mSISDNF,
  BIT1            iMEIF,
  BIT6            spare2,
  LIN1            lengthOfIMSI,
  hexstring       iMSI,
  LIN1            lengthOfMSISDN optional,
  hexstring       mSISDN optional,
  LIN1            lengthOfIMEI optional,
  octetstring     iMEI optional,
  octetstring     additionalOctets optional
}with { 
  variant "PRESENCE (elementIdentifier = 'C0'O;)";
  variant (lengthIndicator) "LENGTHTO(mSISDNF,iMEIF,spare2,lengthOfIMSI,iMSI,lengthOfMSISDN,mSISDN,lengthOfIMEI,iMEI,additionalOctets)"; 
  variant (lengthOfMSISDN) "PRESENCE(mSISDNF = '1'B)";   
  variant (mSISDN) "PRESENCE(mSISDNF = '1'B)";   
  variant (lengthOfIMEI) "PRESENCE(iMEIF = '1'B)";   
  variant (iMEI) "PRESENCE(iMEIF = '1'B)";   
  variant (lengthOfIMSI) "LENGTHTO(iMSI)";
  variant (iMSI) "PADDING(yes)";
  variant (iMSI) "PADDING_PATTERN('1'B)";
  variant (lengthOfMSISDN) "LENGTHTO(mSISDN)"; 
  variant (mSISDN) "PADDING(yes)";
  variant (mSISDN) "PADDING_PATTERN('1'B)";
  variant (lengthOfIMEI) "LENGTHTO(iMEI)" ;
}

//8.124
type record RemoteUEIPInformation
{
  OCT1            elementIdentifier,	//dec 193, 'C1'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  octetstring     remoteUEIPInformation
}with { 
  variant (lengthIndicator) "LENGTHTO(remoteUEIPInformation)"; 
  variant "PRESENCE (elementIdentifier = 'C1'O;)";
}

//8.125
type record CIoT_OptimizationsSupportIndication
{
  OCT1            elementIdentifier,	//dec 194, 'C2'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            sGNIPDN,
  BIT1            sCNIPDN,
  BIT1            aWOPDN,
  BIT1            iHCSI,
  BIT4            spare2,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(sGNIPDN,sCNIPDN,aWOPDN,iHCSI,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'C2'O;)";
}

//8.126
type record SCEF_PDN_ConnectionGrouped
{
  OCT1            elementIdentifier,	//dec 195, 'C3'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  SCEF_PDN_ConnectionIEs sCEF_PDN_ConnectionIEs
}with { 
  variant (lengthIndicator) "LENGTHTO(sCEF_PDN_ConnectionIEs)"; 
  variant "PRESENCE (elementIdentifier = 'C3'O;)";
}

type set SCEF_PDN_ConnectionIEs
{
  AccessPointName  accessPointName optional,
  EPS_BearerID     ePS_BearerID optional,
  NodeIdentifier   nodeIdentifier optional
}

type set of SCEF_PDN_ConnectionGrouped SCEF_PDN_ConnectionGrouped_List;

//8.127
type record HeaderCompressionConfiguration
{
  OCT1            elementIdentifier,	//dec 196, 'C4'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  OCT2            rOHC_Profiles,
  LIN2_BO_LAST    maxCID (1..16383),
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(rOHC_Profiles,maxCID,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'C4'O;)";
}

//8.128
type record ExtendedProtocolConfigOptions
{
  OCT1            elementIdentifier,	//dec 197, 'C5'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  octetstring     ePCO
}with { 
  variant (lengthIndicator) "LENGTHTO(ePCO)"; 
  variant "PRESENCE (elementIdentifier = 'C5'O;)";
}

//8.129
type record ServingPLMNRateControl
{
  OCT1            elementIdentifier,	//dec 197, 'C6'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  LIN2_BO_LAST    uplinkRateLimit,
  LIN2_BO_LAST    downlinkRateLimit,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(uplinkRateLimit,downlinkRateLimit,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'C6'O;)";
}

//8.130
type record Counter
{
  OCT1            elementIdentifier,	//dec 199, 'C7'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  OCT4            timestampValue,
  OCT1            counterValue,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(timestampValue,counterValue,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'C7'O;)";
}

//8.131
type record Mapped_UE_UsageType
{
  OCT1            elementIdentifier,	//dec 200, 'C8'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  OCT2            mapped_UE_UsageType,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(mapped_UE_UsageType,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'C8'O;)";
}

//8.132
type record Secondary_RAT_UsageDataReport
{
  OCT1            elementIdentifier,	//dec 201, 'C9'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            iRPGW,
  BIT1            iRSGW,
  BIT6            spare2,
  integer         secondaryRATType,
  BIT4            eBI,
  BIT4            spare3,
  OCT4            startTimestamp, 
  OCT4            endTimestamp,
  OCT8            usageDataDL,
  OCT8            usageDataUL,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(iRPGW,iRSGW,spare2,secondaryRATType,eBI,spare3,
  startTimestamp,endTimestamp,usageDataDL,usageDataUL,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'C9'O;)";
}

type set of  Secondary_RAT_UsageDataReport  Secondary_RAT_UsageDataReport_List;

//8.133
type record UP_FunctionSelectionIndicationFlags
{
  OCT1            elementIdentifier,	//dec 202, 'CA'O
  LIN2_BO_LAST    lengthIndicator,
  BIT4            instance,
  BIT4            spare,
  BIT1            dCNR,
  BIT7            spare2,
  octetstring     additionalOctets optional
}with { 
  variant (lengthIndicator) "LENGTHTO(dCNR,spare2,additionalOctets)"; 
  variant "PRESENCE (elementIdentifier = 'CA'O;)";
}

// GTPC PDUs
// Path Management messages
//7.1.1
type set EchoRequest
{
  Recovery                     recovery,
  NodeFeatures                 sendingNodeFeatures optional,
  PrivateExtension_List        privateExtension optional
};

//7.1.2
type set EchoResponse
{
  Recovery                     recovery,
  NodeFeatures                 sendingNodeFeatures optional,
  PrivateExtension_List        privateExtension optional
};

//7.1.3
type set VersionNotSupported  
{};

// Tunnel Management messages
//7.2.1
type set CreateSessionRequest
{
  IMSI                                    iMSI   optional,
  MSISDN                                  mSISDN      optional,
  MEI                                     mEI         optional,
  UserLocationInfo_List                   userLocationInfo optional,
  ServingNetwork                          servingNetwork   optional,
  RAT_Type                                rAT_Type,
  Indication                              indication optional,
  FullyQualifiedTEID_List                 fullyQualifiedTEID,  
  AccessPointName                         accessPointName,
  SelectionMode                           selectionMode optional,
  PDN_Type                                pDN_Type optional,
  PDN_AddressAllocation                   pDN_AddressAllocation optional,
  APN_Restriction                         maxAPN_Restriction optional,
  AggregateMaximumBitRate                 ambr optional,
  EPS_BearerID                            linkedEPS_Bearer_ID optional,
  TrustedWLANModeIndication               trustedWLANModeIndication optional,
  ProtocolConfigOptions                   protocolConfigOptions optional, 
  BearerContextGrouped_List               bearerContextGrouped,  
  TraceInformation                        traceInformation optional, 
  Recovery                                recovery optional, 
  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
  UE_TimeZone                             uE_TimeZone optional,
  User_CSG_Information                    user_CSG_Information optional,
  ChargingCharacteristics                 chargingCharacteristics optional,
  LocalDistinguishedName_List             lDN optional,
  SignallingPriorityIndication            signallingPriorityIndication optional, 
//  MMBR                                    maxMBR_APN_AMBR optional,
  IP_Address_List                         iP_Addr optional,
  PortNumber_List                         portNumber optional,	 
  APCO                                    aPCO optional,
  TrustedWLANAccessNetworkIdentifier_List trustedWLANAccessNetworkIdentifier optional,
  CNOperatorSelectionEntity               cNOperatorSelectionEntity optional,
  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  MillisecondTimeStamp                    originationTimeStamp optional,
  IntegerNumber                           maximumWaitTime optional,
  TWANIdentifierTimestamp                 wLANLocationTimestamp optional,
  FullyQualifiedContainer                 nBIFOMContainer optional,
  RemoteUEContextGrouped_List             remoteUEContextGrouped optional,
  NodeIdentifier_List                     nodeIdentifier optional,            
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  ServingPLMNRateControl                  servingPLMNRateControl optional,
  Counter                                 counter optional,
  Mapped_UE_UsageType                     mapped_UE_UsageType optional,
  FullyQualifiedDomainName                fullyQualifiedDomainName optional,
  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
  UP_FunctionSelectionIndicationFlags     uP_FunctionSelectionIndicationFlags optional,
  PrivateExtension_List                   privateExtension optional 
} with { 
  variant(userLocationInfo) "REPEATABLE(yes)";
  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(csid) "REPEATABLE(yes)"; 
  variant(lDN) "REPEATABLE(yes)"; 
  variant(iP_Addr) "REPEATABLE(yes)"; 
  variant(portNumber) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
  variant(remoteUEContextGrouped) "REPEATABLE(yes)";
  variant(trustedWLANAccessNetworkIdentifier) "REPEATABLE(yes)";
  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
};


//7.2.2 
//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
type set CreateSessionResponse
{
  Cause                                   cause,
  ChangeReportingAction                   changeReportingAction optional, 
  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
  HeNBInformationReporting                heNBInformationReporting optional,
  FullyQualifiedTEID_List                 fullyQualifiedTEID optional,
  PDN_AddressAllocation                   pDN_AddressAllocation optional,
  APN_Restriction                         aPN_Restriction optional,  
  AggregateMaximumBitRate                 ambr optional,
  EPS_BearerID                            linkedEPS_Bearer_ID optional,
  ProtocolConfigOptions                   protocolConfigOptions optional, 
  BearerContextGrouped_List               bearerContextGrouped optional,
  Recovery                                recovery optional,  
  FullyQualifiedDomainName                chargingGatewayName optional,
  IP_Address                              chargingGatewayAddress optional,
  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
  LocalDistinguishedName_List             lDN optional, 
  EPC_Timer                               pGW_Back_OffTime optional,
  APCO                                    aPCO optional,
  IPv4ConfigurationPrameters              trustedWLANIPv4Parameters optional,
  Indication                              indicationFlags optional,
  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  FullyQualifiedContainer                 nBIFOMContainer optional,
  ChargingID                              pDNConnectionChargingID optional,
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  PrivateExtension_List                   privateExtension optional
} with { 
  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(csid) "REPEATABLE(yes)";
  variant(lDN) "REPEATABLE(yes)";    
  variant(loadControlInformationGrouped) "REPEATABLE(yes)";    
  variant(presenceReportingAreaAction) "REPEATABLE(yes)";    
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
};

//7.2.3
type set CreateBearerRequest
{
  ProcedureTransactionID                  procedureTransactionID optional,
  EPS_BearerID                            linkedEPS_BearerID,  
  ProtocolConfigOptions                   protocolConfigOptions optional, 
  BearerContextGrouped_List               bearerContextGrouped,
  FullyQualifiedPDN_ConnectionSetID_List  csid optional,  
  ChangeReportingAction                   changeReportingAction optional,
  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
  HeNBInformationReporting		            heNBInformationReporting optional,
  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
  Indication                              indicationFlags optional,
  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  FullyQualifiedContainer                 nBIFOMContainer optional,
  PrivateExtension_List                   privateExtension optional 
} with {
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(csid) "REPEATABLE(yes)";
  variant(loadControlInformationGrouped) "REPEATABLE(yes)";    
  variant(presenceReportingAreaAction) "REPEATABLE(yes)";    
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
};

//7.2.4
//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
type set CreateBearerResponse
{
  Cause                                   cause,
  BearerContextGrouped_List               bearerContextGrouped optional,
  Recovery                                recovery optional,  
  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
  ProtocolConfigOptions                   protocolConfigOptions optional,  
  UE_TimeZone                             uE_TimeZone optional,
  UserLocationInfo                        uLI optional, 
  TrustedWLANAccessNetworkIdentifier_List	trustedWLANAccessNetworkIdentifier optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
  IP_Address_List                         iP_Addr optional,
  TWANIdentifierTimestamp                 wLANLocationTimestamp optional,
  PortNumber_List			                    portNumber optional,
  FullyQualifiedContainer                 nBIFOMContainer optional,
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  PrivateExtension_List                   privateExtension optional 
} with {  
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(csid) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
  variant(iP_Addr) "REPEATABLE(yes)";
  variant(trustedWLANAccessNetworkIdentifier) "REPEATABLE(yes)";
  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
  variant(portNumber) "REPEATABLE(yes)"    
};

//7.2.5
type set BearerResourceCommand
{
  EPS_BearerID_List                       epsBearerIdentity,
  ProcedureTransactionID                  procedureTransactionID,
  FlowQoS                                 flowQoS optional,
  TrafficAggregateDescription             tAD optional, 
  RAT_Type                                rAT_Type optional, 
  ServingNetwork                          servingNetwork optional,
  UserLocationInfo                        userLocationInfo optional,
  // EBI is included in 1st field : EPS_BearerID_List
  Indication                              indicationFlags optional,
  FullyQualifiedTEID_List                 fullyQualifiedTEID optional,
  ProtocolConfigOptions                   protocolConfigOptions optional,
  SignallingPriorityIndication            signallingPriorityIndication optional, 
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  FullyQualifiedContainer                 nBIFOMContainer optional,
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  PrivateExtension_List                   privateExtension optional 
} with {  
  variant(epsBearerIdentity) "REPEATABLE(yes)";
  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
};

//7.2.6
type set BearerResourceFailureIndication
{
  Cause                                   cause,
  EPS_BearerID                            linkedBearerIdentity,
  ProcedureTransactionID                  procedureTransactionID,
  Indication                              indicationFlags optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  Recovery                                recovery optional, 
  FullyQualifiedContainer                 nBIFOMContainer optional,
  PrivateExtension_List                   privateExtension optional
} with {  
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
};

//7.2.7
type set ModifyBearerRequest
{
  MEI                                     mEI optional, 
  UserLocationInfo_List                   userLocationInfo optional,
  ServingNetwork                          servingNetwork optional, 
  RAT_Type                                rAT_Type optional, 
  Indication                              indicationFlags optional, 
  FullyQualifiedTEID                      fullyQualifiedTEID optional,
  AggregateMaximumBitRate                 ambr optional,  
  DelayValue                              delayDownlinkPacketNotificationReq optional,  
  BearerContextGrouped_List               bearerContextGrouped optional, 
  Recovery                                recovery optional, 
  UE_TimeZone                             uE_TimeZone optional, 
  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
  User_CSG_Information                    user_CSG_Information optional,
  IP_Address_List                         iP_Addr optional,
  PortNumber_List                         portNumber optional,	 
  LocalDistinguishedName_List             lDN optional,   
//  MMBR                                    maxMBR_APN_AMBR optional,
  CNOperatorSelectionEntity               cNOperatorSelectionEntity optional,
  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  ServingPLMNRateControl                  servingPLMNRateControl optional,
  Counter                                 counter optional,
  IMSI                                    iMSI optional,
  TrustedWLANAccessNetworkIdentifier      trustedWLANAccessNetworkIdentifier optional,
  TWANIdentifierTimestamp                 tWANIdentifierTimestamp optional,
  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
  PrivateExtension_List                   privateExtension optional
} with { 
  variant(userLocationInfo) "REPEATABLE(yes)"; 
  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
  variant(csid) "REPEATABLE(yes)";
  variant(lDN) "REPEATABLE(yes)"; 
  variant(iP_Addr) "REPEATABLE(yes)";
  variant(portNumber) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
};

//7.2.8
type set ModifyBearerResponse
{
  Cause                                   cause,
  MSISDN                                  mSISDN optional,
  EPS_BearerID                            linkedEPS_Bearer_ID optional,
  APN_Restriction                         aPN_Restriction optional,
  ProtocolConfigOptions                   protocolConfigOptions optional,
  BearerContextGrouped_List               bearerContextGrouped optional, 
  ChangeReportingAction                   changeReportingAction optional,
  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
  HeNBInformationReporting		  heNBInformationReporting optional,
  FullyQualifiedDomainName                chargingGatewayName optional,
  IP_Address                              chargingGatewayAddress optional, 
  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
  Recovery                                recovery optional,
  LocalDistinguishedName_List             lDN optional, 
  Indication                              indicationFlags optional, 
  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
  ChargingID                              pDNConnectionChargingID optional,
  PrivateExtension_List                   privateExtension optional 
} with { 
  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
  variant(csid) "REPEATABLE(yes)";
  variant(lDN) "REPEATABLE(yes)";      
  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
  variant(presenceReportingAreaAction) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
};

//7.2.9.1
type set DeleteSessionRequest
{
  Cause                                   cause optional,
  EPS_BearerID                            linkedEPS_Bearer_ID optional, 
  UserLocationInfo                        uLI optional, 
  Indication                              indicationFlags optional,
  ProtocolConfigOptions                   protocolConfigOptions optional, 
  NodeType                                originatingNode optional, 
  FullyQualifiedTEID                      fullyQualifiedTEID optional, 
  UE_TimeZone                             uE_TimeZone optional,
  UserLocationInformationTimestamp        uLITimestamp optional,
  RAN_NASCause                            rANNASReleaseCause optional,
  TrustedWLANAccessNetworkIdentifier_List trustedWLANAccessNetworkIdentifier optional,
  TWANIdentifierTimestamp_List            tWANIdentifierTimestamp optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
  IP_Address                              uELocalIP_Addr optional,
  PortNumber_List                         portNumber optional,
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
  PrivateExtension_List                   privateExtension optional
} with { 
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
  variant(trustedWLANAccessNetworkIdentifier) "REPEATABLE(yes)";    
  variant(tWANIdentifierTimestamp) "REPEATABLE(yes)";
  variant(portNumber) "REPEATABLE(yes)";     
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";     
};
//7.2.9.2
type set DeleteBearerRequest
{
  EPS_BearerID_List                       epsBearerIdentity optional, //LBI , EBI
  BearerContextGrouped_List               bearerContextGrouped optional,  
  ProcedureTransactionID                  procedureTransactionID optional, 
  ProtocolConfigOptions                   protocolConfigOptions optional, 
  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
  Cause                                   cause optional, 
  Indication                              indicationFlags optional, 
  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
  FullyQualifiedContainer                 nBIFOMContainer optional,
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  PrivateExtension_List                   privateExtension optional
} with { 
  variant(epsBearerIdentity) "REPEATABLE(yes)";
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(csid) "REPEATABLE(yes)"  
  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
};

//7.2.10.1
type set DeleteSessionResponse
{
  Cause                                   cause,
  Recovery                                recovery optional,
  ProtocolConfigOptions                   protocolConfigOptions optional, 
  Indication                              indicationFlags optional, 
  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  PrivateExtension_List                   privateExtension optional
} with { 
  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
};

//7.2.10.2
type set DeleteBearerResponse
{
  Cause                                   cause,
  EPS_BearerID                            linkedBearerIdentity optional,
  BearerContextGrouped_List               bearerContextGrouped optional, 
  Recovery                                recovery optional,
  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
  ProtocolConfigOptions                   protocolConfigOptions optional,  
  UE_TimeZone                             uE_TimeZone optional,
  UserLocationInfo                        uLI optional,
  UserLocationInformationTimestamp        uLITimestamp optional,
  TrustedWLANAccessNetworkIdentifier      trustedWLANAccessNetworkIdentifier optional,
  TWANIdentifierTimestamp                 tWANIdentifierTimestamp optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
  IP_Address_List                         iP_Addr optional,
  PortNumber_List			  portNumber optional,
  FullyQualifiedContainer                 nBIFOMContainer optional,
  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
  PrivateExtension_List                   privateExtension optional
} with { 
  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
  variant(csid) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
  variant(iP_Addr) "REPEATABLE(yes)";
  variant(portNumber) "REPEATABLE(yes)"; 
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)"; 
};

//7.2.11.1
type set DownlinkDataNotification
{
  Cause                                   cause optional,
  EPS_BearerID_List                       epsBearerIdentity optional,
  AllocationRetentionPriority             aRP optional,
  IMSI                                    iMSI optional,
  FullyQualifiedTEID                      fullyQualifiedTEID optional,
  Indication                              indicationFlags optional, 
  LoadControlInformationGrouped           loadControlInformationGrouped optional,     
  OverloadControlInformationGrouped       overloadControlInformationGrouped optional,     
  PagingAndServiceInformation             pagingAndServiceInformation optional,
  PrivateExtension_List                   privateExtension optional   
}with { 
  variant(epsBearerIdentity) "REPEATABLE(yes)";
}; 


//7.2.11.2
type set DownlinkDataNotificationAcknowledgement
{
  Cause                                   cause,
  DelayValue                              dataNotificationDelay optional,  
  Recovery                                recovery optional, 
  Throttling                              dL_LowPriorityTrafficThrottling optional, 
  IMSI                                    iMSI optional,
  EPC_Timer                               dLBufferingDuration optional,
  IntegerNumber                           dLBufferingSuggestedPacketCount optional,
  PrivateExtension_List                   privateExtension optional
};

//7.2.11.3
type set DownlinkDataNotificationFailureIndication
{
  Cause                                   cause,
  NodeType                                originatingNode optional,
  IMSI                                    iMSI optional, 
  PrivateExtension_List                   privateExtension optional
};

//7.2.12
type set DeleteIndirectDataForwardingTunnelRequest
{
  PrivateExtension_List                   privateExtension optional
};

//7.2.13
type set DeleteIndirectDataForwardingTunnelResponse
{
  Cause                                   cause,
  Recovery                                recovery optional, 
  PrivateExtension_List                   privateExtension optional
}

//7.2.14.1
type set ModifyBearerCommand
{
  AggregateMaximumBitRate                 ambr,   
  BearerContextGrouped                    bearerContextGrouped,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  FullyQualifiedTEID                      fullyQualifiedTEID optional,      
  PrivateExtension_List                   privateExtension optional 
}with { 
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
}; 

//7.2.14.2
type set ModifyBearerFailureIndication
{
  Cause                                   cause,
  Recovery                                recovery optional, 
  Indication                              indicationFlags optional, 
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
  PrivateExtension_List                   privateExtension optional 
}with { 
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
}; 

//7.2.15
type set UpdateBearerRequest
{
  BearerContextGrouped_List               bearerContextGrouped, 
  ProcedureTransactionID                  procedureTransactionID optional, 
  ProtocolConfigOptions                   protocolConfigOptions optional, 
  AggregateMaximumBitRate                 apn_ambr, 
  ChangeReportingAction                   changeReportingAction optional,  
  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
  Indication                              indicationFlags optional,
  HeNBInformationReporting                heNBInformationReporting optional,
  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional, 
  FullyQualifiedContainer                 nBIFOMContainer optional,
  PrivateExtension_List                   privateExtension optional  
} with {   
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(csid) "REPEATABLE(yes)";     
  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
  variant(presenceReportingAreaAction) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
};

//7.2.16
//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
type set UpdateBearerResponse
{
  Cause                                   cause,
  BearerContextGrouped_List               bearerContextGrouped optional,
  ProtocolConfigOptions                   protocolConfigOptions optional,
  Recovery                                recovery optional, 
  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
  Indication                              indicationFlags optional,
  UE_TimeZone                             uE_TimeZone optional,
  UserLocationInfo                        uLI optional,
  TrustedWLANAccessNetworkIdentifier      trustedWLANAccessNetworkIdentifier optional,
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
  IP_Address_List                         iP_Addr optional,
  TWANIdentifierTimestamp                 tWANIdentifierTimestamp optional,
  PortNumber_List                         portNumber optional,
  FullyQualifiedContainer                 nBIFOMContainer optional,
  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
  PrivateExtension_List                   privateExtension optional    
} with {  
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(csid) "REPEATABLE(yes)";     
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
  variant(iP_Addr) "REPEATABLE(yes)";
  variant(portNumber) "REPEATABLE(yes)";      
};

//7.2.17.1
type set DeleteBearerCommand
{
  BearerContextGrouped_List               bearerContextGrouped,
  UserLocationInfo                        uli optional,
  UserLocationInformationTimestamp        uli_timestamp optional,
  UE_TimeZone                             ue_timezone optional, 
  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
  FullyQualifiedTEID                      fullyQualifiedTEID optional,      
  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
  PrivateExtension_List                   privateExtension optional 
} with {  
  variant(bearerContextGrouped) "REPEATABLE(yes)";
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
};

//7.2.17.2
type set DeleteBearerFailureIndication
{
  Cause                                  cause,
  BearerContextGrouped_List              bearerContextGrouped, 
  Recovery                               recovery optional, 
  Indication                             indicationFlags optional,
  OverloadControlInformationGrouped_List overloadControlInformationGrouped optional,     
  PrivateExtension_List                  privateExtension optional 
} with {   
  variant(bearerContextGrouped) "REPEATABLE(yes)";   
  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
};

//7.2.18
type set CreateIndirectDataForwardingTunnelRequest
{
  IMSI                                   iMSI optional,
  MEI                                    mEI optional,  
  Indication                             indicationFlags optional, 
  FullyQualifiedTEID                     fullyQualifiedTEID optional,
  BearerContextGrouped_List              bearerContextGrouped, 
  Recovery                               recovery optional,   
  PrivateExtension_List                  privateExtension optional 
} with {   
  variant(bearerContextGrouped) "REPEATABLE(yes)";   
};

//7.2.19
//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
type set CreateIndirectDataForwardingTunnelResponse
{
  Cause                                  cause,
  FullyQualifiedTEID                     fullyQualifiedTEID optional, 
  BearerContextGrouped_List              bearerContextGrouped optional,
  Recovery                               recovery optional,    
  PrivateExtension_List                  privateExtension optional 
} with {   
  variant(bearerContextGrouped) "REPEATABLE(yes)";   
};

//7.2.20
// VOID

//7.2.21
type set ReleaseAccessBearersRequest
{
  EPS_BearerID_List                      listOfRABs optional,
  NodeType                               originatingNode optional,
  Indication                             indicationFlags optional,
  Secondary_RAT_UsageDataReport_List     secondary_RAT_UsageDataReport optional,
  PrivateExtension_List                  privateExtension optional   
} with { 
  variant(listOfRABs) "REPEATABLE(yes)";
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
};

//7.2.22
type set ReleaseAccessBearersResponse
{
  Cause                                 cause,
  Recovery                              recovery optional, 
  Indication                            indicationFlags optional,
  LoadControlInformationGrouped         loadControlInformationGrouped optional,     
  OverloadControlInformationGrouped     overloadControlInformationGrouped optional,     
  PrivateExtension_List                 privateExtension optional  
}

//7.2.23
type set StopPagingIndication
{
  IMSI                                   iMSI optional,
  PrivateExtension_List                  privateExtension optional
}

//7.2.24
type set ModifyAccessBearersRequest
{
  Indication                             indicationFlags optional, 
  FullyQualifiedTEID                     fullyQualifiedTEID optional, 
  DelayValue                             delayDownlinkPacketNotifReq optional,
  BearerContextGrouped_List              bearerContextGrouped optional,
  Recovery                               recovery optional,    
  Secondary_RAT_UsageDataReport_List     secondary_RAT_UsageDataReport optional,
  PrivateExtension_List                  privateExtension optional 
} with {   
  variant(bearerContextGrouped) "REPEATABLE(yes)";   
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";   
};


//7.2.25
type set ModifyAccessBearersResponse
{
  Cause                                 cause,
  BearerContextGrouped_List             bearerContextGrouped optional,
  Recovery                              recovery optional,    
  Indication                            indicationFlags optional,
  LoadControlInformationGrouped         loadControlInformationGrouped optional,     
  OverloadControlInformationGrouped     overloadControlInformationGrouped optional,     
  PrivateExtension_List                 privateExtension optional  
} with {   
  variant(bearerContextGrouped) "REPEATABLE(yes)";   
};


//7.2.26
type set RemoteUEReportNotification
{
  RemoteUEContextGrouped_List           remoteUEContextGrouped optional,
  PrivateExtension_List                 privateExtension optional  
} with {   
  variant(remoteUEContextGrouped) "REPEATABLE(yes)";   
};

//7.2.27
type set RemoteUEReportAcknowledge
{
  Cause                                 cause,
  PrivateExtension_List                 privateExtension optional  
};

// Mobility Management messages
//7.3.1
type set ForwardRelocationRequest
{
  IMSI                                 iMSI optional,
  FullyQualifiedTEID_List              fullyQualifiedTEID,
  PDN_ConnectionGrouped_List           pDN_Connection optional,
  FullyQualifiedDomainName_List        nodeName optional,
  MM_Context                           mM_Context,
  Indication                           indication optional,
  FullyQualifiedContainer_List         containers optional,
  TargetIdentification                 targetIdentification optional,
  IP_Address_List                      iP_Addr optional,
  FullyQualifiedCause_List             cause optional,
  SourceIdentification                 sourceIdentification optional,
  PLMN_ID                              selected_PLMN_ID optional,
  Recovery                             recovery optional, 
  TraceInformation                     traceInformation optional,
  RFSP_Index_List                      rFSP_Index optional, 
  CSG_ID                               cSG_ID optional,
  CSG_MembershipIndication             cSG_MembershipIndication optional,
  UE_TimeZone                          uE_TimeZone      optional,
  ServingNetwork                       servingNetwork optional,
  LocalDistinguishedName               lDN optional,
  AdditionalMMContextForSRVCC          additionalMMContextForSRVCC optional,
  AdditionalFlagsForSRVCC              additionalFlagsForSRVCC optional,
  STN_SR                               sTN_SR optional,
  MSISDN_List                          mSISDN optional,
  MDT_Configuration                    mDT_Configuration optional,
  User_CSG_Information                 user_CSG_Information optional,
  MonitoringEventInformation           monitoringEventInformation optional,
  IntegerNumber                        uEUsageType optional,
  SCEF_PDN_ConnectionGrouped_List      mME_UE_SCEF_PDN_Connection optional,
  PortNumber                           sourceUDPPortNumber optional,
  ServingPLMNRateControl               servingPLMNRateControl optional,
  PrivateExtension_List                privateExtension optional
} with {      
  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
  variant(pDN_Connection) "REPEATABLE(yes)";
  variant(containers) "REPEATABLE(yes)"; 
  variant(iP_Addr) "REPEATABLE(yes)"; 
  variant(cause) "REPEATABLE(yes)"; 
  variant(rFSP_Index) "REPEATABLE(yes)";
  variant(nodeName) "REPEATABLE(yes)"; 
  variant(mSISDN) "REPEATABLE(yes)"; 
  variant(mME_UE_SCEF_PDN_Connection) "REPEATABLE(yes)"; 
}

//7.3.2
type set ForwardRelocationResponse
{
  Cause                                cause,
  FullyQualifiedTEID                   fullyQualifiedTEID optional,
  Indication                           indication optional,
  BearerContextGrouped_List            bearerContextGrouped optional, 
  FullyQualifiedCause_List             fullyQualifiedCause optional, 
  FullyQualifiedContainer_List         transparentContainer optional,
  LocalDistinguishedName               lDN optional,
  FullyQualifiedDomainName_List	       nodeName optional,
  NodeNumber_List                      nodeNumber optional,
  NodeIdentifier_List                  nodeIdentifier optional,
  PrivateExtension_List                privateExtension optional
} with {   
  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
  variant(fullyQualifiedCause) "REPEATABLE(yes)";       
  variant(transparentContainer) "REPEATABLE(yes)";      
  variant(nodeName) "REPEATABLE(yes)";   
  variant(nodeIdentifier) "REPEATABLE(yes)";   
  variant(nodeNumber) "REPEATABLE(yes)";   
};

//7.3.3
type set ForwardRelocationCompleteNotification
{
  Indication                           indication optional,
  PrivateExtension_List                privateExtension optional
};

//7.3.4
type set ForwardRelocationCompleteAcknowledge
{
  Cause                                cause,
  Recovery                             recovery optional, 
  Secondary_RAT_UsageDataReport_List   secondary_RAT_UsageDataReport optional,
  PrivateExtension_List                privateExtension optional
} with {   
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";   
};

//7.3.5
type set ContextRequest
{
  IMSI                                 iMSI optional,
  GUTI                                 gUTI optional,
  UserLocationInfo                     uLI optional,
  Packet_TMSI                          pTMSI optional,
  P_TMSI_Signature                     pTMSI_Signature optional,
  CompleteRequestMessage               complete_TAU_RequestMessage optional,
  FullyQualifiedTEID                   address_and_TEID_for_ControlPlane optional,
  PortNumber                           portNumber optional,
  RAT_Type                             rAT_Type optional, 
  Indication                           indication optional,
  Hop_Counter                          hop_Counter optional,
  ServingNetwork                       target_PLMN_ID optional,
  LocalDistinguishedName               lDN optional,
  FullyQualifiedDomainName_List	       nodeName optional,
  NodeNumber                           sGSNNumber optional,
  NodeIdentifier_List                  nodeIdentifier optional,
  CIoT_OptimizationsSupportIndication  cIoT_OptimizationsSupportIndication optional,
  PrivateExtension_List                privateExtension optional  
} with {   
  variant(nodeName) "REPEATABLE(yes)"; 
  variant(nodeIdentifier) "REPEATABLE(yes)";   
}; 

//7.3.6
type set ContextResponse
{
  Cause                                cause,
  IMSI                                 iMSI optional,
  MM_Context                           mM_Context optional,
  PDN_ConnectionGrouped_List           pDN_Connection optional,
  FullyQualifiedTEID_List              fullyQualifiedTEID optional,
  FullyQualifiedDomainName_List        nodeName optional,
  Indication                           indication optional,
  TraceInformation                     traceInformation optional,
  IP_Address_List                      iP_Addr optional,
  RFSP_Index_List                      rFSP_Index optional,               
  UE_TimeZone                          uE_TimeZone optional,
  LocalDistinguishedName               lDN optional,
  MDT_Configuration                    mDT_Configuration optional,
  User_CSG_Information                 user_CSG_Information optional,
  MonitoringEventInformation           monitoringEventInformation optional,
  IntegerNumber                        uEUsageType optional,
  SCEF_PDN_ConnectionGrouped_List      mME_US_SCEF_PDN_Connection optional,
  RAT_Type                             rAT_Type optional,
  ServingPLMNRateControl               servingPLMNRateControl optional,
  Counter                              counter optional,
  PrivateExtension_List                privateExtension optional 
}with {    
  variant(pDN_Connection) "REPEATABLE(yes)";
  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
  variant(iP_Addr) "REPEATABLE(yes)";
  variant(rFSP_Index) "REPEATABLE(yes)";    
  variant(nodeName) "REPEATABLE(yes)";     
  variant(mME_US_SCEF_PDN_Connection) "REPEATABLE(yes)";     
};

//7.3.7
type set ContextAcknowledge
{
  Cause                                cause,
  Indication                           indication optional,  //SGW change ind, israi
  FullyQualifiedTEID                   fullyQualifiedTEID optional,
  BearerContextGrouped_List            bearerContextGrouped optional, 
  NodeNumber_List                      nodeNumber optional,
  NodeIdentifier_List                  nodeIdentifier optional,
  PrivateExtension_List                privateExtension optional
}with {    
  variant(bearerContextGrouped) "REPEATABLE(yes)";     
  variant(nodeNumber) "REPEATABLE(yes)";     
  variant(nodeIdentifier) "REPEATABLE(yes)";     
};

//7.3.8
type set IdentificationRequest
{
  GUTI                                 gUTI optional,
  UserLocationInfo                     uLI optional,
  Packet_TMSI                          pTMSI optional,
  P_TMSI_Signature                     pTMSI_Signature optional,
  CompleteRequestMessage               complete_AttachRequestMessage optional, 
  IP_Address                           addressForControlPlane optional,
  PortNumber                 	       portNumber optional,
  Hop_Counter                          hop_Counter optional,
  ServingNetwork                       target_PLMN_ID optional, 
  PrivateExtension_List                privateExtension optional
};

//7.3.9
type set IdentificationResponse
{
  Cause                                cause,
  IMSI                                 iMSI optional,
  MM_Context                           mM_Context optional,
  TraceInformation                     traceInformation optional,
  IntegerNumber                        uEUsageType optional,
  MonitoringEventInformation           monitoringEventInformation optional,
  PrivateExtension_List                privateExtension optional
};

//7.3.10
type set ForwardAccessContextNotification
{
  RAB_Context_List                     rAB_Contexts optional,      
  Source_RNC_PDCP_Context_Info         source_RNC_PDCP_Context_Info optional,    
  PDU_Numbers                          pDU_Numbers optional,
  FullyQualifiedContainer              eUTRAN_TransparentContainer optional,
  PrivateExtension_List                privateExtension optional
}with {    
  variant(rAB_Contexts) "REPEATABLE(yes)";    
};


//7.3.11
type set ForwardAccessContextAcknowledge
{
  Cause                                cause,
  PrivateExtension_List                privateExtension optional 
}

//7.3.12
type set DetachNotification
{
  Cause                               cause,
  DetachType                          detachType optional,
  PrivateExtension_List               privateExtension optional
}

//7.3.13
type set DetachAcknowledge
{
  Cause                               cause,
  Recovery                            recovery optional, 
  PrivateExtension_List               privateExtension optional
};

//7.3.14
type set ChangeNotificationRequest
{
  IMSI                                iMSI optional,
  MEI                                 mEI optional,  
  Indication                          indication optional,
  RAT_Type                            rAT_Type, 
  UserLocationInfo                    uLI optional, 
  User_CSG_Information                user_CSG_Information optional,
  IP_Address                          gTPC_IP_Address optional,
  EPS_BearerID                        linkedBearerIdentity optional,
  PresenceReportingAreaInformation_List presenceReportingAreaInformation optional,
  Counter                             counter optional,
  Secondary_RAT_UsageDataReport_List  secondary_RAT_UsageDataReport optional,
  PrivateExtension_List               privateExtension optional
}with {    
  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";    
  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";    
};

//7.3.15
//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
type set ChangeNotificationResponse
{
  IMSI                                iMSI optional,
  MEI                                 mEI optional,  
  Cause                               cause,
  ChangeReportingAction               changeReportingAction optional,  
  CSG_InformationReportingAction      cSG_InformationReportingAction optional,
  PresenceReportingAreaAction_List    presenceReportingAreaAction optional,
  PrivateExtension_List               privateExtension optional
}with {    
  variant(presenceReportingAreaAction) "REPEATABLE(yes)";    
};

//7.3.16
type set RelocationCancelRequest
{
  IMSI                                iMSI optional,
  MEI                                 mEI optional,   
  Indication                          indication optional, 
  FullyQualifiedCause                 ranapCause optional,
  PrivateExtension_List               privateExtension optional
};

//7.3.17
type set RelocationCancelResponse
{
  Cause                               cause,
  PrivateExtension_List               privateExtension optional
};

//7.3.18
type set ConfigurationTransferTunnel
{
  FullyQualifiedContainer              eUTRAN_TransparentContainer, 
  TargetIdentification                 targetENB_ID
}

//7.3.19
type set RAN_InformationRelay
{
  FullyQualifiedContainer              bSS_Container,
  TargetIdentification                 rIM_RoutingAddress optional,
  PrivateExtension_List                privateExtension optional
}

//7.3.20
type set ISR_StatusIndication
{
  ActionIndication                    actionIndication,
  PrivateExtension_List               privateExtension optional 
}

//7.3.21
type set UE_RegistrationQueryRequest
{
  IMSI                                iMSI,
  PrivateExtension_List               privateExtension optional 
}

//7.3.22
type set UE_RegistrationQueryResponse
{
  Cause                               cause,
  IMSI                                iMSI,
  PLMN_ID                             selectedCoreNetworkOperatorIdenifier,
  PrivateExtension_List               privateExtension optional 
}

//7.4 Fallback Related messages

//7.4.1
type set SuspendNotification
{
  IMSI                                iMSI optional,
  UserLocationInfo                    uLI optional,                
  EPS_BearerID                        linkedEPS_BearerID optional,
  Packet_TMSI                         pTMSI optional,
  NodeType                            originatingNode optional,
  IP_Address                          addressForControlPlane optional,
  PortNumber                          uDPSourcePortNumber optional,
  Hop_Counter                         hopCounter optional,
  FullyQualifiedTEID                  senderF_TEIDForControlPlane optional,
  PrivateExtension_List               privateExtension optional
};

//7.4.2
type set SuspendAcknowledge
{
  Cause                               cause,
  PrivateExtension_List               privateExtension optional
};

//7.4.3
type set ResumeNotification
{
  IMSI                                iMSI,
  EPS_BearerID                        linkedEPS_BearerID optional,
  NodeType                            originatingNode optional,
  FullyQualifiedTEID                  senderF_TEIDForControlPlane optional,
  PrivateExtension_List               privateExtension optional
};

//7.4.4 
type set ResumeAcknowledge
{
  Cause                               cause,
  PrivateExtension_List               privateExtension optional
};

//7.4.5
type set CSPagingIndication
{
  IMSI                                iMSI,
  FullyQualifiedDomainName            vLR_Name,
  TMSI                                tMSI optional,
  UserLocationInfo                    locationAreaIdentifier optional,
  GlobalCN_ID                         globalCN_ID optional, 
  ChannelNeeded                       channelNeeded optional,
  EMLPP_Priority                      eMLPP_Priority optional,
  ServiceIndicator                    serviceIndicator optional,
  PrivateExtension_List               privateExtension optional
}; 

//7.4.6
type set AlertMMENotification
{
  PrivateExtension_List               privateExtension optional
};

//7.4.7 
type set AlertMMEAcknowledge
{
  Cause                               cause,
  PrivateExtension_List               privateExtension optional
};

//7.4.8
type set UEActivityNotification
{
  PrivateExtension_List               privateExtension optional
};

//7.4.9 
type set UEActivityAcknowledge
{
  Cause                               cause,
  PrivateExtension_List               privateExtension optional
};

//Non-3GPP access related messages
//7.5.1
type set CreateForwardingTunnelRequest
{
  S103_PDF_List                       s103_PDF,
  PrivateExtension_List               privateExtension optional
} with {    
  variant(s103_PDF) "REPEATABLE(yes)";    
};

//7.5.2   
type set CreateForwardingTunnelResponse
{
  Cause                               cause,
  S1_UDF_List                         s1_UDF optional,
  PrivateExtension_List               privateExtension optional
} with {    
  variant(s1_UDF) "REPEATABLE(yes)";    
}; 

//Restoration and recovery
//7.9.1
type set DeletePDN_ConnectionSetRequest
{
  FullyQualifiedPDN_ConnectionSetID_List  csid optional, //MME, SGW, PGW, ePDG, TWAN
  PrivateExtension_List                   privateExtension optional 
} with {    
  variant(csid) "REPEATABLE(yes)";     
};

//7.9.2
type set DeletePDN_ConnectionSetResponse
{
  Cause                               cause,
  PrivateExtension_List               privateExtension optional
}

//7.9.3
type set UpdatePDN_ConnectionSetRequest
{
  FullyQualifiedPDN_ConnectionSetID_List  csid optional, //MME, SGW
  PrivateExtension_List                   privateExtension optional
} with {    
  variant(csid) "REPEATABLE(yes)";     
};


//7.9.4
type set UpdatePDN_ConnectionSetResponse
{
  Cause                               cause,
  FullyQualifiedPDN_ConnectionSetID   csid optional, //PGW
  PrivateExtension_List               privateExtension optional
}

//7.9.5
type set PGW_RestartNotification
{
  IP_Address_List                        iP_Addr,//PGW, SGW
  Cause					 cause optional,
  PrivateExtension_List                  privateExtension optional
}
with {    
  variant(iP_Addr) "REPEATABLE(yes)"; 
};

//7.9.6
type set PGW_RestartNotificationAcknowledge
{
  Cause                               cause,
  PrivateExtension_List               privateExtension optional
}

//7.9.7
type set PGW_DownlinkTriggeringNotification
{
  IMSI                                iMSI,
  IP_Address			      mME_S4_SGSN_Identifier optional,
  FullyQualifiedTEID                  senderF_TEIDForControlPlane optional,
  PrivateExtension_List               privateExtension optional
}

//7.9.8
type set PGW_DownlinkTriggeringAcknowledge
{
  Cause				      cause,
  IMSI                                iMSI optional,
  IP_Address			      mME_S4_SGSN_Identifier optional,
  PrivateExtension_List               privateExtension optional
}


// Trace Management Messages
//7.12.1 
type set TraceSessionActivation
{
  IMSI                                iMSI optional,
  TraceInformation                    traceInformation,
  MEI                                 mEI optional
}

//7.12.2
type set TraceSessionDeactivation
{
  TraceReference                      traceReference
}


// MBMS Messages
//7.13.1
type set MBMSSessionStartRequest
{
  FullyQualifiedTEID                  fullyQualifiedTEID,
  TMGI                                tMGI,
  MBMS_SessionDuration                mBMS_SessionDuration,
  MBMS_ServiceArea                    mBMS_ServiceArea,
  MBMS_SessionIdentifier              mBMS_SessionIdentifier optional,
  MBMS_FlowIdentifier                 mBMS_FlowIdentifier optional,
  Bearer_QoS                          QoS_Profile,
  MBMS_IPMulticastDistribution_List   mBMS_IPMulticastDistribution,
  Recovery                            recovery optional,
  MBMSTimetoDataTransfer              mBMSTimetoDataTransfer optional,
  AbsoluteTimeofMBMSDataTransfer      mBMS_Data_Transfer_Start optional,
  MBMSFlags                           mBMSFlags optional,
  ECGI_List                           mBMSCellList optional,
  PrivateExtension_List               privateExtension optional
} with {    
  variant(mBMS_IPMulticastDistribution) "REPEATABLE(yes)";     
};

//7.13.2
type set MBMSSessionStartResponse
{
  Cause                               cause,
  FullyQualifiedTEID_List             fullyQualifiedTEID optional,
  MBMS_DistributionAcknowledge        mBMS_DistributionAcknowledge optional,
  Recovery                            recovery optional,
  PrivateExtension_List               privateExtension optional
} with { 
  variant(fullyQualifiedTEID) "REPEATABLE(yes)"; 
};

//7.13.3
type set MBMSSessionUpdateRequest
{
  MBMS_ServiceArea                    mBMS_ServiceArea optional,
  TMGI                                tMGI,
  FullyQualifiedTEID                  fullyQualifiedTEID optional,
  MBMS_SessionDuration                mBMS_SessionDuration,
  Bearer_QoS                          QoS_Profile,
  MBMS_SessionIdentifier              mBMS_SessionIdentifier optional,
  MBMS_FlowIdentifier                 mBMS_FlowIdentifier optional,
  MBMSTimetoDataTransfer              mBMSTimetoDataTransfer optional,
  AbsoluteTimeofMBMSDataTransfer      mBMS_Data_Transfer_StartUpdateStop optional,  
  ECGI_List                           mBMSCellList optional,
  PrivateExtension_List               privateExtension optional
}

//7.13.4
type set MBMSSessionUpdateResponse
{
  Cause                               cause,
  MBMS_DistributionAcknowledge        mBMS_DistributionAcknowledge optional,
  FullyQualifiedTEID                  fullyQualifiedTEID optional,
  Recovery                            recovery optional,
  PrivateExtension_List               privateExtension optional
}

//7.13.5
type set MBMSSessionStopRequest
{
  MBMS_FlowIdentifier                 mBMS_FlowIdentifier optional,
  AbsoluteTimeofMBMSDataTransfer      mBMS_Data_Transfer_Stop optional,   
  PrivateExtension_List               privateExtension optional
}

//7.13.6
type set MBMSSessionStopResponse
{
  Cause                               cause,
  Recovery                            recovery optional, 
  PrivateExtension_List               privateExtension optional
}


type union GTPCv2_PDUs {
  EchoRequest                                  echoRequest,
  EchoResponse                                 echoResponse,
  VersionNotSupported                          versionNotSupported,
  CreateSessionRequest                         createSessionRequest, 
  CreateSessionResponse                        createSessionResponse,
  CreateBearerRequest                          createBearerRequest,
  CreateBearerResponse                         createBearerResponse,
  BearerResourceCommand                        bearerResourceCommand,
  BearerResourceFailureIndication              bearerResourceFailureIndication,
  ModifyBearerRequest                          modifyBearerRequest,
  ModifyBearerResponse                         modifyBearerResponse,
  DeleteSessionRequest                         deleteSessionRequest,   
  DeleteBearerRequest                          deleteBearerRequest,
  DeleteSessionResponse                        deleteSessionResponse,
  DeleteBearerResponse                         deleteBearerResponse,
  DownlinkDataNotification                     downlinkDataNotification,
  DownlinkDataNotificationAcknowledgement      downlinkDataNotificationAcknowledgement,
  DownlinkDataNotificationFailureIndication    downlinkDataNotificationFailureIndication,
  DeleteIndirectDataForwardingTunnelRequest    deleteIndirectDataForwardingTunnelRequest,
  DeleteIndirectDataForwardingTunnelResponse   deleteIndirectDataForwardingTunnelResponse,
  ModifyBearerCommand                          modifyBearerCommand,
  ModifyBearerFailureIndication                modifyBearerFailureIndication,
  UpdateBearerRequest                          updateBearerRequest,
  UpdateBearerResponse                         updateBearerResponse,
  DeleteBearerCommand                          deleteBearerCommand,
  DeleteBearerFailureIndication                deleteBearerFailureIndication,  
  CreateIndirectDataForwardingTunnelRequest    createIndirectDataForwardingTunnelRequest,
  CreateIndirectDataForwardingTunnelResponse   createIndirectDataForwardingTunnelResponse,
  ReleaseAccessBearersRequest                  releaseAccessBearersRequest,
  ReleaseAccessBearersResponse                 releaseAccessBearersResponse,
  StopPagingIndication                         stopPagingIndication,
  ModifyAccessBearersRequest                   modifyAccessBearersRequest,
  ModifyAccessBearersResponse                  modifyAccessBearersResponse,
  RemoteUEReportNotification                   remoteUEReportNotification,
  RemoteUEReportAcknowledge                    remoteUEReportAcknowledge,
  ForwardRelocationRequest                     forwardRelocationRequest,
  ForwardRelocationResponse                    forwardRelocationResponse,
  ForwardRelocationCompleteNotification        forwardRelocationCompleteNotification,
  ForwardRelocationCompleteAcknowledge         forwardRelocationCompleteAcknowledge,
  ContextRequest                               contextRequest,
  ContextResponse                              contextResponse,
  ContextAcknowledge                           contextAcknowledge, 
  IdentificationRequest                        identificationRequest,
  IdentificationResponse                       identificationResponse,
  ForwardAccessContextNotification             forwardAccessContextNotification,
  ForwardAccessContextAcknowledge              forwardAccessContextAcknowledge,
  DetachNotification                           detachNotification,
  DetachAcknowledge                            detachAcknowledge,
  ChangeNotificationRequest                    changeNotificationRequest,
  ChangeNotificationResponse                   changeNotificationResponse,
  RelocationCancelRequest                      relocationCancelRequest,
  RelocationCancelResponse                     relocationCancelResponse,
  ConfigurationTransferTunnel                  configurationTransferTunnel,
  RAN_InformationRelay                         rAN_InformationRelay,
  SuspendNotification                          suspendNotification,
  SuspendAcknowledge                           suspendAcknowledge,
  ResumeNotification                           resumeNotification,
  ResumeAcknowledge                            resumeAcknowledge,
  CSPagingIndication                           cSPagingIndication,
  CreateForwardingTunnelRequest                createForwardingTunnelRequest,
  CreateForwardingTunnelResponse               createForwardingTunnelResponse,
  DeletePDN_ConnectionSetRequest               deletePDN_ConnectionSetRequest,
  DeletePDN_ConnectionSetResponse              deletePDN_ConnectionSetResponse,
  TraceSessionActivation                       traceSessionActivation,
  TraceSessionDeactivation                     traceSessionDeactivation,
  UpdatePDN_ConnectionSetRequest               updatePDN_ConnectionSetRequest,
  UpdatePDN_ConnectionSetResponse              updatePDN_ConnectionSetResponse,
  PGW_RestartNotification                      pGW_RestartNotification,
  PGW_RestartNotificationAcknowledge           pGW_RestartNotificationAcknowledge,
  PGW_DownlinkTriggeringNotification           pGW_DownlinkTriggeringNotification,
  PGW_DownlinkTriggeringAcknowledge            pGW_DownlinkTriggeringAcknowledge,
  AlertMMENotification                         alertMMENotification,
  AlertMMEAcknowledge                          alertMMEAcknowledge,
  UEActivityNotification                       uEActivityNotification,
  UEActivityAcknowledge                        uEActivityAcknowledge,
  MBMSSessionStartRequest                      mBMSSessionStartRequest,
  MBMSSessionStartResponse                     mBMSSessionStartResponse,
  MBMSSessionUpdateRequest                     mBMSSessionUpdateRequest,
  MBMSSessionUpdateResponse                    mBMSSessionUpdateResponse,
  MBMSSessionStopRequest                       mBMSSessionStopRequest,
  MBMSSessionStopResponse                      mBMSSessionStopResponse,
  ISR_StatusIndication                         iSR_StatusIndication,
  UE_RegistrationQueryRequest                  uE_RegistrationQueryRequest,
  UE_RegistrationQueryResponse                 uE_RegistrationQueryResponse
}

// TOP LEVEL GTPC PDU
type record PDU_GTPCv2
{
  BIT2                           spare,   //0 
  BIT1                           mp_Bit_or_Spare,
  BIT1                           t_Bit,
  BIT1                           p_Bit,
  BIT3                           version,  //'010'B
  OCT1                           messageType,
  LIN2_BO_LAST                   lengthf, 
  OCT4                           tEID optional,
  OCT3                           sequenceNumber,
  BIT4                           spare3, // 0
  BIT4                           messagePriorityOrSpare, //any value between 0 and 15
  GTPCv2_PDUs                    gtpcv2_pdu,
  PDU_GTPCv2                     piggybackPDU_GTPCv2 optional
}  with { 
  variant (tEID) "PRESENCE(t_Bit = '1'B)";
  variant (piggybackPDU_GTPCv2) "PRESENCE(p_Bit = '1'B)";   
  variant (lengthf) "LENGTHTO(tEID,sequenceNumber,spare3,messagePriorityOrSpare,gtpcv2_pdu)";
  variant (gtpcv2_pdu) "CROSSTAG( 
  echoRequest,                                       messageType = '01'O; 
  echoResponse,                                      messageType = '02'O; 
  versionNotSupported,                               messageType = '03'O; 
  createSessionRequest,                              messageType = '20'O;  //32 
  createSessionResponse,                             messageType = '21'O;  //33  
  createBearerRequest,                               messageType = '5F'O;  //95 
  createBearerResponse,                              messageType = '60'O;  //96 
  bearerResourceCommand,                             messageType = '44'O;  //68 
  bearerResourceFailureIndication,                   messageType = '45'O;  //69 
  modifyBearerRequest,                               messageType = '22'O;  //34
  modifyBearerResponse,                              messageType = '23'O;  //35
  deleteSessionRequest,                              messageType = '24'O;  //36    
  deleteBearerRequest,                               messageType = '63'O;  //99
  deleteSessionResponse,                             messageType = '25'O;  //37 
  deleteBearerResponse,                              messageType = '64'O;  //100 
  downlinkDataNotification,                          messageType = 'B0'O;  //176
  downlinkDataNotificationAcknowledgement,           messageType = 'B1'O;  //177 
  downlinkDataNotificationFailureIndication,         messageType = '46'O;  //70 
  deleteIndirectDataForwardingTunnelRequest,         messageType = 'A8'O;  //168 
  deleteIndirectDataForwardingTunnelResponse,        messageType = 'A9'O;  //169  
  modifyBearerCommand,                               messageType = '40'O;  //64
  modifyBearerFailureIndication,                     messageType = '41'O;  //65
  updateBearerRequest,                               messageType = '61'O;  //97 
  updateBearerResponse,                              messageType = '62'O;  //98 
  deleteBearerCommand,                               messageType = '42'O;  //66
  deleteBearerFailureIndication,                     messageType = '43'O;  //67 
  createIndirectDataForwardingTunnelRequest,         messageType = 'A6'O;  //166 
  createIndirectDataForwardingTunnelResponse,        messageType = 'A7'O;  //167 
  releaseAccessBearersRequest,                       messageType = 'AA'O;  //170
  releaseAccessBearersResponse,                      messageType = 'AB'O;  //171 
  stopPagingIndication,                              messageType = '49'O;  //73 
  modifyAccessBearersRequest,                        messageType = 'D3'O;  //211
  modifyAccessBearersResponse,                       messageType = 'D4'O;  //212
  remoteUEReportNotification,                        messageType = '28'O;  //40
  remoteUEReportAcknowledge,                         messageType = '29'O;  //41
  forwardRelocationRequest,                          messageType = '85'O;  //133
  forwardRelocationResponse,                         messageType = '86'O;  //134
  forwardRelocationCompleteNotification,             messageType = '87'O;  //135 
  forwardRelocationCompleteAcknowledge,              messageType = '88'O;  //136 
  contextRequest,                                    messageType = '82'O;  //130 
  contextResponse,                                   messageType = '83'O;  //131
  contextAcknowledge,                                messageType = '84'O;  //132 
  identificationRequest,                             messageType = '80'O;  //128
  identificationResponse,                            messageType = '81'O;  //129
  forwardAccessContextNotification,                  messageType = '89'O;  //137
  forwardAccessContextAcknowledge,                   messageType = '8A'O;  //138 
  detachNotification,                                messageType = '95'O;  //149 
  detachAcknowledge,                                 messageType = '96'O;  //150 
  changeNotificationRequest,                         messageType = '26'O;  //38
  changeNotificationResponse,                        messageType = '27'O;  //39
  relocationCancelRequest,                           messageType = '8B'O;  //139
  relocationCancelResponse,                          messageType = '8C'O;  //140
  configurationTransferTunnel,                       messageType = '8D'O;  //141
  rAN_InformationRelay,                              messageType = '98'O;  //152 
  suspendNotification,                               messageType = 'A2'O;  //162 
  suspendAcknowledge,                                messageType = 'A3'O;  //163 
  resumeNotification,                                messageType = 'A4'O;  //164
  resumeAcknowledge,                                 messageType = 'A5'O;  //165
  cSPagingIndication,                                messageType = '97'O;  //151 
  createForwardingTunnelRequest,                     messageType = 'A0'O;  //160 
  createForwardingTunnelResponse,                    messageType = 'A1'O;  //161 
  deletePDN_ConnectionSetRequest,                    messageType = '65'O;  //101
  deletePDN_ConnectionSetResponse,                   messageType = '66'O;  //102
  traceSessionActivation,                            messageType = '47'O;  //71
  traceSessionDeactivation,                          messageType = '48'O;  //72 
  updatePDN_ConnectionSetRequest,                    messageType = 'C8'O;  //200
  updatePDN_ConnectionSetResponse,                   messageType = 'C9'O;  //201
  pGW_RestartNotification,                           messageType = 'B3'O;  //179
  pGW_RestartNotificationAcknowledge,                messageType = 'B4'O;  //180
  pGW_DownlinkTriggeringNotification,                messageType = '67'O;  //103
  pGW_DownlinkTriggeringAcknowledge,                 messageType = '68'O;  //104
  alertMMENotification,                              messageType = '99'O;  //153
  alertMMEAcknowledge,                               messageType = '9A'O;  //154
  uEActivityNotification,                            messageType = '9B'O;  //155
  uEActivityAcknowledge,                             messageType = '9C'O;  //156
  iSR_StatusIndication,                              messageType = '9D'O;  //157
  uE_RegistrationQueryRequest,                       messageType = '9E'O;  //158
  uE_RegistrationQueryResponse,                      messageType = '9F'O;  //159
  mBMSSessionStartRequest,                           messageType = 'E7'O;  //231
  mBMSSessionStartResponse,                          messageType = 'E8'O;  //232
  mBMSSessionUpdateRequest,                          messageType = 'E9'O;  //233
  mBMSSessionUpdateResponse,                         messageType = 'EA'O;  //234
  mBMSSessionStopRequest,                            messageType = 'EB'O;  //235
  mBMSSessionStopResponse,                           messageType = 'EC'O;  //236
  )";                          
};



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