Initial commit
diff --git a/BSSGP_v13.0.0_CNL113833.tpd b/BSSGP_v13.0.0_CNL113833.tpd
new file mode 100644
index 0000000..e089898
--- /dev/null
+++ b/BSSGP_v13.0.0_CNL113833.tpd
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2017 Ericsson
+
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+
+   File:               BSSGP_v13.0.0_CNL113833.tpd
+   Description:        tpd project file
+   Rev:                R2A
+   Prodnr:             CNL 113 833
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>BSSGP_v13.0.0_CNL113833</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Files>
+    <FileResource projectRelativePath="src/BSSGP_EncDec.cc" relativeURI="src/BSSGP_EncDec.cc"/>
+    <FileResource projectRelativePath="src/BSSGP_Types.ttcn" relativeURI="src/BSSGP_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/BSSGP_v13.0.0_CNL113833</targetExecutable>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+      <FolderProperties>
+        <FolderResource>
+          <FolderPath>doc</FolderPath>
+          <FolderProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+      </FolderProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/doc/BSSGP_v13.0.0_CNL113833_1551.pdf b/doc/BSSGP_v13.0.0_CNL113833_1551.pdf
new file mode 100644
index 0000000..2ffebdd
--- /dev/null
+++ b/doc/BSSGP_v13.0.0_CNL113833_1551.pdf
Binary files differ
diff --git a/doc/BSSGP_v13.0_PRI.pdf b/doc/BSSGP_v13.0_PRI.pdf
new file mode 100644
index 0000000..2b0e779
--- /dev/null
+++ b/doc/BSSGP_v13.0_PRI.pdf
Binary files differ
diff --git a/src/BSSGP_EncDec.cc b/src/BSSGP_EncDec.cc
new file mode 100644
index 0000000..987dec5
--- /dev/null
+++ b/src/BSSGP_EncDec.cc
@@ -0,0 +1,144 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2017 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               BSSGP_EncDec.cc
+//  Rev:                R2A
+//  Prodnr:             CNL 113 833
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 48.018 13.0.0
+
+#include "BSSGP_Types.hh"
+
+//static TTCN_Module BSSGP_EndDec("BSSGP_EncDec", __DATE__, __TIME__);
+
+namespace BSSGP__Types {
+
+
+OCTETSTRING enc__PDU__BSSGP(const PDU__BSSGP& pdu)
+{
+ TTCN_Buffer bb;
+
+ // CALCULATE WHICH LENGTH FORMAT SHOULD BE USED AND CHANGE SHORT LENGTH FORM
+ // TO LONG LENGTH FORM IF NECESSARY
+ if (pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__DL__UNITDATA)
+ {
+  if( pdu.pDU__BSSGP__DL__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
+    {
+      PDU__BSSGP pdu2(pdu);
+      pdu2.pDU__BSSGP__DL__UNITDATA().lLC__PDU().lengthIndicator().length2() =
+        pdu2.pDU__BSSGP__DL__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
+      pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+
+    }
+    else
+      pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+  }
+  else if(pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__UL__UNITDATA)
+  {
+   if( pdu.pDU__BSSGP__UL__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
+    {
+      PDU__BSSGP pdu2(pdu);
+      pdu2.pDU__BSSGP__UL__UNITDATA().lLC__PDU().lengthIndicator().length2() =
+        pdu2.pDU__BSSGP__UL__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
+      pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+    }
+    else
+      pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+  }
+
+  else if(pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__DL__MBMS__UNITDATA)
+   {
+    if( pdu.pDU__BSSGP__DL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
+     {
+       PDU__BSSGP pdu2(pdu);
+       pdu2.pDU__BSSGP__DL__MBMS__UNITDATA().lLC__PDU().lengthIndicator().length2() =
+         pdu2.pDU__BSSGP__DL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
+       pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+     }
+     else
+       pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+   }
+
+  else if(pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__UL__MBMS__UNITDATA)
+   {
+    if( pdu.pDU__BSSGP__UL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
+     {
+       PDU__BSSGP pdu2(pdu);
+       pdu2.pDU__BSSGP__UL__MBMS__UNITDATA().lLC__PDU().lengthIndicator().length2() =
+         pdu2.pDU__BSSGP__UL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
+       pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+     }
+     else
+       pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+   }
+
+  else
+    pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
+
+  return OCTETSTRING (bb.get_len(), bb.get_data());
+}
+
+/*PDU__BSSGP dec__PDU__BSSGP(const OCTETSTRING& stream)
+{
+        PDU__BSSGP retv;
+        TTCN_Buffer bb;
+
+        bb.put_os(stream);
+
+        retv.decode(PDU__BSSGP_descr_, bb, TTCN_EncDec::CT_RAW);
+        return retv;
+}*/
+
+PDU__BSSGP dec__PDU__BSSGP(const OCTETSTRING& stream)
+{
+	if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
+		TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+		TTCN_Logger::log_event_str("dec_PDU_BSSGP(): Stream before decoding: ");
+		stream.log();
+		TTCN_Logger::end_event();
+	}
+	TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
+	TTCN_EncDec::clear_error();
+	TTCN_Buffer ttcn_buffer(stream);
+	PDU__BSSGP ret_val;
+	ret_val.decode(PDU__BSSGP_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
+
+	if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
+		TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+		TTCN_Logger::log_event_str("dec_PDU_BSSGP(): Decoded @BSSGP_Types.PDU_BSSGP: ");
+		ret_val.log();
+		TTCN_Logger::end_event();
+	}
+if (TTCN_EncDec::get_last_error_type() == TTCN_EncDec::ET_NONE) {
+	if (ttcn_buffer.get_pos() < ttcn_buffer.get_len() && TTCN_Logger::log_this_event(TTCN_WARNING)) {
+		ttcn_buffer.cut();
+		OCTETSTRING remaining_stream;
+		ttcn_buffer.get_string(remaining_stream);
+		TTCN_Logger::begin_event(TTCN_WARNING);
+		TTCN_Logger::log_event_str("dec_PDU_BSSGP(): Warning: Data remained at the end of the stream after successful decoding: ");
+		remaining_stream.log();
+		TTCN_Logger::end_event();
+	}
+	}
+if(ret_val.get_selection()== PDU__BSSGP::ALT_pDU__BSSGP__PS__HANDOVER__REQUEST)
+{
+	if(!ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().target__Cell__Identifier().ispresent()){
+		Cell__Identifier cell;
+		cell = ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().source__Cell__Identifier();
+		ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().target__Cell__Identifier() = cell;
+		//ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().source__Cell__Identifier().clean_up();
+		ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().source__Cell__Identifier()= OMIT_VALUE;
+
+	} }
+return ret_val;
+}
+
+
+}//namespace
diff --git a/src/BSSGP_Types.ttcn b/src/BSSGP_Types.ttcn
new file mode 100644
index 0000000..ee7a0fc
--- /dev/null
+++ b/src/BSSGP_Types.ttcn
@@ -0,0 +1,4602 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2017 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               BSSGP_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 833
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 48.018 13.0.0
+
+
+module BSSGP_Types
+{    
+
+import from General_Types all;
+
+external function enc_PDU_BSSGP(in PDU_BSSGP pdu) return octetstring;
+
+external function dec_PDU_BSSGP(in octetstring stream) return PDU_BSSGP;
+
+external function enc_PDU_BSSGP_fast(in PDU_BSSGP pdu, out octetstring stream)
+with { extension "prototype(fast) encode(RAW)" }
+
+external function dec_PDU_BSSGP_backtrack(in octetstring stream, out PDU_BSSGP pdu) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+
+//-----------------------------------------------------------------------------
+// INFORMATION ELEMENTS
+//-----------------------------------------------------------------------------
+type union LIN2_2a
+{
+  integer length1,
+  integer length2
+} with {
+  variant (length1) "FIELDLENGTH(7)";
+  variant (length2) "FIELDLENGTH(15)";
+  variant (length2) "BYTEORDER(last)";
+  variant (length1,length2) "FIELDORDER(msb)";
+}   
+      
+// 11.3.1           
+type record Alignment_octets
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            spare_octet  length(0..3)
+} with {
+  variant "PRESENCE(iEI = '00'O)";
+  variant (lengthIndicator) "LENGTHTO (spare_octet)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.2
+type record Bmax_default_MS
+{
+  OCT1                    iEI,
+  BIT1                    ext,
+  LIN2_2a                 lengthIndicator, 
+  OCT2                    bmax  // could be changed to integer input if simpler
+} with { 
+  variant "PRESENCE(iEI = '01'O)";
+  variant (lengthIndicator) "LENGTHTO (bmax)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+// 11.3.3
+type record BSS_Area_Indication
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   bSS_indicator
+} with { 
+  variant "PRESENCE(iEI = '02'O)";
+  variant (lengthIndicator) "LENGTHTO (bSS_indicator)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.4
+type record Bucket_Leak_Rate
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT2                   r_Value // could be changed to integer input if simpler
+} with {
+  variant "PRESENCE(iEI = '03'O)";
+  variant (lengthIndicator) "LENGTHTO (r_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,   ext = '1'B;
+                                       length2,   ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.5
+type record BVC_Bucket_Size
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT2                   bmax  
+} with { 
+  variant "PRESENCE(iEI = '05'O)";
+  variant (lengthIndicator) "LENGTHTO (bmax)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.6
+type record BVCI
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT2                   unstructured_value
+} with { 
+  variant "PRESENCE(iEI = '04'O)";
+  variant (lengthIndicator) "LENGTHTO (unstructured_value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.7
+type record BVC_Measurement
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT2                   delay_Value  
+                                   
+} with { 
+  variant "PRESENCE(iEI = '06'O)";
+  variant (lengthIndicator) "LENGTHTO (delay_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+ 
+// 11.3.8
+type record Cause_BSSGP 
+ {
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   cause_Value
+ } with { 
+  variant "PRESENCE(iEI = '07'O)";
+  variant (lengthIndicator) "LENGTHTO (cause_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+ 
+// 11.3.9
+type record Cell_Identifier
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ HEX1                   mccDigit1 ,
+ HEX1                   mccDigit2 ,
+ HEX1                   mccDigit3 ,
+ HEX1                   mncDigit3 ,
+ HEX1                   mncDigit1 ,
+ HEX1                   mncDigit2 ,
+ OCT2                   lac,
+ OCT1                   rac,    
+ OCT2                   cI_value
+} with { 
+  variant "PRESENCE(iEI = '08'O)";
+      variant (lengthIndicator) 
+     "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,
+               mncDigit2,lac,rac,cI_value)";
+      variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                           length2,         ext = '0'B;)";
+      variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+type record Cell_Identifier_V
+{ 
+ HEX1                   mccDigit1,
+ HEX1                   mccDigit2,
+ HEX1                   mccDigit3,
+ HEX1                   mncDigit3,
+ HEX1                   mncDigit1,
+ HEX1                   mncDigit2,
+ OCT2                   lac,
+ OCT1                   rac,    
+ OCT2                   cI_value
+};
+
+// 11.3.10
+// 29.018, 44.018
+type record Channel_needed
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ Channel_Needed_Value    channel_Needed_Value
+} with { 
+  variant "PRESENCE(iEI = '09'O)";
+  variant (lengthIndicator) "LENGTHTO (channel_Needed_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+type record Channel_Needed_Value
+{
+  BIT2   channel_1,
+  BIT2   channel_2,
+  BIT4   channelNeededIEI     //44.018
+}
+
+// 11.3.11
+type record DRX_Parameters
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ OCT1                    splitPG_CycleCode,
+ BIT3                    nonDRXTimer,
+ BIT1                    splitOnCCCH,
+ BIT4                    cnSpecificDRXCycleLength
+} with { 
+  variant "PRESENCE(iEI = '0A'O)";
+  variant (lengthIndicator) 
+                "LENGTHTO (splitPG_CycleCode,nonDRXTimer,splitOnCCCH,
+                   cnSpecificDRXCycleLength)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+        };        
+
+// 11.3.12
+type record EMLPP_Priority_BSSGP
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ BIT3                    callPriority,
+ BIT5                    spare
+} with { 
+  variant "PRESENCE(iEI = '0B'O)";
+  variant (lengthIndicator) "LENGTHTO (callPriority,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+        };
+        
+// 11.3.13
+type record Flush_Action
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ OCT1                    actionValue
+} with { 
+  variant "PRESENCE(iEI = '0C'O)";
+  variant (lengthIndicator) "LENGTHTO (actionValue)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+        };
+
+
+// 11.3.14
+type record IMSI_BSSGP
+{         
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ BIT3                    type_of_Identity,
+ BIT1                    oddevenIndicator,      // '1'B or '0'B
+ hexstring               digits     length(5..15)                                                                       
+} with { 
+  variant "PRESENCE(iEI = '0D'O)";
+  variant (lengthIndicator) "LENGTHTO (type_of_Identity,
+                                             oddevenIndicator,digits)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,   ext = '0'B;)"; 
+              //variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) ";
+  variant (digits) "HEXORDER(low)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+  variant "PADDING(yes)";
+  variant "PADDING_PATTERN('1'B)"
+                
+        };
+                
+// 11.3.15
+//NOTE: lengthIndicator-short form will be converted to long form 
+// if needed during encoding
+type record LLC_PDU
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ octetstring            lLC_PDU  // Note: this is divided into 2 parts in spec!
+} with { 
+  variant "PRESENCE(iEI = '0E'O)";
+  variant (lengthIndicator) "LENGTHTO (lLC_PDU)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.16
+type record LLC_Frames_Discarded
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ hexstring               number_of_frames_discarded length (2)
+ } with { 
+  variant "PRESENCE(iEI = '0F'O)";
+  variant (lengthIndicator) "LENGTHTO (number_of_frames_discarded)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+    
+// 11.3.17
+type record Location_Area
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ HEX1                   mccDigit1,
+ HEX1                   mccDigit2,
+ HEX1                   mccDigit3,
+ HEX1                   mncDigit3,
+ HEX1                   mncDigit1,
+ HEX1                   mncDigit2,
+ OCT2                   lac
+} with { 
+  variant "PRESENCE(iEI = '10'O)";
+  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,
+                                 mncDigit3,mncDigit1,mncDigit2,lac)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.18
+type record LSA_Identifier_List_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            lSA_Identifier_List   //  encoded LSA Identifier List
+} with { 
+  variant "PRESENCE(iEI = '26'O)";
+  variant (lengthIndicator) "LENGTHTO (lSA_Identifier_List)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.19
+type record LSA_Information_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  LSA_Information        lSA_Information   //  encoded LSA Information 48.008
+} with { 
+  variant "PRESENCE(iEI = '27'O)";
+  variant (lengthIndicator) "LENGTHTO (lSA_Information)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record LSA_Information     //  encoded LSA Information 48.008
+{
+  BIT1                                      lSA_Only,
+  BIT7                                      spare,
+  LSA_Identification_and_Attributes_List    lSA_Identification_and_Attributes_List
+}
+
+type record of LSA_Identification_and_Attributes LSA_Identification_and_Attributes_List; 
+
+type record LSA_Identification_and_Attributes
+{
+   BIT4                 priority,
+   BIT1                 pref,
+   BIT1                 act,
+   BIT2                 spare, 
+   OCT3                 lSA_ID
+}
+
+
+// 11.3.20
+type record Mobile_Id_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  MobileIdentityV_BSSGP  mobile_Identity
+} with { 
+  variant "PRESENCE(iEI = '11'O)";
+  variant (lengthIndicator) "LENGTHTO (mobile_Identity)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// MobileIdentityV structure copied from 24.008 MobileL3
+type record MobileIdentityV_BSSGP
+{
+  BIT3                               typeOfIdentity,
+  OddEvenInd_Identity_BSSGP          oddEvenInd_identity
+} with {
+  variant (oddEvenInd_identity) "CROSSTAG
+  (
+    imei,                     typeOfIdentity ='010'B;
+    imsi,                     typeOfIdentity ='001'B;
+    imei_sv,                  typeOfIdentity ='011'B;  
+  )"
+};
+
+type union OddEvenInd_Identity_BSSGP
+{
+  IMSI_MobileIdentityV                     imsi,  
+  IMEI_MobileIdentityV                     imei,     
+  IMEI_SV_MobileIdentityV                  imei_sv
+};
+
+type record IMSI_MobileIdentityV
+{
+  BIT1               oddevenIndicator,       // '1'B or '0'B
+  hexstring          digits  length(5..15),
+  BIT4               fillerDigit  optional   // B'1111, fillerDigit is present
+  // if oddevenIndicator=0
+}
+with
+{
+  variant (fillerDigit) "PRESENCE (oddevenIndicator   = '0'B) ";
+};
+
+type record IMEI_MobileIdentityV
+{
+  BIT1               oddevenIndicator,   // '1'B
+  hexstring          digits  length(15)
+};
+
+type record IMEI_SV_MobileIdentityV
+{
+  BIT1               oddevenIndicator,  // '0'B
+  hexstring          digits length(16),
+  BIT4               fillerDigit    // filler '1111'B
+};
+
+// 11.3.21
+type record MS_Bucket_Size
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ OCT2                    bmax
+} with { 
+  variant "PRESENCE(iEI = '12'O)";
+  variant (lengthIndicator) "LENGTHTO (bmax)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+// 11.3.22
+// Note : structure from 24.008 Mobile L3
+type record MS_Radio_Access_Capability
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ MSRadioAccessCapabilityV_BSSGP  mSRadioAccessCapabilityV_BSSGP
+} with { 
+  variant "PRESENCE(iEI = '13'O)";
+  variant (lengthIndicator) "LENGTHTO (mSRadioAccessCapabilityV_BSSGP)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant /*(ext,lengthIndicator)*/ "FIELDORDER(msb)";
+  variant "PADDING(yes)"
+};
+             
+type record of MSRACapabilityValuesRecord_BSSGP MSRadioAccessCapabilityV_BSSGP
+with { variant "EXTENSION_BIT(reverse)";variant "FIELDORDER(msb)" };
+
+
+type record MSRACapabilityValuesRecord_BSSGP
+{
+  MSRACapabilityValues_BSSGP   mSRACapabilityValues,
+  BIT1                         presenceBitMSRACap
+} with { variant "FIELDORDER(msb)" };
+
+
+type union MSRACapabilityValues_BSSGP
+{
+  MSRACapabilityValuesExclude1111_BSSGP        mSRACapabilityValuesExclude1111,
+  MSRACapabilityValues1111_BSSGP               mSRACapabilityValues1111
+} with { variant "FIELDORDER(msb)" };
+
+
+type record MSRACapabilityValuesExclude1111_BSSGP
+{
+  BIT4                               accessTechnType,
+  AccessCapabilitiesStruct_BSSGP     accessCapabilities
+} with {
+  variant "PRESENCE (
+      accessTechnType = '0000'B,     // GSM P
+      accessTechnType = '0001'B,     // GSM E
+      accessTechnType = '0010'B,     // GSM R
+      accessTechnType = '0011'B,     // GSM 1800
+      accessTechnType = '0100'B,     // GSM190
+      accessTechnType = '0101'B,     // GSM 450
+      accessTechnType = '0110'B,     // GSM480
+      accessTechnType = '0111'B,     // GSM 480
+      accessTechnType = '1000'B,     // GSM 700
+      accessTechnType = '1001'B,     // GSM T 310
+      accessTechnType = '1010'B,     // GSM T 410
+      accessTechnType = '1011'B      // GSM T 900
+  )"
+variant (accessTechnType) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)"
+};
+
+
+// Access Capabilities Struct
+type record AccessCapabilitiesStruct_BSSGP
+{
+  integer                            lengthIndicator,
+  AccessCapabilities_BSSGP           accessCapabilities,
+  // spare_bits "expands to the indicated length",
+  // i.e. 24.008 spec puts no restriction on number
+  // of spare_bits.  The only restriction is that the whole
+  // MS Radio Access Capability  IE is less than 52 octets
+  bitstring                    spare_bits              optional
+} with {
+  variant (lengthIndicator) "FIELDLENGTH(7)";
+  variant (lengthIndicator) "LENGTHTO(accessCapabilities,spare_bits)";
+  variant (lengthIndicator) "UNIT(bits)";
+  variant "FIELDORDER(msb)";
+  variant (lengthIndicator) "BYTEORDER(last)";
+}
+
+
+//Access Capabilities
+type record AccessCapabilities_BSSGP
+{
+  BIT3                         rfPowerCapability,
+  BIT1                         presenceBitA5,
+  A5BITS_BSSGP                 a5bits               optional,
+  BIT1                         esind,
+  BIT1                         psbit,
+  BIT1                         vgcs,
+  BIT1                         vbs,
+  BIT1                         presenceBitMultislot,
+  MultislotCap_BSSGP           multislotcap         optional,
+  AccessCapAdditionsAfterRel97_BSSGP accessCapAdditionsAfterRel97 optional //opt because of V97
+  //Note: AccessCapAdditionsAfterRel97 can include:
+  // Rel99 or
+  // Rel99 + Rel4 or
+  // Rel99 + Rel4 + Rel5 or
+  // Rel99 + Rel4 + Rel5  + Rel6
+} with {
+  variant "FIELDORDER(msb)";
+variant(rfPowerCapability) "BYTEORDER(last)";
+  variant (a5bits)               "PRESENCE(presenceBitA5 = '1'B)";
+  variant (multislotcap)         "PRESENCE(presenceBitMultislot = '1'B)";
+}
+
+
+type record AccessCapAdditionsAfterRel97_BSSGP
+{
+  AccessCapAdditionsRel99_BSSGP                accessCapAdditionsRel99,
+  AccessCapAdditionsAfterRel99_BSSGP           accessCapAdditionsAfterRel99 optional
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+
+type record AccessCapAdditionsRel99_BSSGP
+{
+  BIT1               presenceBitPskpow,
+  BIT2               pskpowercap                     optional,
+  BIT1               compactIntMeasurCap,
+  BIT1               revisionLevelInd,
+  BIT1               umtsfddRadAccTechCap,
+  BIT1               umtstddRadAccTechCap,
+  BIT1               cdma2kRadAccTechCap
+} with {
+  variant "FIELDORDER(msb)";
+variant(pskpowercap) "BYTEORDER(last)";
+  variant (pskpowercap) "PRESENCE(presenceBitPskpow = '1'B)";
+}
+
+
+type record AccessCapAdditionsAfterRel99_BSSGP
+{
+  AccessCapAdditionsRel4_BSSGP       accessCapAdditionsRel4,
+  AccessCapAdditionsAfterRel4_BSSGP  accessCapAdditionsAfterRel4 optional
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+
+type record AccessCapAdditionsRel4_BSSGP
+{
+  BIT1                    umts128RadAccTechCap,
+  BIT1                    geranFeaturePackage,
+  BIT1                    presenceBitExtendedDTM,
+  ExtendedDTM_BSSGP       extendedDTM                       optional,
+  BIT1                    modulationBasedMultislotClass
+} with {
+  variant "FIELDORDER(msb)";
+  variant (extendedDTM)          "PRESENCE(presenceBitExtendedDTM = '1'B)";
+}
+
+
+type record AccessCapAdditionsAfterRel4_BSSGP
+{
+  AccessCapAdditionsRel5_BSSGP       accessCapAdditionsRel5, 
+  AccessCapAdditionsAfterRel5_BSSGP  accessCapAdditionsAfterRel5 optional
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+
+type record AccessCapAdditionsRel5_BSSGP
+{
+  BIT1                     presenceBitHighMultislotCapability,
+  BIT2                     highMultislotCapability            optional,
+  BIT1                     presenceBitGeranIuModeCapability,
+  GeranIuModeCap_BSSGP     geranIuModeCap                     optional,
+  BIT2                     gMSKMultislotPowerProfile,
+  BIT2                     eightPSKMultislotPowerProfile
+} with {
+  variant "FIELDORDER(msb)";
+variant(highMultislotCapability) "BYTEORDER(last)";
+variant(gMSKMultislotPowerProfile) "BYTEORDER(last)";
+variant(eightPSKMultislotPowerProfile) "BYTEORDER(last)";
+  variant (highMultislotCapability)
+  "PRESENCE(presenceBitHighMultislotCapability = '1'B)";
+  variant (geranIuModeCap)"PRESENCE(presenceBitGeranIuModeCapability = '1'B)"
+}
+
+
+type record GeranIuModeCap_BSSGP
+{
+  integer                      lengthIndicator,
+  BIT1                         fLOIuCapability,
+  bitstring                    spare_bits
+  // spare_bits "expands to the indicated length",
+  // i.e. 24.008 spec puts no restriction on number
+  // of spare_bits.  The only restriction is that the whole
+  // MS Radio Access Capability  IE is less than 52 octets
+} with {
+  variant "FIELDORDER(msb)";
+  variant (lengthIndicator) "FIELDLENGTH(4)";
+  variant (lengthIndicator) "LENGTHTO(fLOIuCapability,spare_bits)";
+  variant (lengthIndicator) "UNIT(bits)";
+}
+
+type record AccessCapAdditionsAfterRel5_BSSGP
+{
+  AccessCapAdditionsRel6_BSSGP      accessCapAdditionsRel6,
+  AccessCapAdditionsAfterRel6_BSSGP accessCapAdditionsAfterRel6 optional  
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsRel6_BSSGP
+{
+  BIT1                              multipleTBFCapability,
+  BIT2                              downlinkAdvancedReceiverPerformance,
+  BIT1                              extendedRLCMACCtrlMsgSegmentationCap,
+  BIT1                              dTMEnhancementsCapability,
+  BIT1                              presenceBitDTMGPRSHighMultiSlotClass,
+  DTMGPRSHighMultiSlotClass_BSSGP   dTMGPRSHighMultiSlotClass optional,
+  BIT1                              pSHandoverCapability
+} with {
+  variant "FIELDORDER(msb)";
+variant(downlinkAdvancedReceiverPerformance) "BYTEORDER(last)";
+  variant (dTMGPRSHighMultiSlotClass)
+  "PRESENCE(presenceBitDTMGPRSHighMultiSlotClass = '1'B)"
+}
+
+
+type record DTMGPRSHighMultiSlotClass_BSSGP
+{
+  BIT3               dTMGPRSHighMultiSlotClassValue,
+  BIT1               presenceBitDTMEGPRSHighMultiSlotClass,
+  BIT3               dTMEGPRSHighMultiSlotClassValue optional
+} with {
+  variant "FIELDORDER(msb)";
+variant(dTMGPRSHighMultiSlotClassValue) "BYTEORDER(last)";
+variant(dTMEGPRSHighMultiSlotClassValue) "BYTEORDER(last)";
+  variant (dTMEGPRSHighMultiSlotClassValue)
+  "PRESENCE(presenceBitDTMEGPRSHighMultiSlotClass = '1'B)"
+
+}
+
+//New
+type record AccessCapAdditionsAfterRel6_BSSGP
+{
+  AccessCapAdditionsRel7_BSSGP      accessCapAdditionsRel7,
+  AccessCapAdditionsAfterRel7_BSSGP accessCapAdditionsAfterRel7 optional 
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+
+type record AccessCapAdditionsRel7_BSSGP
+{
+  BIT1                         dTMHandoverCapability,
+  BIT1                         presenceBitDownlinkDualCarrier, 
+  DownlinkDualCarrier_BSSGP    downlinkDualCarrier optional,
+  BIT1                         flexibleTimeslotAssignment,
+  BIT1                         gANPSHandoverCapability,
+  BIT1                         rLCNonPersistentMode,
+  BIT1                         reducedLatencyEGPRSCapability,
+  BIT2                         uplinkEGPRS2,
+  BIT2                         downlinkEGPRS2 
+} with {
+  variant "FIELDORDER(msb)";
+variant(uplinkEGPRS2) "BYTEORDER(last)";
+variant(downlinkEGPRS2) "BYTEORDER(last)";
+  variant (downlinkDualCarrier)
+  "PRESENCE(presenceBitDownlinkDualCarrier = '1'B)"
+}
+  
+type record AccessCapAdditionsAfterRel7_BSSGP
+{
+  AccessCapAdditionsRel8_BSSGP       accessCapAdditionsRel8,
+  AccessCapAdditionsAfterRel8_BSSGP  accessCapAdditionsAfterRel8
+}
+
+
+
+type record DownlinkDualCarrier_BSSGP
+{
+  BIT3  multislotCapReductionforDownLinkDualCarrier,
+  BIT1  downlinkDualCarrierforDTMCapability
+} with { variant "FIELDORDER(msb)"
+variant(multislotCapReductionforDownLinkDualCarrier) "BYTEORDER(last)";
+  };
+
+
+type record  ExtendedDTM_BSSGP
+{
+  BIT2               ExtendedDTM_GPRSMultislot,
+  BIT2               ExtendedDTM_EGPRSMultislot
+} with { variant "FIELDORDER(msb)";
+variant(ExtendedDTM_GPRSMultislot) "BYTEORDER(last)";
+variant(ExtendedDTM_EGPRSMultislot) "BYTEORDER(last)";
+};
+
+type record AccessCapAdditionsRel8_BSSGP
+{
+  BIT1                  eUTRAFDDsupport ,
+  BIT1                  eUTRATDDsupport, 
+  BIT2                  gERANToEUTRASupportInGERANPacketTransferMode,
+  BIT1                  priorityBasedReselectionSupport 
+} with {
+variant(gERANToEUTRASupportInGERANPacketTransferMode) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)"
+}
+
+type record AccessCapAdditionsAfterRel8_BSSGP
+{
+  AccessCapAdditionsRel9_BSSGP       accessCapAdditionsRel9,
+  AccessCapAdditionsAfterRel9_BSSGP  accessCapAdditionsAfterRel9
+}
+
+type record AccessCapAdditionsRel9_BSSGP
+{
+  EnhancedFlexTimeslotAssignment_BSSGP   enhancedFlexTimeslotAssignment,
+  BIT1                             indicationofUpperLayerPDUStartCapabilityforRLCUM,
+  BIT1                             eMSTCapability,
+  BIT1                             mTTICapability,
+  BIT1                             uTRACSGCellsReporting,
+  BIT1                             eUTRACSGCellsReporting
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel9_BSSGP
+{
+  AccessCapAdditionsRel10_BSSGP       accessCapAdditionsRel10,
+  AccessCapAdditionsAfterRel10_BSSGP  accessCapAdditionsAfterRel10
+}
+
+type record AccessCapAdditionsRel10_BSSGP
+{
+  BIT1           dTRCapability,
+  BIT1           eMSRCapability,
+  BIT1           fastDownlinkFrequencySwitchingCapability,
+  BIT2           tIGHTER_Capability  
+} with {
+variant(tIGHTER_Capability) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel10_BSSGP
+{
+  AccessCapAdditionsRel11_BSSGP       accessCapAdditionsRel11,
+  AccessCapAdditionsAfterRel11_BSSGP  accessCapAdditionsAfterRel11
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsRel11_BSSGP
+{
+  BIT1           fANRCapability,
+  BIT1           iPACapability,
+  BIT1           gERANNetworkSharingSupport,
+  BIT1           eUTRAWidebandRSRQMeasurementsSupport  
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel11_BSSGP
+{
+  AccessCapAdditionsRel12_BSSGP       accessCapAdditionsRel12,
+  AccessCapAdditionsAfterRel12_BSSGP  accessCapAdditionsAfterRel12
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsRel12_BSSGP
+{
+  BIT1           uTRAMultipleFrequencyBandIndicatorsSupport,
+  BIT1           eUTRAMultipleFrequencyBandIndicatorsSupport,
+  BIT1           presenceBitDLMCCapability, 
+  DLMCCapability_BSSGP dLMCCapability optional,
+  BIT1           extendedTSCSetCapabilitySupport 
+} with {
+  variant "FIELDORDER(msb)";
+  variant (dLMCCapability) "PRESENCE(presenceBitDLMCCapability = '1'B)"
+}
+
+type record DLMCCapability_BSSGP
+{
+  BIT1               presenceDLMC,
+  DLMCBandReception_BSSGP  dLMCBandReception    optional,
+  BIT2               dLMCMaxBandwidth,
+  BIT6               dLMCMaxNumOfDownlinkTimeslots,
+  BIT3               dLMCMaxNumOfDownlinkCarriers
+} with {
+  variant "FIELDORDER(msb)";
+variant(dLMCMaxBandwidth) "BYTEORDER(last)";
+variant(dLMCMaxNumOfDownlinkTimeslots) "BYTEORDER(last)";
+variant(dLMCMaxNumOfDownlinkCarriers) "BYTEORDER(last)";
+  variant (dLMCBandReception) "PRESENCE(presenceDLMC = '1'B)"
+}
+
+type record DLMCBandReception_BSSGP
+{
+  BIT2  dLMCNonContiguousIntraBandReception,
+  BIT1  dLMCInterBandReception
+} with {
+variant(dLMCNonContiguousIntraBandReception) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapAdditionsAfterRel12_BSSGP
+{
+  AccessCapLateAdditionsRel11_BSSGP   accessCapLateAdditionsRel11,
+  octetstring                   accessCapLateAdditionsAfterRel11
+} with {
+  variant "FIELDORDER(msb)";
+}
+
+type record AccessCapLateAdditionsRel11_BSSGP
+{
+  BIT1     extendedEARFCNValueRange
+}
+
+type record EnhancedFlexTimeslotAssignment_BSSGP
+{
+  BIT1                  presenceBitalternativeEFTAMultislotClass,
+  BIT4                  alternativeEFTAMultislotClass,
+  BIT3                  eFTAMultislotCapabilityReductionforDownlinkDualCarrier
+} with {
+variant(alternativeEFTAMultislotClass) "BYTEORDER(last)";
+variant(eFTAMultislotCapabilityReductionforDownlinkDualCarrier) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)"
+};
+
+
+
+//MultislotCap
+type record  MultislotCap_BSSGP
+{
+  BIT1                                   presenceBitHscsd,
+  BIT5                                   hscsdmultislotclass      optional,
+  BIT1                                   presenceBitGprs,
+  MultislotCap_GPRS_BSSGP                gprsmultislot           optional,
+  BIT1                                   presenceBitSms,
+  MultislotCap_SMS_BSSGP                 multislotCap_SMS        optional,
+  MultislotCapAdditionsAfterRel97_BSSGP  multislotCapAdditionsAfterRel97 optional
+} with {
+  variant "FIELDORDER(msb)";
+  variant (hscsdmultislotclass)     "PRESENCE(presenceBitHscsd = '1'B)";
+variant(hscsdmultislotclass) "BYTEORDER(last)";
+  variant (gprsmultislot)          "PRESENCE(presenceBitGprs = '1'B)";
+  variant (multislotCap_SMS)       "PRESENCE(presenceBitSms = '1'B)";
+
+}
+
+
+type record MultislotCapAdditionsAfterRel97_BSSGP
+{
+  BIT1                                   presenceBitEcsdmulti,
+  BIT5                                   ecsdmultislotclass      optional,
+  BIT1                                   presenceBitEgprsmulti,
+  MultislotCap_EGPRS_BSSGP               multislotCap_EGPRS      optional,
+  BIT1                                   presenceBitDtmGprsmulti,
+  MultislotCap_dtmgprsmultislotsubclass_BSSGP  
+                            multislotCapdtmgprsmultislotsubclass optional
+} with {
+  variant "FIELDORDER(msb)";
+  variant (ecsdmultislotclass)     "PRESENCE(presenceBitEcsdmulti = '1'B)";
+  variant (multislotCap_EGPRS)     "PRESENCE(presenceBitEgprsmulti = '1'B)" ;
+variant(ecsdmultislotclass) "BYTEORDER(last)";
+  variant (multislotCapdtmgprsmultislotsubclass)
+  "PRESENCE(presenceBitDtmGprsmulti = '1'B)"
+}
+
+
+type record MultislotCap_GPRS_BSSGP
+{
+  BIT5               gprsmultislotclass,
+  BIT1               gprsextendeddynalloccap
+} with { variant "FIELDORDER(msb)"; 
+variant(gprsmultislotclass) "BYTEORDER(last)"
+ };
+
+
+type record MultislotCap_SMS_BSSGP
+{
+  BIT4               smsValue,
+  BIT4               smValue
+} with { variant "FIELDORDER(msb)";
+variant(smsValue) "BYTEORDER(last)";
+variant(smValue) "BYTEORDER(last)"
+
+};
+
+
+type record  MultislotCap_EGPRS_BSSGP
+{
+  BIT5               egprsmultislotclass,
+  BIT1               egprsextendeddynalloccap
+}  with { variant "FIELDORDER(msb)";
+variant(egprsmultislotclass) "BYTEORDER(last)"
+  };
+
+type record MultislotCap_dtmgprsmultislotsubclass_BSSGP
+{
+  BIT2               dtmgprsmultislotsubclass,
+  BIT1               singleSlotDTM,
+  BIT1               presenceBitDTM_EGPRSMultiSlot,
+  BIT2               dTM_EGPRSMultiSlot       optional
+} with {
+  variant "FIELDORDER(msb)";
+variant(dtmgprsmultislotsubclass) "BYTEORDER(last)";
+variant(dTM_EGPRSMultiSlot) "BYTEORDER(last)";
+  variant (dTM_EGPRSMultiSlot) "PRESENCE(presenceBitDTM_EGPRSMultiSlot = '1'B)"
+};
+
+
+//A5BITS
+
+type record  A5BITS_BSSGP
+{
+  BIT1       a51 ,
+  BIT1       a52 ,
+  BIT1       a53 ,
+  BIT1       a54 ,
+  BIT1       a55 ,
+  BIT1       a56 ,
+  BIT1       a57
+} with { variant "FIELDORDER(msb)" };
+
+
+type record MSRACapabilityValues1111_BSSGP
+{
+  BIT4               accessTechnType,    //1111
+  integer            lengthIndicator,
+  BIT1               presenceIndicator_AdditionalAccessTechnologiesRepetition,
+  AdditionalAccessTechnologiesRepetition_BSSGP // coded '1'B if list is not empty
+                  additionalAccessTechnologiesRepetition           optional,
+  bitstring          spare_bits
+} with {
+  variant "PRESENCE (accessTechnType = '1111'B)";
+variant (accessTechnType) "BYTEORDER(last)";
+  variant "FIELDORDER(msb)";
+  variant (lengthIndicator) "FIELDLENGTH(7)";
+  variant (lengthIndicator) "UNIT(bits)";
+  variant (lengthIndicator) "BYTEORDER(last)";
+  variant (additionalAccessTechnologiesRepetition)
+  "PRESENCE(presenceIndicator_AdditionalAccessTechnologiesRepetition = '1'B)";
+  variant (lengthIndicator)
+  "LENGTHTO(presenceIndicator_AdditionalAccessTechnologiesRepetition,
+             additionalAccessTechnologiesRepetition,spare_bits)";
+
+};
+
+type record of AdditionalAccessTechnologiesRecord_BSSGP
+                               AdditionalAccessTechnologiesRepetition_BSSGP
+with { variant "EXTENSION_BIT(reverse)" };
+
+
+type record AdditionalAccessTechnologiesRecord_BSSGP
+{
+  AdditionalAccessTechnologies_BSSGP additionalAccessTechnologies,
+  BIT1                               extensionBit
+} with { variant "FIELDORDER(msb)" };
+
+
+type record  AdditionalAccessTechnologies_BSSGP
+{
+  BIT4               accessTechnType,
+  BIT3               gMSKPowerClass,
+  BIT2               psk8PowerClass
+} with { variant "FIELDORDER(msb)";
+variant (accessTechnType) "BYTEORDER(last)";
+variant (gMSKPowerClass) "BYTEORDER(last)";
+variant (psk8PowerClass) "BYTEORDER(last)";
+ };
+
+
+
+// 11.3.23
+type record OMC_Id_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT20                  oMC_Identity
+} with { 
+  variant "PRESENCE(iEI = '14'O)";
+  variant (lengthIndicator) "LENGTHTO (oMC_Identity)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+ 
+// 11.3.24 
+//NOTE: lengthIndicator-short form will be converted to 
+// long form if needed during encoding
+type record PDU_in_Error
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ octetstring            erroneous_BSSGP_PDU
+} with { 
+  variant "PRESENCE(iEI = '15'O)";
+  variant (lengthIndicator) "LENGTHTO (erroneous_BSSGP_PDU)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.25
+type record  PDU_Lifetime
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT2                   delay_Value
+} with { 
+  variant "PRESENCE(iEI = '16'O)";
+  variant (lengthIndicator) "LENGTHTO (delay_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.27
+type record Priority_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   pvi,  
+  BIT1                   qa, 
+  BIT4                   priority_Level, //(1..14) 0: spare, 15: not used  
+  BIT1                   pci, 
+  BIT1                   spare        
+} with { 
+  variant "PRESENCE(iEI = '17'O)";
+  variant (lengthIndicator) "LENGTHTO (pvi,qa,priority_Level,pci,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.28
+type record QoS_Profile
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT2                   peak_Bit_Rate,
+ BIT3                   precedence,
+ BIT1                   a_bit,
+ BIT1                   t_bit,
+ BIT1                   c_r_bit,
+ BIT2                   peakBitRateGranularity
+} with {  
+  variant "PRESENCE(iEI = '18'O)";
+  variant (lengthIndicator) "LENGTHTO (peak_Bit_Rate,precedence,
+                                       a_bit,t_bit,c_r_bit,peakBitRateGranularity)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+       
+       
+type record QoS_Profile_V
+{ 
+ OCT2                   peak_Bit_Rate,
+ BIT3                   precedence,
+ BIT1                   a_bit,
+ BIT1                   t_bit,
+ BIT1                   c_r_bit,
+ BIT2                   peakBitRateGranularity
+}
+                       
+// 11.3.29
+type record Radio_Cause
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   radio_Cause_Value
+} with { 
+  variant "PRESENCE(iEI = '19'O)";
+  variant (lengthIndicator) "LENGTHTO (radio_Cause_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.30
+type record  RA_Cap_UPD_CAUSE
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   rA_CAP_UPD_Cause_value
+} with { 
+  variant "PRESENCE(iEI = '1A'O)";
+  variant (lengthIndicator) "LENGTHTO (rA_CAP_UPD_Cause_value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.31
+type record  Routeing_Area
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ HEX1                   mccDigit1,
+ HEX1                   mccDigit2,
+ HEX1                   mccDigit3,
+ HEX1                   mncDigit3,
+ HEX1                   mncDigit1,
+ HEX1                   mncDigit2,
+ OCT2                   lac,    
+ OCT1                   rac    
+} with {
+  variant "PRESENCE(iEI = '1B'O)";
+  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,
+         mncDigit1,mncDigit2,lac,rac)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.32
+type record R_default_MS
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT2                   r_default_MS_value
+} with { 
+  variant "PRESENCE(iEI = '1C'O)";
+  variant (lengthIndicator) "LENGTHTO (r_default_MS_value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.33
+type record Suspend_Reference_Number
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ OCT1                    suspend_Reference_Number_value
+} with { 
+  variant "PRESENCE(iEI = '1D'O)";
+  variant (lengthIndicator) "LENGTHTO (suspend_Reference_Number_value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+// 11.3.34
+type record Tag
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   unstructured_Value
+} with { 
+  variant "PRESENCE(iEI = '1E'O)";
+  variant (lengthIndicator) "LENGTHTO (unstructured_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.35        
+type record TLLI_BSSGP
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT4                   tLLI_Value
+} with { 
+  variant "PRESENCE(iEI = '1F'O)";
+  variant (lengthIndicator) "LENGTHTO (tLLI_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";        
+};
+
+// 11.3.36
+// Note : reference in spec is to "TMSI/P-TMSI information element in 
+// 3GPP TS 24.008", however this specification has Mobile Identity 
+// IE which includes TMSI/P-TMSI
+type record TMSI_BSSGP
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT4                   tMSI_Value
+} with { 
+  variant "PRESENCE(iEI = '20'O)";
+  variant (lengthIndicator) "LENGTHTO (tMSI_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+// 11.3.37
+type record Trace_Reference_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT2                   trace_Reference
+} with { 
+  variant "PRESENCE(iEI = '21'O)";
+  variant (lengthIndicator) "LENGTHTO (trace_Reference)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.38
+type record Trace_Type_BSSGP
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   equipment_Trace
+} with { 
+  variant "PRESENCE(iEI = '22'O)";
+  variant (lengthIndicator) "LENGTHTO (equipment_Trace)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+
+};
+
+
+// 11.3.39
+type record TransactionId_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT2                   transaction_Id
+} with { 
+  variant "PRESENCE(iEI = '23'O)";
+  variant (lengthIndicator) "LENGTHTO (transaction_Id)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.40
+type record Trigger_Id_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT20                  entity_Identity
+} with { 
+  variant "PRESENCE(iEI = '24'O)";
+  variant (lengthIndicator) "LENGTHTO (entity_Identity)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.41
+type record Number_of_octets_affected
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT3                   number_of_octets_transfered_or_deleted 
+                              // could be changed to integer input if simpler
+} with { 
+  variant "PRESENCE(iEI = '25'O)";
+   variant (lengthIndicator) 
+        "LENGTHTO (number_of_octets_transfered_or_deleted)";        
+   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                        length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";                
+};
+
+
+// 11.3.42
+type record PFI
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ BIT7                   pFI_Value,
+ BIT1                   spare  //  '0'B according to 10.5.6.11 of 24.008
+
+} with { 
+  variant "PRESENCE(iEI = '28'O)";
+   variant (lengthIndicator) 
+        "LENGTHTO (pFI_Value,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";        
+};
+
+
+// 11.3.43
+// Note : structure from 24.008
+type record ABQP
+{
+ OCT1                iEI,
+ BIT1                ext,
+ LIN2_2a             lengthIndicator,
+ BIT3                reliabilityClass,
+ BIT3                delayClass,
+ BIT2                spare1,  // '00'B
+ BIT3                precedenceClass,
+ BIT1                spare2,
+ BIT4                peakThroughput,
+ BIT5                meanThroughput,
+ BIT3                spare3,
+ BIT3                deliverErroneusSDU optional, //opt because of V97
+ BIT2                deliveryOrder optional, //opt because of V97
+ BIT3                trafficClass optional, //opt because of V97
+ OCT1                maxSDUSize optional, //opt because of V97
+ OCT1                maxBitrateUplink optional, //opt because of V97
+ OCT1                maxBitrateDownlink optional, //opt because of V97
+ BIT4                sduErrorRatio optional, //opt because of V97
+ BIT4                residualBER optional, //opt because of V97
+ BIT2                trafficHandlingPriority optional, //opt because of V97
+ BIT6                transferDelay optional, //opt because of V97
+ OCT1                guaranteedBitRateUplink optional, //opt because of V97
+ OCT1                guaranteedBitRateDownlink optional, //opt because of V97
+ BIT4                sourceStatisticsDescriptor optional, //opt because of V97
+ BIT1                signallingIndication optional, //opt because of V97
+ BIT3                spare4 optional, //opt because of V97
+ OCT1                maxBitRateDownlinkExtended optional,
+ OCT1                guaranteedBitRateDownlinkExtended optional,
+ OCT1                maxBitrateUplinkExtended           optional, //opt because of V97
+ OCT1                guaranteedBitRateUplinkExtended    optional  //opt because of V97
+} with { 
+  variant "PRESENCE(iEI = '3A'O)";
+   variant (lengthIndicator) 
+        "LENGTHTO (reliabilityClass,delayClass,spare1,precedenceClass,
+               spare2,peakThroughput,
+         meanThroughput,spare3
+         ,deliverErroneusSDU,deliveryOrder,trafficClass,maxSDUSize,
+         maxBitrateUplink,maxBitrateDownlink,sduErrorRatio,residualBER,
+     trafficHandlingPriority,transferDelay,guaranteedBitRateUplink,
+     guaranteedBitRateDownlink,sourceStatisticsDescriptor,
+     signallingIndication,spare4,maxBitRateDownlinkExtended,
+     guaranteedBitRateDownlinkExtended,maxBitrateUplinkExtended,
+     guaranteedBitRateUplinkExtended)";        
+
+   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,         ext = '0'B;)";  
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+ };
+
+
+// 11.3.44
+type record GPRS_Timer
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ BIT5                   timer_Value,
+ BIT3                   unit_Value
+} with { 
+  variant "PRESENCE(iEI = '29'O)";
+   variant (lengthIndicator) 
+        "LENGTHTO (timer_Value,unit_Value)";
+   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,         ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+// 11.3.45
+type record Feature_bitmap
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ BIT1                   pFC,
+ BIT1                   cBL,
+ BIT1                   iNR,
+ BIT1                   lCS,
+ BIT1                   rIM,
+ BIT1                   pFC_FC,
+ BIT1                   enhancedRadioStatus,
+ BIT1                   mBMS
+} with { 
+  variant "PRESENCE(iEI = '3B'O)";
+  variant (lengthIndicator) "LENGTHTO (pFC,cBL,iNR,lCS,rIM,pFC_FC,
+                                             enhancedRadioStatus,mBMS)";
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                             length2,        ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.46
+type record Bucket_Full_Ratio
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   rate_of_the_Bucket 
+                        // could be changed to integer input if simpler
+} with { 
+  variant "PRESENCE(iEI = '3C'O)";
+   variant (lengthIndicator) "LENGTHTO (rate_of_the_Bucket)";
+   variant (lengthIndicator) "CROSSTAG( length1,       ext = '1'B;
+                                              length2,       ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+        }
+
+
+// 11.3.47
+type record Service_UTRAN_CCO
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ BIT3                   service_UTRAN_CCO_Value,
+ BIT2					service_E_UTRAN_CCO_Value,
+ BIT3                   spare
+} with { 
+  variant "PRESENCE(iEI = '3D'O)";
+  variant (lengthIndicator) "LENGTHTO (service_UTRAN_CCO_Value,service_E_UTRAN_CCO_Value,spare)";  
+   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// new IE for Wendy Xiang and Freeman Feng
+type record Service_Class_Indicator {
+  OCT1                    iEI,
+  BIT1                    ext,
+  LIN2_2a                 lengthIndicator,
+  OCT1                    serviceClassIndicator
+} with { 
+  variant "PRESENCE(iEI = '99'O)";
+  variant (lengthIndicator) "LENGTHTO (serviceClassIndicator)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+  length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.48
+type record NSEI_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT2                   nSEI 
+} with { 
+  variant "PRESENCE(iEI = '3E'O)";
+  variant (lengthIndicator) "LENGTHTO (nSEI)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.49
+type record RRLP_APDU_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            rRLP_Message
+} with { 
+  variant "PRESENCE(iEI = '3F'O)";
+  variant (lengthIndicator) "LENGTHTO (rRLP_Message)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+  //variant "PADDING(yes)";
+}
+
+
+// 11.3.50   
+// 24.008 -> 49.031
+type record LCS_QoS_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,  
+  BIT1                   vert,
+  BIT1                   vel,
+  BIT6                   spare1,  
+  BIT7                   horizontal_Accuracy,
+  BIT1                   hA_Indicator,         // 1: is specified  
+  BIT7                   vertical_Accuracy,
+  BIT1                   vA_Indicator,         // 1: is specified  
+  BIT6                   spare2,
+  BIT2                   response_Time_Category
+} with { 
+  variant "PRESENCE(iEI = '40'O)";
+  variant (lengthIndicator) "LENGTHTO (vert,vel,spare1,horizontal_Accuracy,hA_Indicator,vertical_Accuracy,vA_Indicator,spare2,response_Time_Category)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                         length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.51
+// 49.031
+type record LCS_Client_Type_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT4                   client_Subtype,
+  BIT4                   client_Category
+} with { 
+  variant "PRESENCE(iEI = '41'O)";
+  variant (lengthIndicator) "LENGTHTO (client_Subtype,client_Category)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.52
+// 49.031
+type record Requested_GPS_Assistance_Data_BSSGP
+{
+  OCT1                                  iEI,
+  BIT1                                  ext,
+  LIN2_2a                               lengthIndicator,
+  Requested_GPS_Assistance_Data_Value   requested_GPS_Assistance_Data   
+} with { 
+  variant "PRESENCE(iEI = '42'O)";
+  variant (lengthIndicator) "LENGTHTO (requested_GPS_Assistance_Data)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record Requested_GPS_Assistance_Data_Value
+{
+ OCT1                    bits_H_to_A,
+ OCT1                    bits_P_to_I,
+ SatelliteRelatedData    satelliteRelatedData
+}
+
+type record SatelliteRelatedData
+{
+  BIT6                       spare,
+  BIT10                      gPS_Week,    
+  OCT1                       gPS_Toe,
+  BIT4                       t_Toe_Limit,
+  integer                    nSAT,
+  SatID_and_IODE_List        satID_and_IODE_List              
+} with { variant(nSAT) "FIELDLENGTH(4)";
+  variant(nSAT) "LENGTHTO(satID_and_IODE_List)";
+  variant(nSAT) "UNIT(elements)";
+}
+
+type record of SatID_and_IODE SatID_and_IODE_List;
+
+type record SatID_and_IODE
+{
+  BIT6      satID,
+  BIT2      spare,
+  OCT1      iODE
+}
+
+// 11.3.53
+// 49.031
+type record Location_Type_BSSGP
+{
+  OCT1                   iEI,                 
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   location_Information,
+  OCT1                   positioning_Method optional
+} with { 
+  variant "PRESENCE(iEI = '43'O)";
+  variant (lengthIndicator) "LENGTHTO (location_Information,positioning_Method)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.54
+// 48.008 -> 23.03
+type record Location_Estimate_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            location   //  encoded location information
+} with { 
+  variant "PRESENCE(iEI = '44'O)";
+  variant (lengthIndicator) "LENGTHTO (location)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.55
+// 49.031
+type record Positioning_Data_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  PositioningDataValue   positioningDataValue  //  encoded location data
+} with { 
+  variant "PRESENCE(iEI = '45'O)";
+  variant (lengthIndicator) "LENGTHTO (positioningDataValue)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record PositioningDataValue
+{
+ BIT4                     positioningDataDiscriminator,
+ BIT4                     spare,
+ PositioningMethod_List   positioningMethod_List 
+}
+
+type record of PositioningMethodValue PositioningMethod_List;
+
+type record PositioningMethodValue
+{
+  BIT3     usage,
+  BIT5     positioningMethod
+}
+
+// 11.3.56
+type record Deciphering_Keys_BSSGP
+{
+  OCT1                            iEI,
+  BIT1                            ext,
+  LIN2_2a                         lengthIndicator,
+  DecipheringKeysValue            decipheringKeysValue   //  encoded deciphering keys data
+} with { 
+  variant "PRESENCE(iEI = '46'O)";
+  variant (lengthIndicator) "LENGTHTO (decipheringKeysValue)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record DecipheringKeysValue
+{
+ BIT1                     cipheringkeyFlag,
+ BIT7                     spare,
+ OCT7                     currentDecipheringKeyValue,
+ OCT7                     nextDecipheringKeyValue
+}
+ 
+// 11.3.57
+// 49.031
+type record LCS_Priority_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   priority_Value   // 0: highest, other: normal
+} with { 
+  variant "PRESENCE(iEI = '47'O)";
+  variant (lengthIndicator) "LENGTHTO (priority_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.58
+// 49.031
+type record LCS_Cause_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   cause_Value,
+  OCT1                   diagnostic_Value optional
+} with { 
+  variant "PRESENCE(iEI = '48'O)";
+  variant (lengthIndicator) "LENGTHTO (cause_Value,diagnostic_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.59
+// 24.008
+type record LCS_Capability_BSSGP
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   gPS_C,
+  BIT1                   gPS_B,
+  BIT1                   gPS_A,
+  BIT1                   oTD_B,
+  BIT1                   oTD_A,
+  BIT3                   spare
+} with { 
+  variant "PRESENCE(iEI = '49'O)";
+  variant (lengthIndicator) "LENGTHTO (gPS_C,gPS_B,gPS_A,oTD_B,oTD_A,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.60
+type record RRLP_Flags_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   flag1,
+  BIT7                   spare
+} with { 
+  variant "PRESENCE(iEI = '4A'O)";
+  variant (lengthIndicator) "LENGTHTO (flag1,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+//11.3.61
+type record RIM_Application_Identity
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   rIMApplicationIdentity
+} with { 
+  variant "PRESENCE(iEI = '4B'O)";
+   variant (lengthIndicator) "LENGTHTO (rIMApplicationIdentity)";        
+   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+//11.3.62
+type record RIM_Sequence_Number
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT4                   rIMSequenceNumber
+} with { 
+  variant "PRESENCE(iEI = '4C'O)";
+   variant (lengthIndicator) "LENGTHTO (rIMSequenceNumber)";        
+   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,         ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+// Table 11.3.62a.1
+type record RAN_Information_Request_RIM_Container
+{
+OCT1                         iEI,
+BIT1                         ext,
+LIN2_2a                      lengthIndicator,
+RIM_Application_Identity     rIM_Application_Identity,
+RIM_Sequence_Number          rIM_Sequence_Number,
+RIM_PDU_Indications          rIM_PDU_Indications,
+RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
+RAN_Information_Request_Application_Container  application_Container optional,
+SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity_TLV optional
+} with { 
+  variant "PRESENCE(iEI = '57'O)";
+  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
+           rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,
+           application_Container,sON_Transfer_Application_Identity_TLV)";        
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,        ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)"; 
+  variant (application_Container) 
+     "PRESENCE
+        (rIM_Application_Identity.rIMApplicationIdentity = '01'O,
+         rIM_Application_Identity.rIMApplicationIdentity = '02'O,
+         rIM_Application_Identity.rIMApplicationIdentity = '03'O)";                           
+   variant (application_Container) 
+     "CROSSTAG 
+         (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
+          si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
+          mBMS_data_channel,rIM_Application_Identity.rIMApplicationIdentity = '03'O;)"       
+};
+
+
+// Table 11.3.62a.2
+type record RAN_Information_RIM_Container
+{
+OCT1                         iEI,
+BIT1                         ext,
+LIN2_2a                      lengthIndicator,  
+RIM_Application_Identity     rIM_Application_Identity,
+RIM_Sequence_Number          rIM_Sequence_Number,
+RIM_PDU_Indications          rIM_PDU_Indications,
+RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
+ApplContainer_or_ApplErrContainer  applContainer_or_ApplErrContainer optional,
+SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
+}  with { 
+  variant "PRESENCE(iEI = '58'O)";
+      variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
+           rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,
+           applContainer_or_ApplErrContainer,sON_Transfer_Application_Identity)";        
+      variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                           length2,        ext = '0'B;)";
+      variant (ext,lengthIndicator) "FIELDORDER(msb)";
+      variant (applContainer_or_ApplErrContainer)
+       "PRESENCE
+           (rIM_Application_Identity.rIMApplicationIdentity = '01'O,
+            rIM_Application_Identity.rIMApplicationIdentity = '02'O,
+            rIM_Application_Identity.rIMApplicationIdentity = '03'O)";                
+      variant (applContainer_or_ApplErrContainer) 
+       "CROSSTAG
+            (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
+             si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
+             mBMS_data_channel,rIM_Application_Identity.rIMApplicationIdentity = '03'O;)" 
+};         
+
+
+type union ApplContainer_or_ApplErrContainer
+{
+  ApplContainer_or_ApplErrContainer_NACC nacc,
+  ApplContainer_or_ApplErrContainer_SI3 si3,
+  ApplContainer_or_ApplErrContainer_MBMS_data_channel mBMS_data_channel 
+}
+
+type union ApplContainer_or_ApplErrContainer_NACC
+{
+ RAN_Information_Application_Container_NACC   application_Container,
+ Application_Error_Container_NACC             application_Error_Container
+};
+
+type union ApplContainer_or_ApplErrContainer_SI3
+{
+ RAN_Information_Application_Container_SI3   application_Container,
+ Application_Error_Container_SI3             application_Error_Container
+};
+
+type union ApplContainer_or_ApplErrContainer_MBMS_data_channel
+{
+ RAN_Information_Application_Container_MBMS_data_channel   application_Container,
+ Application_Error_Container_MBMS_data_channel             application_Error_Container
+};
+
+// Table 11.3.62a.3
+type record RAN_Information_Ack_RIM_Container
+{
+OCT1                         iEI,
+BIT1                         ext,
+LIN2_2a                      lengthIndicator,  
+RIM_Application_Identity     rIM_Application_Identity,
+RIM_Sequence_Number          rIM_Sequence_Number,
+RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
+SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
+} with { 
+  variant "PRESENCE(iEI = '5A'O)";
+  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
+          rIM_Sequence_Number,rIM_Protocol_Version_Number,sON_Transfer_Application_Identity)";        
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,        ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+// Table 11.3.62a.4
+type record RAN_Information_Error_RIM_Container
+{
+OCT1                         iEI,
+BIT1                         ext,
+LIN2_2a                      lengthIndicator,  
+RIM_Application_Identity     rIM_Application_Identity,
+Cause_BSSGP                  rIM_cause,
+RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
+PDU_in_Error                 pDU_in_Error,
+SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
+} with { 
+  variant "PRESENCE(iEI = '5B'O)";
+  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
+         rIM_cause,rIM_Protocol_Version_Number,pDU_in_Error,sON_Transfer_Application_Identity)";        
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,        ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+// Table 11.3.62a.5
+type record RAN_Information_Application_Error_RIM_Container
+{
+OCT1                         iEI,
+BIT1                         ext,
+LIN2_2a                      lengthIndicator,    
+RIM_Application_Identity     rIM_Application_Identity,
+RIM_Sequence_Number          rIM_Sequence_Number,
+RIM_PDU_Indications          rIM_PDU_Indications,
+RIM_Protocol_Version_Number  rIM_Protocol_Version_Number optional,
+Application_Error_Container  application_Error_Container,
+SON_Transfer_Application_Identity_TLV  sON_Transfer_Application_Identity optional
+} with { 
+  variant "PRESENCE(iEI = '59'O)";
+  variant (lengthIndicator) "LENGTHTO (rIM_Application_Identity,
+    rIM_Sequence_Number,rIM_PDU_Indications,rIM_Protocol_Version_Number,  
+    application_Error_Container,sON_Transfer_Application_Identity)";        
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,        ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+  variant (application_Error_Container)
+   "CROSSTAG 
+      (nacc,rIM_Application_Identity.rIMApplicationIdentity = '01'O;
+       si3,rIM_Application_Identity.rIMApplicationIdentity = '02'O;
+       mBMS_data_channel,rIM_Application_Identity.rIMApplicationIdentity = '03'O;)" 
+};
+
+
+// 11.3.63.1
+type union RAN_Information_Request_Application_Container
+{
+RAN_Information_Request_Application_Container_NACC nacc,
+RAN_Information_Request_Application_Container_SI3 si3,  
+RAN_Information_Request_Application_Container_MBMS_data_channel mBMS_data_channel
+}
+
+
+//Table 11.3.63.1.1
+type record RAN_Information_Request_Application_Container_NACC
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ Cell_Identifier        reporting_Cell_Identifier
+} with { 
+  variant "PRESENCE(iEI = '4D'O)";
+  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                      length2,          ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+//Table 11.3.63.1.2
+type record RAN_Information_Request_Application_Container_SI3
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ Cell_Identifier        reporting_Cell_Identifier
+} with { 
+  variant "PRESENCE(iEI = '4D'O)";
+   variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
+   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,          ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+//Table 11.3.63.1.3
+type record RAN_Information_Request_Application_Container_MBMS_data_channel
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ Cell_Identifier        reporting_Cell_Identifier
+} with { 
+  variant "PRESENCE(iEI = '4D'O)";
+  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+//11.3.63.1.4
+type record RAN_Information_Request_Application_Container_SON_transfer
+{
+  OCT1                  iEI,
+  BIT1                  ext,
+  LIN2_2a               lengthIndicator,
+  Cell_Identifier       reporting_Cell_Identifier,
+  OCTN                  sON_Transfer_Request_Container
+} with { 
+  variant "PRESENCE(iEI = '4D'O)";
+  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier,sON_Transfer_Request_Container)";     
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+//11.3.63.1.5
+type record RAN_Information_Request_Application_Container_UTRA_SI
+{
+  OCT1                  iEI,
+  BIT1                  ext,
+  LIN2_2a               lengthIndicator,
+  Cell_Identifier       reporting_Cell_Identifier
+} with { 
+  variant "PRESENCE(iEI = '4D'O)";
+  variant (lengthIndicator) "LENGTHTO (reporting_Cell_Identifier)";     
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+//Table 11.3.63.2.1
+type record RAN_Information_Application_Container_NACC
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ Cell_Identifier        reporting_Cell_Identifier,
+ BIT1                   typeBit,
+ BIT7                   number_of_SI_PSI,
+ octetstring            sI_PSI
+} with { 
+  variant "PRESENCE(iEI = '4E'O)";
+  variant (lengthIndicator) 
+    "LENGTHTO (reporting_Cell_Identifier,typeBit,number_of_SI_PSI,sI_PSI)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};  
+
+//Table 11.3.63.2.2
+type record RAN_Information_Application_Container_SI3
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ Cell_Identifier        reporting_Cell_Identifier,
+ SI3                    sI3
+} with { 
+  variant "PRESENCE(iEI = '4E'O)";
+  variant (lengthIndicator) 
+    "LENGTHTO (reporting_Cell_Identifier,sI3)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}; 
+
+//44.018 9.1.35
+type record SI3
+{
+ OCT1                              sI3MessageType,    //'1B'O
+ OCT2                              cellIdentity,               //10.5.1.1 -> 24.008 
+ LocationAreaIdentification        locationAreaIdentification, //10.5.1.3 -> 24.008
+ ControlChannelDescription         controlChannelDescription,  //10.5.2.11
+ CellOptions                       cellOptions,                //10.5.2.3
+ CellSelectionParameters           cellSelectionParameters,    //10.5.2.4
+ RACHControlParameters             rACHControlParameters,      //10.5.2.29
+ OCT4                              sI3RestOctets               //10.5.2.34, bit encoded
+}
+
+type record LocationAreaIdentification
+{
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2,
+  OCT2               lac
+}
+
+type record ControlChannelDescription
+{
+ BIT3          cCCH_Conf,
+ BIT3          bS_AG_BLKS_RES,
+ BIT1          aTT,
+ BIT1          mSCR,
+ BIT3          bS_PA_MFRMS,
+ BIT2          spare1,   //'00'B
+ BIT2          cBQ3,
+ BIT1          spare2,  //'0'B
+ OCT1          t3212
+}
+
+type record CellOptions
+{
+ BIT4          radioLinkTimeout,
+ BIT2          dTX1,
+ BIT1          pWRC,
+ BIT1          dtx2
+}
+
+type record CellSelectionParameters
+{
+ BIT5          mS_TXPWR_MAX_CCH,
+ BIT3          cellReselectHysterisis,
+ BIT6          rXLEV_Access_Min,
+ BIT1          nECI,
+ BIT1          aCS
+}
+
+type record RACHControlParameters 
+{
+ BIT1          rE,
+ BIT1          cellBarrAccess,
+ BIT4          tX_Integer,
+ BIT2          maxRetrans,
+ OCT1          aC_15_to_8,
+ OCT1          aC_7_to_0    
+}
+
+//Table 11.3.63.2.3
+type record RAN_Information_Application_Container_MBMS_data_channel
+{
+ OCT1                      iEI,
+ BIT1                      ext,
+ LIN2_2a                   lengthIndicator,
+ Cell_Identifier           reporting_Cell_Identifier,
+ octetstring               mBMS_data_channel_report  //bit encoded
+} with { 
+  variant "PRESENCE(iEI = '4E'O)";
+  variant (lengthIndicator) 
+    "LENGTHTO (reporting_Cell_Identifier,mBMS_data_channel_report)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+//11.3.63.2.4
+type record RAN_Information_Application_Container_SON_transfer
+{
+  OCT1                     iEI,
+  BIT1                     ext,
+  LIN2_2a                  lengthIndicator,
+  BIT4                     rAT_Discriminator,
+  BIT4                     spare,
+  Cell_Identifier          reporting_Cell_Identifier,
+  OCTN                     sON_Transfer_Response_Container
+} with { 
+  variant "PRESENCE(iEI = '4E'O)";
+  variant (lengthIndicator) 
+    "LENGTHTO (rAT_Discriminator,spare,reporting_Cell_Identifier,sON_Transfer_Response_Container)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+//11.3.63.2.5
+type record RAN_Information_Application_Container_UTRA_SI
+{
+  OCT1                     iEI,
+  BIT1                     ext,
+  LIN2_2a                  lengthIndicator,
+  Cell_Identifier          reporting_Cell_Identifier,
+  OCTN                     uTRA_SI_Container
+} with { 
+  variant "PRESENCE(iEI = '4E'O)";
+  variant (lengthIndicator) 
+    "LENGTHTO (reporting_Cell_Identifier,uTRA_SI_Container)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+// 11.3.64
+type union Application_Error_Container
+{
+ Application_Error_Container_NACC               nacc,
+ Application_Error_Container_SI3                si3,
+ Application_Error_Container_MBMS_data_channel  mBMS_data_channel 
+} 
+      
+//11.3.64.1 
+type record Application_Error_Container_NACC
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   nACC_cause,
+ Application_Container_IE_NACC  erroneousApplicationContainer
+} with { 
+  variant "PRESENCE(iEI = '56'O)";
+  variant (lengthIndicator)
+    "LENGTHTO (nACC_cause,erroneousApplicationContainer)"; 
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+ variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+       
+type union Application_Container_IE_NACC
+{
+  RAN_Information_Request_Application_Container_NACC 
+                        rAN_Information_Request_Application_Container,
+            
+  RAN_Information_Application_Container_NACC    
+                        rAN_Information_Application_Container
+};
+     
+//11.3.64.2 
+type record Application_Error_Container_SI3
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   sI3_cause,
+ Application_Container_IE_SI3  erroneousApplicationContainer
+} with { 
+  variant "PRESENCE(iEI = '56'O)";
+  variant (lengthIndicator)
+    "LENGTHTO (sI3_cause,erroneousApplicationContainer)"; 
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+ variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};     
+
+type union Application_Container_IE_SI3
+{
+  RAN_Information_Request_Application_Container_SI3 
+                        rAN_Information_Request_Application_Container,
+            
+  RAN_Information_Application_Container_SI3    
+                        rAN_Information_Application_Container
+};
+
+
+//11.3.64.3 
+type record Application_Error_Container_MBMS_data_channel
+{
+ OCT1                                        iEI,
+ BIT1                                        ext,
+ LIN2_2a                                     lengthIndicator,
+ OCT1                                        mBMS_data_channel_cause,
+ Application_Container_IE_MBMS_data_channel  erroneousApplicationContainer
+} with { 
+  variant "PRESENCE(iEI = '56'O)";
+  variant (lengthIndicator)
+    "LENGTHTO (mBMS_data_channel_cause,erroneousApplicationContainer)"; 
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+ variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};     
+
+type union Application_Container_IE_MBMS_data_channel
+{
+  RAN_Information_Request_Application_Container_MBMS_data_channel 
+                        rAN_Information_Request_Application_Container,
+            
+  RAN_Information_Application_Container_MBMS_data_channel    
+                        rAN_Information_Application_Container
+};
+
+//11.3.64.4
+type record Application_Error_Container_SON_transfer
+{
+ OCT1                                        iEI,
+ BIT1                                        ext,
+ LIN2_2a                                     lengthIndicator,
+ OCT1                                        sON_transfer_cause,
+ Application_Container_IE_SON_transfer       erroneousApplicationContainer
+};
+
+type union Application_Container_IE_SON_transfer
+{
+  RAN_Information_Request_Application_Container_SON_transfer
+                        rAN_Information_Request_Application_Container,
+  RAN_Information_Application_Container_SON_transfer
+                        rAN_Information_Application_Container
+};
+
+//11.3.64.5
+type record Application_Error_Container_UTRA_SI
+{
+ OCT1                                        iEI,
+ BIT1                                        ext,
+ LIN2_2a                                     lengthIndicator,
+ OCT1                                        uTRA_SI_cause,
+ Application_Container_IE_UTRA_SI            erroneousApplicationContainer
+};
+
+type union Application_Container_IE_UTRA_SI
+{
+  RAN_Information_Request_Application_Container_UTRA_SI
+                        rAN_Information_Request_Application_Container,
+  RAN_Information_Application_Container_UTRA_SI
+                        rAN_Information_Application_Container
+};
+
+//11.3.65
+type record RIM_PDU_Indications
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ BIT1                   ack,
+ BIT3                   pDU_Type_Extension,
+ BIT4                   reserved
+} with { 
+  variant "PRESENCE(iEI = '4F'O)";
+  variant (lengthIndicator) "LENGTHTO (ack,pDU_Type_Extension,reserved)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+
+//11.3.67
+type record RIM_Protocol_Version_Number
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ OCT1                   rIMProtocolVersionNumber
+} with {
+   variant "PRESENCE(iEI = '55'O)";
+   variant (lengthIndicator) "LENGTHTO (rIMProtocolVersionNumber)";   
+   variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                              length2,        ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+// 11.3.68
+type record PFC_flow_control_parameters
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ integer                number_of_PFC (0..11),
+ PFCs                   pFCs
+} with {
+  variant "PRESENCE(iEI = '52'O)";
+  variant (lengthIndicator) "LENGTHTO (number_of_PFC,pFCs)"; 
+  variant (number_of_PFC) "LENGTHTO (pFCs)";
+  variant (number_of_PFC) "UNIT(elements)"
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+type record length(0..11) of  PFC PFCs;
+
+type record PFC
+{
+BIT7                    pFI_Value,
+BIT1                    spare,  //  '0'B according to 10.5.6.11 of 24.008
+OCT2                    bmax_PFC,
+OCT2                    r_PFC,
+OCT1                    b_PFC
+};
+
+// 11.3.69
+type record Global_CN_Id_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  Global_CN_Id_Value     global_CN_Id   //  encoded Global CN-Id
+} with { 
+  variant "PRESENCE(iEI = '53'O)";
+  variant (lengthIndicator) "LENGTHTO (global_CN_Id)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record Global_CN_Id_Value
+{
+ HEX1                    mccDigit1,
+ HEX1                    mccDigit2,
+ HEX1                    mccDigit3,
+ HEX1                    mncDigit3,
+ HEX1                    mncDigit1,
+ HEX1                    mncDigit2, 
+ OCT2                    cN_Id
+}
+
+
+// 11.3.70
+type record RIM_Routing_Information
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ HEX1                   rIMRoutingAddressDiscriminator,
+ HEX1                   spare,
+ RIM_Routing_Address    rIM_Routing_Address 
+}  with { 
+  variant "PRESENCE(iEI = '54'O)";
+  variant (lengthIndicator) 
+    "LENGTHTO (rIMRoutingAddressDiscriminator,spare,rIM_Routing_Address)"; 
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+  variant (rIM_Routing_Address) 
+    "CROSSTAG (cell_Identifier, rIMRoutingAddressDiscriminator = '0'H;
+               globalRNCID,     rIMRoutingAddressDiscriminator = '1'H;
+               eNB_Identifier,  rIMRoutingAddressDiscriminator = '2'H;
+               eHRPD_SectorID,  rIMRoutingAddressDiscriminator = '3'H
+               )" 
+};
+
+type union RIM_Routing_Address
+{
+  Cell_Identifier_V   cell_Identifier, 
+  GlobalRNC_ID_BSSGP  globalRNCID,
+  ENB_Identifier_V    eNB_Identifier,
+  octetstring         eHRPD_SectorID
+}
+
+type record GlobalRNC_ID_BSSGP
+{
+ HEX1                   mccDigit1,
+ HEX1                   mccDigit2,
+ HEX1                   mccDigit3,
+ HEX1                   mncDigit3,
+ HEX1                   mncDigit1,
+ HEX1                   mncDigit2,
+ OCT2                   lac,
+ OCT1                   rac, 
+ HEX1                   spare,
+ integer                rNC_ID
+}  with { 
+    variant (spare,rNC_ID) "FIELDORDER(msb)";
+    variant (rNC_ID) "BYTEORDER(last)";  
+    variant (rNC_ID) "FIELDLENGTH(12)";
+}
+
+type record  ENB_Identifier_V {
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2,
+  OCT2               tac,  
+  octetstring       globaleNBID
+}
+
+
+// 11.3.71 
+type record MBMS_Session_Identity
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ OCT1                    mBMS_Session_Identifier_Value
+} with { 
+  variant "PRESENCE(iEI = '5D'O)";
+  variant (lengthIndicator) "LENGTHTO (mBMS_Session_Identifier_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+
+// 11.3.72 
+// 29.061 
+
+type record MBMS_Session_Duration
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ octetstring            mBMS_Session_Duration_Value
+} with { 
+  variant "PRESENCE(iEI = '5E'O)";
+  variant (lengthIndicator) "LENGTHTO (mBMS_Session_Duration_Value)";  
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,         ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+
+// 11.3.73 
+type record MBMS_Service_Area_Identity_List
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ octetstring            mBMS_Service_Area_Identity_List_Value       
+} with { 
+  variant "PRESENCE(iEI = '5F'O)";
+  variant (lengthIndicator) 
+             "LENGTHTO (mBMS_Service_Area_Identity_List_Value)";        
+  variant (lengthIndicator) "CROSSTAG( length1,       ext = '1'B;
+                                       length2,       ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+
+// 11.3.74
+type record MBMS_Response
+{
+ OCT1                   iEI,
+ BIT1                   ext,
+ LIN2_2a                lengthIndicator,
+ HEX1                   causeValue,
+ HEX1                   spare
+} with { 
+  variant "PRESENCE(iEI = '60'O)";
+  variant (lengthIndicator) "LENGTHTO (causeValue,spare)";        
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,        ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+
+
+// 11.3.75
+type record MBMS_Routing_Area_List
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ HEX1                    spare,
+ HEX1                    number_of_Routing_Area_Identifications, 
+ octetstring             routing_Area_Identifications optional 
+
+} with { 
+  variant "PRESENCE(iEI = '61'O)";
+   variant (lengthIndicator) 
+     "LENGTHTO (spare,number_of_Routing_Area_Identifications,
+      routing_Area_Identifications)";     
+   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                        length2,         ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";        
+};
+
+
+// 11.3.76
+type record MBMS_Session_Information
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ BIT1                    bCMC,
+ BIT7                    spare
+} with { 
+  variant "PRESENCE(iEI = '62'O)";
+  variant (lengthIndicator) "LENGTHTO (bCMC, spare)";        
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,        ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+
+//11.3.77 
+// 24.008 10.5.6.13
+type record TMGI_BSSGP
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ OCT3                    mBMS_Service_ID,
+ HEX1                    mccDigit1,
+ HEX1                    mccDigit2,
+ HEX1                    mccDigit3,
+ HEX1                    mncDigit3,
+ HEX1                    mncDigit1,
+ HEX1                    mncDigit2 
+} with { 
+  variant "PRESENCE(iEI = '5C'O)";
+   variant (lengthIndicator) "LENGTHTO
+         (mBMS_Service_ID,mccDigit1,mccDigit2,mccDigit3,mncDigit3,
+      mncDigit1,mncDigit2)";        
+   variant (lengthIndicator) "CROSSTAG( length1,         ext = '1'B;
+                                        length2,         ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};        
+       
+// 11.3.78 MBMS Stop Cause
+type record MBMS_Stop_Cause
+{
+ OCT1                    iEI,
+ BIT1                    ext,
+ LIN2_2a                 lengthIndicator,
+ HEX1                    causeValue,
+ HEX1                    spare
+} with { 
+  variant "PRESENCE(iEI = '63'O)";
+  variant (lengthIndicator) "LENGTHTO (causeValue, spare)";        
+  variant (lengthIndicator) "CROSSTAG( length1,        ext = '1'B;
+                                       length2,        ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+};
+ 
+// 11.3.79
+type record Source_BSS_to_Target_BSS_Transparent_Container_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  Source_BSS_to_Target_BSS_Transparent_Container_Contents
+      source_BSS_to_Target_BSS_Transparent_Container_Contents
+} with { 
+  variant "PRESENCE(iEI = '64'O)";
+  variant (lengthIndicator) "LENGTHTO (source_BSS_to_Target_BSS_Transparent_Container_Contents)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record Source_BSS_to_Target_BSS_Transparent_Container_Contents
+{
+  MS_Radio_Access_Capability        mS_Radio_Access_Capability,
+  Inter_RAT_Handover_Info_BSSGP     inter_RAT_Handover_Info optional,
+  Page_Mode_BSSGP                   page_Mode_BSSGP optional,
+  Container_ID_BSSGP                container_ID optional,
+  Global_TFI_BSSGP                  global_TFI optional,
+  PS_HandoverIndications            pS_HandoverIndications optional,
+  CS_Indication                     cS_Indication optional,
+  E_UTRAN_Inter_RAT_Handover_Info	e_UTRAN_Inter_RAT_Handover_Info optional,
+  IRAT_Measurement_Configuration    iRAT_Measurement_Configuration optional,
+  Source_Cell_ID                    source_Cell_ID optional,
+  IRAT_Measurement_Configuration_Extended_eARFCNs iRAT_Measurement_Configuration_Extended_eARFCNs optional
+};
+
+// 11.3.80
+type record Target_BSS_to_Source_BSS_Transparent_Container
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  Target_BSS_to_Source_BSS_Transparent_Container_Contents
+                         target_BSS_to_Source_BSS_Transparent_Container_Contents
+} with { 
+  variant "PRESENCE(iEI = '65'O)";
+  variant (lengthIndicator) "LENGTHTO (target_BSS_to_Source_BSS_Transparent_Container_Contents)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+//Note: Only  PS_Handover_Command_BSSGP or DTM_Handover_Command is present
+type record Target_BSS_to_Source_BSS_Transparent_Container_Contents
+{
+  PS_Handover_Command_BSSGP  pS_Handover_Command optional,
+  SI_PSI_Container           sI_PSI_Container optional,    //NEW  
+  DTM_Handover_Command       dTM_Handover_Command optional    //NEW  
+}
+
+// 11.3.81
+type record NAS_container_for_PS_Handover
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  NAS_Container_for_PS_HO            nAS_Container_for_PS_HO
+} with { 
+  variant "PRESENCE(iEI = '66'O)";
+  variant (lengthIndicator) "LENGTHTO (nAS_Container_for_PS_HO)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+//24.008 10.5.1.14
+type record NAS_Container_for_PS_HO
+{
+  BIT3          typeOfCipheringAlgorithm,
+  BIT1          spare1,
+  BIT1          oldXID,
+  BIT3          spare2,
+  OCT4          iOV_UI
+}
+
+// 11.3.82
+type record PFCs_to_be_set_up_list
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  integer                number_of_PFCs (1..11),   // note: 0 and 12 .. 255 are reserved!!!
+  Multiple_PFCs_BSSGP    pFCs
+} with { 
+  variant "PRESENCE(iEI = '67'O)";
+  variant (lengthIndicator) "LENGTHTO (number_of_PFCs,pFCs)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+  variant (number_of_PFCs) "UNIT(elements),LENGTHTO(pFCs),FIELDORDER(msb),FIELDLENGTH(8)";
+}
+
+type record Single_PFC_BSSGP
+{
+  PFI                               pFI,
+  GPRS_Timer                        pFT,
+  ABQP                              aBQP,
+  Priority_BSSGP                    allocation_Retention_Priority optional,
+  GPRS_Timer                        t10 optional
+}
+
+type record length (1..11) of Single_PFC_BSSGP Multiple_PFCs_BSSGP;
+
+
+// 11.3.83
+type record List_of_set_up_PFCs_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  integer                number_of_PFCs (0..11),   // note: 12 .. 255 are reserved!!!
+  Multiple_PFIs_BSSGP    pFIs
+} with { 
+  variant "PRESENCE(iEI = '68'O)";
+  variant (lengthIndicator) "LENGTHTO (number_of_PFCs,pFIs)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+  variant (number_of_PFCs) "UNIT(elements),LENGTHTO(pFIs),FIELDORDER(msb),FIELDLENGTH(8)";
+}
+
+type record Single_PFI_BSSGP
+{
+  BIT7  pFI_Value,
+  BIT1  spare
+}
+
+type record length (0..11) of Single_PFI_BSSGP Multiple_PFIs_BSSGP;
+
+
+// 11.3.84 Extended Feature Bitmap
+type record Extended_Feature_Bitmap
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   pS_Handover,
+  BIT1                   gigabitInterface,
+  BIT1                   mOCN,
+  BIT1                   cS_PS_Coordination_Enhancements,
+  BIT4                   spare
+} with { 
+  variant "PRESENCE(iEI = '69'O)";
+  variant (lengthIndicator) "LENGTHTO (pS_Handover,gigabitInterface,mOCN,cS_PS_Coordination_Enhancements,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.85
+type record Source_to_Target_Transparent_Container
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring          source_to_Target_Transparent_Container_Contents //RANAP ASN.1 PER
+} with { 
+  variant "PRESENCE(iEI = '6A'O)";
+  variant (lengthIndicator) "LENGTHTO (source_to_Target_Transparent_Container_Contents)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.86
+type record Target_to_Source_Transparent_Container
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring          handover_to_UTRAN_or_Radio_Bearer_Reconfiguration_radio_interface_message //ASN.1
+} with { 
+  variant "PRESENCE(iEI = '6B'O)";
+  variant (lengthIndicator) "LENGTHTO (handover_to_UTRAN_or_Radio_Bearer_Reconfiguration_radio_interface_message)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+
+// 11.3.87
+type record RNC_Identifier_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  HEX1                   mccDigit1,
+  HEX1                   mccDigit2,
+  HEX1                   mccDigit3,
+  HEX1                   mncDigit3,
+  HEX1                   mncDigit1,
+  HEX1                   mncDigit2,
+  OCT2                   lac,
+  OCT1                   rac,    
+  OCT2               	 rNC_ID
+} with { 
+  variant "PRESENCE(iEI = '6C'O)";
+  variant (lengthIndicator) "LENGTHTO (mccDigit1, mccDigit2, mccDigit3, mncDigit3, mncDigit1, mncDigit2,
+                                        lac, rac, rNC_ID)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+ 
+// 11.3.88
+type record Page_Mode_BSSGP
+{
+  OCT1                            iEI,
+  BIT1                            ext,
+  LIN2_2a                         lengthIndicator,
+  BIT2                            page_mode,  // specified in 3GPP TS 44.060
+  BIT6                            reserved
+} with { 
+  variant "PRESENCE(iEI = '6D'O)";
+  variant (lengthIndicator) "LENGTHTO (page_mode,reserved)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+  
+// 11.3.89
+type record Container_ID_BSSGP
+{
+  OCT1                            iEI,
+  BIT1                            ext,
+  LIN2_2a                         lengthIndicator,
+  BIT2                            container_ID,   // specified in 3GPP TS 44.060
+  BIT6                            reserved
+} with { 
+  variant "PRESENCE(iEI = '6E'O)";
+  variant (lengthIndicator) "LENGTHTO (container_ID,reserved)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.90
+type record Global_TFI_BSSGP
+{
+  OCT1                            iEI,
+  BIT1                            ext,
+  LIN2_2a                         lengthIndicator,
+  BIT6                            global_TFI,   // specified in 3GPP TS 44.060
+  BIT2                            reserved  
+} with {
+  variant "PRESENCE(iEI = '6F'O)";
+  variant (lengthIndicator) "LENGTHTO (global_TFI,reserved)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.91
+type record IMEI_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  IMEI_Value             iMEI 
+} with { 
+  variant "PRESENCE(iEI = '70'O)";
+  variant (lengthIndicator) "LENGTHTO (iMEI)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record IMEI_Value
+{
+ BIT3               typeOfIdentity,
+ BIT1               oddevenIndicator,
+ hexstring          digits  length(15)
+}
+
+
+// 11.3.92 Time to MBMS Data Transfer
+type record Time_To_MBMS_Data_Transfer
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   valuePart
+} with { 
+  variant "PRESENCE(iEI = '71'O)";
+  variant (lengthIndicator) "LENGTHTO (valuePart)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.93 MBMS Session Repetition Number
+type record MBMS_Session_Repetition_Number
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            repetitionNumber
+} with { 
+  variant "PRESENCE(iEI = '72'O)";
+  variant (lengthIndicator) "LENGTHTO (repetitionNumber)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.94
+type record Inter_RAT_Handover_Info_BSSGP
+{
+  OCT1                            iEI,
+  BIT1                            ext,
+  LIN2_2a                         lengthIndicator,
+  octetstring                     inter_RAT_Handover_Information //as specified in 3GPP TS 25.331
+} with { 
+  variant "PRESENCE(iEI = '73'O)";
+  variant (lengthIndicator) "LENGTHTO (inter_RAT_Handover_Information)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.95
+type record PS_Handover_Command_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            pS_Handover_Command_radio_interface_message
+} with { 
+  variant "PRESENCE(iEI = '74'O)";
+  variant (lengthIndicator) "LENGTHTO (pS_Handover_Command_radio_interface_message)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.95a
+type record PS_HandoverIndications
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   sI_PSI,
+  BIT2                   dMLC_Carriers,
+  BIT5                   spare
+} with { 
+  variant "PRESENCE(iEI = '75'O)";
+  variant (lengthIndicator) "LENGTHTO (sI_PSI,dMLC_Carriers,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+// 11.3.95b
+type record  SI_PSI_Container
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   typeField, 
+  SI_PSI_ContainerValue  sI_PSI_ContainerValue
+} with { 
+   variant "PRESENCE(iEI = '76'O)";  
+   variant (lengthIndicator) "LENGTHTO (typeField,sI_PSI_ContainerValue)";
+   variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                        length2,    ext = '0'B;)";
+   variant (ext,lengthIndicator) "FIELDORDER(msb)";
+   variant (sI_PSI_ContainerValue) "CROSSTAG 
+      (
+       sI_message_Container,          typeField ='0'B;
+       pSI_message_Container,         typeField ='1'B;
+      )"; 
+ };   
+
+type union SI_PSI_ContainerValue
+{
+  SI_message_Container   sI_message_Container,
+  PSI_message_Container  pSI_message_Container
+}
+
+type record SI_message_Container 
+{
+  integer           number_of_SI,
+  SI_message_List   sI_message_List
+} with { 
+  variant (number_of_SI) "UNIT(elements),LENGTHTO(sI_message_List),FIELDORDER(msb),FIELDLENGTH(7)";
+}
+
+type record PSI_message_Container
+{
+  integer            number_of_PSI,
+  PSI_message_List   pSI_message_List
+} with { 
+   variant (number_of_PSI) "UNIT(elements),LENGTHTO(pSI_message_List),FIELDORDER(msb),FIELDLENGTH(7)";
+}
+
+type record of SI_message  SI_message_List;
+
+type record of PSI_message  PSI_message_List;
+
+type octetstring SI_message length (21);
+
+type octetstring PSI_message length (22);
+
+
+// 11.3.95c  48.008 CR 240
+type record Active_PFCs_List_BSSGP
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  integer                number_of_PFCs (0..11),   // note: 12 .. 255 are reserved!!!
+  Multiple_PFIs_BSSGP    pFIs
+} with {
+  variant "PRESENCE(iEI = '77'O)";
+  variant (lengthIndicator) "LENGTHTO (number_of_PFCs,pFIs)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+  variant (number_of_PFCs) "UNIT(elements),LENGTHTO(pFIs),FIELDORDER(msb),FIELDLENGTH(8)";
+}
+
+//11.3.96
+type record VelocityData
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            velocityDataValue // 23.032
+}with { 
+  variant "PRESENCE(iEI = '78'O)";
+  variant (lengthIndicator) "LENGTHTO (velocityDataValue)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+//11.3.97
+type record DTM_Handover_Command
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  octetstring            dTM_HandoverCommandValue // 44.060
+} with { 
+  variant "PRESENCE(iEI = '79'O)";
+  variant (lengthIndicator) "LENGTHTO (dTM_HandoverCommandValue)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+  
+//11.3.98
+type record CS_Indication 
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   cS_IndicationContents  //48.008
+}  with { 
+  variant "PRESENCE(iEI = '7A'O)";
+  variant (lengthIndicator) "LENGTHTO (cS_IndicationContents)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.99
+type record Requested_GANSS_Assistance_Data
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,  
+  octetstring            requested_GANSS_Assistance_Data_Value   //49.031
+} with { 
+  variant "PRESENCE(iEI = '7B'O)";
+  variant (lengthIndicator) "LENGTHTO (requested_GANSS_Assistance_Data_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.100
+type record GANSS_Location_Type
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,  
+  BIT1                   galileo, 
+  BIT7                   spare                                        
+} with { 
+  variant "PRESENCE(iEI = '7C'O)";
+  variant (lengthIndicator) "LENGTHTO (galileo,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+// 11.3.101
+//49.031
+type record GANSS_Positioning_Data
+{  
+  OCT1                         iEI,
+  BIT1                         ext,
+  LIN2_2a                      lengthIndicator,
+  GANSS_Positioning_DataList   gANSS_Positioning_DataList                                        
+} with { 
+  variant "PRESENCE(iEI = '7D'O)";
+  variant (lengthIndicator) "LENGTHTO (gANSS_Positioning_DataList)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record of GANSS_Positioning_DataValue GANSS_Positioning_DataList
+
+type record GANSS_Positioning_DataValue
+{
+  BIT3                   usage,
+  BIT3                   gANSS_ID,
+  BIT2                   method    
+}
+
+//11.3.102
+type record Flow_Control_Granularity
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT2                   granularity,
+  BIT6                   reserved                                           
+} with { 
+  variant "PRESENCE(iEI = '7E'O)";
+  variant (lengthIndicator) "LENGTHTO (granularity,reserved)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+//11.3.103
+type record ENB_Identifier
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  HEX1					 mccDigit1,
+  HEX1					 mccDigit2,
+  HEX1					 mccDigit3,
+  HEX1					 mncDigit3,
+  HEX1					 mncDigit1,
+  HEX1					 mncDigit2,
+  OCT2					 tac,
+  OCTN					 globalEnbID  
+                                      
+} with { 
+  variant "PRESENCE(iEI = '7F'O)";
+  variant (lengthIndicator) "LENGTHTO (mccDigit1, mccDigit2, mccDigit3, mncDigit3, mncDigit1,
+   										mncDigit2, tac, globalEnbID)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+//11.3.104
+type record E_UTRAN_Inter_RAT_Handover_Info
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCTN					 ue_EUTRA_Capability
+                                      
+} with { 
+  variant "PRESENCE(iEI = '80'O)";		
+  variant (lengthIndicator) "LENGTHTO (ue_EUTRA_Capability)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+
+//11.3.105
+type record Subscriber_Profile_ID_For_RAT_Priority
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT8					 profile_ID                                                    
+} with { 
+  variant "PRESENCE(iEI = '81'O)";
+  variant (lengthIndicator) "LENGTHTO (profile_ID)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+//11.3.106
+type record Request_For_Inter_RAT_Handover_Info
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   interRATHandoverInfoRequest,
+  BIT1					 eUTRANinterRATHandoverInfoRequest,
+  BIT6                   spare                                           
+} with { 
+  variant "PRESENCE(iEI = '82'O)"; 
+  variant (lengthIndicator) "LENGTHTO (interRATHandoverInfoRequest,eUTRANinterRATHandoverInfoRequest,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+//11.3.107
+type record Reliable_Inter_RAT_Handover_Info
+{  
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   reliableInterRATHandoverInfoIndicator,
+  BIT7                   spare                                           
+} with { 
+  variant "PRESENCE(iEI = '83'O)";	
+  variant (lengthIndicator) "LENGTHTO (reliableInterRATHandoverInfoIndicator,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+//11.3.108
+type record SON_Transfer_Application_Identity_TLV
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCTN                   sON_Transfer_Application_Identity  //3GPP TS 36.413 [36]
+} with {
+  variant "PRESENCE(iEI = '84'O)";
+  variant (lengthIndicator) "LENGTHTO (sON_Transfer_Application_Identity)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+//11.3.109
+type record CSG_Identifier_TLV
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  CSG_Identity           cSG_Identity,  //3GPP TS 23.003, bits 4 to 8 of octet 6 are spare
+  BIT1                   cell_Acces_Mode,
+  BIT7                   spare
+} with {
+  variant "PRESENCE(iEI = '85'O)";
+  variant (lengthIndicator) "LENGTHTO (cSG_Identity,cell_Acces_Mode,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+type record CSG_Identity
+{
+  OCT3					cSG_Id24, 
+  BIT3					cSG_Id3,
+  BIT5					spare // '0'B
+};
+
+//11.3.110
+type record Tracking_Area_Code_TLV
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT3                   valueField  //3GPP TS 24.301
+} with {
+  variant "PRESENCE(iEI = '86'O)";
+  variant (lengthIndicator) "LENGTHTO (valueField)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";
+}
+
+//11.3.111
+type record Redirect_Attempt_Flag
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   spare  
+} with {
+  variant "PRESENCE(iEI = '87'O)";
+  variant (lengthIndicator) "LENGTHTO (spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.112
+type record Redirection_Indication
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator, 
+  BIT8                   reroute_Reject_Cause_value
+} with {
+  variant "PRESENCE(iEI = '88'O)";
+  variant (lengthIndicator) "LENGTHTO (reroute_Reject_Cause_value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				       				       
+}
+
+//11.3.113
+type record Redirection_Completed
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,   
+  BIT8                   outcome_value
+} with {
+  variant "PRESENCE(iEI = '89'O)";
+  variant (lengthIndicator) "LENGTHTO (outcome_value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)";
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				                
+}
+ 
+//11.3.114
+type record Unconfirmed_Send_State_Variable
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator, 
+  BIT7                   spare,           
+  integer                vU  
+} with {
+  variant "PRESENCE(iEI = '8A'O)";
+  variant (lengthIndicator) "LENGTHTO (spare,vU)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				       
+  variant (vU) "FIELDLENGTH(9)";
+  variant (vU) "BYTEORDER(last)";				       
+  variant (spare,vU) "FIELDORDER(msb)";				       				       
+}
+
+//11.3.115
+type record IRAT_Measurement_Configuration
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator, 
+  INT6b                  reportingThreshold,
+  BIT1                   repQuant,
+  BIT1                   spare,
+  INT1                   measurementDuration,   
+  Measurement_List       measurement_List
+} with {
+  variant "PRESENCE(iEI = '8B'O)";
+  variant (lengthIndicator) "LENGTHTO (reportingThreshold,repQuant,spare,measurementDuration,measurement_List)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				       
+}				      
+				      				      
+type record Measurement
+{
+  LIN2_BO_LAST           e_ARFCN,
+  BIT3                   measurementBandwidth,
+  BIT5                   spare
+}
+
+type record of Measurement Measurement_List;
+				       
+type record RNC_Id_with_Transparent_Container_BSSGP 
+{
+  RNC_Identifier_BSSGP  target_RNC_Identifier,
+  Source_to_Target_Transparent_Container
+                               source_to_Target_Transparent_Container
+}
+
+type union Cell_or_RNC_Id_with_Transparent_Container_BSSGP
+{
+  Cell_Id_with_Transparent_Container_BSSGP  cell_Id_with_Transparent_Container,
+  RNC_Id_with_Transparent_Container_BSSGP   rnc_Id_with_Transparent_Container
+}
+
+type record Cell_Id_with_Transparent_Container_BSSGP
+{
+  Cell_Identifier                target_Cell_Identifier,
+  Source_BSS_to_Target_BSS_Transparent_Container_BSSGP
+      source_BSS_to_Target_BSS_Transparent_Container
+}
+
+//11.3.116
+type record SCI
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   service_Class_Value
+} with {
+  variant "PRESENCE(iEI = '8c'O)";
+  variant (lengthIndicator) "LENGTHTO (service_Class_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.117
+type record GGSN_PGW_Location
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT3                   gGSN_PGW_Location_Value,
+  BIT5                   spare
+} with {
+  variant "PRESENCE(iEI = '8d'O)";
+  variant (lengthIndicator) "LENGTHTO (gGSN_PGW_Location_Value)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.118
+type record Selected_PLMN_ID
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  HEX1                   mccDigit1,
+  HEX1                   mccDigit2,
+  HEX1                   mccDigit3,
+  HEX1                   mncDigit3,
+  HEX1                   mncDigit1,
+  HEX1                   mncDigit2 
+} with {
+  variant "PRESENCE(iEI = '8e'O)";
+  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.119
+type record Priority_Class_Indicator
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT1                   priority_Class_Indicator_Value,
+  BIT7                   spare
+} with {
+  variant "PRESENCE(iEI = '8f'O)";
+  variant (lengthIndicator) "LENGTHTO (priority_Class_Indicator_Value,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.120
+type record Source_Cell_ID
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  TrackingAreaIdentity_BSSGP tracking_Area_Identity,
+  ECGI_BSSGP             eUTRAN_CGI,
+  octetstring            globaleNBID
+} with {
+  variant "PRESENCE(iEI = '90'O)";
+  variant (lengthIndicator) "LENGTHTO (tracking_Area_Identity,eUTRAN_CGI,globaleNBID)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+type record TrackingAreaIdentity_BSSGP
+{
+  HEX1               mccDigit1,
+  HEX1               mccDigit2,
+  HEX1               mccDigit3,
+  HEX1               mncDigit3,
+  HEX1               mncDigit1,
+  HEX1               mncDigit2,
+  OCT2               tAC
+} 
+
+type record ECGI_BSSGP
+{
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  HEX1                         spare,     
+  integer                      eCI
+} with {
+  variant (spare,eCI) "FIELDORDER(msb)";     
+  variant(eCI) "FIELDLENGTH(28)";
+  variant (eCI) "BYTEORDER(last)";
+};
+
+
+//11.3.121
+type record IRAT_Measurement_Configuration_Extended_eARFCNs
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  INT6b                  reportingThreshold,
+  BIT1                   repQuant,
+  BIT1                   spare,
+  INT1                   measurementDuration,   
+  Measurement_List_Extended measurement_List
+} with {
+  variant "PRESENCE(iEI = '91'O)";
+  variant (lengthIndicator) "LENGTHTO (reportingThreshold,repQuant,spare,measurementDuration,measurement_List)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+type record Measurement_Extended
+{
+  INT18b_BO_LAST         e_ARFCN,
+  BIT3                   spare,
+  BIT3                   measurementBandwidth
+} with {
+  variant (e_ARFCN,spare,measurementBandwidth) "FIELDORDER(msb)";				          
+}
+type record of Measurement_Extended Measurement_List_Extended;
+
+//11.3.122
+type record EDRX_Parameters
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  BIT4                   eDRX_Cycle_Value,
+  BIT4                   spare
+} with {
+  variant "PRESENCE(iEI = '92'O)";
+  variant (lengthIndicator) "LENGTHTO (eDRX_Cycle_Value,spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.123
+type record Time_Until_Next_Paging_Occasion
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  INT6b                  minutes,
+  BIT2                   spare,
+  INT6b                  seconds,
+  BIT2                   spare2
+} with {
+  variant "PRESENCE(iEI = '93'O)";
+  variant (lengthIndicator) "LENGTHTO (minutes,spare,seconds,spare2)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.124
+type record Old_Routing_Area_Identification
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  HEX1                   mccDigit1,
+  HEX1                   mccDigit2,
+  HEX1                   mccDigit3,
+  HEX1                   mncDigit3,
+  HEX1                   mncDigit1,
+  HEX1                   mncDigit2,
+  OCT2                   lac,
+  OCT1                   rac
+} with {
+  variant "PRESENCE(iEI = '94'O)";
+  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2,lac,rac)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.125
+type record Attach_Indicator
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   spare
+} with {
+  variant "PRESENCE(iEI = '95'O)";
+  variant (lengthIndicator) "LENGTHTO (spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.126
+type record PLMN_Identity
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  HEX1                   mccDigit1,
+  HEX1                   mccDigit2,
+  HEX1                   mccDigit3,
+  HEX1                   mncDigit3,
+  HEX1                   mncDigit1,
+  HEX1                   mncDigit2 
+} with {
+  variant "PRESENCE(iEI = '96'O)";
+  variant (lengthIndicator) "LENGTHTO (mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+//11.3.127
+type record MME_Query
+{
+  OCT1                   iEI,
+  BIT1                   ext,
+  LIN2_2a                lengthIndicator,
+  OCT1                   spare
+} with {
+  variant "PRESENCE(iEI = '97'O)";
+  variant (lengthIndicator) "LENGTHTO (spare)";
+  variant (lengthIndicator) "CROSSTAG( length1,    ext = '1'B;
+                                       length2,    ext = '0'B;)"; 
+  variant (ext,lengthIndicator) "FIELDORDER(msb)";				          
+}
+
+
+//-----------------------------------------------------------------------------
+// PDUs
+//-----------------------------------------------------------------------------
+
+//10.2.1
+type record PDU_BSSGP_DL_UNITDATA 
+{
+ OCT1                              bssgpPduType,
+ OCT4                              tLLI_current,
+ QoS_Profile_V                     qoS_Profile,
+ PDU_Lifetime                      pDU_Lifetime,
+ MS_Radio_Access_Capability        mS_Radio_Access_Capability optional,
+ Priority_BSSGP                    priority optional,
+ DRX_Parameters                    dRX_Parameters optional,
+ IMSI_BSSGP                        iMSI optional,
+ TLLI_BSSGP                        tLLI_old optional,
+ PFI                               pFI optional,
+ LSA_Information_BSSGP             lSA_Information optional,
+ Service_UTRAN_CCO                 service_UTRAN_CCO optional,
+ Service_Class_Indicator           service_Class_Indicator optional,
+ Subscriber_Profile_ID_For_RAT_Priority  subscriber_Profile_ID_For_RAT_Priority optional,
+ Redirection_Indication            redirection_Indication optional,
+ Redirection_Completed             redirection_Completed optional, 
+ Unconfirmed_Send_State_Variable   unconfirmed_Send_State_Variable optional,
+ SCI                               sCI optional,
+ GGSN_PGW_Location                 gGSN_PGW_Location optional,
+ EDRX_Parameters                   eDRX_Paremeters optional,
+ Old_Routing_Area_Identification   old_Routing_Area_Identification optional,
+ Attach_Indicator                  attach_Indicator optional,
+ Alignment_octets                  alignment_octets optional,
+ LLC_PDU                           lLC_PDU,
+ LLC_PDU                           initialLLC_PDU optional
+} with { variant "PRESENCE(bssgpPduType = '00'O)"; };
+
+//10.2.2
+type record PDU_BSSGP_UL_UNITDATA
+{
+ OCT1                              bssgpPduType,
+ OCT4                              tLLI,
+ QoS_Profile_V                     qoS_Profile,
+ Cell_Identifier                   cell_Identifier,
+ PFI                               pFI optional,
+ LSA_Identifier_List_BSSGP         lSA_Identifier_List optional,
+ Redirect_Attempt_Flag             redirect_Attempt_Flag optional,
+ IMSI_BSSGP                        iMSI_BSSGP optional,
+ Unconfirmed_Send_State_Variable   unconfirmed_Send_State_Variable optional,
+ Selected_PLMN_ID                  selected_PLMN_ID optional,
+ PLMN_Identity                     selected_Operator optional,
+ PLMN_Identity                     cS_Registered_Operator optional, 
+ Alignment_octets                  alignment_octets optional,
+ LLC_PDU                           lLC_PDU
+} with { variant "PRESENCE(bssgpPduType = '01'O)"; };
+
+//10.2.3
+type record PDU_BSSGP_RA_CAPABILITY
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,
+ MS_Radio_Access_Capability        mS_Radio_Access_Capability
+} with { variant "PRESENCE(bssgpPduType = '02'O)"; };
+
+//10.2.5
+type record PDU_BSSGP_DL_MBMS_UNITDATA
+{
+ OCT1                              bssgpPduType,
+ PDU_Lifetime                      pDU_Lifetime,
+ TMGI_BSSGP                        tMGI,
+ MBMS_Session_Identity             mBMS_Session_Identity optional,
+ Alignment_octets                  alignment_octets optional,
+ LLC_PDU                           lLC_PDU
+} with { variant "PRESENCE(bssgpPduType = '04'O)"; };
+
+
+// 10.2.6; Deleted from spec 7.10.0,kept in prot module for backward compatibility
+type record PDU_BSSGP_UL_MBMS_UNITDATA
+{
+ OCT1                              bssgpPduType,
+ TMGI_BSSGP                        tMGI,
+ MBMS_Session_Identity             mBMS_Session_Identity optional,
+ Alignment_octets                  alignment_octets optional,
+ LLC_PDU                           lLC_PDU
+} with { variant "PRESENCE(bssgpPduType = '05'O)"; };
+
+// 10.3.1
+type record PDU_BSSGP_PAGING_PS 
+{
+ OCT1                              bssgpPduType,
+ IMSI_BSSGP                        iMSI,
+ DRX_Parameters                    dRX_Parameters optional,  
+ Paging_Field4                     paging_Field4,
+ PFI                               pFI optional,
+ ABQP                              aBQP optional,
+ QoS_Profile                       qoS_Profile,
+ TMSI_BSSGP                        pTMSI optional,
+ EDRX_Parameters                   eDRX_Paremeters optional
+} with { variant "PRESENCE(bssgpPduType = '06'O)"; };
+
+//10.3.2
+type record PDU_BSSGP_PAGING_CS
+{
+ OCT1                              bssgpPduType,
+ IMSI_BSSGP                        iMSI,
+ DRX_Parameters                    dRX_Parameters,
+ Paging_Field4                     paging_Field4,
+ TLLI_BSSGP                        tLLI optional,
+ Channel_needed                    channel_needed optional,
+ EMLPP_Priority_BSSGP              eMLPP_Priority optional,
+ TMSI_BSSGP                        tMSI optional,
+ Global_CN_Id_BSSGP                global_CN_Id optional
+} with { variant "PRESENCE(bssgpPduType = '07'O)"; };
+
+
+type union Paging_Field4
+{
+ BVCI                              bVCI,                                      
+ Location_Area                     location_Area,                   
+ Routeing_Area                     routeing_Area,                   
+ BSS_Area_Indication               bSS_Area_Indication                 
+};
+
+//10.3.3
+type record PDU_BSSGP_RA_CAPABILITY_UPDATE
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,
+ Tag                               tag
+} with { variant "PRESENCE(bssgpPduType = '08'O)"; };
+
+
+//10.3.4
+type record PDU_BSSGP_RA_CAPABILITY_UPDATE_ACK
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,
+ Tag                               tag,
+ IMSI_BSSGP                        iMSI optional,
+ RA_Cap_UPD_CAUSE                  rA_Cap_UPDATE_CAUSE,
+ MS_Radio_Access_Capability        mS_Radio_Access_Capability optional     
+} with { variant "PRESENCE(bssgpPduType = '09'O)"; };
+
+//10.3.5
+type record PDU_BSSGP_RADIO_STATUS
+{
+  OCT1                              bssgpPduType,
+  TLLI_BSSGP                        tLLI optional,
+  TMSI_BSSGP                        tMSI optional,
+  IMSI_BSSGP                        iMSI optional,
+  Radio_Cause                       radio_Cause
+} with { variant "PRESENCE(bssgpPduType = '0A'O)"; };
+
+//10.3.6
+type record PDU_BSSGP_SUSPEND
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,        
+ Routeing_Area                     routeing_Area  
+} with { variant "PRESENCE(bssgpPduType = '0B'O)"; };
+
+// 10.3.7
+type record PDU_BSSGP_SUSPEND_ACK
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,        
+ Routeing_Area                     routeing_Area ,
+ Suspend_Reference_Number          suspend_Reference_Number
+} with { variant "PRESENCE(bssgpPduType = '0C'O)"; };
+
+// 10.3.8
+type record PDU_BSSGP_SUSPEND_NACK
+{
+ OCT1                          bssgpPduType,
+ TLLI_BSSGP                    tLLI,    
+ Routeing_Area                 routeing_Area,
+ Cause_BSSGP                   cause optional
+} with { variant "PRESENCE(bssgpPduType = '0D'O)"; };
+
+// 10.3.9
+type record PDU_BSSGP_RESUME
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,        
+ Routeing_Area                     routeing_Area,
+ Suspend_Reference_Number          suspend_Reference_Number
+} with { variant "PRESENCE(bssgpPduType = '0E'O)"; };
+
+//10.3.10
+type record PDU_BSSGP_RESUME_ACK
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,        
+ Routeing_Area                     routeing_Area
+} with { variant "PRESENCE(bssgpPduType = '0F'O)"; };
+
+// 10.3.11
+type record PDU_BSSGP_RESUME_NACK
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,        
+ Routeing_Area                     routeing_Area,
+ Cause_BSSGP                       cause optional
+} with { variant "PRESENCE(bssgpPduType = '10'O)"; };
+
+// 10.3.12
+type record PDU_BSSGP_PAGING_PS_REJECT
+{
+ OCT1                              bssgpPduType,
+ IMSI_BSSGP                        iMSI,
+ TMSI_BSSGP                        pTMSI optional,
+ Time_Until_Next_Paging_Occasion   time_Until_Next_Paging_Occasion
+} with { variant "PRESENCE(bssgpPduType = '11'O)"; };
+
+// 10.3.13
+type record PDU_BSSGP_DUMMY_PAGING_PS
+{
+ OCT1                              bssgpPduType,
+ IMSI_BSSGP                        iMSI,
+ Routeing_Area                     routeing_Area  optional,
+ EDRX_Parameters                   eDRX_Paremeters optional
+} with { variant "PRESENCE(bssgpPduType = '12'O)"; };
+
+// 10.3.14
+type record PDU_BSSGP_DUMMY_PAGING_PS_RESPONSE
+{
+ OCT1                              bssgpPduType,
+ IMSI_BSSGP                        iMSI,
+ Time_Until_Next_Paging_Occasion   time_Until_Next_Paging_Occasion
+} with { variant "PRESENCE(bssgpPduType = '13'O)"; };
+
+// 10.3.15
+type record PDU_BSSGP_MS_REGISTRATION_ENQUIRY_RESPONSE
+{
+ OCT1                              bssgpPduType,
+ IMSI_BSSGP                        iMSI,
+ PLMN_Identity                     pS_Registered_Operator optional
+} with { variant "PRESENCE(bssgpPduType = '15'O)"; };
+
+// 10.3.15
+type record PDU_BSSGP_MS_REGISTRATION_ENQUIRY
+{
+ OCT1                              bssgpPduType,
+ IMSI_BSSGP                        iMSI,
+ MME_Query                         mME_Query optional
+} with { variant "PRESENCE(bssgpPduType = '14'O)"; };
+
+// 10.4.1
+type record PDU_BSSGP_FLUSH_LL
+{
+  OCT1                              bssgpPduType,
+  TLLI_BSSGP                        tLLI,        
+  BVCI                              bVCI_old,
+  BVCI                              bVCI_new optional,
+  NSEI_BSSGP                        nSEI optional
+} with { variant "PRESENCE(bssgpPduType = '2A'O)"; };
+
+// 10.4.2 
+type record PDU_BSSGP_FLUSH_LL_ACK
+{
+  OCT1                              bssgpPduType,
+  TLLI_BSSGP                        tLLI,        
+  Flush_Action                      flush_Action,
+  BVCI                              bVCI_new optional,
+  Number_of_octets_affected         number_of_octets_affected,
+  NSEI_BSSGP                        nSEI optional
+} with { variant "PRESENCE(bssgpPduType = '2B'O)"; };
+
+// 10.4.3
+type record PDU_BSSGP_LLC_DISCARDED
+{
+ OCT1                        bssgpPduType,
+ TLLI_BSSGP                  tLLI,    
+ LLC_Frames_Discarded        lLC_Frames_Discarded,
+ BVCI                        bVCI,
+ Number_of_octets_affected   number_of_octets_deleted,
+ PFI                         pFI optional
+} with { variant "PRESENCE(bssgpPduType = '2C'O)"; };
+
+// 10.4.4
+type record PDU_BSSGP_FLOW_CONTROL_BVC
+{
+ OCT1                       bssgpPduType,
+ Tag                        tag,
+ BVC_Bucket_Size            bVC_Bucket_Size,
+ Bucket_Leak_Rate           bucket_Leak_Rate,
+ Bmax_default_MS            bmax_default_MS,
+ R_default_MS               r_default_MS,
+ Bucket_Full_Ratio          bucket_Full_Ratio optional,  
+ BVC_Measurement            bVC_Measurement optional,
+ Flow_Control_Granularity   flow_Control_Granularity optional 
+} with { variant "PRESENCE(bssgpPduType = '26'O)"; };
+
+// 10.4.5
+type record PDU_BSSGP_FLOW_CONTROL_BVC_ACK
+{
+ OCT1                        bssgpPduType,
+ Tag                         tag
+} with { variant "PRESENCE(bssgpPduType = '27'O)"; };
+
+// 10.4.6
+type record PDU_BSSGP_FLOW_CONTROL_MS
+{
+ OCT1                        bssgpPduType,
+ TLLI_BSSGP                  tLLI,    
+ Tag                         tag,
+ MS_Bucket_Size              mS_Bucket_Size,
+ Bucket_Leak_Rate            bucket_Leak_Rate,
+ Bucket_Full_Ratio           bucket_Full_Ratio optional,
+ Flow_Control_Granularity   flow_Control_Granularity optional 
+} with { variant "PRESENCE(bssgpPduType = '28'O)"; };        
+
+// 10.4.7
+type record PDU_BSSGP_FLOW_CONTROL_MS_ACK
+{
+ OCT1                         bssgpPduType,
+ TLLI_BSSGP                   tLLI,    
+ Tag                          tag
+} with { variant "PRESENCE(bssgpPduType = '29'O)"; };
+
+
+// 10.4.8
+type record PDU_BSSGP_BVC_BLOCK        
+{
+ OCT1                          bssgpPduType,
+ BVCI                          bVCI,
+ Cause_BSSGP                   cause 
+} with { variant "PRESENCE(bssgpPduType = '20'O)"; };
+
+// 10.4.9
+type record PDU_BSSGP_BVC_BLOCK_ACK
+{
+ OCT1                         bssgpPduType,
+ BVCI                         bVCI
+} with { variant "PRESENCE(bssgpPduType = '21'O)"; };
+
+// 10.4.10
+type record PDU_BSSGP_BVC_UNBLOCK
+{
+ OCT1                         bssgpPduType,
+ BVCI                         bVCI
+} with { variant "PRESENCE(bssgpPduType = '24'O)"; };
+
+// 10.4.11
+type record PDU_BSSGP_BVC_UNBLOCK_ACK
+{
+ OCT1                         bssgpPduType,
+ BVCI                         bVCI
+} with { variant "PRESENCE(bssgpPduType = '25'O)"; };
+
+// 10.4.12
+type record PDU_BSSGP_BVC_RESET
+{
+ OCT1                              bssgpPduType,
+ BVCI                              bVCI,
+ Cause_BSSGP                       cause,
+ Cell_Identifier                   cell_Identifier optional, 
+ Feature_bitmap                    feature_bitmap optional,
+ Extended_Feature_Bitmap           extended_Feature_Bitmap optional
+} with { variant "PRESENCE(bssgpPduType = '22'O)"; };
+
+// 10.4.13 
+type record PDU_BSSGP_BVC_RESET_ACK
+{
+ OCT1                              bssgpPduType,
+ BVCI                              bVCI,
+ Cell_Identifier                   cell_Identifier optional,
+ Feature_bitmap                    feature_bitmap optional,
+ Extended_Feature_Bitmap           extended_Feature_Bitmap optional
+} with { variant "PRESENCE(bssgpPduType = '23'O)"; };
+
+// 10.4.14
+type record PDU_BSSGP_STATUS
+{
+ OCT1                              bssgpPduType,
+ Cause_BSSGP                       cause,
+ BVCI                              bVCI optional,   
+ PDU_in_Error                      pDU_in_Error optional 
+} with { variant "PRESENCE(bssgpPduType = '41'O)"; };
+
+// 10.4.15
+type record PDU_BSSGP_SGSN_INVOKE_TRACE
+{
+  OCT1                              bssgpPduType,
+  Trace_Type_BSSGP                  traceType,
+  Trace_Reference_BSSGP             traceReference,
+  Trigger_Id_BSSGP                  triggerId optional,
+  Mobile_Id_BSSGP                   mobileId optional,
+  OMC_Id_BSSGP                      omcId optional,
+  TransactionId_BSSGP               transactionId optional
+} with { variant "PRESENCE(bssgpPduType = '40'O)"; };
+
+// 10.4.16
+type record PDU_BSSGP_DOWNLOAD_BSS_PFC
+{
+ OCT1                              bssgpPduType,
+ TLLI_BSSGP                        tLLI,
+ PFI                               pFI         
+} with { variant "PRESENCE(bssgpPduType = '50'O)"; };
+
+// 10.4.17
+type record PDU_BSSGP_CREATE_BSS_PFC
+{
+  OCT1                              		bssgpPduType,
+  TLLI_BSSGP                       		 	tLLI,
+  IMSI_BSSGP                        		iMSI optional,
+  PFI                               		pFI,         
+  GPRS_Timer                        		pFT,
+  ABQP                              		aBQP,
+  Service_UTRAN_CCO                 		service_UTRAN_CCO optional,
+  MS_Radio_Access_Capability        		mS_Radio_Access_Capability optional,
+  Priority_BSSGP                  	  		allocation_Retention_Priority optional, 
+  GPRS_Timer                        		t10 optional,
+  Inter_RAT_Handover_Info_BSSGP     		inter_RAT_Handover_Info optional,
+  E_UTRAN_Inter_RAT_Handover_Info		  	e_UTRAN_Inter_RAT_Handover_Info optional,
+  Subscriber_Profile_ID_For_RAT_Priority	subscriber_Profile_ID_For_RAT optional
+  
+  
+} with { variant "PRESENCE(bssgpPduType = '51'O)"; };
+
+// 10.4.18
+type record PDU_BSSGP_CREATE_BSS_PFC_ACK
+{
+ OCT1                             bssgpPduType,
+ TLLI_BSSGP                       tLLI,
+ PFI                              pFI, 
+ ABQP                             aBQP,
+ Cause_BSSGP                      cause optional
+} with { variant "PRESENCE(bssgpPduType = '52'O)"; };
+
+// 10.4.19
+type record PDU_BSSGP_CREATE_BSS_PFC_NACK
+{
+ OCT1                             bssgpPduType,
+ TLLI_BSSGP                       tLLI,
+ PFI                              pFI, 
+ Cause_BSSGP                      cause
+} with { variant "PRESENCE(bssgpPduType = '53'O)"; };
+
+// 10.4.20        
+type record PDU_BSSGP_MODIFY_BSS_PFC
+{
+ OCT1                         bssgpPduType,
+ TLLI_BSSGP                   tLLI,
+ PFI                          pFI, 
+ ABQP                         aBQP
+} with { variant "PRESENCE(bssgpPduType = '54'O)"; };
+                
+// 10.4.21
+type record PDU_BSSGP_MODIFY_BSS_PFC_ACK
+{
+ OCT1                           bssgpPduType,
+ TLLI_BSSGP                     tLLI,
+ PFI                            pFI, 
+ GPRS_Timer                     pFT,
+ ABQP                           aBQP
+} with { variant "PRESENCE(bssgpPduType = '55'O)"; };
+
+// 10.4.22
+type record PDU_BSSGP_DELETE_BSS_PFC
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  PFI                            pFI
+} with { variant "PRESENCE(bssgpPduType = '56'O)"; };
+
+// 10.4.23
+type record PDU_BSSGP_DELETE_BSS_PFC_ACK
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  PFI                            pFI
+} with { variant "PRESENCE(bssgpPduType = '57'O)"; };
+
+// 10.4.24
+type record PDU_BSSGP_FLOW_CONTROL_PFC        
+{
+ OCT1                         bssgpPduType,
+ TLLI_BSSGP                   tLLI,
+ Tag                          tag,
+ MS_Bucket_Size               mS_Bucket_Size optional,
+ Bucket_Leak_Rate             bucket_Leak_Rate optional,
+ Bucket_Full_Ratio            bucket_Full_Ratio optional,
+ PFC_flow_control_parameters  pFC_flow_control_parameters,
+ Flow_Control_Granularity     flow_Control_Granularity optional
+
+} with { variant "PRESENCE(bssgpPduType = '2D'O)"; };
+
+// 10.4.25        
+type record PDU_BSSGP_FLOW_CONTROL_PFC_ACK
+{
+ OCT1                           bssgpPduType,
+ TLLI_BSSGP                     tLLI,
+ Tag                            tag
+} with { variant "PRESENCE(bssgpPduType = '2E'O)"; };
+
+// 10.4.26        
+type record PDU_BSSGP_DELETE_BSS_PFC_REQ
+{
+  OCT1                             bssgpPduType,
+  TLLI_BSSGP                       tLLI,
+  PFI                              pFI,
+  Cause_BSSGP                      cause
+} with { variant "PRESENCE(bssgpPduType = '58'O)"; };
+
+// 10.4.27
+type record PDU_BSSGP_PS_HANDOVER_REQUIRED
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  Cause_BSSGP                    cause,
+  Cell_Identifier                source_Cell_Identifier,
+  Cell_or_RNC_Id_with_Transparent_Container_BSSGP
+                                 cell_or_RNC_Id_with_Transparent_Container,
+  Active_PFCs_List_BSSGP         active_PFCs_List,
+  ENB_Identifier				 target_ENB_Identifier optional,
+  Reliable_Inter_RAT_Handover_Info
+  								 reliable_Inter_RAT_Handover_Info optional,
+  CSG_Identifier_TLV             cSG_Identifier optional,
+  Tracking_Area_Code_TLV         tracking_Area_Code optional
+  } with { variant "PRESENCE(bssgpPduType = '59'O)"; };
+
+
+// 10.4.28
+type record PDU_BSSGP_PS_HANDOVER_REQUIRED_ACK
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  List_of_set_up_PFCs_BSSGP      list_of_set_up_PFCs,
+  Target_BSS_to_Source_BSS_Transparent_Container
+                                 target_BSS_to_Source_BSS_Transparent_Container optional,
+  Target_to_Source_Transparent_Container
+                                 target_to_Source_Transparent_Container optional
+} with { variant "PRESENCE(bssgpPduType = '5A'O)"; };
+
+
+// 10.4.29
+type record PDU_BSSGP_PS_HANDOVER_REQUIRED_NACK
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  Cause_BSSGP                    cause
+} with { variant "PRESENCE(bssgpPduType = '5B'O)"; }; 
+
+
+// 10.4.30
+type record PDU_BSSGP_PS_HANDOVER_REQUEST
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  IMSI_BSSGP                     iMSI,
+  Cause_BSSGP                    cause,
+  Cell_Identifier                source_Cell_Identifier optional,
+  RNC_Identifier_BSSGP           source_RNC_Identifier optional,
+  Cell_Identifier                target_Cell_Identifier optional, // it is mandatory
+  Source_BSS_to_Target_BSS_Transparent_Container_BSSGP
+                                 source_BSS_to_Target_BSS_Transparent_Container_BSSGP,
+  PFCs_to_be_set_up_list         pFCs_to_be_set_up_list,
+  NAS_container_for_PS_Handover  nAS_container_for_PS_Handover optional,
+  Service_UTRAN_CCO              service_UTRAN_CCO optional,
+  Subscriber_Profile_ID_For_RAT_Priority
+  								 subscriber_Profile_ID_For_RAT_Priority optional,
+  Reliable_Inter_RAT_Handover_Info
+  								 reliable_Inter_RAT_Handover_Info optional
+}  with { variant "PRESENCE(bssgpPduType = '5C'O)"; };
+
+
+// 10.4.31
+type record PDU_BSSGP_PS_HANDOVER_REQUEST_ACK
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  List_of_set_up_PFCs_BSSGP      list_of_set_up_PFCs,
+  Target_BSS_to_Source_BSS_Transparent_Container
+                                 target_BSS_to_Source_BSS_Transparent_Container
+} with { variant "PRESENCE(bssgpPduType = '5D'O)"; };
+
+
+// 10.4.32
+type record PDU_BSSGP_PS_HANDOVER_REQUEST_NACK
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  Cause_BSSGP                    cause
+} with { variant "PRESENCE(bssgpPduType = '5E'O)"; };
+
+
+// 10.4.33
+type record PDU_BSSGP_PS_HANDOVER_COMPLETE
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  IMSI_BSSGP                     iMSI,
+  Cell_Identifier                target_Cell_Identifier optional,
+  Request_For_Inter_RAT_Handover_Info
+  								 request_For_Inter_RAT_Handover_Info optional
+} with { variant "PRESENCE(bssgpPduType = '91'O)"; };
+
+
+// 10.4.34
+type record PDU_BSSGP_PS_HANDOVER_CANCEL
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  Cause_BSSGP                    cause,
+  Cell_Identifier                source_Cell_Identifier,
+  Cell_Identifier                target_Cell_Identifier optional,
+  RNC_Identifier_BSSGP           target_RNC_Identifier optional,
+  ENB_Identifier				 target_Enb_Identifier optional
+} with { variant "PRESENCE(bssgpPduType = '92'O)"; };
+
+// 10.4.35
+type record PDU_BSSGP_PS_HANDOVER_COMPLETE_ACK
+{
+  OCT1                            bssgpPduType,
+  TLLI_BSSGP                      tLLI,
+  Inter_RAT_Handover_Info_BSSGP   inter_RAT_Handover_Info_BSSGP,
+  E_UTRAN_Inter_RAT_Handover_Info e_UTRAN_Inter_RAT_Handover_Info optional
+} with { variant "PRESENCE(bssgpPduType = '93'O)";};
+
+// 10.4.36
+type record PDU_BSSGP_OVERLOAD
+{
+  OCT1                            bssgpPduType,
+  Priority_Class_Indicator        priority_Class_Indicator
+} with { variant "PRESENCE(bssgpPduType = '42'O)";};
+
+// 10.5.1
+type record PDU_BSSGP_PERFORM_LOCATION_REQUEST
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  IMSI_BSSGP                     iMSI,
+  DRX_Parameters                 dRX_Parameters optional,
+  BVCI                           bVCI,
+  NSEI_BSSGP                     nSEI,
+  Location_Type_BSSGP            location_Type,
+  Cell_Identifier                cell_Identifier,
+  LCS_Capability_BSSGP           lCS_Capability optional,
+  LCS_Priority_BSSGP             lCS_Priority optional,
+  LCS_QoS_BSSGP                  lCS_QoS optional,
+  LCS_Client_Type_BSSGP          lCS_Client_Type optional,
+  Requested_GPS_Assistance_Data_BSSGP  requested_GPS_Assistance_Data optional,
+  IMEI_BSSGP                     iMEI optional,
+  GANSS_Location_Type            gANSS_Location_Type optional,
+  Requested_GANSS_Assistance_Data requested_GANSS_Assistance_Data optional,
+  EDRX_Parameters                eDRX_Parameters optional
+} with { variant "PRESENCE(bssgpPduType = '60'O)"; };
+
+
+// 10.5.2
+type record PDU_BSSGP_PERFORM_LOCATION_RESPONSE
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  BVCI                           bVCI,
+  Location_Estimate_BSSGP        location_Estimate optional,
+  Positioning_Data_BSSGP         positioning_Data optional,
+  Deciphering_Keys_BSSGP         deciphering_Keys optional,
+  LCS_Cause_BSSGP                lCS_Cause optional,
+  VelocityData                  velocityData optional,
+  GANSS_Positioning_Data         gANSS_Positioning_Data optional  
+} with { variant "PRESENCE(bssgpPduType = '61'O)"; };
+
+
+// 10.5.3
+type record PDU_BSSGP_PERFORM_LOCATION_ABORT
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  BVCI                           bVCI,
+  LCS_Cause_BSSGP                lCS_Cause
+} with { variant "PRESENCE(bssgpPduType = '62'O)"; };
+
+
+// 10.5.4
+type record PDU_BSSGP_POSITION_COMMAND
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  BVCI                           bVCI,
+  RRLP_Flags_BSSGP               rRLP_Flags,
+  RRLP_APDU_BSSGP                rRLP_APDU
+} with { variant "PRESENCE(bssgpPduType = '63'O)"; };
+
+
+// 10.5.5
+type record PDU_BSSGP_POSITION_RESPONSE
+{
+  OCT1                           bssgpPduType,
+  TLLI_BSSGP                     tLLI,
+  BVCI                           bVCI,
+  RRLP_Flags_BSSGP               rRLP_Flags optional,
+  RRLP_APDU_BSSGP                rRLP_APDU optional,
+  LCS_Cause_BSSGP                lCS_Cause optional  
+} with { variant "PRESENCE(bssgpPduType = '64'O)"; };
+
+// 10.6.1  
+type record PDU_BSSGP_RAN_INFORMATION_REQUEST
+{
+ OCT1                            bssgpPduType,
+ RIM_Routing_Information         destination_Cell_Identifier,
+ RIM_Routing_Information         source_Cell_Identifier,
+ RAN_Information_Request_RIM_Container  rIM_Container
+} with { variant "PRESENCE(bssgpPduType = '71'O)"; };
+      
+// 10.6.2
+type record PDU_BSSGP_RAN_INFORMATION
+{
+ OCT1                              bssgpPduType,
+ RIM_Routing_Information           destination_Cell_Identifier,
+ RIM_Routing_Information           source_Cell_Identifier,
+ RAN_Information_RIM_Container     rIM_Container
+} with { variant "PRESENCE(bssgpPduType = '70'O)"; };
+
+// 10.6.3
+type record PDU_BSSGP_RAN_INFORMATION_ACK
+{
+ OCT1                              bssgpPduType,
+ RIM_Routing_Information           destination_Cell_Identifier,
+ RIM_Routing_Information           source_Cell_Identifier,
+ RAN_Information_Ack_RIM_Container rIM_Container
+} with { variant "PRESENCE(bssgpPduType = '72'O)"; };
+
+// 10.6.4
+type record PDU_BSSGP_RAN_INFORMATION_ERROR
+{
+ OCT1                              bssgpPduType,
+ RIM_Routing_Information           destination_Cell_Identifier,
+ RIM_Routing_Information           source_Cell_Identifier,
+ RAN_Information_Error_RIM_Container  rIM_Container
+} with { variant "PRESENCE(bssgpPduType = '73'O)"; };
+
+// 10.6.5
+type record PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR
+{
+ OCT1                              bssgpPduType,
+ RIM_Routing_Information           destination_Cell_Identifier,
+ RIM_Routing_Information           source_Cell_Identifier,
+ RAN_Information_Application_Error_RIM_Container  rIM_Container
+} with { variant "PRESENCE(bssgpPduType = '74'O)"; };
+
+// 10.7.1
+type record PDU_BSSGP_MBMS_SESSION_START_REQUEST
+{
+ OCT1                        bssgpPduType,
+ TMGI_BSSGP                  tMGI,
+ MBMS_Session_Identity       mBMS_Session_Identity optional,
+ ABQP                        aBQP,
+ MBMS_Service_Area_Identity_List   mBMS_Service_Area_Identity_List,
+ MBMS_Routing_Area_List      mBMS_Routing_Area_List,
+ MBMS_Session_Duration       mBMS_Session_Duration,
+ MBMS_Session_Information    mBMS_Session_Information,
+ Time_To_MBMS_Data_Transfer  time_To_MBMS_Data_Transfer,
+ Priority_BSSGP              allocation_Retention_Priority optional,
+ MBMS_Session_Repetition_Number  mBMS_Session_Repetition_Number optional
+} with { variant "PRESENCE(bssgpPduType = '80'O)"; };
+
+// 10.7.2
+type record PDU_BSSGP_MBMS_SESSION_START_RESPONSE
+{
+ OCT1                        bssgpPduType,
+ TMGI_BSSGP                  tMGI,
+ MBMS_Session_Identity       mBMS_Session_Identity optional,
+ MBMS_Response               mBMS_Response
+} with { variant "PRESENCE(bssgpPduType = '81'O)"; };
+
+// 10.7.3
+type record PDU_BSSGP_MBMS_SESSION_STOP_REQUEST
+{
+ OCT1                       bssgpPduType,
+ TMGI_BSSGP                 tMGI,
+ MBMS_Session_Identity      mBMS_Session_Identity optional,
+ MBMS_Stop_Cause            mBMS_Stop_Cause
+} with { variant "PRESENCE(bssgpPduType = '82'O)"; };
+
+// 10.7.4
+type record PDU_BSSGP_MBMS_STOP_RESPONSE
+{
+ OCT1                              bssgpPduType,
+ TMGI_BSSGP                        tMGI,
+ MBMS_Session_Identity             mBMS_Session_Identity optional,
+ MBMS_Response                     mBMS_Response
+} with { variant "PRESENCE(bssgpPduType = '83'O)"; };
+
+
+// 10.7.5
+type record PDU_BSSGP_SESSION_UPDATE_REQUEST
+{
+ OCT1                            bssgpPduType,
+ TMGI_BSSGP                      tMGI,
+ MBMS_Session_Identity           mBMS_Session_Identity optional,
+ ABQP                            aBQP,
+ MBMS_Service_Area_Identity_List mBMS_Service_Area_Identity_List,
+ MBMS_Routing_Area_List          mBMS_Routing_Area_List,
+ MBMS_Session_Duration           mBMS_Session_Duration,
+ MBMS_Session_Information        mBMS_Session_Information,
+ Time_To_MBMS_Data_Transfer      time_To_MBMS_Data_Transfer, 
+ Priority_BSSGP                  allocation_Retention_Priority optional,
+ MBMS_Session_Repetition_Number  mBMS_Session_Repetition_Number optional  
+} with { variant "PRESENCE(bssgpPduType = '84'O)"; };
+
+
+// 10.7.6
+type record PDU_BSSGP_SESSION_UPDATE_RESPONSE
+{
+ OCT1                            bssgpPduType,
+ TMGI_BSSGP                      tMGI,
+ MBMS_Session_Identity           mBMS_Session_Identity optional, 
+ MBMS_Response                   mBMS_Response 
+} with { variant "PRESENCE(bssgpPduType = '85'O)"; };
+
+
+
+type union PDU_BSSGP
+{
+
+  PDU_BSSGP_DL_UNITDATA                   pDU_BSSGP_DL_UNITDATA,
+  PDU_BSSGP_UL_UNITDATA                   pDU_BSSGP_UL_UNITDATA,
+  PDU_BSSGP_RA_CAPABILITY                 pDU_BSSGP_RA_CAPABILITY,
+  PDU_BSSGP_DL_MBMS_UNITDATA              pDU_BSSGP_DL_MBMS_UNITDATA,
+  PDU_BSSGP_UL_MBMS_UNITDATA              pDU_BSSGP_UL_MBMS_UNITDATA,
+  PDU_BSSGP_PAGING_PS                     pDU_BSSGP_PAGING_PS,
+  PDU_BSSGP_PAGING_CS                     pDU_BSSGP_PAGING_CS,
+  PDU_BSSGP_RA_CAPABILITY_UPDATE          pDU_BSSGP_RA_CAPABILITY_UPDATE,
+  PDU_BSSGP_RA_CAPABILITY_UPDATE_ACK      pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK,
+  PDU_BSSGP_RADIO_STATUS                  pDU_BSSGP_RADIO_STATUS,
+  PDU_BSSGP_SUSPEND                       pDU_BSSGP_SUSPEND,
+  PDU_BSSGP_SUSPEND_ACK                   pDU_BSSGP_SUSPEND_ACK,
+  PDU_BSSGP_SUSPEND_NACK                  pDU_BSSGP_SUSPEND_NACK,
+  PDU_BSSGP_RESUME                        pDU_BSSGP_RESUME,
+  PDU_BSSGP_RESUME_ACK                    pDU_BSSGP_RESUME_ACK,
+  PDU_BSSGP_RESUME_NACK                   pDU_BSSGP_RESUME_NACK,
+  PDU_BSSGP_PAGING_PS_REJECT              pDU_BSSGP_PAGING_PS_REJECT,
+  PDU_BSSGP_DUMMY_PAGING_PS               pDU_BSSGP_DUMMY_PAGING_PS,
+  PDU_BSSGP_DUMMY_PAGING_PS_RESPONSE      pDU_BSSGP_DUMMY_PAGING_PS_RESPONSE,
+  PDU_BSSGP_MS_REGISTRATION_ENQUIRY_RESPONSE pDU_BSSGP_MS_REGISTRATION_ENQUIRY_RESPONSE,
+  PDU_BSSGP_MS_REGISTRATION_ENQUIRY       pDU_BSSGP_MS_REGISTRATION_ENQUIRY,
+  PDU_BSSGP_FLUSH_LL                      pDU_BSSGP_FLUSH_LL,
+  PDU_BSSGP_FLUSH_LL_ACK                  pDU_BSSGP_FLUSH_LL_ACK,
+  PDU_BSSGP_LLC_DISCARDED                 pDU_BSSGP_LLC_DISCARDED,
+  PDU_BSSGP_FLOW_CONTROL_BVC              pDU_BSSGP_FLOW_CONTROL_BVC,
+  PDU_BSSGP_FLOW_CONTROL_BVC_ACK          pDU_BSSGP_FLOW_CONTROL_BVC_ACK,
+  PDU_BSSGP_FLOW_CONTROL_MS               pDU_BSSGP_FLOW_CONTROL_MS,
+  PDU_BSSGP_FLOW_CONTROL_MS_ACK           pDU_BSSGP_FLOW_CONTROL_MS_ACK,
+  PDU_BSSGP_FLOW_CONTROL_PFC              pDU_BSSGP_FLOW_CONTROL_PFC,
+  PDU_BSSGP_FLOW_CONTROL_PFC_ACK          pDU_BSSGP_FLOW_CONTROL_PFC_ACK,
+  PDU_BSSGP_STATUS                        pDU_BSSGP_STATUS,
+  PDU_BSSGP_BVC_BLOCK                     pDU_BSSGP_BVC_BLOCK,
+  PDU_BSSGP_BVC_BLOCK_ACK                 pDU_BSSGP_BVC_BLOCK_ACK,
+  PDU_BSSGP_BVC_UNBLOCK                   pDU_BSSGP_BVC_UNBLOCK,
+  PDU_BSSGP_BVC_UNBLOCK_ACK               pDU_BSSGP_BVC_UNBLOCK_ACK,
+  PDU_BSSGP_BVC_RESET                     pDU_BSSGP_BVC_RESET,
+  PDU_BSSGP_BVC_RESET_ACK                 pDU_BSSGP_BVC_RESET_ACK,
+  PDU_BSSGP_SGSN_INVOKE_TRACE             pDU_BSSGP_SGSN_INVOKE_TRACE,
+  PDU_BSSGP_DOWNLOAD_BSS_PFC              pDU_BSSGP_DOWNLOAD_BSS_PFC,
+  PDU_BSSGP_CREATE_BSS_PFC                pDU_BSSGP_CREATE_BSS_PFC,
+  PDU_BSSGP_CREATE_BSS_PFC_ACK            pDU_BSSGP_CREATE_BSS_PFC_ACK,
+  PDU_BSSGP_CREATE_BSS_PFC_NACK           pDU_BSSGP_CREATE_BSS_PFC_NACK,
+  PDU_BSSGP_MODIFY_BSS_PFC                pDU_BSSGP_MODIFY_BSS_PFC,
+  PDU_BSSGP_MODIFY_BSS_PFC_ACK            pDU_BSSGP_MODIFY_BSS_PFC_ACK,
+  PDU_BSSGP_DELETE_BSS_PFC                pDU_BSSGP_DELETE_BSS_PFC,
+  PDU_BSSGP_DELETE_BSS_PFC_ACK            pDU_BSSGP_DELETE_BSS_PFC_ACK,
+  PDU_BSSGP_DELETE_BSS_PFC_REQ            pDU_BSSGP_DELETE_BSS_PFC_REQ,
+  PDU_BSSGP_PS_HANDOVER_REQUIRED          pDU_BSSGP_PS_HANDOVER_REQUIRED,
+  PDU_BSSGP_PS_HANDOVER_REQUIRED_ACK      pDU_BSSGP_PS_HANDOVER_REQUIRED_ACK,
+  PDU_BSSGP_PS_HANDOVER_REQUIRED_NACK     pDU_BSSGP_PS_HANDOVER_REQUIRED_NACK,
+  PDU_BSSGP_PS_HANDOVER_REQUEST           pDU_BSSGP_PS_HANDOVER_REQUEST,
+  PDU_BSSGP_PS_HANDOVER_REQUEST_ACK       pDU_BSSGP_PS_HANDOVER_REQUEST_ACK, 
+  PDU_BSSGP_PS_HANDOVER_REQUEST_NACK      pDU_BSSGP_PS_HANDOVER_REQUEST_NACK,
+  PDU_BSSGP_PS_HANDOVER_COMPLETE          pDU_BSSGP_PS_HANDOVER_COMPLETE,
+  PDU_BSSGP_PS_HANDOVER_COMPLETE_ACK      pDU_BSSGP_PS_HANDOVER_COMPLETE_ACK,
+  PDU_BSSGP_PS_HANDOVER_CANCEL            pDU_BSSGP_PS_HANDOVER_CANCEL,
+  PDU_BSSGP_OVERLOAD                      pDU_BSSGP_OVERLOAD,
+  PDU_BSSGP_PERFORM_LOCATION_REQUEST      pDU_BSSGP_PERFORM_LOCATION_REQUEST,
+  PDU_BSSGP_PERFORM_LOCATION_RESPONSE     pDU_BSSGP_PERFORM_LOCATION_RESPONSE,
+  PDU_BSSGP_PERFORM_LOCATION_ABORT        pDU_BSSGP_PERFORM_LOCATION_ABORT,
+  PDU_BSSGP_POSITION_COMMAND              pDU_BSSGP_POSITION_COMMAND,
+  PDU_BSSGP_POSITION_RESPONSE             pDU_BSSGP_POSITION_RESPONSE,
+  PDU_BSSGP_RAN_INFORMATION               pDU_BSSGP_RAN_INFORMATION,
+  PDU_BSSGP_RAN_INFORMATION_REQUEST       pDU_BSSGP_RAN_INFORMATION_REQUEST,
+  PDU_BSSGP_RAN_INFORMATION_ACK           pDU_BSSGP_RAN_INFORMATION_ACK,
+  PDU_BSSGP_RAN_INFORMATION_ERROR         pDU_BSSGP_RAN_INFORMATION_ERROR,
+  PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR  
+                                    pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR,
+  PDU_BSSGP_MBMS_SESSION_START_REQUEST    pDU_BSSGP_MBMS_SESSION_START_REQUEST,
+  PDU_BSSGP_MBMS_SESSION_START_RESPONSE   pDU_BSSGP_MBMS_SESSION_START_RESPONSE,
+  PDU_BSSGP_MBMS_SESSION_STOP_REQUEST     pDU_BSSGP_MBMS_SESSION_STOP_REQUEST,
+  PDU_BSSGP_MBMS_STOP_RESPONSE            pDU_BSSGP_MBMS_STOP_RESPONSE,
+  PDU_BSSGP_SESSION_UPDATE_REQUEST        pDU_BSSGP_SESSION_UPDATE_REQUEST,
+  PDU_BSSGP_SESSION_UPDATE_RESPONSE       pDU_BSSGP_SESSION_UPDATE_RESPONSE,
+  octetstring                             pDU_BSSGP_unknown
+} with { variant "" };
+
+}  with {encode "RAW"} // end of module